diff --git a/src/composables/widgets/useComboWidget.ts b/src/composables/widgets/useComboWidget.ts index 9dcb4daaf..25c75fb5c 100644 --- a/src/composables/widgets/useComboWidget.ts +++ b/src/composables/widgets/useComboWidget.ts @@ -71,10 +71,12 @@ const addComboWidget = (node: LGraphNode, inputSpec: ComboInputSpec) => { if (inputSpec.remote.refresh_button) remoteWidget.addRefreshButton() const origOptions = widget.options - widget.options = new Proxy(origOptions as Record, { - get(target, prop: string | symbol) { - if (prop !== 'values') return target[prop] - return remoteWidget.getValue() + widget.options = new Proxy(origOptions, { + get(target, prop) { + // Assertion: Proxy handler passthrough + return prop !== 'values' + ? target[prop as keyof typeof target] + : remoteWidget.getValue() } }) } diff --git a/src/composables/widgets/useImagePreviewWidget.ts b/src/composables/widgets/useImagePreviewWidget.ts index 304bd7b34..64816ef44 100644 --- a/src/composables/widgets/useImagePreviewWidget.ts +++ b/src/composables/widgets/useImagePreviewWidget.ts @@ -237,14 +237,14 @@ const renderPreview = ( class ImagePreviewWidget implements ICustomWidget { readonly type: 'custom' readonly name: string - readonly options: IWidgetOptions + readonly options: IWidgetOptions /** Dummy value to satisfy type requirements. */ value: string y: number = 0 /** Don't serialize the widget value. */ serialize: boolean = false - constructor(name: string, options: IWidgetOptions) { + constructor(name: string, options: IWidgetOptions) { this.type = 'custom' this.name = name this.options = options diff --git a/src/extensions/core/contextMenuFilter.ts b/src/extensions/core/contextMenuFilter.ts index f30beac64..122107d45 100644 --- a/src/extensions/core/contextMenuFilter.ts +++ b/src/extensions/core/contextMenuFilter.ts @@ -36,6 +36,7 @@ const ext = { w.type === 'combo' && w.options.values?.length === values.length ) .find((w) => + // @ts-ignore Poorly typed; filter above "should" mitigate exceptions w.options.values?.every((v, i) => v === values[i]) )?.value diff --git a/src/extensions/core/load3d.ts b/src/extensions/core/load3d.ts index 5fcd529fe..cb7e951b3 100644 --- a/src/extensions/core/load3d.ts +++ b/src/extensions/core/load3d.ts @@ -139,6 +139,7 @@ useExtensionService().registerExtension({ if (uploadPath && modelWidget) { if (!modelWidget.options?.values?.includes(uploadPath)) { + // @ts-ignore Fails due to earlier type-assertion of IStringWidget modelWidget.options?.values?.push(uploadPath) } @@ -296,6 +297,7 @@ useExtensionService().registerExtension({ if (uploadPath && modelWidget) { if (!modelWidget.options?.values?.includes(uploadPath)) { + // @ts-ignore Fails due to earlier type-assertion of IStringWidget modelWidget.options?.values?.push(uploadPath) } diff --git a/src/scripts/widgets.ts b/src/scripts/widgets.ts index 50831164d..c68c0958f 100644 --- a/src/scripts/widgets.ts +++ b/src/scripts/widgets.ts @@ -140,6 +140,7 @@ export function addValueControlWidgets( const isCombo = targetWidget.type === 'combo' let comboFilter: IStringWidget if (isCombo && valueControl.options.values) { + // @ts-ignore Combo widget values may be a dictionary or legacy function type valueControl.options.values.push('increment-wrap') } if (isCombo && options.addFilterList !== false) { @@ -183,6 +184,7 @@ export function addValueControlWidgets( const lower = filter.toLocaleLowerCase() check = (item: string) => item.toLocaleLowerCase().includes(lower) } + // @ts-ignore Combo widget values may be a dictionary or legacy function type values = values.filter((item: string) => check(item)) if (!values.length && targetWidget.options.values?.length) { console.warn( @@ -209,14 +211,17 @@ export function addValueControlWidgets( current_index -= 1 break case 'randomize': + // @ts-ignore Combo widget values may be a dictionary or legacy function type current_index = Math.floor(Math.random() * current_length) break default: break } current_index = Math.max(0, current_index) + // @ts-ignore Combo widget values may be a dictionary or legacy function type current_index = Math.min(current_length - 1, current_index) if (current_index >= 0) { + // @ts-ignore Combo widget values may be a dictionary or legacy function type let value = values[current_index] targetWidget.value = value targetWidget.callback?.(value) diff --git a/src/utils/litegraphUtil.ts b/src/utils/litegraphUtil.ts index 48cc87456..bccb1e1a2 100644 --- a/src/utils/litegraphUtil.ts +++ b/src/utils/litegraphUtil.ts @@ -35,7 +35,11 @@ export function isAudioNode(node: LGraphNode | undefined): boolean { export function addToComboValues(widget: IComboWidget, value: string) { if (!widget.options) widget.options = { values: [] } if (!widget.options.values) widget.options.values = [] + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Combo widget values may be a dictionary or legacy function type if (!widget.options.values.includes(value)) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Combo widget values may be a dictionary or legacy function type widget.options.values.push(value) } }