diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.ts index 7d007c74bd..db94b946e8 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.ts @@ -9,6 +9,7 @@ import type { AnyInvocationInputField, AnyInvocationOutputField, AnyModelConfig, + CoreMetadataFields, InputFields, Invocation, InvocationType, @@ -433,7 +434,7 @@ export class Graph { addEdgeToMetadata( fromNode: TFrom, fromField: OutputFields, - metadataField: string + metadataField: CoreMetadataFields | (string & Record) ): Edge { // @ts-expect-error `Graph` excludes `core_metadata` nodes due to its excessively wide typing return this.addEdge(fromNode, fromField, this.getMetadataNode(), metadataField); diff --git a/invokeai/frontend/web/src/services/api/types.ts b/invokeai/frontend/web/src/services/api/types.ts index 7bb5bf045b..640d0509a9 100644 --- a/invokeai/frontend/web/src/services/api/types.ts +++ b/invokeai/frontend/web/src/services/api/types.ts @@ -322,6 +322,15 @@ type NonInputFields = 'id' | 'type' | 'is_intermediate' | 'use_cache' | 'board' export type AnyInvocationInputField = Exclude>, NonInputFields>; export type InputFields = Extract; +type ExcludeIndexSignature = { + [K in keyof T as string extends K ? never : K]: T[K]; +}; + +export type CoreMetadataFields = Exclude< + keyof ExcludeIndexSignature, + NonInputFields +>; + type NonOutputFields = 'type'; export type AnyInvocationOutputField = Exclude>, NonOutputFields>; export type OutputFields = Extract<