import type { FxNodeComposition, FxNodeCompositionData, FxNodeMigrationStep, FxNodeUiRow } from "./types.js"; type K = Extract; type Visibility

= | { parameter: P; equals: string | number | boolean } | { parameter: P; in: readonly (string | number | boolean)[] } | { all: readonly Visibility

[] } | { any: readonly Visibility

[] }; type Vis = R extends { visibleWhen: infer V } ? Omit & { visibleWhen: V & Visibility

} : R; type Row = R extends { kind: "parameter" | "widget" | "resource"; parameter: unknown } ? Vis< Omit & { parameter: P } & (R extends { kind: "resource" } ? { resource: Resources } : unknown), P > : R extends { kind: "socket"; socket: unknown } ? Vis & { socket: S }, P> : R extends { kind: "hidden"; target: "parameter" } ? Omit & { parameter: P } : R extends { kind: "hidden"; target: "socket" } ? Omit & { socket: S } : R extends { widget: "grading-wheels"; bindings: infer B extends readonly unknown[] } ? Vis & { bindings: { [I in keyof B]: B[I] & { scalar: P; color: P } } }, P> : Vis; /** @inline */ type Migration = M extends { steps: infer Steps extends readonly unknown[] } ? M & { readonly fromVersion: number; readonly toVersion: number; readonly steps: readonly (Steps[number] & FxNodeMigrationStep)[]; } : never; export type NodeReferenceCheck< C extends FxNodeCompositionData, D extends { parameters: object; sockets: object; ui: readonly unknown[]; muteBypass: readonly unknown[]; migrations: readonly { steps: readonly unknown[] }[]; }, > = D & Omit & { readonly defaultSize?: never; readonly style: K; readonly parameters: { readonly [P in keyof D["parameters"]]: D["parameters"][P] & FxNodeComposition["nodes"][string]["parameters"][string]; }; readonly sockets: { readonly [S in keyof D["sockets"]]: D["sockets"][S] & FxNodeComposition["nodes"][string]["sockets"][string] & { readonly type: K }; }; readonly ui: readonly (D["ui"][number] & FxNodeUiRow, K, K> & Row, K, K>)[]; readonly muteBypass: readonly (readonly [K, K])[]; readonly migrations: readonly Migration, K>[]; }; export type ReferenceCheck = { readonly schemaVersion: 2; readonly id: string; readonly version: number; readonly compatibility: { readonly wildcardInputTypes: readonly K[] }; readonly theme: FxNodeComposition["theme"]; readonly socketTypes: { readonly [T in keyof C["socketTypes"]]: C["socketTypes"][T] & FxNodeComposition["socketTypes"][string] & { readonly acceptsFrom: readonly K[] }; }; readonly nodeStyles: { readonly [T in keyof C["nodeStyles"]]: C["nodeStyles"][T] & FxNodeComposition["nodeStyles"][string]; }; readonly resources: { readonly [T in keyof C["resources"]]: C["resources"][T] & FxNodeComposition["resources"][string]; }; readonly nodes: { readonly [N in keyof C["nodes"]]: C["nodes"][N] extends infer D extends { parameters: object; sockets: object; ui: readonly unknown[]; muteBypass: readonly unknown[]; migrations: readonly { steps: readonly unknown[] }[]; } ? NodeReferenceCheck : never; }; };