comfyui-node 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/call-wrapper.js +856 -856
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/multipool/client-registry.d.ts +33 -0
- package/dist/multipool/client-registry.d.ts.map +1 -0
- package/dist/multipool/client-registry.js +153 -0
- package/dist/multipool/client-registry.js.map +1 -0
- package/dist/multipool/helpers.d.ts +5 -0
- package/dist/multipool/helpers.d.ts.map +1 -0
- package/dist/multipool/helpers.js +53 -0
- package/dist/multipool/helpers.js.map +1 -0
- package/dist/multipool/index.d.ts +3 -0
- package/dist/multipool/index.d.ts.map +1 -0
- package/dist/multipool/index.js +3 -0
- package/dist/multipool/index.js.map +1 -0
- package/dist/multipool/interfaces.d.ts +13 -0
- package/dist/multipool/interfaces.d.ts.map +1 -0
- package/dist/multipool/interfaces.js +2 -0
- package/dist/multipool/interfaces.js.map +1 -0
- package/dist/multipool/job-profiler.d.ts +128 -0
- package/dist/multipool/job-profiler.d.ts.map +1 -0
- package/dist/multipool/job-profiler.js +222 -0
- package/dist/multipool/job-profiler.js.map +1 -0
- package/dist/multipool/job-queue-processor.d.ts +28 -0
- package/dist/multipool/job-queue-processor.d.ts.map +1 -0
- package/dist/multipool/job-queue-processor.js +197 -0
- package/dist/multipool/job-queue-processor.js.map +1 -0
- package/dist/multipool/job-state-registry.d.ts +67 -0
- package/dist/multipool/job-state-registry.d.ts.map +1 -0
- package/dist/multipool/job-state-registry.js +283 -0
- package/dist/multipool/job-state-registry.js.map +1 -0
- package/dist/multipool/logger.d.ts +30 -0
- package/dist/multipool/logger.d.ts.map +1 -0
- package/dist/multipool/logger.js +75 -0
- package/dist/multipool/logger.js.map +1 -0
- package/dist/multipool/multi-workflow-pool.d.ts +43 -0
- package/dist/multipool/multi-workflow-pool.d.ts.map +1 -0
- package/dist/multipool/multi-workflow-pool.js +314 -0
- package/dist/multipool/multi-workflow-pool.js.map +1 -0
- package/dist/multipool/pool-event-manager.d.ts +11 -0
- package/dist/multipool/pool-event-manager.d.ts.map +1 -0
- package/dist/multipool/pool-event-manager.js +28 -0
- package/dist/multipool/pool-event-manager.js.map +1 -0
- package/dist/multipool/tests/error-classification-tests.d.ts +2 -0
- package/dist/multipool/tests/error-classification-tests.d.ts.map +1 -0
- package/dist/multipool/tests/error-classification-tests.js +374 -0
- package/dist/multipool/tests/error-classification-tests.js.map +1 -0
- package/dist/multipool/tests/job-state-registry.d.ts +17 -0
- package/dist/multipool/tests/job-state-registry.d.ts.map +1 -0
- package/dist/multipool/tests/job-state-registry.js +24 -0
- package/dist/multipool/tests/job-state-registry.js.map +1 -0
- package/dist/multipool/tests/multipool-basic.d.ts +12 -0
- package/dist/multipool/tests/multipool-basic.d.ts.map +1 -0
- package/dist/multipool/tests/multipool-basic.js +142 -0
- package/dist/multipool/tests/multipool-basic.js.map +1 -0
- package/dist/multipool/tests/profiling-demo.d.ts +7 -0
- package/dist/multipool/tests/profiling-demo.d.ts.map +1 -0
- package/dist/multipool/tests/profiling-demo.js +88 -0
- package/dist/multipool/tests/profiling-demo.js.map +1 -0
- package/dist/multipool/tests/prompt-generator.d.ts +10 -0
- package/dist/multipool/tests/prompt-generator.d.ts.map +1 -0
- package/dist/multipool/tests/prompt-generator.js +26 -0
- package/dist/multipool/tests/prompt-generator.js.map +1 -0
- package/dist/multipool/tests/test-helpers.d.ts +4 -0
- package/dist/multipool/tests/test-helpers.d.ts.map +1 -0
- package/dist/multipool/tests/test-helpers.js +10 -0
- package/dist/multipool/tests/test-helpers.js.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts +32 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js +299 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js.map +1 -0
- package/dist/multipool/workflow.d.ts +179 -0
- package/dist/multipool/workflow.d.ts.map +1 -0
- package/dist/multipool/workflow.js +334 -0
- package/dist/multipool/workflow.js.map +1 -0
- package/dist/pool/SmartPool.d.ts +143 -143
- package/dist/pool/SmartPool.d.ts.map +1 -1
- package/dist/pool/SmartPool.js +676 -676
- package/dist/pool/SmartPool.js.map +1 -1
- package/dist/pool/SmartPoolV2.d.ts +119 -119
- package/dist/pool/SmartPoolV2.js +586 -586
- package/dist/pool/WorkflowPool.d.ts +202 -202
- package/dist/pool/WorkflowPool.d.ts.map +1 -1
- package/dist/pool/WorkflowPool.js +845 -840
- package/dist/pool/WorkflowPool.js.map +1 -1
- package/dist/pool/client/ClientManager.d.ts +86 -86
- package/dist/pool/client/ClientManager.js +215 -215
- package/dist/pool/index.d.ts +9 -11
- package/dist/pool/index.d.ts.map +1 -1
- package/dist/pool/index.js +3 -5
- package/dist/pool/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { AugmentNodes } from "../node-type-hints.js";
|
|
2
|
+
import { ComfyApi } from "src/client.js";
|
|
3
|
+
type WorkflowJSON = Record<string, any>;
|
|
4
|
+
export interface WorkflowResultMeta {
|
|
5
|
+
_promptId?: string;
|
|
6
|
+
_nodes?: string[];
|
|
7
|
+
_aliases?: Record<string, string>;
|
|
8
|
+
_autoSeeds?: Record<string, number>;
|
|
9
|
+
}
|
|
10
|
+
export type WorkflowResult = WorkflowResultMeta & Record<string, any>;
|
|
11
|
+
export interface WorkflowRunOptions {
|
|
12
|
+
includeOutputs?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface WorkflowJobEvents<R extends WorkflowResult = WorkflowResult> {
|
|
15
|
+
progress: (info: {
|
|
16
|
+
value: number;
|
|
17
|
+
max: number;
|
|
18
|
+
prompt_id: string;
|
|
19
|
+
node: string;
|
|
20
|
+
}) => void;
|
|
21
|
+
progress_pct: (pct: number, info: any) => void;
|
|
22
|
+
preview: (blob: Blob) => void;
|
|
23
|
+
preview_meta: (data: {
|
|
24
|
+
blob: Blob;
|
|
25
|
+
metadata: any;
|
|
26
|
+
}) => void;
|
|
27
|
+
pending: (promptId: string) => void;
|
|
28
|
+
start: (promptId: string) => void;
|
|
29
|
+
output: (key: string, data: any) => void;
|
|
30
|
+
finished: (data: R, promptId: string) => void;
|
|
31
|
+
failed: (err: Error, promptId?: string) => void;
|
|
32
|
+
}
|
|
33
|
+
type EventKey<R extends WorkflowResult> = keyof WorkflowJobEvents<R>;
|
|
34
|
+
export declare class WorkflowJob<R extends WorkflowResult = WorkflowResult> {
|
|
35
|
+
private emitter;
|
|
36
|
+
private donePromise;
|
|
37
|
+
private doneResolve;
|
|
38
|
+
private doneReject;
|
|
39
|
+
lastProgressPct: number;
|
|
40
|
+
constructor();
|
|
41
|
+
on<K extends EventKey<R>>(evt: K, fn: WorkflowJobEvents<R>[K]): this;
|
|
42
|
+
off<K extends EventKey<R>>(evt: K, fn: WorkflowJobEvents<R>[K]): this;
|
|
43
|
+
/** Await final mapped outputs */
|
|
44
|
+
done(): Promise<R>;
|
|
45
|
+
_emit<K extends EventKey<R>>(evt: K, ...args: Parameters<WorkflowJobEvents<R>[K]>): void;
|
|
46
|
+
_finish(data: R): void;
|
|
47
|
+
_fail(err: Error, promptId?: string): void;
|
|
48
|
+
}
|
|
49
|
+
type NodeInputs<T> = T extends {
|
|
50
|
+
inputs: infer I;
|
|
51
|
+
} ? I : never;
|
|
52
|
+
type OutputMap = Record<string, any>;
|
|
53
|
+
type OutputShapeFor<C extends string> = C extends "SaveImage" | "SaveImageAdvanced" ? {
|
|
54
|
+
images?: any[];
|
|
55
|
+
} : C extends "KSampler" ? {
|
|
56
|
+
samples?: any;
|
|
57
|
+
} : any;
|
|
58
|
+
type NodeOutputFor<T extends WorkflowJSON, K extends keyof T & string> = T[K] extends {
|
|
59
|
+
class_type: infer C;
|
|
60
|
+
} ? C extends string ? OutputShapeFor<C> : any : any;
|
|
61
|
+
export declare class Workflow<T extends WorkflowJSON = WorkflowJSON, O extends OutputMap = {}> {
|
|
62
|
+
private json;
|
|
63
|
+
private outputNodeIds;
|
|
64
|
+
private outputAliases;
|
|
65
|
+
private bypassedNodes;
|
|
66
|
+
private _pendingImageInputs;
|
|
67
|
+
private _pendingFolderFiles;
|
|
68
|
+
/** Structural hash of the workflow JSON for compatibility tracking in failover scenarios */
|
|
69
|
+
structureHash?: string;
|
|
70
|
+
static from<TD extends WorkflowJSON>(data: TD, opts?: {
|
|
71
|
+
autoHash?: boolean;
|
|
72
|
+
}): Workflow<TD, {}>;
|
|
73
|
+
static from(data: string, opts?: {
|
|
74
|
+
autoHash?: boolean;
|
|
75
|
+
}): Workflow;
|
|
76
|
+
constructor(json: T, opts?: {
|
|
77
|
+
autoHash?: boolean;
|
|
78
|
+
});
|
|
79
|
+
/**
|
|
80
|
+
* Like from(), but augments known node types (e.g., KSampler) with soft union hints
|
|
81
|
+
* for inputs such as sampler_name & scheduler while still allowing arbitrary strings.
|
|
82
|
+
*/
|
|
83
|
+
static fromAugmented<TD extends WorkflowJSON>(data: TD, opts?: {
|
|
84
|
+
autoHash?: boolean;
|
|
85
|
+
}): Workflow<AugmentNodes<TD>, {}>;
|
|
86
|
+
/** Set a nested input path on a node e.g. set('9.inputs.text','hello') */
|
|
87
|
+
set(path: string, value: any): this;
|
|
88
|
+
/** Attach a single image buffer to a node input (e.g., LoadImage.image). Will upload on run() then set the input to the filename. */
|
|
89
|
+
attachImage(nodeId: keyof T & string, inputName: string, data: Blob | Buffer | ArrayBuffer | Uint8Array, fileName: string, opts?: {
|
|
90
|
+
subfolder?: string;
|
|
91
|
+
override?: boolean;
|
|
92
|
+
}): this;
|
|
93
|
+
/** Attach multiple files into a server subfolder (useful for LoadImageSetFromFolderNode). */
|
|
94
|
+
attachFolderFiles(subfolder: string, files: Array<{
|
|
95
|
+
data: Blob | Buffer | ArrayBuffer | Uint8Array;
|
|
96
|
+
fileName: string;
|
|
97
|
+
}>, opts?: {
|
|
98
|
+
override?: boolean;
|
|
99
|
+
}): this;
|
|
100
|
+
/**
|
|
101
|
+
* Sugar for setting a node's input: wf.input('SAMPLER','steps',30)
|
|
102
|
+
* Equivalent to set('SAMPLER.inputs.steps', 30).
|
|
103
|
+
* Performs a light existence check to aid DX (doesn't throw if missing by design unless strict parameter is passed).
|
|
104
|
+
*/
|
|
105
|
+
input<K extends keyof T, P extends keyof NodeInputs<T[K]> & string>(nodeId: K, inputName: P, value: NodeInputs<T[K]>[P], opts?: {
|
|
106
|
+
strict?: boolean;
|
|
107
|
+
}): this;
|
|
108
|
+
/**
|
|
109
|
+
* Batch variant:
|
|
110
|
+
* - wf.inputs('SAMPLER', { steps: 30, cfg: 7 })
|
|
111
|
+
* - wf.inputs({ SAMPLER: { steps: 30 }, CLIP: { text: 'hello' } })
|
|
112
|
+
* Honors strict mode (throws if node missing when strict:true).
|
|
113
|
+
*/
|
|
114
|
+
batchInputs<K extends keyof T>(nodeId: K, values: Partial<NodeInputs<T[K]>>, opts?: {
|
|
115
|
+
strict?: boolean;
|
|
116
|
+
}): this;
|
|
117
|
+
batchInputs<M extends {
|
|
118
|
+
[N in keyof T]?: Partial<NodeInputs<T[N]>>;
|
|
119
|
+
}>(batch: M, opts?: {
|
|
120
|
+
strict?: boolean;
|
|
121
|
+
}): this;
|
|
122
|
+
/**
|
|
123
|
+
* Mark a node to be bypassed during execution.
|
|
124
|
+
* The node will be removed and its connections automatically rewired.
|
|
125
|
+
*
|
|
126
|
+
* @param node - Node ID to bypass
|
|
127
|
+
* @returns This workflow instance for chaining
|
|
128
|
+
*/
|
|
129
|
+
bypass(node: keyof T & string): this;
|
|
130
|
+
/**
|
|
131
|
+
* Mark multiple nodes to be bypassed during execution.
|
|
132
|
+
*
|
|
133
|
+
* @param nodes - Array of node IDs to bypass
|
|
134
|
+
* @returns This workflow instance for chaining
|
|
135
|
+
*/
|
|
136
|
+
bypass(nodes: (keyof T & string)[]): this;
|
|
137
|
+
/**
|
|
138
|
+
* Remove a node from the bypass list, re-enabling it.
|
|
139
|
+
*
|
|
140
|
+
* @param node - Node ID to reinstate
|
|
141
|
+
* @returns This workflow instance for chaining
|
|
142
|
+
*/
|
|
143
|
+
reinstate(node: keyof T & string): this;
|
|
144
|
+
/**
|
|
145
|
+
* Remove multiple nodes from the bypass list.
|
|
146
|
+
*
|
|
147
|
+
* @param nodes - Array of node IDs to reinstate
|
|
148
|
+
* @returns This workflow instance for chaining
|
|
149
|
+
*/
|
|
150
|
+
reinstate(nodes: (keyof T & string)[]): this;
|
|
151
|
+
/**
|
|
152
|
+
* Update the structural hash after making non-dynamic changes to the workflow.
|
|
153
|
+
* Call this if you modify the workflow structure after initialization and the autoHash was disabled,
|
|
154
|
+
* or if you want to recalculate the hash after making structural changes.
|
|
155
|
+
*
|
|
156
|
+
* Example:
|
|
157
|
+
* ```
|
|
158
|
+
* const wf = Workflow.from(data, { autoHash: false });
|
|
159
|
+
* wf.input('SAMPLER', 'ckpt_name', 'model_v1.safetensors');
|
|
160
|
+
* wf.updateHash(); // Recompute hash after structural change
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
updateHash(): this;
|
|
164
|
+
/** IDE helper returning empty object typed as final result (aliases + metadata). */
|
|
165
|
+
typedResult(): WorkflowResult & O;
|
|
166
|
+
/** Get the raw workflow JSON structure. */
|
|
167
|
+
toJSON(): T;
|
|
168
|
+
/** Upload pending images to client */
|
|
169
|
+
uploadAssets(api: ComfyApi): Promise<void>;
|
|
170
|
+
}
|
|
171
|
+
export interface Workflow<T extends WorkflowJSON = WorkflowJSON, O extends OutputMap = {}> {
|
|
172
|
+
output<NodeId extends keyof T & string>(nodeId: NodeId): Workflow<T, O & Record<NodeId, NodeOutputFor<T, NodeId>>>;
|
|
173
|
+
output<Spec extends `${string}:${keyof T & string}`>(spec: Spec): Workflow<T, O & (Spec extends `${infer Alias}:${infer Node}` ? (Node extends keyof T & string ? Record<Alias, NodeOutputFor<T, Node>> : Record<Alias, any>) : {})>;
|
|
174
|
+
output<Alias extends string, NodeId extends keyof T & string>(alias: Alias, nodeId: NodeId): Workflow<T, O & Record<Alias, NodeOutputFor<T, NodeId>>>;
|
|
175
|
+
output<A extends string>(single: A): Workflow<T, O & Record<A, any>>;
|
|
176
|
+
output<Alias extends string, NodeId extends string>(alias: Alias, nodeId: NodeId): Workflow<T, O & Record<Alias, any>>;
|
|
177
|
+
}
|
|
178
|
+
export {};
|
|
179
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/multipool/workflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,CAAC;IACX,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5D,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,KAAK,QAAQ,CAAC,CAAC,SAAS,cAAc,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAAC,CAAC;AA6BrE,qBAAa,WAAW,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAChE,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAAoB;IAC/B,eAAe,EAAE,MAAM,CAAM;;IAapC,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAK7D,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAK9D,iCAAiC;IACjC,IAAI;IAIJ,KAAK,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAIjF,OAAO,CAAC,IAAI,EAAE,CAAC;IAKf,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM;CAIpC;AAGD,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAG/D,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAIrC,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IAClC,CAAC,SAAS,WAAW,GAAG,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,GAC9D,CAAC,SAAS,UAAU,GAAG;IAAE,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,GACtC,GAAG,CAAC;AAEV,KAAK,aAAa,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,IACnE,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC,CAAA;CAAE,GAChC,CAAC,SAAS,MAAM,GACd,cAAc,CAAC,CAAC,CAAC,GACjB,GAAG,GACL,GAAG,CAAC;AAEV,qBAAa,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,CAAC,SAAS,SAAS,GAAG,EAAE;IACnF,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAAmB;IAGxC,OAAO,CAAC,mBAAmB,CAOnB;IACR,OAAO,CAAC,mBAAmB,CAAsF;IAEjH,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAC/F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,QAAQ;gBAatD,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAQlD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;QAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,GAAG,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAIlC,0EAA0E;IAC1E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAW5B,qIAAqI;IACrI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAChI,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB;IAaD,6FAA6F;IAC7F,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;QAChD,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAC/C,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAQjC;;;;OAIG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAC9H,MAAM,CAAC,EAAE,OAAO,CAAA;KACjB;IAiBD;;;;;OAKG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAC/G,WAAW,CAAC,CAAC,SAAS;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAsElH;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAEpC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI;IAczC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAEvC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI;IAe5C;;;;;;;;;;;OAWG;IACH,UAAU,IAAI,IAAI;IAKlB,oFAAoF;IACpF,WAAW,IAAI,cAAc,GAAG,CAAC;IAIjC,2CAA2C;IAC3C,MAAM,IAAI,CAAC;IAIX,sCAAsC;IAChC,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjD;AAGD,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,CAAC,SAAS,SAAS,GAAG,EAAE;IAEvF,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAGnH,MAAM,CAAC,IAAI,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAChF,IAAI,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GAAG,CAAC,IAAI,SAAS,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAC9I,CAAC,CAAC;IAGL,MAAM,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAGtJ,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAErE,MAAM,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;CACxH"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { hashWorkflow } from "../pool/utils/hash.js";
|
|
2
|
+
class TinyEmitter {
|
|
3
|
+
listeners = new Map();
|
|
4
|
+
on(evt, fn) {
|
|
5
|
+
if (!this.listeners.has(evt))
|
|
6
|
+
this.listeners.set(evt, new Set());
|
|
7
|
+
this.listeners.get(evt).add(fn);
|
|
8
|
+
return () => this.off(evt, fn);
|
|
9
|
+
}
|
|
10
|
+
off(evt, fn) {
|
|
11
|
+
this.listeners.get(evt)?.delete(fn);
|
|
12
|
+
}
|
|
13
|
+
emit(evt, ...args) {
|
|
14
|
+
this.listeners.get(evt)?.forEach(fn => {
|
|
15
|
+
try {
|
|
16
|
+
fn(...args);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
removeAll() {
|
|
23
|
+
this.listeners.clear();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class WorkflowJob {
|
|
27
|
+
emitter = new TinyEmitter();
|
|
28
|
+
donePromise;
|
|
29
|
+
doneResolve;
|
|
30
|
+
doneReject;
|
|
31
|
+
lastProgressPct = -1;
|
|
32
|
+
constructor() {
|
|
33
|
+
this.donePromise = new Promise((res, rej) => {
|
|
34
|
+
this.doneResolve = res;
|
|
35
|
+
this.doneReject = rej;
|
|
36
|
+
});
|
|
37
|
+
// Prevent unhandled rejection warnings by attaching a catch handler
|
|
38
|
+
// The actual error handling happens when user calls done()
|
|
39
|
+
this.donePromise.catch(() => {
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
on(evt, fn) {
|
|
43
|
+
this.emitter.on(evt, fn);
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
off(evt, fn) {
|
|
47
|
+
this.emitter.off(evt, fn);
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/** Await final mapped outputs */
|
|
51
|
+
done() {
|
|
52
|
+
return this.donePromise;
|
|
53
|
+
}
|
|
54
|
+
_emit(evt, ...args) {
|
|
55
|
+
this.emitter.emit(evt, ...args);
|
|
56
|
+
}
|
|
57
|
+
_finish(data) {
|
|
58
|
+
this.doneResolve(data);
|
|
59
|
+
this.emitter.emit("finished", data, data._promptId);
|
|
60
|
+
}
|
|
61
|
+
_fail(err, promptId) {
|
|
62
|
+
this.doneReject(err);
|
|
63
|
+
this.emitter.emit("failed", err, promptId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export class Workflow {
|
|
67
|
+
json;
|
|
68
|
+
outputNodeIds = [];
|
|
69
|
+
outputAliases = {}; // nodeId -> alias
|
|
70
|
+
bypassedNodes = []; // nodes to bypass during execution
|
|
71
|
+
// Pending assets to upload before execution
|
|
72
|
+
_pendingImageInputs = [];
|
|
73
|
+
_pendingFolderFiles = [];
|
|
74
|
+
/** Structural hash of the workflow JSON for compatibility tracking in failover scenarios */
|
|
75
|
+
structureHash;
|
|
76
|
+
static from(data, opts) {
|
|
77
|
+
if (typeof data === "string") {
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(data);
|
|
80
|
+
return new Workflow(parsed, opts);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
throw new Error("Failed to parse workflow JSON string", { cause: e });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return new Workflow(structuredClone(data), opts);
|
|
87
|
+
}
|
|
88
|
+
constructor(json, opts) {
|
|
89
|
+
this.json = structuredClone(json);
|
|
90
|
+
// Compute structural hash by default unless explicitly disabled
|
|
91
|
+
if (opts?.autoHash !== false) {
|
|
92
|
+
this.structureHash = hashWorkflow(this.json);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Like from(), but augments known node types (e.g., KSampler) with soft union hints
|
|
97
|
+
* for inputs such as sampler_name & scheduler while still allowing arbitrary strings.
|
|
98
|
+
*/
|
|
99
|
+
static fromAugmented(data, opts) {
|
|
100
|
+
return Workflow.from(data, opts);
|
|
101
|
+
}
|
|
102
|
+
/** Set a nested input path on a node e.g. set('9.inputs.text','hello') */
|
|
103
|
+
set(path, value) {
|
|
104
|
+
const keys = path.split(".");
|
|
105
|
+
let cur = this.json;
|
|
106
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
107
|
+
if (cur[keys[i]] === undefined)
|
|
108
|
+
cur[keys[i]] = {};
|
|
109
|
+
cur = cur[keys[i]];
|
|
110
|
+
}
|
|
111
|
+
cur[keys[keys.length - 1]] = value;
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
/** Attach a single image buffer to a node input (e.g., LoadImage.image). Will upload on run() then set the input to the filename. */
|
|
115
|
+
attachImage(nodeId, inputName, data, fileName, opts) {
|
|
116
|
+
const blob = toBlob(data, fileName);
|
|
117
|
+
this._pendingImageInputs.push({
|
|
118
|
+
nodeId: String(nodeId),
|
|
119
|
+
inputName,
|
|
120
|
+
blob,
|
|
121
|
+
fileName,
|
|
122
|
+
subfolder: opts?.subfolder,
|
|
123
|
+
override: opts?.override
|
|
124
|
+
});
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
/** Attach multiple files into a server subfolder (useful for LoadImageSetFromFolderNode). */
|
|
128
|
+
attachFolderFiles(subfolder, files, opts) {
|
|
129
|
+
for (const f of files) {
|
|
130
|
+
const blob = toBlob(f.data, f.fileName);
|
|
131
|
+
this._pendingFolderFiles.push({ subfolder, blob, fileName: f.fileName, override: opts?.override });
|
|
132
|
+
}
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Sugar for setting a node's input: wf.input('SAMPLER','steps',30)
|
|
137
|
+
* Equivalent to set('SAMPLER.inputs.steps', 30).
|
|
138
|
+
* Performs a light existence check to aid DX (doesn't throw if missing by design unless strict parameter is passed).
|
|
139
|
+
*/
|
|
140
|
+
input(nodeId, inputName, value, opts) {
|
|
141
|
+
const nodeKey = String(nodeId);
|
|
142
|
+
const node = this.json[nodeKey];
|
|
143
|
+
if (!node) {
|
|
144
|
+
if (opts?.strict)
|
|
145
|
+
throw new Error(`Workflow.input: node '${String(nodeId)}' not found`);
|
|
146
|
+
// create minimal node shell if non-strict (lets users build up dynamically)
|
|
147
|
+
this.json[nodeKey] = { inputs: { [inputName]: value } };
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
if (!node.inputs) {
|
|
151
|
+
if (opts?.strict)
|
|
152
|
+
throw new Error(`Workflow.input: node '${String(nodeId)}' missing inputs object`);
|
|
153
|
+
node.inputs = {};
|
|
154
|
+
}
|
|
155
|
+
node.inputs[inputName] = value;
|
|
156
|
+
return this;
|
|
157
|
+
}
|
|
158
|
+
batchInputs(a, b, c) {
|
|
159
|
+
// Form 1: (nodeId, values, opts)
|
|
160
|
+
if (typeof a === "string") {
|
|
161
|
+
const nodeId = a;
|
|
162
|
+
const values = b || {};
|
|
163
|
+
const opts = c || {};
|
|
164
|
+
for (const [k, v] of Object.entries(values)) {
|
|
165
|
+
this.input(nodeId, k, v, opts);
|
|
166
|
+
}
|
|
167
|
+
return this;
|
|
168
|
+
}
|
|
169
|
+
// Form 2: (batchObject, opts)
|
|
170
|
+
const batch = a || {};
|
|
171
|
+
const opts = b || {};
|
|
172
|
+
for (const [nodeId, values] of Object.entries(batch)) {
|
|
173
|
+
if (!values)
|
|
174
|
+
continue;
|
|
175
|
+
for (const [k, v] of Object.entries(values)) {
|
|
176
|
+
this.input(nodeId, k, v, opts);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return this;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Mark a node id whose outputs we want collected.
|
|
183
|
+
* Supports aliasing in two forms:
|
|
184
|
+
* - output('alias','9')
|
|
185
|
+
* - output('alias:9')
|
|
186
|
+
* - output('9') (no alias, raw node id key)
|
|
187
|
+
*/
|
|
188
|
+
output(a, b) {
|
|
189
|
+
let alias;
|
|
190
|
+
let nodeId;
|
|
191
|
+
if (b) {
|
|
192
|
+
// Heuristic: if first arg looks like a node id and second arg looks like an alias, swap
|
|
193
|
+
// Node ids are often numeric strings (e.g., '2'); aliases are non-numeric labels.
|
|
194
|
+
const looksLikeNodeId = (s) => /^\d+$/.test(s) || this.json[s];
|
|
195
|
+
if (looksLikeNodeId(String(a)) && !looksLikeNodeId(String(b))) {
|
|
196
|
+
nodeId = String(a);
|
|
197
|
+
alias = String(b);
|
|
198
|
+
try {
|
|
199
|
+
console.warn(`Workflow.output called as output(nodeId, alias). Interpreting as output(alias,nodeId): '${alias}:${nodeId}'`);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
alias = String(a);
|
|
206
|
+
nodeId = String(b);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// single param variant: maybe "alias:node" or just node
|
|
211
|
+
if (a.includes(":")) {
|
|
212
|
+
const [al, id] = a.split(":");
|
|
213
|
+
if (al && id) {
|
|
214
|
+
alias = al;
|
|
215
|
+
nodeId = id;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
nodeId = a;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
nodeId = a;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (!this.outputNodeIds.includes(nodeId))
|
|
226
|
+
this.outputNodeIds.push(nodeId);
|
|
227
|
+
if (alias) {
|
|
228
|
+
this.outputAliases[nodeId] = alias;
|
|
229
|
+
}
|
|
230
|
+
return this; // typed refinement handled via declaration merging below
|
|
231
|
+
}
|
|
232
|
+
bypass(nodes) {
|
|
233
|
+
if (!Array.isArray(nodes)) {
|
|
234
|
+
nodes = [nodes];
|
|
235
|
+
}
|
|
236
|
+
for (const node of nodes) {
|
|
237
|
+
if (!this.bypassedNodes.includes(node)) {
|
|
238
|
+
this.bypassedNodes.push(node);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
reinstate(nodes) {
|
|
244
|
+
if (!Array.isArray(nodes)) {
|
|
245
|
+
nodes = [nodes];
|
|
246
|
+
}
|
|
247
|
+
for (const node of nodes) {
|
|
248
|
+
const idx = this.bypassedNodes.indexOf(node);
|
|
249
|
+
if (idx !== -1) {
|
|
250
|
+
this.bypassedNodes.splice(idx, 1);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return this;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Update the structural hash after making non-dynamic changes to the workflow.
|
|
257
|
+
* Call this if you modify the workflow structure after initialization and the autoHash was disabled,
|
|
258
|
+
* or if you want to recalculate the hash after making structural changes.
|
|
259
|
+
*
|
|
260
|
+
* Example:
|
|
261
|
+
* ```
|
|
262
|
+
* const wf = Workflow.from(data, { autoHash: false });
|
|
263
|
+
* wf.input('SAMPLER', 'ckpt_name', 'model_v1.safetensors');
|
|
264
|
+
* wf.updateHash(); // Recompute hash after structural change
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
updateHash() {
|
|
268
|
+
this.structureHash = hashWorkflow(this.json);
|
|
269
|
+
return this;
|
|
270
|
+
}
|
|
271
|
+
/** IDE helper returning empty object typed as final result (aliases + metadata). */
|
|
272
|
+
typedResult() {
|
|
273
|
+
return {};
|
|
274
|
+
}
|
|
275
|
+
/** Get the raw workflow JSON structure. */
|
|
276
|
+
toJSON() {
|
|
277
|
+
return structuredClone(this.json);
|
|
278
|
+
}
|
|
279
|
+
/** Upload pending images to client */
|
|
280
|
+
async uploadAssets(api) {
|
|
281
|
+
// Upload any pending assets first, then patch JSON inputs
|
|
282
|
+
if (this._pendingFolderFiles.length || this._pendingImageInputs.length) {
|
|
283
|
+
// Upload folder files
|
|
284
|
+
for (const f of this._pendingFolderFiles) {
|
|
285
|
+
await api.ext.file.uploadImage(f.blob, f.fileName, { subfolder: f.subfolder, override: f.override });
|
|
286
|
+
}
|
|
287
|
+
// Upload and set single-image inputs
|
|
288
|
+
for (const it of this._pendingImageInputs) {
|
|
289
|
+
await api.ext.file.uploadImage(it.blob, it.fileName, { subfolder: it.subfolder, override: it.override });
|
|
290
|
+
// Prefer just the filename; many LoadImage nodes look up by filename (subfolder managed server-side)
|
|
291
|
+
this.input(it.nodeId, it.inputName, it.fileName);
|
|
292
|
+
}
|
|
293
|
+
// Clear pending once applied
|
|
294
|
+
this._pendingFolderFiles = [];
|
|
295
|
+
this._pendingImageInputs = [];
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Helper: normalize to Blob for upload
|
|
300
|
+
function toBlob(src, fileName) {
|
|
301
|
+
if (src instanceof Blob)
|
|
302
|
+
return src;
|
|
303
|
+
// Normalize everything to a plain ArrayBuffer for reliable BlobPart typing
|
|
304
|
+
let ab;
|
|
305
|
+
if (typeof Buffer !== "undefined" && src instanceof Buffer) {
|
|
306
|
+
const u8 = new Uint8Array(src);
|
|
307
|
+
ab = u8.slice(0).buffer;
|
|
308
|
+
}
|
|
309
|
+
else if (src instanceof Uint8Array) {
|
|
310
|
+
const u8 = new Uint8Array(src.byteLength);
|
|
311
|
+
u8.set(src);
|
|
312
|
+
ab = u8.buffer;
|
|
313
|
+
}
|
|
314
|
+
else if (src instanceof ArrayBuffer) {
|
|
315
|
+
ab = src;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
ab = new ArrayBuffer(0);
|
|
319
|
+
}
|
|
320
|
+
return new Blob([ab], { type: mimeFromName(fileName) });
|
|
321
|
+
}
|
|
322
|
+
function mimeFromName(name) {
|
|
323
|
+
if (!name)
|
|
324
|
+
return undefined;
|
|
325
|
+
const n = name.toLowerCase();
|
|
326
|
+
if (n.endsWith(".png"))
|
|
327
|
+
return "image/png";
|
|
328
|
+
if (n.endsWith(".jpg") || n.endsWith(".jpeg"))
|
|
329
|
+
return "image/jpeg";
|
|
330
|
+
if (n.endsWith(".webp"))
|
|
331
|
+
return "image/webp";
|
|
332
|
+
return undefined;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/multipool/workflow.ts"],"names":[],"mappings":"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"}
|