diff --git a/src/core/graph/subgraph/promotionUtils.test.ts b/src/core/graph/subgraph/promotionUtils.test.ts index c05118ae2d..991d95212d 100644 --- a/src/core/graph/subgraph/promotionUtils.test.ts +++ b/src/core/graph/subgraph/promotionUtils.test.ts @@ -28,6 +28,7 @@ vi.mock('@/services/litegraphService', () => ({ import { CANVAS_IMAGE_PREVIEW_WIDGET, + autoExposeKnownPreviewNodes, demoteWidget, getPromotableWidgets, hasUnpromotedWidgets, @@ -341,6 +342,74 @@ describe('promoteRecommendedWidgets', () => { }) }) +describe('autoExposeKnownPreviewNodes', () => { + beforeEach(() => { + setActivePinia(createTestingPinia({ stubActions: false })) + updatePreviewsMock.mockReset() + }) + + it('auto-exposes previews when host has no persisted previewExposures property', () => { + const subgraph = createTestSubgraph() + const subgraphNode = createTestSubgraphNode(subgraph) + const glslNode = new LGraphNode('GLSLShader') + glslNode.type = 'GLSLShader' + subgraph.add(glslNode) + + autoExposeKnownPreviewNodes(subgraphNode) + + expect( + usePreviewExposureStore().getExposures( + subgraphNode.rootGraph.id, + String(subgraphNode.id) + ) + ).toHaveLength(1) + }) + + it('does not auto-expose when host has empty persisted previewExposures (user cleared)', () => { + const subgraph = createTestSubgraph() + const subgraphNode = createTestSubgraphNode(subgraph) + subgraphNode.properties.previewExposures = [] + const glslNode = new LGraphNode('GLSLShader') + glslNode.type = 'GLSLShader' + subgraph.add(glslNode) + + autoExposeKnownPreviewNodes(subgraphNode) + + expect( + usePreviewExposureStore().getExposures( + subgraphNode.rootGraph.id, + String(subgraphNode.id) + ) + ).toEqual([]) + }) + + it('does not auto-expose when host has non-empty persisted previewExposures', () => { + const subgraph = createTestSubgraph() + const subgraphNode = createTestSubgraphNode(subgraph) + const glslNode = new LGraphNode('GLSLShader') + glslNode.type = 'GLSLShader' + subgraph.add(glslNode) + const otherNode = new LGraphNode('OtherShader') + otherNode.type = 'GLSLShader' + subgraph.add(otherNode) + subgraphNode.properties.previewExposures = [ + { + name: CANVAS_IMAGE_PREVIEW_WIDGET, + sourceNodeId: String(otherNode.id), + sourcePreviewName: CANVAS_IMAGE_PREVIEW_WIDGET + } + ] + + autoExposeKnownPreviewNodes(subgraphNode) + + expect( + usePreviewExposureStore() + .getExposures(subgraphNode.rootGraph.id, String(subgraphNode.id)) + .map((e) => e.sourceNodeId) + ).not.toContain(String(glslNode.id)) + }) +}) + describe('hasUnpromotedWidgets', () => { beforeEach(() => { setActivePinia(createTestingPinia({ stubActions: false })) diff --git a/src/core/graph/subgraph/promotionUtils.ts b/src/core/graph/subgraph/promotionUtils.ts index 0359349b7b..9421541080 100644 --- a/src/core/graph/subgraph/promotionUtils.ts +++ b/src/core/graph/subgraph/promotionUtils.ts @@ -470,6 +470,7 @@ function nodeWidgets(n: LGraphNode): WidgetItem[] { } export function autoExposeKnownPreviewNodes(subgraphNode: SubgraphNode): void { + if (subgraphNode.properties.previewExposures !== undefined) return const { updatePreviews } = useLitegraphService() const interiorNodes = subgraphNode.subgraph.nodes for (const node of interiorNodes) { diff --git a/src/lib/litegraph/src/subgraph/SubgraphNode.ts b/src/lib/litegraph/src/subgraph/SubgraphNode.ts index 86353a1cbd..11eb2c0955 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphNode.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphNode.ts @@ -1031,13 +1031,9 @@ export class SubgraphNode extends LGraphNode implements BaseLGraph { rootGraphId, hostLocator ) - if (previewExposures.length > 0) { - serializedProperties.previewExposures = previewExposures.map((entry) => ({ - ...entry - })) - } else { - delete serializedProperties.previewExposures - } + serializedProperties.previewExposures = previewExposures.map((entry) => ({ + ...entry + })) const quarantine = parseProxyWidgetErrorQuarantine( this.properties.proxyWidgetErrorQuarantine diff --git a/src/lib/litegraph/src/subgraph/SubgraphWidgetPromotion.test.ts b/src/lib/litegraph/src/subgraph/SubgraphWidgetPromotion.test.ts index a114e74c75..74fae6da77 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphWidgetPromotion.test.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphWidgetPromotion.test.ts @@ -1175,12 +1175,12 @@ describe('SubgraphWidgetPromotion', () => { expected: [named12, named14] }, { - name: 'omits previewExposures when the store has no entries for the host', + name: 'writes empty previewExposures when the store has no entries for the host', addExposures: [], staleProperty: [ { name: 'stale', sourceNodeId: '0', sourcePreviewName: CANVAS } ], - expected: undefined, + expected: [], expectLiveUnchanged: true } ]