@uploadista/core 0.0.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/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-check.log +231 -0
- package/.turbo/turbo-format.log +5 -0
- package/LICENSE +21 -0
- package/README.md +1120 -0
- package/dist/chunk-CUT6urMc.cjs +1 -0
- package/dist/debounce-C2SeqcxD.js +2 -0
- package/dist/debounce-C2SeqcxD.js.map +1 -0
- package/dist/debounce-LZK7yS7Z.cjs +1 -0
- package/dist/errors/index.cjs +1 -0
- package/dist/errors/index.d.cts +3 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/uploadista-error.d.ts +209 -0
- package/dist/errors/uploadista-error.d.ts.map +1 -0
- package/dist/errors/uploadista-error.js +322 -0
- package/dist/errors-8i_aMxOE.js +1 -0
- package/dist/errors-CRm1FHHT.cjs +0 -0
- package/dist/flow/edge.d.ts +47 -0
- package/dist/flow/edge.d.ts.map +1 -0
- package/dist/flow/edge.js +40 -0
- package/dist/flow/event.d.ts +206 -0
- package/dist/flow/event.d.ts.map +1 -0
- package/dist/flow/event.js +53 -0
- package/dist/flow/flow-server.d.ts +223 -0
- package/dist/flow/flow-server.d.ts.map +1 -0
- package/dist/flow/flow-server.js +614 -0
- package/dist/flow/flow.d.ts +238 -0
- package/dist/flow/flow.d.ts.map +1 -0
- package/dist/flow/flow.js +629 -0
- package/dist/flow/index.cjs +1 -0
- package/dist/flow/index.d.cts +6 -0
- package/dist/flow/index.d.ts +24 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +24 -0
- package/dist/flow/node.d.ts +136 -0
- package/dist/flow/node.d.ts.map +1 -0
- package/dist/flow/node.js +153 -0
- package/dist/flow/nodes/index.d.ts +8 -0
- package/dist/flow/nodes/index.d.ts.map +1 -0
- package/dist/flow/nodes/index.js +7 -0
- package/dist/flow/nodes/input-node.d.ts +78 -0
- package/dist/flow/nodes/input-node.d.ts.map +1 -0
- package/dist/flow/nodes/input-node.js +233 -0
- package/dist/flow/nodes/storage-node.d.ts +67 -0
- package/dist/flow/nodes/storage-node.d.ts.map +1 -0
- package/dist/flow/nodes/storage-node.js +94 -0
- package/dist/flow/nodes/streaming-input-node.d.ts +69 -0
- package/dist/flow/nodes/streaming-input-node.d.ts.map +1 -0
- package/dist/flow/nodes/streaming-input-node.js +156 -0
- package/dist/flow/nodes/transform-node.d.ts +85 -0
- package/dist/flow/nodes/transform-node.d.ts.map +1 -0
- package/dist/flow/nodes/transform-node.js +107 -0
- package/dist/flow/parallel-scheduler.d.ts +175 -0
- package/dist/flow/parallel-scheduler.d.ts.map +1 -0
- package/dist/flow/parallel-scheduler.js +193 -0
- package/dist/flow/plugins/credential-provider.d.ts +47 -0
- package/dist/flow/plugins/credential-provider.d.ts.map +1 -0
- package/dist/flow/plugins/credential-provider.js +24 -0
- package/dist/flow/plugins/image-ai-plugin.d.ts +61 -0
- package/dist/flow/plugins/image-ai-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/image-ai-plugin.js +21 -0
- package/dist/flow/plugins/image-plugin.d.ts +52 -0
- package/dist/flow/plugins/image-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/image-plugin.js +22 -0
- package/dist/flow/plugins/types/describe-image-node.d.ts +16 -0
- package/dist/flow/plugins/types/describe-image-node.d.ts.map +1 -0
- package/dist/flow/plugins/types/describe-image-node.js +9 -0
- package/dist/flow/plugins/types/index.d.ts +9 -0
- package/dist/flow/plugins/types/index.d.ts.map +1 -0
- package/dist/flow/plugins/types/index.js +8 -0
- package/dist/flow/plugins/types/optimize-node.d.ts +20 -0
- package/dist/flow/plugins/types/optimize-node.d.ts.map +1 -0
- package/dist/flow/plugins/types/optimize-node.js +11 -0
- package/dist/flow/plugins/types/remove-background-node.d.ts +16 -0
- package/dist/flow/plugins/types/remove-background-node.d.ts.map +1 -0
- package/dist/flow/plugins/types/remove-background-node.js +9 -0
- package/dist/flow/plugins/types/resize-node.d.ts +21 -0
- package/dist/flow/plugins/types/resize-node.d.ts.map +1 -0
- package/dist/flow/plugins/types/resize-node.js +16 -0
- package/dist/flow/plugins/zip-plugin.d.ts +62 -0
- package/dist/flow/plugins/zip-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/zip-plugin.js +21 -0
- package/dist/flow/typed-flow.d.ts +90 -0
- package/dist/flow/typed-flow.d.ts.map +1 -0
- package/dist/flow/typed-flow.js +59 -0
- package/dist/flow/types/flow-file.d.ts +45 -0
- package/dist/flow/types/flow-file.d.ts.map +1 -0
- package/dist/flow/types/flow-file.js +27 -0
- package/dist/flow/types/flow-job.d.ts +118 -0
- package/dist/flow/types/flow-job.d.ts.map +1 -0
- package/dist/flow/types/flow-job.js +11 -0
- package/dist/flow/types/flow-types.d.ts +321 -0
- package/dist/flow/types/flow-types.d.ts.map +1 -0
- package/dist/flow/types/flow-types.js +52 -0
- package/dist/flow/types/index.d.ts +4 -0
- package/dist/flow/types/index.d.ts.map +1 -0
- package/dist/flow/types/index.js +3 -0
- package/dist/flow/types/run-args.d.ts +38 -0
- package/dist/flow/types/run-args.d.ts.map +1 -0
- package/dist/flow/types/run-args.js +30 -0
- package/dist/flow/types/type-validator.d.ts +26 -0
- package/dist/flow/types/type-validator.d.ts.map +1 -0
- package/dist/flow/types/type-validator.js +134 -0
- package/dist/flow/utils/resolve-upload-metadata.d.ts +11 -0
- package/dist/flow/utils/resolve-upload-metadata.d.ts.map +1 -0
- package/dist/flow/utils/resolve-upload-metadata.js +28 -0
- package/dist/flow-2zXnEiWL.cjs +1 -0
- package/dist/flow-CRaKy7Vj.js +2 -0
- package/dist/flow-CRaKy7Vj.js.map +1 -0
- package/dist/generate-id-Dm-Vboxq.d.ts +34 -0
- package/dist/generate-id-Dm-Vboxq.d.ts.map +1 -0
- package/dist/generate-id-LjJRLD6N.d.cts +34 -0
- package/dist/generate-id-LjJRLD6N.d.cts.map +1 -0
- package/dist/generate-id-xHp_Z7Cl.cjs +1 -0
- package/dist/generate-id-yohS1ZDk.js +2 -0
- package/dist/generate-id-yohS1ZDk.js.map +1 -0
- package/dist/index-BO8GZlbD.d.cts +1040 -0
- package/dist/index-BO8GZlbD.d.cts.map +1 -0
- package/dist/index-BoGG5KAY.d.ts +1 -0
- package/dist/index-BtBZHVmz.d.cts +1 -0
- package/dist/index-D-CoVpkZ.d.ts +1004 -0
- package/dist/index-D-CoVpkZ.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/logger/logger.cjs +1 -0
- package/dist/logger/logger.d.cts +8 -0
- package/dist/logger/logger.d.cts.map +1 -0
- package/dist/logger/logger.d.ts +5 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +10 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/semaphore-0ZwjVpyF.js +2 -0
- package/dist/semaphore-0ZwjVpyF.js.map +1 -0
- package/dist/semaphore-BHprIjFI.d.cts +37 -0
- package/dist/semaphore-BHprIjFI.d.cts.map +1 -0
- package/dist/semaphore-DThupBkc.d.ts +37 -0
- package/dist/semaphore-DThupBkc.d.ts.map +1 -0
- package/dist/semaphore-DVrONiAV.cjs +1 -0
- package/dist/stream-limiter-CoWKv39w.js +2 -0
- package/dist/stream-limiter-CoWKv39w.js.map +1 -0
- package/dist/stream-limiter-JgOwmkMa.cjs +1 -0
- package/dist/streams/multi-stream.cjs +1 -0
- package/dist/streams/multi-stream.d.cts +91 -0
- package/dist/streams/multi-stream.d.cts.map +1 -0
- package/dist/streams/multi-stream.d.ts +86 -0
- package/dist/streams/multi-stream.d.ts.map +1 -0
- package/dist/streams/multi-stream.js +149 -0
- package/dist/streams/multi-stream.js.map +1 -0
- package/dist/streams/stream-limiter.cjs +1 -0
- package/dist/streams/stream-limiter.d.cts +36 -0
- package/dist/streams/stream-limiter.d.cts.map +1 -0
- package/dist/streams/stream-limiter.d.ts +27 -0
- package/dist/streams/stream-limiter.d.ts.map +1 -0
- package/dist/streams/stream-limiter.js +49 -0
- package/dist/streams/stream-splitter.cjs +1 -0
- package/dist/streams/stream-splitter.d.cts +68 -0
- package/dist/streams/stream-splitter.d.cts.map +1 -0
- package/dist/streams/stream-splitter.d.ts +51 -0
- package/dist/streams/stream-splitter.d.ts.map +1 -0
- package/dist/streams/stream-splitter.js +175 -0
- package/dist/streams/stream-splitter.js.map +1 -0
- package/dist/types/data-store-registry.d.ts +13 -0
- package/dist/types/data-store-registry.d.ts.map +1 -0
- package/dist/types/data-store-registry.js +4 -0
- package/dist/types/data-store.d.ts +316 -0
- package/dist/types/data-store.d.ts.map +1 -0
- package/dist/types/data-store.js +157 -0
- package/dist/types/event-broadcaster.d.ts +28 -0
- package/dist/types/event-broadcaster.d.ts.map +1 -0
- package/dist/types/event-broadcaster.js +6 -0
- package/dist/types/event-emitter.d.ts +378 -0
- package/dist/types/event-emitter.d.ts.map +1 -0
- package/dist/types/event-emitter.js +223 -0
- package/dist/types/index.cjs +1 -0
- package/dist/types/index.d.cts +6 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/input-file.d.ts +104 -0
- package/dist/types/input-file.d.ts.map +1 -0
- package/dist/types/input-file.js +27 -0
- package/dist/types/kv-store.d.ts +281 -0
- package/dist/types/kv-store.d.ts.map +1 -0
- package/dist/types/kv-store.js +234 -0
- package/dist/types/middleware.d.ts +17 -0
- package/dist/types/middleware.d.ts.map +1 -0
- package/dist/types/middleware.js +21 -0
- package/dist/types/upload-event.d.ts +105 -0
- package/dist/types/upload-event.d.ts.map +1 -0
- package/dist/types/upload-event.js +71 -0
- package/dist/types/upload-file.d.ts +136 -0
- package/dist/types/upload-file.d.ts.map +1 -0
- package/dist/types/upload-file.js +34 -0
- package/dist/types/websocket.d.ts +144 -0
- package/dist/types/websocket.d.ts.map +1 -0
- package/dist/types/websocket.js +40 -0
- package/dist/types-BT-cvi7T.cjs +1 -0
- package/dist/types-DhU2j-XF.js +2 -0
- package/dist/types-DhU2j-XF.js.map +1 -0
- package/dist/upload/convert-to-stream.d.ts +38 -0
- package/dist/upload/convert-to-stream.d.ts.map +1 -0
- package/dist/upload/convert-to-stream.js +43 -0
- package/dist/upload/convert-upload-to-flow-file.d.ts +14 -0
- package/dist/upload/convert-upload-to-flow-file.d.ts.map +1 -0
- package/dist/upload/convert-upload-to-flow-file.js +21 -0
- package/dist/upload/create-upload.d.ts +68 -0
- package/dist/upload/create-upload.d.ts.map +1 -0
- package/dist/upload/create-upload.js +157 -0
- package/dist/upload/index.cjs +1 -0
- package/dist/upload/index.d.cts +6 -0
- package/dist/upload/index.d.ts +4 -0
- package/dist/upload/index.d.ts.map +1 -0
- package/dist/upload/index.js +3 -0
- package/dist/upload/mime.d.ts +24 -0
- package/dist/upload/mime.d.ts.map +1 -0
- package/dist/upload/mime.js +351 -0
- package/dist/upload/upload-chunk.d.ts +58 -0
- package/dist/upload/upload-chunk.d.ts.map +1 -0
- package/dist/upload/upload-chunk.js +277 -0
- package/dist/upload/upload-server.d.ts +221 -0
- package/dist/upload/upload-server.d.ts.map +1 -0
- package/dist/upload/upload-server.js +181 -0
- package/dist/upload/upload-strategy-negotiator.d.ts +148 -0
- package/dist/upload/upload-strategy-negotiator.d.ts.map +1 -0
- package/dist/upload/upload-strategy-negotiator.js +217 -0
- package/dist/upload/upload-url.d.ts +68 -0
- package/dist/upload/upload-url.d.ts.map +1 -0
- package/dist/upload/upload-url.js +142 -0
- package/dist/upload/write-to-store.d.ts +77 -0
- package/dist/upload/write-to-store.d.ts.map +1 -0
- package/dist/upload/write-to-store.js +147 -0
- package/dist/upload-DLuICjpP.cjs +1 -0
- package/dist/upload-DaXO34dE.js +2 -0
- package/dist/upload-DaXO34dE.js.map +1 -0
- package/dist/uploadista-error-BB-Wdiz9.cjs +22 -0
- package/dist/uploadista-error-BVsVxqvz.js +23 -0
- package/dist/uploadista-error-BVsVxqvz.js.map +1 -0
- package/dist/uploadista-error-CwxYs4EB.d.ts +52 -0
- package/dist/uploadista-error-CwxYs4EB.d.ts.map +1 -0
- package/dist/uploadista-error-kKlhLRhY.d.cts +52 -0
- package/dist/uploadista-error-kKlhLRhY.d.cts.map +1 -0
- package/dist/utils/checksum.d.ts +22 -0
- package/dist/utils/checksum.d.ts.map +1 -0
- package/dist/utils/checksum.js +49 -0
- package/dist/utils/debounce.cjs +1 -0
- package/dist/utils/debounce.d.cts +38 -0
- package/dist/utils/debounce.d.cts.map +1 -0
- package/dist/utils/debounce.d.ts +36 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/debounce.js +73 -0
- package/dist/utils/generate-id.cjs +1 -0
- package/dist/utils/generate-id.d.cts +2 -0
- package/dist/utils/generate-id.d.ts +32 -0
- package/dist/utils/generate-id.d.ts.map +1 -0
- package/dist/utils/generate-id.js +23 -0
- package/dist/utils/md5.cjs +1 -0
- package/dist/utils/md5.d.cts +73 -0
- package/dist/utils/md5.d.cts.map +1 -0
- package/dist/utils/md5.d.ts +71 -0
- package/dist/utils/md5.d.ts.map +1 -0
- package/dist/utils/md5.js +417 -0
- package/dist/utils/md5.js.map +1 -0
- package/dist/utils/once.cjs +1 -0
- package/dist/utils/once.d.cts +25 -0
- package/dist/utils/once.d.cts.map +1 -0
- package/dist/utils/once.d.ts +21 -0
- package/dist/utils/once.d.ts.map +1 -0
- package/dist/utils/once.js +54 -0
- package/dist/utils/once.js.map +1 -0
- package/dist/utils/semaphore.cjs +1 -0
- package/dist/utils/semaphore.d.cts +3 -0
- package/dist/utils/semaphore.d.ts +78 -0
- package/dist/utils/semaphore.d.ts.map +1 -0
- package/dist/utils/semaphore.js +134 -0
- package/dist/utils/throttle.cjs +1 -0
- package/dist/utils/throttle.d.cts +24 -0
- package/dist/utils/throttle.d.cts.map +1 -0
- package/dist/utils/throttle.d.ts +18 -0
- package/dist/utils/throttle.d.ts.map +1 -0
- package/dist/utils/throttle.js +20 -0
- package/dist/utils/throttle.js.map +1 -0
- package/docs/PARALLEL_EXECUTION.md +206 -0
- package/docs/PARALLEL_EXECUTION_QUICKSTART.md +142 -0
- package/docs/PARALLEL_EXECUTION_REFACTOR.md +184 -0
- package/package.json +80 -0
- package/src/errors/__tests__/uploadista-error.test.ts +251 -0
- package/src/errors/index.ts +2 -0
- package/src/errors/uploadista-error.ts +394 -0
- package/src/flow/README.md +352 -0
- package/src/flow/edge.test.ts +146 -0
- package/src/flow/edge.ts +60 -0
- package/src/flow/event.ts +229 -0
- package/src/flow/flow-server.ts +1089 -0
- package/src/flow/flow.ts +1050 -0
- package/src/flow/index.ts +28 -0
- package/src/flow/node.ts +249 -0
- package/src/flow/nodes/index.ts +8 -0
- package/src/flow/nodes/input-node.ts +296 -0
- package/src/flow/nodes/storage-node.ts +128 -0
- package/src/flow/nodes/transform-node.ts +154 -0
- package/src/flow/parallel-scheduler.ts +259 -0
- package/src/flow/plugins/credential-provider.ts +48 -0
- package/src/flow/plugins/image-ai-plugin.ts +66 -0
- package/src/flow/plugins/image-plugin.ts +60 -0
- package/src/flow/plugins/types/describe-image-node.ts +16 -0
- package/src/flow/plugins/types/index.ts +9 -0
- package/src/flow/plugins/types/optimize-node.ts +18 -0
- package/src/flow/plugins/types/remove-background-node.ts +18 -0
- package/src/flow/plugins/types/resize-node.ts +26 -0
- package/src/flow/plugins/zip-plugin.ts +69 -0
- package/src/flow/typed-flow.ts +279 -0
- package/src/flow/types/flow-file.ts +51 -0
- package/src/flow/types/flow-job.ts +138 -0
- package/src/flow/types/flow-types.ts +353 -0
- package/src/flow/types/index.ts +6 -0
- package/src/flow/types/run-args.ts +40 -0
- package/src/flow/types/type-validator.ts +204 -0
- package/src/flow/utils/resolve-upload-metadata.ts +48 -0
- package/src/index.ts +5 -0
- package/src/logger/logger.ts +14 -0
- package/src/streams/stream-limiter.test.ts +150 -0
- package/src/streams/stream-limiter.ts +75 -0
- package/src/types/data-store.ts +427 -0
- package/src/types/event-broadcaster.ts +39 -0
- package/src/types/event-emitter.ts +349 -0
- package/src/types/index.ts +9 -0
- package/src/types/input-file.ts +107 -0
- package/src/types/kv-store.ts +375 -0
- package/src/types/middleware.ts +54 -0
- package/src/types/upload-event.ts +75 -0
- package/src/types/upload-file.ts +139 -0
- package/src/types/websocket.ts +65 -0
- package/src/upload/convert-to-stream.ts +48 -0
- package/src/upload/create-upload.ts +214 -0
- package/src/upload/index.ts +3 -0
- package/src/upload/mime.ts +436 -0
- package/src/upload/upload-chunk.ts +364 -0
- package/src/upload/upload-server.ts +390 -0
- package/src/upload/upload-strategy-negotiator.ts +316 -0
- package/src/upload/upload-url.ts +173 -0
- package/src/upload/write-to-store.ts +211 -0
- package/src/utils/checksum.ts +61 -0
- package/src/utils/debounce.test.ts +126 -0
- package/src/utils/debounce.ts +89 -0
- package/src/utils/generate-id.ts +35 -0
- package/src/utils/md5.ts +475 -0
- package/src/utils/once.test.ts +83 -0
- package/src/utils/once.ts +63 -0
- package/src/utils/throttle.test.ts +101 -0
- package/src/utils/throttle.ts +29 -0
- package/tsconfig.json +20 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsdown.config.ts +25 -0
- package/vitest.config.ts +15 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Flow Engine implementation using Effect-based DAG execution.
|
|
3
|
+
*
|
|
4
|
+
* This module implements the Flow Engine, which executes directed acyclic graphs (DAGs)
|
|
5
|
+
* of processing nodes. It supports sequential execution with topological sorting,
|
|
6
|
+
* conditional node execution, retry logic, and pausable flows.
|
|
7
|
+
*
|
|
8
|
+
* @module flow
|
|
9
|
+
* @see {@link createFlowWithSchema} for creating new flows
|
|
10
|
+
* @see {@link Flow} for the flow type definition
|
|
11
|
+
*/
|
|
12
|
+
/** biome-ignore-all lint/suspicious/noExplicitAny: any is used to allow for dynamic types */
|
|
13
|
+
import { Effect } from "effect";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { UploadistaError } from "../errors";
|
|
16
|
+
import type { FlowEdge } from "./edge";
|
|
17
|
+
import type { FlowConfig, FlowNode, FlowNodeData } from "./types/flow-types";
|
|
18
|
+
/**
|
|
19
|
+
* Serialized flow data for storage and transport.
|
|
20
|
+
* Contains the minimal information needed to reconstruct a flow.
|
|
21
|
+
*
|
|
22
|
+
* @property id - Unique flow identifier
|
|
23
|
+
* @property name - Human-readable flow name
|
|
24
|
+
* @property nodes - Array of node data (without execution logic)
|
|
25
|
+
* @property edges - Connections between nodes defining data flow
|
|
26
|
+
*/
|
|
27
|
+
export type FlowData = {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
nodes: FlowNodeData[];
|
|
31
|
+
edges: FlowEdge[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Extracts serializable flow data from a Flow instance.
|
|
35
|
+
* Useful for storing flow definitions or sending them over the network.
|
|
36
|
+
*
|
|
37
|
+
* @template TRequirements - Effect requirements for the flow
|
|
38
|
+
* @param flow - Flow instance to extract data from
|
|
39
|
+
* @returns Serializable flow data without execution logic
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const flowData = getFlowData(myFlow);
|
|
44
|
+
* // Store in database or send to client
|
|
45
|
+
* await db.flows.save(flowData);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare const getFlowData: <TRequirements>(flow: Flow<any, any, TRequirements>) => FlowData;
|
|
49
|
+
/**
|
|
50
|
+
* Result of a flow execution - either completed or paused.
|
|
51
|
+
*
|
|
52
|
+
* @template TOutput - Type of the flow's output data
|
|
53
|
+
*
|
|
54
|
+
* @remarks
|
|
55
|
+
* Flows can pause when a node needs additional data (e.g., waiting for user input
|
|
56
|
+
* or external service). The execution state allows resuming from where it paused.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const result = await Effect.runPromise(flow.run({ inputs, storageId, jobId }));
|
|
61
|
+
*
|
|
62
|
+
* if (result.type === "completed") {
|
|
63
|
+
* console.log("Flow completed:", result.result);
|
|
64
|
+
* } else {
|
|
65
|
+
* console.log("Flow paused at node:", result.nodeId);
|
|
66
|
+
* // Can resume later with: flow.resume({ jobId, executionState: result.executionState, ... })
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export type FlowExecutionResult<TOutput> = {
|
|
71
|
+
type: "completed";
|
|
72
|
+
result: TOutput;
|
|
73
|
+
} | {
|
|
74
|
+
type: "paused";
|
|
75
|
+
nodeId: string;
|
|
76
|
+
executionState: {
|
|
77
|
+
executionOrder: string[];
|
|
78
|
+
currentIndex: number;
|
|
79
|
+
inputs: Record<string, unknown>;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* A Flow represents a directed acyclic graph (DAG) of processing nodes.
|
|
84
|
+
*
|
|
85
|
+
* Flows execute nodes in topological order, passing data between nodes through edges.
|
|
86
|
+
* They support conditional execution, retry logic, pausable nodes, and event emission.
|
|
87
|
+
*
|
|
88
|
+
* @template TFlowInputSchema - Zod schema defining the shape of input data
|
|
89
|
+
* @template TFlowOutputSchema - Zod schema defining the shape of output data
|
|
90
|
+
* @template TRequirements - Effect requirements (services/contexts) needed by nodes
|
|
91
|
+
*
|
|
92
|
+
* @property id - Unique flow identifier
|
|
93
|
+
* @property name - Human-readable flow name
|
|
94
|
+
* @property nodes - Array of nodes in the flow
|
|
95
|
+
* @property edges - Connections between nodes
|
|
96
|
+
* @property inputSchema - Zod schema for validating flow inputs
|
|
97
|
+
* @property outputSchema - Zod schema for validating flow outputs
|
|
98
|
+
* @property onEvent - Optional callback for flow execution events
|
|
99
|
+
* @property run - Executes the flow from the beginning
|
|
100
|
+
* @property resume - Resumes a paused flow execution
|
|
101
|
+
* @property validateTypes - Validates node type compatibility
|
|
102
|
+
* @property validateInputs - Validates input data against schema
|
|
103
|
+
* @property validateOutputs - Validates output data against schema
|
|
104
|
+
*
|
|
105
|
+
* @remarks
|
|
106
|
+
* Flows are created using {@link createFlowWithSchema}. The Effect-based design
|
|
107
|
+
* allows for composable error handling, resource management, and dependency injection.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const flow = yield* createFlowWithSchema({
|
|
112
|
+
* flowId: "image-pipeline",
|
|
113
|
+
* name: "Image Processing Pipeline",
|
|
114
|
+
* nodes: [inputNode, resizeNode, optimizeNode, storageNode],
|
|
115
|
+
* edges: [
|
|
116
|
+
* { source: "input", target: "resize" },
|
|
117
|
+
* { source: "resize", target: "optimize" },
|
|
118
|
+
* { source: "optimize", target: "storage" }
|
|
119
|
+
* ],
|
|
120
|
+
* inputSchema: z.object({ file: z.instanceof(File) }),
|
|
121
|
+
* outputSchema: uploadFileSchema
|
|
122
|
+
* });
|
|
123
|
+
*
|
|
124
|
+
* const result = yield* flow.run({
|
|
125
|
+
* inputs: { input: { file: myFile } },
|
|
126
|
+
* storageId: "storage-1",
|
|
127
|
+
* jobId: "job-123"
|
|
128
|
+
* });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export type Flow<TFlowInputSchema extends z.ZodSchema<any>, TFlowOutputSchema extends z.ZodSchema<any>, TRequirements> = {
|
|
132
|
+
id: string;
|
|
133
|
+
name: string;
|
|
134
|
+
nodes: FlowNode<any, any, UploadistaError>[];
|
|
135
|
+
edges: FlowEdge[];
|
|
136
|
+
inputSchema: TFlowInputSchema;
|
|
137
|
+
outputSchema: TFlowOutputSchema;
|
|
138
|
+
onEvent?: FlowConfig<TFlowInputSchema, TFlowOutputSchema, TRequirements>["onEvent"];
|
|
139
|
+
run: (args: {
|
|
140
|
+
inputs?: Record<string, z.infer<TFlowInputSchema>>;
|
|
141
|
+
storageId: string;
|
|
142
|
+
jobId: string;
|
|
143
|
+
clientId: string | null;
|
|
144
|
+
}) => Effect.Effect<FlowExecutionResult<Record<string, z.infer<TFlowOutputSchema>>>, UploadistaError, TRequirements>;
|
|
145
|
+
resume: (args: {
|
|
146
|
+
jobId: string;
|
|
147
|
+
storageId: string;
|
|
148
|
+
nodeResults: Record<string, unknown>;
|
|
149
|
+
executionState: {
|
|
150
|
+
executionOrder: string[];
|
|
151
|
+
currentIndex: number;
|
|
152
|
+
inputs: Record<string, z.infer<TFlowInputSchema>>;
|
|
153
|
+
};
|
|
154
|
+
clientId: string | null;
|
|
155
|
+
}) => Effect.Effect<FlowExecutionResult<Record<string, z.infer<TFlowOutputSchema>>>, UploadistaError, TRequirements>;
|
|
156
|
+
validateTypes: () => {
|
|
157
|
+
isValid: boolean;
|
|
158
|
+
errors: string[];
|
|
159
|
+
};
|
|
160
|
+
validateInputs: (inputs: unknown) => {
|
|
161
|
+
isValid: boolean;
|
|
162
|
+
errors: string[];
|
|
163
|
+
};
|
|
164
|
+
validateOutputs: (outputs: unknown) => {
|
|
165
|
+
isValid: boolean;
|
|
166
|
+
errors: string[];
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Creates a new Flow with Zod schema-based type validation.
|
|
171
|
+
*
|
|
172
|
+
* This is the primary way to create flows in Uploadista. It constructs a Flow
|
|
173
|
+
* instance that validates inputs/outputs, executes nodes in topological order,
|
|
174
|
+
* handles errors with retries, and emits events during execution.
|
|
175
|
+
*
|
|
176
|
+
* @template TFlowInputSchema - Zod schema for flow input validation
|
|
177
|
+
* @template TFlowOutputSchema - Zod schema for flow output validation
|
|
178
|
+
* @template TRequirements - Effect requirements/services needed by the flow
|
|
179
|
+
* @template TNodeError - Union of possible errors from nodes
|
|
180
|
+
* @template TNodeRequirements - Union of requirements from nodes
|
|
181
|
+
*
|
|
182
|
+
* @param config - Flow configuration object
|
|
183
|
+
* @param config.flowId - Unique identifier for the flow
|
|
184
|
+
* @param config.name - Human-readable flow name
|
|
185
|
+
* @param config.nodes - Array of nodes (can be plain nodes or Effects resolving to nodes)
|
|
186
|
+
* @param config.edges - Array of edges connecting nodes
|
|
187
|
+
* @param config.inputSchema - Zod schema for validating inputs
|
|
188
|
+
* @param config.outputSchema - Zod schema for validating outputs
|
|
189
|
+
* @param config.typeChecker - Optional custom type compatibility checker
|
|
190
|
+
* @param config.onEvent - Optional event callback for monitoring execution
|
|
191
|
+
*
|
|
192
|
+
* @returns Effect that resolves to a Flow instance
|
|
193
|
+
*
|
|
194
|
+
* @throws {UploadistaError} FLOW_CYCLE_ERROR if the graph contains cycles
|
|
195
|
+
* @throws {UploadistaError} FLOW_NODE_NOT_FOUND if a node is referenced but missing
|
|
196
|
+
* @throws {UploadistaError} FLOW_NODE_ERROR if node execution fails
|
|
197
|
+
* @throws {UploadistaError} FLOW_OUTPUT_VALIDATION_ERROR if outputs don't match schema
|
|
198
|
+
*
|
|
199
|
+
* @remarks
|
|
200
|
+
* - Nodes can be provided as plain objects or as Effects that resolve to nodes
|
|
201
|
+
* - The flow performs topological sorting to determine execution order
|
|
202
|
+
* - Conditional nodes are evaluated before execution
|
|
203
|
+
* - Nodes can specify retry configuration with exponential backoff
|
|
204
|
+
* - Pausable nodes can halt execution and resume later
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const flow = yield* createFlowWithSchema({
|
|
209
|
+
* flowId: "image-upload",
|
|
210
|
+
* name: "Image Upload with Processing",
|
|
211
|
+
* nodes: [
|
|
212
|
+
* inputNode,
|
|
213
|
+
* yield* createResizeNode({ width: 1920, height: 1080 }),
|
|
214
|
+
* optimizeNode,
|
|
215
|
+
* storageNode
|
|
216
|
+
* ],
|
|
217
|
+
* edges: [
|
|
218
|
+
* { source: "input", target: "resize" },
|
|
219
|
+
* { source: "resize", target: "optimize" },
|
|
220
|
+
* { source: "optimize", target: "storage" }
|
|
221
|
+
* ],
|
|
222
|
+
* inputSchema: z.object({
|
|
223
|
+
* file: z.instanceof(File),
|
|
224
|
+
* metadata: z.record(z.string(), z.any()).optional()
|
|
225
|
+
* }),
|
|
226
|
+
* outputSchema: uploadFileSchema,
|
|
227
|
+
* onEvent: (event) => Effect.gen(function* () {
|
|
228
|
+
* console.log("Flow event:", event);
|
|
229
|
+
* return { eventId: event.jobId };
|
|
230
|
+
* })
|
|
231
|
+
* });
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* @see {@link Flow} for the returned flow type
|
|
235
|
+
* @see {@link FlowConfig} for configuration options
|
|
236
|
+
*/
|
|
237
|
+
export declare function createFlowWithSchema<TFlowInputSchema extends z.ZodSchema<any>, TFlowOutputSchema extends z.ZodSchema<any>, TRequirements = never, TNodeError = never, TNodeRequirements = never>(config: FlowConfig<TFlowInputSchema, TFlowOutputSchema, TNodeError, TNodeRequirements>): Effect.Effect<Flow<TFlowInputSchema, TFlowOutputSchema, TRequirements>, TNodeError, TNodeRequirements>;
|
|
238
|
+
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/flow/flow.ts"],"names":[],"mappings":"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"}
|