@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,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating image optimization parameters.
|
|
4
|
+
* Defines the structure and validation rules for image optimization requests.
|
|
5
|
+
*/
|
|
6
|
+
export declare const optimizeParamsSchema: z.ZodObject<{
|
|
7
|
+
quality: z.ZodNumber;
|
|
8
|
+
format: z.ZodEnum<{
|
|
9
|
+
avif: "avif";
|
|
10
|
+
jpeg: "jpeg";
|
|
11
|
+
png: "png";
|
|
12
|
+
webp: "webp";
|
|
13
|
+
}>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
/**
|
|
16
|
+
* Parameters for the image optimization node.
|
|
17
|
+
* Controls quality and format settings for image optimization.
|
|
18
|
+
*/
|
|
19
|
+
export type OptimizeParams = z.infer<typeof optimizeParamsSchema>;
|
|
20
|
+
//# sourceMappingURL=optimize-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/optimize-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating image optimization parameters.
|
|
4
|
+
* Defines the structure and validation rules for image optimization requests.
|
|
5
|
+
*/
|
|
6
|
+
export const optimizeParamsSchema = z.object({
|
|
7
|
+
/** Image quality as a percentage (0-100) */
|
|
8
|
+
quality: z.number().min(0).max(100),
|
|
9
|
+
/** Output image format */
|
|
10
|
+
format: z.enum(["jpeg", "webp", "png", "avif"]),
|
|
11
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating remove background node parameters.
|
|
4
|
+
* Defines the structure and validation rules for background removal requests.
|
|
5
|
+
*/
|
|
6
|
+
export declare const removeBackgroundParamsSchema: z.ZodObject<{
|
|
7
|
+
serviceType: z.ZodOptional<z.ZodEnum<{
|
|
8
|
+
replicate: "replicate";
|
|
9
|
+
}>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for the remove background node.
|
|
13
|
+
* Controls which AI service to use for background removal processing.
|
|
14
|
+
*/
|
|
15
|
+
export type RemoveBackgroundParams = z.infer<typeof removeBackgroundParamsSchema>;
|
|
16
|
+
//# sourceMappingURL=remove-background-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-background-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/remove-background-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;iBAGvC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating remove background node parameters.
|
|
4
|
+
* Defines the structure and validation rules for background removal requests.
|
|
5
|
+
*/
|
|
6
|
+
export const removeBackgroundParamsSchema = z.object({
|
|
7
|
+
/** Optional service type to use for background removal (currently supports "replicate") */
|
|
8
|
+
serviceType: z.enum(["replicate"]).optional(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating image resize parameters.
|
|
4
|
+
* Defines the structure and validation rules for image resizing requests.
|
|
5
|
+
* Requires at least one dimension (width or height) to be specified.
|
|
6
|
+
*/
|
|
7
|
+
export declare const resizeParamsSchema: z.ZodObject<{
|
|
8
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
fit: z.ZodEnum<{
|
|
11
|
+
fill: "fill";
|
|
12
|
+
contain: "contain";
|
|
13
|
+
cover: "cover";
|
|
14
|
+
}>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
/**
|
|
17
|
+
* Parameters for the image resize node.
|
|
18
|
+
* Controls the target dimensions and fitting behavior for image resizing.
|
|
19
|
+
*/
|
|
20
|
+
export type ResizeParams = z.infer<typeof resizeParamsSchema>;
|
|
21
|
+
//# sourceMappingURL=resize-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resize-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/resize-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;iBAY5B,CAAC;AAEJ;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating image resize parameters.
|
|
4
|
+
* Defines the structure and validation rules for image resizing requests.
|
|
5
|
+
* Requires at least one dimension (width or height) to be specified.
|
|
6
|
+
*/
|
|
7
|
+
export const resizeParamsSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
/** Target width in pixels (optional) */
|
|
10
|
+
width: z.number().positive().optional(),
|
|
11
|
+
/** Target height in pixels (optional) */
|
|
12
|
+
height: z.number().positive().optional(),
|
|
13
|
+
/** How the image should fit within the specified dimensions */
|
|
14
|
+
fit: z.enum(["contain", "cover", "fill"]),
|
|
15
|
+
})
|
|
16
|
+
.refine((data) => data.width || data.height, "Either width or height must be specified for resize");
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { UploadistaError } from "@uploadista/core/errors";
|
|
2
|
+
import { Context, type Effect } from "effect";
|
|
3
|
+
import type { UploadFile } from "@/types";
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for creating a ZIP archive.
|
|
6
|
+
*/
|
|
7
|
+
export type ZipParams = {
|
|
8
|
+
/** Name of the ZIP file to create */
|
|
9
|
+
zipName: string;
|
|
10
|
+
/** Whether to include file metadata in the ZIP archive */
|
|
11
|
+
includeMetadata: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Input data structure for ZIP operations.
|
|
15
|
+
* Represents a single file to be included in the ZIP archive.
|
|
16
|
+
*/
|
|
17
|
+
export type ZipInput = {
|
|
18
|
+
/** Unique identifier for the file */
|
|
19
|
+
id: string;
|
|
20
|
+
/** Binary data of the file */
|
|
21
|
+
data: Uint8Array;
|
|
22
|
+
/** File metadata including name, size, type, etc. */
|
|
23
|
+
metadata: UploadFile["metadata"];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Shape definition for the ZIP Plugin interface.
|
|
27
|
+
* Defines the contract that all ZIP implementations must follow.
|
|
28
|
+
*/
|
|
29
|
+
export type ZipPluginShape = {
|
|
30
|
+
/**
|
|
31
|
+
* Creates a ZIP archive from multiple input files.
|
|
32
|
+
*
|
|
33
|
+
* @param inputs - Array of files to include in the ZIP archive
|
|
34
|
+
* @param options - Configuration options for the ZIP creation
|
|
35
|
+
* @returns An Effect that resolves to the ZIP file as a Uint8Array
|
|
36
|
+
* @throws {UploadistaError} When ZIP creation fails
|
|
37
|
+
*/
|
|
38
|
+
zip: (inputs: ZipInput[], options: ZipParams) => Effect.Effect<Uint8Array, UploadistaError>;
|
|
39
|
+
};
|
|
40
|
+
declare const ZipPlugin_base: Context.TagClass<ZipPlugin, "ZipPlugin", ZipPluginShape>;
|
|
41
|
+
/**
|
|
42
|
+
* Context tag for the ZIP Plugin.
|
|
43
|
+
*
|
|
44
|
+
* This tag provides a type-safe way to access ZIP functionality
|
|
45
|
+
* throughout the application using Effect's dependency injection system.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* import { ZipPlugin } from "@uploadista/core/flow/plugins";
|
|
50
|
+
*
|
|
51
|
+
* // In your flow node
|
|
52
|
+
* const program = Effect.gen(function* () {
|
|
53
|
+
* const zipPlugin = yield* ZipPlugin;
|
|
54
|
+
* const zipData = yield* zipPlugin.zip(files, { zipName: "archive.zip", includeMetadata: true });
|
|
55
|
+
* return zipData;
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class ZipPlugin extends ZipPlugin_base {
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=zip-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-plugin.d.ts","sourceRoot":"","sources":["../../../src/flow/plugins/zip-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;OAOG;IACH,GAAG,EAAE,CACH,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,SAAS,KACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;CAEjD,CAAC;;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAU,SAAQ,cAG5B;CAAG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
/**
|
|
3
|
+
* Context tag for the ZIP Plugin.
|
|
4
|
+
*
|
|
5
|
+
* This tag provides a type-safe way to access ZIP functionality
|
|
6
|
+
* throughout the application using Effect's dependency injection system.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ZipPlugin } from "@uploadista/core/flow/plugins";
|
|
11
|
+
*
|
|
12
|
+
* // In your flow node
|
|
13
|
+
* const program = Effect.gen(function* () {
|
|
14
|
+
* const zipPlugin = yield* ZipPlugin;
|
|
15
|
+
* const zipData = yield* zipPlugin.zip(files, { zipName: "archive.zip", includeMetadata: true });
|
|
16
|
+
* return zipData;
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class ZipPlugin extends Context.Tag("ZipPlugin")() {
|
|
21
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* biome-ignore-all lint/suspicious/noExplicitAny: broadly-typed generics require runtime schema placeholders
|
|
3
|
+
*/
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import type { UploadistaError as CoreUploadistaError } from "../errors";
|
|
7
|
+
import { UploadistaError } from "../errors";
|
|
8
|
+
import type { UploadServer } from "../upload";
|
|
9
|
+
import type { FlowEvent } from "./event";
|
|
10
|
+
import type { Flow, FlowExecutionResult } from "./flow";
|
|
11
|
+
import { NodeType } from "./node";
|
|
12
|
+
import type { FlowNode, TypeCompatibilityChecker } from "./types/flow-types";
|
|
13
|
+
export type NodeDefinition<TNodeError = never, TNodeRequirements = never> = FlowNode<any, any, CoreUploadistaError> | Effect.Effect<FlowNode<any, any, CoreUploadistaError>, TNodeError, TNodeRequirements>;
|
|
14
|
+
export type NodeDefinitionsRecord = Record<string, NodeDefinition<any, any>>;
|
|
15
|
+
type NodeDefinitionError<T> = T extends Effect.Effect<FlowNode<any, any, CoreUploadistaError>, infer TError, any> ? TError : never;
|
|
16
|
+
type NodeDefinitionRequirements<T> = T extends Effect.Effect<FlowNode<any, any, CoreUploadistaError>, any, infer TRequirements> ? TRequirements : never;
|
|
17
|
+
type NodesErrorUnion<TNodes extends NodeDefinitionsRecord> = {
|
|
18
|
+
[K in keyof TNodes]: NodeDefinitionError<TNodes[K]>;
|
|
19
|
+
}[keyof TNodes];
|
|
20
|
+
type NodesRequirementsUnion<TNodes extends NodeDefinitionsRecord> = {
|
|
21
|
+
[K in keyof TNodes]: NodeDefinitionRequirements<TNodes[K]>;
|
|
22
|
+
}[keyof TNodes];
|
|
23
|
+
export type FlowRequirements<TNodes extends NodeDefinitionsRecord> = NodesRequirementsUnion<TNodes>;
|
|
24
|
+
export type FlowPluginRequirements<TNodes extends NodeDefinitionsRecord> = Exclude<FlowRequirements<TNodes>, UploadServer>;
|
|
25
|
+
type InferNode<T> = T extends FlowNode<any, any, CoreUploadistaError> ? T : T extends Effect.Effect<infer R, any, any> ? R extends FlowNode<any, any, CoreUploadistaError> ? R : never : never;
|
|
26
|
+
type ExtractKeysByNodeType<TNodes extends NodeDefinitionsRecord, TType extends NodeType> = {
|
|
27
|
+
[K in keyof TNodes]: InferNode<TNodes[K]>["type"] extends TType ? K : never;
|
|
28
|
+
}[keyof TNodes];
|
|
29
|
+
type SchemaInfer<T> = T extends z.ZodTypeAny ? z.infer<T> : never;
|
|
30
|
+
export type FlowInputMap<TNodes extends NodeDefinitionsRecord> = {
|
|
31
|
+
[K in Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>]: SchemaInfer<InferNode<TNodes[K]>["inputSchema"]>;
|
|
32
|
+
};
|
|
33
|
+
export type FlowOutputMap<TNodes extends NodeDefinitionsRecord> = {
|
|
34
|
+
[K in Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>]: SchemaInfer<InferNode<TNodes[K]>["outputSchema"]>;
|
|
35
|
+
};
|
|
36
|
+
type FlowInputUnion<TNodes extends NodeDefinitionsRecord> = {
|
|
37
|
+
[K in Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>]: SchemaInfer<InferNode<TNodes[K]>["inputSchema"]>;
|
|
38
|
+
}[Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>];
|
|
39
|
+
type FlowOutputUnion<TNodes extends NodeDefinitionsRecord> = {
|
|
40
|
+
[K in Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>]: SchemaInfer<InferNode<TNodes[K]>["outputSchema"]>;
|
|
41
|
+
}[Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>];
|
|
42
|
+
type NodeKey<TNodes extends NodeDefinitionsRecord> = Extract<keyof TNodes, string>;
|
|
43
|
+
export type TypedFlowEdge<TNodes extends NodeDefinitionsRecord> = {
|
|
44
|
+
source: NodeKey<TNodes>;
|
|
45
|
+
target: NodeKey<TNodes>;
|
|
46
|
+
sourcePort?: string;
|
|
47
|
+
targetPort?: string;
|
|
48
|
+
};
|
|
49
|
+
export type TypedFlowConfig<TNodes extends NodeDefinitionsRecord> = {
|
|
50
|
+
flowId: string;
|
|
51
|
+
name: string;
|
|
52
|
+
nodes: TNodes;
|
|
53
|
+
edges: Array<TypedFlowEdge<TNodes>>;
|
|
54
|
+
typeChecker?: TypeCompatibilityChecker;
|
|
55
|
+
onEvent?: (event: FlowEvent) => Effect.Effect<{
|
|
56
|
+
eventId: string | null;
|
|
57
|
+
}, CoreUploadistaError>;
|
|
58
|
+
parallelExecution?: {
|
|
59
|
+
enabled?: boolean;
|
|
60
|
+
maxConcurrency?: number;
|
|
61
|
+
};
|
|
62
|
+
inputSchema?: z.ZodTypeAny;
|
|
63
|
+
outputSchema?: z.ZodTypeAny;
|
|
64
|
+
};
|
|
65
|
+
declare const typedFlowInputsSymbol: unique symbol;
|
|
66
|
+
declare const typedFlowOutputsSymbol: unique symbol;
|
|
67
|
+
declare const typedFlowPluginsSymbol: unique symbol;
|
|
68
|
+
export type TypedFlow<TNodes extends NodeDefinitionsRecord, TInputSchema extends z.ZodTypeAny, TOutputSchema extends z.ZodTypeAny> = Flow<TInputSchema, TOutputSchema, FlowRequirements<TNodes>> & {
|
|
69
|
+
run: (args: {
|
|
70
|
+
inputs?: Partial<FlowInputMap<TNodes>>;
|
|
71
|
+
storageId: string;
|
|
72
|
+
jobId: string;
|
|
73
|
+
}) => Effect.Effect<FlowExecutionResult<FlowOutputMap<TNodes>>, CoreUploadistaError, FlowRequirements<TNodes>>;
|
|
74
|
+
resume: (args: {
|
|
75
|
+
jobId: string;
|
|
76
|
+
storageId: string;
|
|
77
|
+
nodeResults: Record<string, unknown>;
|
|
78
|
+
executionState: {
|
|
79
|
+
executionOrder: string[];
|
|
80
|
+
currentIndex: number;
|
|
81
|
+
inputs: Partial<FlowInputMap<TNodes>>;
|
|
82
|
+
};
|
|
83
|
+
}) => Effect.Effect<FlowExecutionResult<FlowOutputMap<TNodes>>, CoreUploadistaError, FlowRequirements<TNodes>>;
|
|
84
|
+
readonly [typedFlowInputsSymbol]?: FlowInputMap<TNodes>;
|
|
85
|
+
readonly [typedFlowOutputsSymbol]?: FlowOutputMap<TNodes>;
|
|
86
|
+
readonly [typedFlowPluginsSymbol]?: FlowPluginRequirements<TNodes>;
|
|
87
|
+
};
|
|
88
|
+
export declare function createFlow<TNodes extends NodeDefinitionsRecord>(config: TypedFlowConfig<TNodes>): Effect.Effect<TypedFlow<TNodes, z.ZodType<FlowInputUnion<TNodes>>, z.ZodType<FlowOutputUnion<TNodes>>>, NodesErrorUnion<TNodes> | UploadistaError, FlowRequirements<TNodes>>;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=typed-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-flow.d.ts","sourceRoot":"","sources":["../../src/flow/typed-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* biome-ignore-all lint/suspicious/noExplicitAny: broadly-typed generics require runtime schema placeholders
|
|
3
|
+
*/
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { UploadistaError } from "../errors";
|
|
7
|
+
import { createFlowWithSchema } from "./flow";
|
|
8
|
+
import { NodeType } from "./node";
|
|
9
|
+
const buildUnionSchema = (schemas, fallback) => {
|
|
10
|
+
if (schemas.length === 0) {
|
|
11
|
+
return fallback;
|
|
12
|
+
}
|
|
13
|
+
const [first, ...rest] = schemas;
|
|
14
|
+
return rest.reduce((acc, schema) => z.union([acc, schema]), first);
|
|
15
|
+
};
|
|
16
|
+
export function createFlow(config) {
|
|
17
|
+
return Effect.gen(function* () {
|
|
18
|
+
const nodeEntries = Object.entries(config.nodes);
|
|
19
|
+
const resolveNode = (node) => Effect.isEffect(node)
|
|
20
|
+
? node
|
|
21
|
+
: Effect.succeed(node);
|
|
22
|
+
const resolvedEntries = yield* Effect.forEach(nodeEntries, ([key, node]) => Effect.flatMap(resolveNode(node), (resolvedNode) => {
|
|
23
|
+
if (resolvedNode.id !== key) {
|
|
24
|
+
return Effect.fail(UploadistaError.fromCode("FLOW_NODE_ERROR", {
|
|
25
|
+
cause: new Error(`Node key ${key} does not match node id ${resolvedNode.id}`),
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
return Effect.succeed([key, resolvedNode]);
|
|
29
|
+
}));
|
|
30
|
+
const resolvedRecord = Object.fromEntries(resolvedEntries);
|
|
31
|
+
const resolvedNodes = resolvedEntries.map(([, node]) => node);
|
|
32
|
+
const inputSchemas = resolvedEntries
|
|
33
|
+
.filter(([, node]) => node.type === NodeType.input)
|
|
34
|
+
.map(([, node]) => node.inputSchema);
|
|
35
|
+
const outputSchemas = resolvedEntries
|
|
36
|
+
.filter(([, node]) => node.type === NodeType.output)
|
|
37
|
+
.map(([, node]) => node.outputSchema);
|
|
38
|
+
const inputSchema = config.inputSchema ?? buildUnionSchema(inputSchemas, z.unknown());
|
|
39
|
+
const outputSchema = config.outputSchema ?? buildUnionSchema(outputSchemas, z.unknown());
|
|
40
|
+
const flowEdges = config.edges.map((edge) => ({
|
|
41
|
+
source: resolvedRecord[edge.source]?.id ?? edge.source,
|
|
42
|
+
target: resolvedRecord[edge.target]?.id ?? edge.target,
|
|
43
|
+
sourcePort: edge.sourcePort,
|
|
44
|
+
targetPort: edge.targetPort,
|
|
45
|
+
}));
|
|
46
|
+
const flow = yield* createFlowWithSchema({
|
|
47
|
+
flowId: config.flowId,
|
|
48
|
+
name: config.name,
|
|
49
|
+
nodes: resolvedNodes,
|
|
50
|
+
edges: flowEdges,
|
|
51
|
+
inputSchema,
|
|
52
|
+
outputSchema,
|
|
53
|
+
typeChecker: config.typeChecker,
|
|
54
|
+
onEvent: config.onEvent,
|
|
55
|
+
parallelExecution: config.parallelExecution,
|
|
56
|
+
});
|
|
57
|
+
return flow;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional execution rules for flow nodes.
|
|
3
|
+
*
|
|
4
|
+
* Conditions allow nodes to execute conditionally based on file properties or metadata.
|
|
5
|
+
* They are evaluated before node execution and can skip nodes that don't match.
|
|
6
|
+
*
|
|
7
|
+
* @module flow/types/flow-file
|
|
8
|
+
* @see {@link FlowNode} for how conditions are used in nodes
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Only process images larger than 1MB
|
|
13
|
+
* const condition: FlowCondition = {
|
|
14
|
+
* field: "size",
|
|
15
|
+
* operator: "greaterThan",
|
|
16
|
+
* value: 1024 * 1024
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* // Only process JPEG images
|
|
20
|
+
* const jpegCondition: FlowCondition = {
|
|
21
|
+
* field: "mimeType",
|
|
22
|
+
* operator: "startsWith",
|
|
23
|
+
* value: "image/jpeg"
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Represents a conditional rule for node execution.
|
|
29
|
+
*
|
|
30
|
+
* @property field - The file property to check
|
|
31
|
+
* @property operator - The comparison operator to apply
|
|
32
|
+
* @property value - The value to compare against
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* - Fields can check file metadata (mimeType, size) or image properties (width, height)
|
|
36
|
+
* - String operators (contains, startsWith) work with string values
|
|
37
|
+
* - Numeric operators (greaterThan, lessThan) work with numeric values
|
|
38
|
+
* - The extension field checks the file extension without the dot
|
|
39
|
+
*/
|
|
40
|
+
export type FlowCondition = {
|
|
41
|
+
field: "mimeType" | "size" | "width" | "height" | "extension";
|
|
42
|
+
operator: "equals" | "notEquals" | "greaterThan" | "lessThan" | "contains" | "startsWith";
|
|
43
|
+
value: string | number;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=flow-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-file.d.ts","sourceRoot":"","sources":["../../../src/flow/types/flow-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC9D,QAAQ,EACJ,QAAQ,GACR,WAAW,GACX,aAAa,GACb,UAAU,GACV,UAAU,GACV,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional execution rules for flow nodes.
|
|
3
|
+
*
|
|
4
|
+
* Conditions allow nodes to execute conditionally based on file properties or metadata.
|
|
5
|
+
* They are evaluated before node execution and can skip nodes that don't match.
|
|
6
|
+
*
|
|
7
|
+
* @module flow/types/flow-file
|
|
8
|
+
* @see {@link FlowNode} for how conditions are used in nodes
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Only process images larger than 1MB
|
|
13
|
+
* const condition: FlowCondition = {
|
|
14
|
+
* field: "size",
|
|
15
|
+
* operator: "greaterThan",
|
|
16
|
+
* value: 1024 * 1024
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* // Only process JPEG images
|
|
20
|
+
* const jpegCondition: FlowCondition = {
|
|
21
|
+
* field: "mimeType",
|
|
22
|
+
* operator: "startsWith",
|
|
23
|
+
* value: "image/jpeg"
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow job tracking and state management types.
|
|
3
|
+
*
|
|
4
|
+
* A FlowJob represents a single execution instance of a flow, tracking its progress,
|
|
5
|
+
* node results, and execution state. Jobs can be paused and resumed, making them
|
|
6
|
+
* suitable for long-running or interactive flows.
|
|
7
|
+
*
|
|
8
|
+
* @module flow/types/flow-job
|
|
9
|
+
* @see {@link FlowServer} for job management operations
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Status of an individual node within a flow job.
|
|
13
|
+
*
|
|
14
|
+
* Node tasks follow this lifecycle:
|
|
15
|
+
* started → pending → running → (completed | paused | failed)
|
|
16
|
+
*/
|
|
17
|
+
export type FlowJobTaskStatus = "started" | "pending" | "running" | "completed" | "paused" | "failed";
|
|
18
|
+
/**
|
|
19
|
+
* Represents a single node's execution within a flow job.
|
|
20
|
+
*
|
|
21
|
+
* Tasks track individual node execution, storing results, errors, and retry information.
|
|
22
|
+
* They allow monitoring of which nodes have completed and accessing intermediate results.
|
|
23
|
+
*
|
|
24
|
+
* @property nodeId - Unique identifier of the node this task represents
|
|
25
|
+
* @property status - Current execution status of the node
|
|
26
|
+
* @property result - Output data from the node (if completed successfully)
|
|
27
|
+
* @property error - Error message if the node failed
|
|
28
|
+
* @property retryCount - Number of retry attempts made before success or final failure
|
|
29
|
+
* @property createdAt - When the task was created
|
|
30
|
+
* @property updatedAt - When the task was last updated
|
|
31
|
+
*/
|
|
32
|
+
export type FlowJobTask = {
|
|
33
|
+
nodeId: string;
|
|
34
|
+
status: FlowJobTaskStatus;
|
|
35
|
+
result?: unknown;
|
|
36
|
+
error?: string;
|
|
37
|
+
retryCount?: number;
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
updatedAt: Date;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Represents a flow execution job with full state tracking.
|
|
43
|
+
*
|
|
44
|
+
* Jobs are created when a flow is executed and track the entire execution lifecycle.
|
|
45
|
+
* They store node results, handle paused states, and manage cleanup of intermediate files.
|
|
46
|
+
*
|
|
47
|
+
* @property id - Unique job identifier (UUID)
|
|
48
|
+
* @property flowId - The flow being executed
|
|
49
|
+
* @property storageId - Storage location for file outputs
|
|
50
|
+
* @property clientId - Client that initiated the job (for authorization)
|
|
51
|
+
* @property status - Overall job status
|
|
52
|
+
* @property createdAt - When the job was created
|
|
53
|
+
* @property updatedAt - When the job was last updated
|
|
54
|
+
* @property tasks - Array of node execution tasks
|
|
55
|
+
* @property error - Error message if the job failed
|
|
56
|
+
* @property endedAt - When the job completed or failed
|
|
57
|
+
* @property result - Final output from the flow (only set when completed)
|
|
58
|
+
* @property pausedAt - Node ID where execution is paused (if applicable)
|
|
59
|
+
* @property executionState - State needed to resume a paused flow
|
|
60
|
+
* @property intermediateFiles - File IDs to cleanup after completion
|
|
61
|
+
*
|
|
62
|
+
* @remarks
|
|
63
|
+
* - Jobs can be paused at nodes that return `{ type: "waiting" }`
|
|
64
|
+
* - Paused jobs store execution state and can be resumed with new data
|
|
65
|
+
* - Intermediate files from non-output nodes are automatically cleaned up
|
|
66
|
+
* - Tasks are updated as nodes progress through their lifecycle
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* // Create and monitor a job
|
|
71
|
+
* const job = yield* flowServer.runFlow({
|
|
72
|
+
* flowId: "image-pipeline",
|
|
73
|
+
* storageId: "storage-1",
|
|
74
|
+
* inputs: { input: myFile }
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* // Poll for status
|
|
78
|
+
* const status = yield* flowServer.getJobStatus(job.id);
|
|
79
|
+
* if (status.status === "completed") {
|
|
80
|
+
* console.log("Final result:", status.result);
|
|
81
|
+
* } else if (status.status === "paused") {
|
|
82
|
+
* // Resume with additional data
|
|
83
|
+
* yield* flowServer.continueFlow({
|
|
84
|
+
* jobId: job.id,
|
|
85
|
+
* nodeId: status.pausedAt,
|
|
86
|
+
* newData: additionalChunk
|
|
87
|
+
* });
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export type FlowJob = {
|
|
92
|
+
id: string;
|
|
93
|
+
flowId: string;
|
|
94
|
+
storageId: string;
|
|
95
|
+
clientId: string | null;
|
|
96
|
+
status: FlowJobStatus;
|
|
97
|
+
createdAt: Date;
|
|
98
|
+
updatedAt: Date;
|
|
99
|
+
tasks: FlowJobTask[];
|
|
100
|
+
error?: string;
|
|
101
|
+
endedAt?: Date;
|
|
102
|
+
result?: unknown;
|
|
103
|
+
pausedAt?: string;
|
|
104
|
+
executionState?: {
|
|
105
|
+
executionOrder: string[];
|
|
106
|
+
currentIndex: number;
|
|
107
|
+
inputs: Record<string, unknown>;
|
|
108
|
+
};
|
|
109
|
+
intermediateFiles?: string[];
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Overall status of a flow job.
|
|
113
|
+
*
|
|
114
|
+
* Job lifecycle: started → running → (completed | failed)
|
|
115
|
+
* Or with pauses: started → running → paused → running → (completed | failed)
|
|
116
|
+
*/
|
|
117
|
+
export type FlowJobStatus = "pending" | "running" | "completed" | "failed" | "started" | "paused";
|
|
118
|
+
//# sourceMappingURL=flow-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-job.d.ts","sourceRoot":"","sources":["../../../src/flow/types/flow-job.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,QAAQ,CAAC;AAEb;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IAEF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow job tracking and state management types.
|
|
3
|
+
*
|
|
4
|
+
* A FlowJob represents a single execution instance of a flow, tracking its progress,
|
|
5
|
+
* node results, and execution state. Jobs can be paused and resumed, making them
|
|
6
|
+
* suitable for long-running or interactive flows.
|
|
7
|
+
*
|
|
8
|
+
* @module flow/types/flow-job
|
|
9
|
+
* @see {@link FlowServer} for job management operations
|
|
10
|
+
*/
|
|
11
|
+
export {};
|