diff --git a/scripts/collect-i18n-node-defs.ts b/scripts/collect-i18n-node-defs.ts index 46d85ad73..ee328dafa 100644 --- a/scripts/collect-i18n-node-defs.ts +++ b/scripts/collect-i18n-node-defs.ts @@ -1,14 +1,38 @@ import * as fs from 'fs' import type { ComfyNodeDef } from '@/schemas/nodeDefSchema' +import type { ComfyApp } from '@/scripts/app' + +import type { LiteGraphGlobal } from '../src/lib/litegraph/src/litegraph' import { comfyPageFixture as test } from '../browser_tests/fixtures/ComfyPage' -import { normalizeI18nKey } from '../packages/shared-frontend-utils/src/formatUtil' +import { normalizeI18nKey } from '@comfyorg/shared-frontend-utils/formatUtil' import type { ComfyNodeDefImpl } from '../src/stores/nodeDefStore' const localePath = './src/locales/en/main.json' const nodeDefsPath = './src/locales/en/nodeDefs.json' +interface ComfyWindow extends Window { + app: ComfyApp + LiteGraph: LiteGraphGlobal +} + +function isComfyWindow(win: Window): win is ComfyWindow { + return ( + 'app' in win && + win.app != null && + 'LiteGraph' in win && + win.LiteGraph != null + ) +} + +function getComfyWindow(): ComfyWindow { + if (!isComfyWindow(window)) { + throw new Error('ComfyApp or LiteGraph not found on window') + } + return window +} + interface WidgetInfo { name?: string label?: string @@ -30,8 +54,8 @@ test('collect-i18n-node-defs', async ({ comfyPage }) => { const nodeDefs: ComfyNodeDefImpl[] = await comfyPage.page.evaluate( async () => { - // @ts-expect-error - app is dynamically added to window - const api = window['app'].api + const comfyWindow = getComfyWindow() + const api = comfyWindow.app.api const rawNodeDefs = await api.getNodeDefs() const { ComfyNodeDefImpl } = await import('../src/stores/nodeDefStore') @@ -44,7 +68,7 @@ test('collect-i18n-node-defs', async ({ comfyPage }) => { } ) - console.log(`Collected ${nodeDefs.length} node definitions`) + console.warn(`Collected ${nodeDefs.length} node definitions`) const allDataTypesLocale = Object.fromEntries( nodeDefs @@ -80,9 +104,9 @@ test('collect-i18n-node-defs', async ({ comfyPage }) => { const widgetsMappings = await comfyPage.page.evaluate( (args) => { const [nodeName, displayName, inputNames] = args - // @ts-expect-error - LiteGraph is dynamically added to window - const node = window['LiteGraph'].createNode(nodeName, displayName) - if (!node.widgets?.length) return {} + const comfyWindow = getComfyWindow() + const node = comfyWindow.LiteGraph.createNode(nodeName, displayName) + if (!node?.widgets?.length) return {} return Object.fromEntries( node.widgets .filter( diff --git a/src/composables/useGlobalLitegraph.ts b/src/composables/useGlobalLitegraph.ts index 107f8e289..21c0b38cb 100644 --- a/src/composables/useGlobalLitegraph.ts +++ b/src/composables/useGlobalLitegraph.ts @@ -6,30 +6,21 @@ import { LGraphCanvas, LGraphGroup, LGraphNode, - LLink, - LiteGraph + LiteGraph, + LLink } from '@/lib/litegraph/src/litegraph' /** * Assign all properties of LiteGraph to window to make it backward compatible. */ -export const useGlobalLitegraph = () => { - // @ts-expect-error fixme ts strict error - window['LiteGraph'] = LiteGraph - // @ts-expect-error fixme ts strict error - window['LGraph'] = LGraph - // @ts-expect-error fixme ts strict error - window['LLink'] = LLink - // @ts-expect-error fixme ts strict error - window['LGraphNode'] = LGraphNode - // @ts-expect-error fixme ts strict error - window['LGraphGroup'] = LGraphGroup - // @ts-expect-error fixme ts strict error - window['DragAndScale'] = DragAndScale - // @ts-expect-error fixme ts strict error - window['LGraphCanvas'] = LGraphCanvas - // @ts-expect-error fixme ts strict error - window['ContextMenu'] = ContextMenu - // @ts-expect-error fixme ts strict error - window['LGraphBadge'] = LGraphBadge +export function useGlobalLitegraph() { + window.LiteGraph = LiteGraph + window.LGraph = LGraph + window.LLink = LLink + window.LGraphNode = LGraphNode + window.LGraphGroup = LGraphGroup + window.DragAndScale = DragAndScale + window.LGraphCanvas = LGraphCanvas + window.ContextMenu = ContextMenu + window.LGraphBadge = LGraphBadge } diff --git a/src/types/index.ts b/src/types/index.ts index 25f8e2090..e16103ca2 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,14 @@ +import type { + ContextMenu, + DragAndScale, + LGraph, + LGraphBadge, + LGraphCanvas, + LGraphGroup, + LGraphNode, + LiteGraphGlobal, + LLink +} from '@/lib/litegraph/src/litegraph' import type { DeviceStats, EmbeddingsResponse, @@ -71,5 +82,16 @@ declare global { /** For use by extensions and in the browser console. Where possible, import `app` and access via `app.graph` instead. */ graph?: unknown + + /** LiteGraph global namespace - for extension compatibility */ + LiteGraph?: LiteGraphGlobal + LGraph?: typeof LGraph + LLink?: typeof LLink + LGraphNode?: typeof LGraphNode + LGraphGroup?: typeof LGraphGroup + DragAndScale?: typeof DragAndScale + LGraphCanvas?: typeof LGraphCanvas + ContextMenu?: typeof ContextMenu + LGraphBadge?: typeof LGraphBadge } }