From 8052b2a02ae0f6fd39b9cc64525cb0554db5cbbb Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Mon, 10 Feb 2025 16:35:26 -0500 Subject: [PATCH] Type LGraphNode.getInnerNodes (#2498) --- src/extensions/core/groupNode.ts | 1 + src/extensions/core/load3d.ts | 2 -- src/extensions/core/webcamCapture.ts | 2 -- src/scripts/app.ts | 9 +++++++-- src/types/litegraph-augmentation.d.ts | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/extensions/core/groupNode.ts b/src/extensions/core/groupNode.ts index 7fc4ed49f..db730e759 100644 --- a/src/extensions/core/groupNode.ts +++ b/src/extensions/core/groupNode.ts @@ -856,6 +856,7 @@ export class GroupNodeHandler { for (let i = 0; i < c.nodes.length; i++) { let id = innerNodes?.[i]?.id // Use existing IDs if they are set on the inner nodes + // @ts-expect-error id can be string or number if (id == null || isNaN(id)) { id = undefined } else { diff --git a/src/extensions/core/load3d.ts b/src/extensions/core/load3d.ts index 90d41206c..001181dc7 100644 --- a/src/extensions/core/load3d.ts +++ b/src/extensions/core/load3d.ts @@ -151,7 +151,6 @@ app.registerExtension({ height ) - // @ts-expect-error hacky override sceneWidget.serializeValue = async () => { node.properties['Camera Info'] = load3d.getCameraState() @@ -314,7 +313,6 @@ app.registerExtension({ height ) - // @ts-expect-error hacky override sceneWidget.serializeValue = async () => { node.properties['Camera Info'] = load3d.getCameraState() diff --git a/src/extensions/core/webcamCapture.ts b/src/extensions/core/webcamCapture.ts index 1d04e164b..0290fe3a2 100644 --- a/src/extensions/core/webcamCapture.ts +++ b/src/extensions/core/webcamCapture.ts @@ -101,10 +101,8 @@ app.registerExtension({ capture ) btn.disabled = true - // @ts-expect-error hacky override btn.serializeValue = () => undefined - // @ts-expect-error hacky override camera.serializeValue = async () => { if (captureOnQueue.value) { capture() diff --git a/src/scripts/app.ts b/src/scripts/app.ts index 04f2efa0f..530e9165a 100644 --- a/src/scripts/app.ts +++ b/src/scripts/app.ts @@ -1287,7 +1287,7 @@ export class ComfyApp { // Store all widget values if (widgets) { - for (const i in widgets) { + for (let i = 0; i < widgets.length; i++) { const widget = widgets[i] if (!widget.options || widget.options.serialize !== false) { inputs[widget.name] = widget.serializeValue @@ -1298,7 +1298,7 @@ export class ComfyApp { } // Store all node links - for (let i in node.inputs) { + for (let i = 0; i < node.inputs.length; i++) { let parent = node.getInputNode(i) if (parent) { let link = node.getInputLink(i) @@ -1318,14 +1318,18 @@ export class ComfyApp { } else if (link && parent.mode === LGraphEventMode.BYPASS) { let all_inputs = [link.origin_slot] if (parent.inputs) { + // @ts-expect-error convert list of strings to list of numbers all_inputs = all_inputs.concat(Object.keys(parent.inputs)) for (let parent_input in all_inputs) { + // @ts-expect-error assign string to number parent_input = all_inputs[parent_input] if ( parent.inputs[parent_input]?.type === node.inputs[i].type ) { + // @ts-expect-error convert string to number link = parent.getInputLink(parent_input) if (link) { + // @ts-expect-error convert string to number parent = parent.getInputNode(parent_input) } found = true @@ -1347,6 +1351,7 @@ export class ComfyApp { if (link) { inputs[node.inputs[i].name] = [ String(link.origin_id), + // @ts-expect-error link.origin_slot is already number. parseInt(link.origin_slot) ] } diff --git a/src/types/litegraph-augmentation.d.ts b/src/types/litegraph-augmentation.d.ts index 794d13017..7b758986e 100644 --- a/src/types/litegraph-augmentation.d.ts +++ b/src/types/litegraph-augmentation.d.ts @@ -16,6 +16,7 @@ declare module '@comfyorg/litegraph/dist/types/widgets' { interface IBaseWidget { onRemove?: () => void beforeQueued?: () => unknown + serializeValue?: (node: LGraphNode, index: number) => Promise } } @@ -43,8 +44,7 @@ declare module '@comfyorg/litegraph' { onExecuted?(output: any): void onNodeCreated?(this: LGraphNode): void setInnerNodes?(nodes: LGraphNode[]): void - // TODO: Requires several coercion changes to runtime code. - getInnerNodes?() // : LGraphNode[] + getInnerNodes?(): LGraphNode[] convertToNodes?(): LGraphNode[] recreate?(): Promise refreshComboInNode?(defs: Record)