diff --git a/src/components/common/FormItem.vue b/src/components/common/FormItem.vue index 011f80753..2a7361566 100644 --- a/src/components/common/FormItem.vue +++ b/src/components/common/FormItem.vue @@ -68,19 +68,19 @@ function getFormAttrs(item: FormItem) { } switch (item.type) { case 'combo': - case 'radio': - attrs['options'] = + case 'radio': { + const options = typeof item.options === 'function' - ? // @ts-expect-error: Audit and deprecate usage of legacy options type: - // (value) => [string | {text: string, value: string}] - item.options(formValue.value) + ? item.options(formValue.value) : item.options + attrs['options'] = options - if (typeof item.options?.[0] !== 'string') { + if (options && typeof options[0] !== 'string') { attrs['optionLabel'] = 'text' attrs['optionValue'] = 'value' } break + } } return attrs } diff --git a/src/platform/settings/components/SettingItem.vue b/src/platform/settings/components/SettingItem.vue index 91f92b2e9..e569d1673 100644 --- a/src/platform/settings/components/SettingItem.vue +++ b/src/platform/settings/components/SettingItem.vue @@ -40,11 +40,16 @@ const props = defineProps<{ }>() const { t } = useI18n() -function translateOptions(options: (SettingOption | string)[]) { +const settingStore = useSettingStore() +const settingValue = computed(() => settingStore.get(props.setting.id)) + +function translateOptions( + options: + | (SettingOption | string)[] + | ((value: unknown) => (SettingOption | string)[]) +) { if (typeof options === 'function') { - // @ts-expect-error: Audit and deprecate usage of legacy options type: - // (value) => [string | {text: string, value: string}] - return translateOptions(options(props.setting.value ?? '')) + return translateOptions(options(settingValue.value ?? '')) } return options.map((option) => { @@ -75,8 +80,6 @@ const formItem = computed(() => { } }) -const settingStore = useSettingStore() -const settingValue = computed(() => settingStore.get(props.setting.id)) const updateSettingValue = async ( newValue: Settings[K] ) => { diff --git a/src/platform/settings/types.ts b/src/platform/settings/types.ts index 021fac375..99c394b41 100644 --- a/src/platform/settings/types.ts +++ b/src/platform/settings/types.ts @@ -52,12 +52,18 @@ export interface SettingParams extends FormItem { /** * The base form item for rendering in a form. */ +/** + * Legacy options function type for dynamic options. + * @deprecated Use static options array instead. + */ +type LegacyOptionsFunction = (value: unknown) => Array + export interface FormItem { name: string type: SettingInputType | SettingCustomRenderer tooltip?: string attrs?: Record - options?: Array + options?: Array | LegacyOptionsFunction } export interface ISettingGroup { diff --git a/src/platform/updates/common/useFrontendVersionMismatchWarning.test.ts b/src/platform/updates/common/useFrontendVersionMismatchWarning.test.ts index 11a7fcbb0..f86d6ea54 100644 --- a/src/platform/updates/common/useFrontendVersionMismatchWarning.test.ts +++ b/src/platform/updates/common/useFrontendVersionMismatchWarning.test.ts @@ -6,8 +6,11 @@ import { useToastStore } from '@/platform/updates/common/toastStore' import { useFrontendVersionMismatchWarning } from '@/platform/updates/common/useFrontendVersionMismatchWarning' import { useVersionCompatibilityStore } from '@/platform/updates/common/versionCompatibilityStore' +declare const global: typeof globalThis & { + __COMFYUI_FRONTEND_VERSION__: string +} + // Mock globals -//@ts-expect-error Define global for the test global.__COMFYUI_FRONTEND_VERSION__ = '1.0.0' // Mock config first - this needs to be before any imports diff --git a/src/platform/workflow/validation/schemas/workflowSchema.test.ts b/src/platform/workflow/validation/schemas/workflowSchema.test.ts index b075e3ebe..c0e9aabf6 100644 --- a/src/platform/workflow/validation/schemas/workflowSchema.test.ts +++ b/src/platform/workflow/validation/schemas/workflowSchema.test.ts @@ -69,13 +69,13 @@ describe('parseComfyWorkflow', () => { // Should automatically transform the legacy format object to array. workflow.nodes[0].pos = { '0': 3, '1': 4 } let validatedWorkflow = await validateComfyWorkflow(workflow) - // @ts-expect-error fixme ts strict error - expect(validatedWorkflow.nodes[0].pos).toEqual([3, 4]) + expect(validatedWorkflow).not.toBeNull() + expect(validatedWorkflow!.nodes[0].pos).toEqual([3, 4]) workflow.nodes[0].pos = { 0: 3, 1: 4 } validatedWorkflow = await validateComfyWorkflow(workflow) - // @ts-expect-error fixme ts strict error - expect(validatedWorkflow.nodes[0].pos).toEqual([3, 4]) + expect(validatedWorkflow).not.toBeNull() + expect(validatedWorkflow!.nodes[0].pos).toEqual([3, 4]) // Should accept the legacy bugged format object. // https://github.com/Comfy-Org/ComfyUI_frontend/issues/710 @@ -92,8 +92,8 @@ describe('parseComfyWorkflow', () => { '9': 0 } validatedWorkflow = await validateComfyWorkflow(workflow) - // @ts-expect-error fixme ts strict error - expect(validatedWorkflow.nodes[0].pos).toEqual([600, 340]) + expect(validatedWorkflow).not.toBeNull() + expect(validatedWorkflow!.nodes[0].pos).toEqual([600, 340]) }) it('workflow.nodes.widget_values', async () => { @@ -111,8 +111,8 @@ describe('parseComfyWorkflow', () => { // dynamic widgets display. workflow.nodes[0].widgets_values = { foo: 'bar' } const validatedWorkflow = await validateComfyWorkflow(workflow) - // @ts-expect-error fixme ts strict error - expect(validatedWorkflow.nodes[0].widgets_values).toEqual({ foo: 'bar' }) + expect(validatedWorkflow).not.toBeNull() + expect(validatedWorkflow!.nodes[0].widgets_values).toEqual({ foo: 'bar' }) }) it('workflow.links', async () => { diff --git a/src/renderer/core/layout/store/layoutStore.test.ts b/src/renderer/core/layout/store/layoutStore.test.ts index ff7ee1fa0..fdbc8ef77 100644 --- a/src/renderer/core/layout/store/layoutStore.test.ts +++ b/src/renderer/core/layout/store/layoutStore.test.ts @@ -383,8 +383,8 @@ describe('layoutStore CRDT operations', () => { }) const originalTitleHeight = LiteGraph.NODE_TITLE_HEIGHT - // @ts-expect-error – intentionally simulate undefined runtime value - LiteGraph.NODE_TITLE_HEIGHT = undefined + // Intentionally simulate undefined runtime value via Object.assign + Object.assign(LiteGraph, { NODE_TITLE_HEIGHT: undefined }) try { layoutStore.setSource(LayoutSource.DOM) diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetLegacy.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetLegacy.vue index 9efe0c761..8af767306 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetLegacy.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetLegacy.vue @@ -64,7 +64,6 @@ function draw() { } containerHeight.value = height // Set node.canvasHeight for legacy widgets that use it (e.g., Impact Pack) - // @ts-expect-error canvasHeight is a custom property used by some extensions node.canvasHeight = height widgetInstance.y = 0 canvasEl.value.height = (height + 2) * scaleFactor diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.test.ts b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.test.ts index ee788cc4d..4930601c1 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.test.ts +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.test.ts @@ -376,13 +376,10 @@ Another line with more content.` const vm = wrapper.vm as InstanceType // Test that the component creates a textarea reference when entering edit mode - // @ts-expect-error - isEditing is not exposed expect(vm.isEditing).toBe(false) - // @ts-expect-error - startEditing is not exposed await vm.startEditing() - // @ts-expect-error - isEditing is not exposed expect(vm.isEditing).toBe(true) await wrapper.vm.$nextTick() diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue index 28247859e..39666ddf4 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue @@ -29,6 +29,7 @@ diff --git a/src/types/litegraph-augmentation.d.ts b/src/types/litegraph-augmentation.d.ts index 42c112cae..7bfacef33 100644 --- a/src/types/litegraph-augmentation.d.ts +++ b/src/types/litegraph-augmentation.d.ts @@ -197,6 +197,11 @@ declare module '@/lib/litegraph/src/litegraph' { pasteFile?(file: File): void /** Callback for pasting multiple files into the node */ pasteFiles?(files: File[]): void + /** + * Custom property used by some extensions (e.g., Impact Pack) to store + * the canvas height for legacy widget rendering. + */ + canvasHeight?: number } /** * Only used by the Primitive node. Primitive node is using the widget property