From 82c369322df3fd5c85234022ead3b28c932c1a08 Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Sun, 27 Oct 2024 20:07:05 -0400 Subject: [PATCH] Handle invalid node def errors (#1340) * nit * Add error handling * nit * nit --- browser_tests/interaction.spec.ts | 2 ++ src/stores/nodeDefStore.ts | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/browser_tests/interaction.spec.ts b/browser_tests/interaction.spec.ts index 1b0f805953..2108f5a92c 100644 --- a/browser_tests/interaction.spec.ts +++ b/browser_tests/interaction.spec.ts @@ -73,6 +73,8 @@ test.describe('Node Interaction', () => { await comfyPage.disconnectEdge() await expect(comfyPage.canvas).toHaveScreenshot('disconnected-edge.png') await comfyPage.connectEdge() + // Move mouse to empty area to avoid slot highlight. + await comfyPage.moveMouseToEmptyArea() // Litegraph renders edge with a slight offset. await expect(comfyPage.canvas).toHaveScreenshot('default.png', { maxDiffPixels: 50 diff --git a/src/stores/nodeDefStore.ts b/src/stores/nodeDefStore.ts index 9008623a8c..05b2c2b4e4 100644 --- a/src/stores/nodeDefStore.ts +++ b/src/stores/nodeDefStore.ts @@ -302,12 +302,18 @@ export const useNodeDefStore = defineStore('nodeDef', () => { const nodeTree = computed(() => buildNodeDefTree(visibleNodeDefs.value)) function updateNodeDefs(nodeDefs: ComfyNodeDef[]) { - const newNodeDefsByName: { [key: string]: ComfyNodeDefImpl } = {} - const newNodeDefsByDisplayName: { [key: string]: ComfyNodeDefImpl } = {} + const newNodeDefsByName: Record = {} + const newNodeDefsByDisplayName: Record = {} for (const nodeDef of nodeDefs) { - const nodeDefImpl = new ComfyNodeDefImpl(nodeDef) - newNodeDefsByName[nodeDef.name] = nodeDefImpl - newNodeDefsByDisplayName[nodeDef.display_name] = nodeDefImpl + try { + const nodeDefImpl = new ComfyNodeDefImpl(nodeDef) + newNodeDefsByName[nodeDef.name] = nodeDefImpl + newNodeDefsByDisplayName[nodeDef.display_name] = nodeDefImpl + } catch (e) { + // Avoid breaking the app for invalid nodeDefs + // NodeDef validation is now optional for performance reasons + console.error('Error adding nodeDef:', e) + } } nodeDefsByName.value = newNodeDefsByName nodeDefsByDisplayName.value = newNodeDefsByDisplayName