@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.
Files changed (359) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-check.log +231 -0
  3. package/.turbo/turbo-format.log +5 -0
  4. package/LICENSE +21 -0
  5. package/README.md +1120 -0
  6. package/dist/chunk-CUT6urMc.cjs +1 -0
  7. package/dist/debounce-C2SeqcxD.js +2 -0
  8. package/dist/debounce-C2SeqcxD.js.map +1 -0
  9. package/dist/debounce-LZK7yS7Z.cjs +1 -0
  10. package/dist/errors/index.cjs +1 -0
  11. package/dist/errors/index.d.cts +3 -0
  12. package/dist/errors/index.d.ts +3 -0
  13. package/dist/errors/index.d.ts.map +1 -0
  14. package/dist/errors/index.js +2 -0
  15. package/dist/errors/uploadista-error.d.ts +209 -0
  16. package/dist/errors/uploadista-error.d.ts.map +1 -0
  17. package/dist/errors/uploadista-error.js +322 -0
  18. package/dist/errors-8i_aMxOE.js +1 -0
  19. package/dist/errors-CRm1FHHT.cjs +0 -0
  20. package/dist/flow/edge.d.ts +47 -0
  21. package/dist/flow/edge.d.ts.map +1 -0
  22. package/dist/flow/edge.js +40 -0
  23. package/dist/flow/event.d.ts +206 -0
  24. package/dist/flow/event.d.ts.map +1 -0
  25. package/dist/flow/event.js +53 -0
  26. package/dist/flow/flow-server.d.ts +223 -0
  27. package/dist/flow/flow-server.d.ts.map +1 -0
  28. package/dist/flow/flow-server.js +614 -0
  29. package/dist/flow/flow.d.ts +238 -0
  30. package/dist/flow/flow.d.ts.map +1 -0
  31. package/dist/flow/flow.js +629 -0
  32. package/dist/flow/index.cjs +1 -0
  33. package/dist/flow/index.d.cts +6 -0
  34. package/dist/flow/index.d.ts +24 -0
  35. package/dist/flow/index.d.ts.map +1 -0
  36. package/dist/flow/index.js +24 -0
  37. package/dist/flow/node.d.ts +136 -0
  38. package/dist/flow/node.d.ts.map +1 -0
  39. package/dist/flow/node.js +153 -0
  40. package/dist/flow/nodes/index.d.ts +8 -0
  41. package/dist/flow/nodes/index.d.ts.map +1 -0
  42. package/dist/flow/nodes/index.js +7 -0
  43. package/dist/flow/nodes/input-node.d.ts +78 -0
  44. package/dist/flow/nodes/input-node.d.ts.map +1 -0
  45. package/dist/flow/nodes/input-node.js +233 -0
  46. package/dist/flow/nodes/storage-node.d.ts +67 -0
  47. package/dist/flow/nodes/storage-node.d.ts.map +1 -0
  48. package/dist/flow/nodes/storage-node.js +94 -0
  49. package/dist/flow/nodes/streaming-input-node.d.ts +69 -0
  50. package/dist/flow/nodes/streaming-input-node.d.ts.map +1 -0
  51. package/dist/flow/nodes/streaming-input-node.js +156 -0
  52. package/dist/flow/nodes/transform-node.d.ts +85 -0
  53. package/dist/flow/nodes/transform-node.d.ts.map +1 -0
  54. package/dist/flow/nodes/transform-node.js +107 -0
  55. package/dist/flow/parallel-scheduler.d.ts +175 -0
  56. package/dist/flow/parallel-scheduler.d.ts.map +1 -0
  57. package/dist/flow/parallel-scheduler.js +193 -0
  58. package/dist/flow/plugins/credential-provider.d.ts +47 -0
  59. package/dist/flow/plugins/credential-provider.d.ts.map +1 -0
  60. package/dist/flow/plugins/credential-provider.js +24 -0
  61. package/dist/flow/plugins/image-ai-plugin.d.ts +61 -0
  62. package/dist/flow/plugins/image-ai-plugin.d.ts.map +1 -0
  63. package/dist/flow/plugins/image-ai-plugin.js +21 -0
  64. package/dist/flow/plugins/image-plugin.d.ts +52 -0
  65. package/dist/flow/plugins/image-plugin.d.ts.map +1 -0
  66. package/dist/flow/plugins/image-plugin.js +22 -0
  67. package/dist/flow/plugins/types/describe-image-node.d.ts +16 -0
  68. package/dist/flow/plugins/types/describe-image-node.d.ts.map +1 -0
  69. package/dist/flow/plugins/types/describe-image-node.js +9 -0
  70. package/dist/flow/plugins/types/index.d.ts +9 -0
  71. package/dist/flow/plugins/types/index.d.ts.map +1 -0
  72. package/dist/flow/plugins/types/index.js +8 -0
  73. package/dist/flow/plugins/types/optimize-node.d.ts +20 -0
  74. package/dist/flow/plugins/types/optimize-node.d.ts.map +1 -0
  75. package/dist/flow/plugins/types/optimize-node.js +11 -0
  76. package/dist/flow/plugins/types/remove-background-node.d.ts +16 -0
  77. package/dist/flow/plugins/types/remove-background-node.d.ts.map +1 -0
  78. package/dist/flow/plugins/types/remove-background-node.js +9 -0
  79. package/dist/flow/plugins/types/resize-node.d.ts +21 -0
  80. package/dist/flow/plugins/types/resize-node.d.ts.map +1 -0
  81. package/dist/flow/plugins/types/resize-node.js +16 -0
  82. package/dist/flow/plugins/zip-plugin.d.ts +62 -0
  83. package/dist/flow/plugins/zip-plugin.d.ts.map +1 -0
  84. package/dist/flow/plugins/zip-plugin.js +21 -0
  85. package/dist/flow/typed-flow.d.ts +90 -0
  86. package/dist/flow/typed-flow.d.ts.map +1 -0
  87. package/dist/flow/typed-flow.js +59 -0
  88. package/dist/flow/types/flow-file.d.ts +45 -0
  89. package/dist/flow/types/flow-file.d.ts.map +1 -0
  90. package/dist/flow/types/flow-file.js +27 -0
  91. package/dist/flow/types/flow-job.d.ts +118 -0
  92. package/dist/flow/types/flow-job.d.ts.map +1 -0
  93. package/dist/flow/types/flow-job.js +11 -0
  94. package/dist/flow/types/flow-types.d.ts +321 -0
  95. package/dist/flow/types/flow-types.d.ts.map +1 -0
  96. package/dist/flow/types/flow-types.js +52 -0
  97. package/dist/flow/types/index.d.ts +4 -0
  98. package/dist/flow/types/index.d.ts.map +1 -0
  99. package/dist/flow/types/index.js +3 -0
  100. package/dist/flow/types/run-args.d.ts +38 -0
  101. package/dist/flow/types/run-args.d.ts.map +1 -0
  102. package/dist/flow/types/run-args.js +30 -0
  103. package/dist/flow/types/type-validator.d.ts +26 -0
  104. package/dist/flow/types/type-validator.d.ts.map +1 -0
  105. package/dist/flow/types/type-validator.js +134 -0
  106. package/dist/flow/utils/resolve-upload-metadata.d.ts +11 -0
  107. package/dist/flow/utils/resolve-upload-metadata.d.ts.map +1 -0
  108. package/dist/flow/utils/resolve-upload-metadata.js +28 -0
  109. package/dist/flow-2zXnEiWL.cjs +1 -0
  110. package/dist/flow-CRaKy7Vj.js +2 -0
  111. package/dist/flow-CRaKy7Vj.js.map +1 -0
  112. package/dist/generate-id-Dm-Vboxq.d.ts +34 -0
  113. package/dist/generate-id-Dm-Vboxq.d.ts.map +1 -0
  114. package/dist/generate-id-LjJRLD6N.d.cts +34 -0
  115. package/dist/generate-id-LjJRLD6N.d.cts.map +1 -0
  116. package/dist/generate-id-xHp_Z7Cl.cjs +1 -0
  117. package/dist/generate-id-yohS1ZDk.js +2 -0
  118. package/dist/generate-id-yohS1ZDk.js.map +1 -0
  119. package/dist/index-BO8GZlbD.d.cts +1040 -0
  120. package/dist/index-BO8GZlbD.d.cts.map +1 -0
  121. package/dist/index-BoGG5KAY.d.ts +1 -0
  122. package/dist/index-BtBZHVmz.d.cts +1 -0
  123. package/dist/index-D-CoVpkZ.d.ts +1004 -0
  124. package/dist/index-D-CoVpkZ.d.ts.map +1 -0
  125. package/dist/index.cjs +1 -0
  126. package/dist/index.d.cts +6 -0
  127. package/dist/index.d.ts +5 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +5 -0
  130. package/dist/logger/logger.cjs +1 -0
  131. package/dist/logger/logger.d.cts +8 -0
  132. package/dist/logger/logger.d.cts.map +1 -0
  133. package/dist/logger/logger.d.ts +5 -0
  134. package/dist/logger/logger.d.ts.map +1 -0
  135. package/dist/logger/logger.js +10 -0
  136. package/dist/logger/logger.js.map +1 -0
  137. package/dist/semaphore-0ZwjVpyF.js +2 -0
  138. package/dist/semaphore-0ZwjVpyF.js.map +1 -0
  139. package/dist/semaphore-BHprIjFI.d.cts +37 -0
  140. package/dist/semaphore-BHprIjFI.d.cts.map +1 -0
  141. package/dist/semaphore-DThupBkc.d.ts +37 -0
  142. package/dist/semaphore-DThupBkc.d.ts.map +1 -0
  143. package/dist/semaphore-DVrONiAV.cjs +1 -0
  144. package/dist/stream-limiter-CoWKv39w.js +2 -0
  145. package/dist/stream-limiter-CoWKv39w.js.map +1 -0
  146. package/dist/stream-limiter-JgOwmkMa.cjs +1 -0
  147. package/dist/streams/multi-stream.cjs +1 -0
  148. package/dist/streams/multi-stream.d.cts +91 -0
  149. package/dist/streams/multi-stream.d.cts.map +1 -0
  150. package/dist/streams/multi-stream.d.ts +86 -0
  151. package/dist/streams/multi-stream.d.ts.map +1 -0
  152. package/dist/streams/multi-stream.js +149 -0
  153. package/dist/streams/multi-stream.js.map +1 -0
  154. package/dist/streams/stream-limiter.cjs +1 -0
  155. package/dist/streams/stream-limiter.d.cts +36 -0
  156. package/dist/streams/stream-limiter.d.cts.map +1 -0
  157. package/dist/streams/stream-limiter.d.ts +27 -0
  158. package/dist/streams/stream-limiter.d.ts.map +1 -0
  159. package/dist/streams/stream-limiter.js +49 -0
  160. package/dist/streams/stream-splitter.cjs +1 -0
  161. package/dist/streams/stream-splitter.d.cts +68 -0
  162. package/dist/streams/stream-splitter.d.cts.map +1 -0
  163. package/dist/streams/stream-splitter.d.ts +51 -0
  164. package/dist/streams/stream-splitter.d.ts.map +1 -0
  165. package/dist/streams/stream-splitter.js +175 -0
  166. package/dist/streams/stream-splitter.js.map +1 -0
  167. package/dist/types/data-store-registry.d.ts +13 -0
  168. package/dist/types/data-store-registry.d.ts.map +1 -0
  169. package/dist/types/data-store-registry.js +4 -0
  170. package/dist/types/data-store.d.ts +316 -0
  171. package/dist/types/data-store.d.ts.map +1 -0
  172. package/dist/types/data-store.js +157 -0
  173. package/dist/types/event-broadcaster.d.ts +28 -0
  174. package/dist/types/event-broadcaster.d.ts.map +1 -0
  175. package/dist/types/event-broadcaster.js +6 -0
  176. package/dist/types/event-emitter.d.ts +378 -0
  177. package/dist/types/event-emitter.d.ts.map +1 -0
  178. package/dist/types/event-emitter.js +223 -0
  179. package/dist/types/index.cjs +1 -0
  180. package/dist/types/index.d.cts +6 -0
  181. package/dist/types/index.d.ts +10 -0
  182. package/dist/types/index.d.ts.map +1 -0
  183. package/dist/types/index.js +9 -0
  184. package/dist/types/input-file.d.ts +104 -0
  185. package/dist/types/input-file.d.ts.map +1 -0
  186. package/dist/types/input-file.js +27 -0
  187. package/dist/types/kv-store.d.ts +281 -0
  188. package/dist/types/kv-store.d.ts.map +1 -0
  189. package/dist/types/kv-store.js +234 -0
  190. package/dist/types/middleware.d.ts +17 -0
  191. package/dist/types/middleware.d.ts.map +1 -0
  192. package/dist/types/middleware.js +21 -0
  193. package/dist/types/upload-event.d.ts +105 -0
  194. package/dist/types/upload-event.d.ts.map +1 -0
  195. package/dist/types/upload-event.js +71 -0
  196. package/dist/types/upload-file.d.ts +136 -0
  197. package/dist/types/upload-file.d.ts.map +1 -0
  198. package/dist/types/upload-file.js +34 -0
  199. package/dist/types/websocket.d.ts +144 -0
  200. package/dist/types/websocket.d.ts.map +1 -0
  201. package/dist/types/websocket.js +40 -0
  202. package/dist/types-BT-cvi7T.cjs +1 -0
  203. package/dist/types-DhU2j-XF.js +2 -0
  204. package/dist/types-DhU2j-XF.js.map +1 -0
  205. package/dist/upload/convert-to-stream.d.ts +38 -0
  206. package/dist/upload/convert-to-stream.d.ts.map +1 -0
  207. package/dist/upload/convert-to-stream.js +43 -0
  208. package/dist/upload/convert-upload-to-flow-file.d.ts +14 -0
  209. package/dist/upload/convert-upload-to-flow-file.d.ts.map +1 -0
  210. package/dist/upload/convert-upload-to-flow-file.js +21 -0
  211. package/dist/upload/create-upload.d.ts +68 -0
  212. package/dist/upload/create-upload.d.ts.map +1 -0
  213. package/dist/upload/create-upload.js +157 -0
  214. package/dist/upload/index.cjs +1 -0
  215. package/dist/upload/index.d.cts +6 -0
  216. package/dist/upload/index.d.ts +4 -0
  217. package/dist/upload/index.d.ts.map +1 -0
  218. package/dist/upload/index.js +3 -0
  219. package/dist/upload/mime.d.ts +24 -0
  220. package/dist/upload/mime.d.ts.map +1 -0
  221. package/dist/upload/mime.js +351 -0
  222. package/dist/upload/upload-chunk.d.ts +58 -0
  223. package/dist/upload/upload-chunk.d.ts.map +1 -0
  224. package/dist/upload/upload-chunk.js +277 -0
  225. package/dist/upload/upload-server.d.ts +221 -0
  226. package/dist/upload/upload-server.d.ts.map +1 -0
  227. package/dist/upload/upload-server.js +181 -0
  228. package/dist/upload/upload-strategy-negotiator.d.ts +148 -0
  229. package/dist/upload/upload-strategy-negotiator.d.ts.map +1 -0
  230. package/dist/upload/upload-strategy-negotiator.js +217 -0
  231. package/dist/upload/upload-url.d.ts +68 -0
  232. package/dist/upload/upload-url.d.ts.map +1 -0
  233. package/dist/upload/upload-url.js +142 -0
  234. package/dist/upload/write-to-store.d.ts +77 -0
  235. package/dist/upload/write-to-store.d.ts.map +1 -0
  236. package/dist/upload/write-to-store.js +147 -0
  237. package/dist/upload-DLuICjpP.cjs +1 -0
  238. package/dist/upload-DaXO34dE.js +2 -0
  239. package/dist/upload-DaXO34dE.js.map +1 -0
  240. package/dist/uploadista-error-BB-Wdiz9.cjs +22 -0
  241. package/dist/uploadista-error-BVsVxqvz.js +23 -0
  242. package/dist/uploadista-error-BVsVxqvz.js.map +1 -0
  243. package/dist/uploadista-error-CwxYs4EB.d.ts +52 -0
  244. package/dist/uploadista-error-CwxYs4EB.d.ts.map +1 -0
  245. package/dist/uploadista-error-kKlhLRhY.d.cts +52 -0
  246. package/dist/uploadista-error-kKlhLRhY.d.cts.map +1 -0
  247. package/dist/utils/checksum.d.ts +22 -0
  248. package/dist/utils/checksum.d.ts.map +1 -0
  249. package/dist/utils/checksum.js +49 -0
  250. package/dist/utils/debounce.cjs +1 -0
  251. package/dist/utils/debounce.d.cts +38 -0
  252. package/dist/utils/debounce.d.cts.map +1 -0
  253. package/dist/utils/debounce.d.ts +36 -0
  254. package/dist/utils/debounce.d.ts.map +1 -0
  255. package/dist/utils/debounce.js +73 -0
  256. package/dist/utils/generate-id.cjs +1 -0
  257. package/dist/utils/generate-id.d.cts +2 -0
  258. package/dist/utils/generate-id.d.ts +32 -0
  259. package/dist/utils/generate-id.d.ts.map +1 -0
  260. package/dist/utils/generate-id.js +23 -0
  261. package/dist/utils/md5.cjs +1 -0
  262. package/dist/utils/md5.d.cts +73 -0
  263. package/dist/utils/md5.d.cts.map +1 -0
  264. package/dist/utils/md5.d.ts +71 -0
  265. package/dist/utils/md5.d.ts.map +1 -0
  266. package/dist/utils/md5.js +417 -0
  267. package/dist/utils/md5.js.map +1 -0
  268. package/dist/utils/once.cjs +1 -0
  269. package/dist/utils/once.d.cts +25 -0
  270. package/dist/utils/once.d.cts.map +1 -0
  271. package/dist/utils/once.d.ts +21 -0
  272. package/dist/utils/once.d.ts.map +1 -0
  273. package/dist/utils/once.js +54 -0
  274. package/dist/utils/once.js.map +1 -0
  275. package/dist/utils/semaphore.cjs +1 -0
  276. package/dist/utils/semaphore.d.cts +3 -0
  277. package/dist/utils/semaphore.d.ts +78 -0
  278. package/dist/utils/semaphore.d.ts.map +1 -0
  279. package/dist/utils/semaphore.js +134 -0
  280. package/dist/utils/throttle.cjs +1 -0
  281. package/dist/utils/throttle.d.cts +24 -0
  282. package/dist/utils/throttle.d.cts.map +1 -0
  283. package/dist/utils/throttle.d.ts +18 -0
  284. package/dist/utils/throttle.d.ts.map +1 -0
  285. package/dist/utils/throttle.js +20 -0
  286. package/dist/utils/throttle.js.map +1 -0
  287. package/docs/PARALLEL_EXECUTION.md +206 -0
  288. package/docs/PARALLEL_EXECUTION_QUICKSTART.md +142 -0
  289. package/docs/PARALLEL_EXECUTION_REFACTOR.md +184 -0
  290. package/package.json +80 -0
  291. package/src/errors/__tests__/uploadista-error.test.ts +251 -0
  292. package/src/errors/index.ts +2 -0
  293. package/src/errors/uploadista-error.ts +394 -0
  294. package/src/flow/README.md +352 -0
  295. package/src/flow/edge.test.ts +146 -0
  296. package/src/flow/edge.ts +60 -0
  297. package/src/flow/event.ts +229 -0
  298. package/src/flow/flow-server.ts +1089 -0
  299. package/src/flow/flow.ts +1050 -0
  300. package/src/flow/index.ts +28 -0
  301. package/src/flow/node.ts +249 -0
  302. package/src/flow/nodes/index.ts +8 -0
  303. package/src/flow/nodes/input-node.ts +296 -0
  304. package/src/flow/nodes/storage-node.ts +128 -0
  305. package/src/flow/nodes/transform-node.ts +154 -0
  306. package/src/flow/parallel-scheduler.ts +259 -0
  307. package/src/flow/plugins/credential-provider.ts +48 -0
  308. package/src/flow/plugins/image-ai-plugin.ts +66 -0
  309. package/src/flow/plugins/image-plugin.ts +60 -0
  310. package/src/flow/plugins/types/describe-image-node.ts +16 -0
  311. package/src/flow/plugins/types/index.ts +9 -0
  312. package/src/flow/plugins/types/optimize-node.ts +18 -0
  313. package/src/flow/plugins/types/remove-background-node.ts +18 -0
  314. package/src/flow/plugins/types/resize-node.ts +26 -0
  315. package/src/flow/plugins/zip-plugin.ts +69 -0
  316. package/src/flow/typed-flow.ts +279 -0
  317. package/src/flow/types/flow-file.ts +51 -0
  318. package/src/flow/types/flow-job.ts +138 -0
  319. package/src/flow/types/flow-types.ts +353 -0
  320. package/src/flow/types/index.ts +6 -0
  321. package/src/flow/types/run-args.ts +40 -0
  322. package/src/flow/types/type-validator.ts +204 -0
  323. package/src/flow/utils/resolve-upload-metadata.ts +48 -0
  324. package/src/index.ts +5 -0
  325. package/src/logger/logger.ts +14 -0
  326. package/src/streams/stream-limiter.test.ts +150 -0
  327. package/src/streams/stream-limiter.ts +75 -0
  328. package/src/types/data-store.ts +427 -0
  329. package/src/types/event-broadcaster.ts +39 -0
  330. package/src/types/event-emitter.ts +349 -0
  331. package/src/types/index.ts +9 -0
  332. package/src/types/input-file.ts +107 -0
  333. package/src/types/kv-store.ts +375 -0
  334. package/src/types/middleware.ts +54 -0
  335. package/src/types/upload-event.ts +75 -0
  336. package/src/types/upload-file.ts +139 -0
  337. package/src/types/websocket.ts +65 -0
  338. package/src/upload/convert-to-stream.ts +48 -0
  339. package/src/upload/create-upload.ts +214 -0
  340. package/src/upload/index.ts +3 -0
  341. package/src/upload/mime.ts +436 -0
  342. package/src/upload/upload-chunk.ts +364 -0
  343. package/src/upload/upload-server.ts +390 -0
  344. package/src/upload/upload-strategy-negotiator.ts +316 -0
  345. package/src/upload/upload-url.ts +173 -0
  346. package/src/upload/write-to-store.ts +211 -0
  347. package/src/utils/checksum.ts +61 -0
  348. package/src/utils/debounce.test.ts +126 -0
  349. package/src/utils/debounce.ts +89 -0
  350. package/src/utils/generate-id.ts +35 -0
  351. package/src/utils/md5.ts +475 -0
  352. package/src/utils/once.test.ts +83 -0
  353. package/src/utils/once.ts +63 -0
  354. package/src/utils/throttle.test.ts +101 -0
  355. package/src/utils/throttle.ts +29 -0
  356. package/tsconfig.json +20 -0
  357. package/tsconfig.tsbuildinfo +1 -0
  358. package/tsdown.config.ts +25 -0
  359. package/vitest.config.ts +15 -0
@@ -0,0 +1,629 @@
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 { EventType } from "./event";
17
+ import { getNodeData } from "./node";
18
+ import { ParallelScheduler } from "./parallel-scheduler";
19
+ import { FlowTypeValidator } from "./types/type-validator";
20
+ /**
21
+ * Extracts serializable flow data from a Flow instance.
22
+ * Useful for storing flow definitions or sending them over the network.
23
+ *
24
+ * @template TRequirements - Effect requirements for the flow
25
+ * @param flow - Flow instance to extract data from
26
+ * @returns Serializable flow data without execution logic
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const flowData = getFlowData(myFlow);
31
+ * // Store in database or send to client
32
+ * await db.flows.save(flowData);
33
+ * ```
34
+ */
35
+ export const getFlowData = (flow) => {
36
+ return {
37
+ id: flow.id,
38
+ name: flow.name,
39
+ nodes: flow.nodes.map(getNodeData),
40
+ edges: flow.edges,
41
+ };
42
+ };
43
+ /**
44
+ * Creates a new Flow with Zod schema-based type validation.
45
+ *
46
+ * This is the primary way to create flows in Uploadista. It constructs a Flow
47
+ * instance that validates inputs/outputs, executes nodes in topological order,
48
+ * handles errors with retries, and emits events during execution.
49
+ *
50
+ * @template TFlowInputSchema - Zod schema for flow input validation
51
+ * @template TFlowOutputSchema - Zod schema for flow output validation
52
+ * @template TRequirements - Effect requirements/services needed by the flow
53
+ * @template TNodeError - Union of possible errors from nodes
54
+ * @template TNodeRequirements - Union of requirements from nodes
55
+ *
56
+ * @param config - Flow configuration object
57
+ * @param config.flowId - Unique identifier for the flow
58
+ * @param config.name - Human-readable flow name
59
+ * @param config.nodes - Array of nodes (can be plain nodes or Effects resolving to nodes)
60
+ * @param config.edges - Array of edges connecting nodes
61
+ * @param config.inputSchema - Zod schema for validating inputs
62
+ * @param config.outputSchema - Zod schema for validating outputs
63
+ * @param config.typeChecker - Optional custom type compatibility checker
64
+ * @param config.onEvent - Optional event callback for monitoring execution
65
+ *
66
+ * @returns Effect that resolves to a Flow instance
67
+ *
68
+ * @throws {UploadistaError} FLOW_CYCLE_ERROR if the graph contains cycles
69
+ * @throws {UploadistaError} FLOW_NODE_NOT_FOUND if a node is referenced but missing
70
+ * @throws {UploadistaError} FLOW_NODE_ERROR if node execution fails
71
+ * @throws {UploadistaError} FLOW_OUTPUT_VALIDATION_ERROR if outputs don't match schema
72
+ *
73
+ * @remarks
74
+ * - Nodes can be provided as plain objects or as Effects that resolve to nodes
75
+ * - The flow performs topological sorting to determine execution order
76
+ * - Conditional nodes are evaluated before execution
77
+ * - Nodes can specify retry configuration with exponential backoff
78
+ * - Pausable nodes can halt execution and resume later
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const flow = yield* createFlowWithSchema({
83
+ * flowId: "image-upload",
84
+ * name: "Image Upload with Processing",
85
+ * nodes: [
86
+ * inputNode,
87
+ * yield* createResizeNode({ width: 1920, height: 1080 }),
88
+ * optimizeNode,
89
+ * storageNode
90
+ * ],
91
+ * edges: [
92
+ * { source: "input", target: "resize" },
93
+ * { source: "resize", target: "optimize" },
94
+ * { source: "optimize", target: "storage" }
95
+ * ],
96
+ * inputSchema: z.object({
97
+ * file: z.instanceof(File),
98
+ * metadata: z.record(z.string(), z.any()).optional()
99
+ * }),
100
+ * outputSchema: uploadFileSchema,
101
+ * onEvent: (event) => Effect.gen(function* () {
102
+ * console.log("Flow event:", event);
103
+ * return { eventId: event.jobId };
104
+ * })
105
+ * });
106
+ * ```
107
+ *
108
+ * @see {@link Flow} for the returned flow type
109
+ * @see {@link FlowConfig} for configuration options
110
+ */
111
+ export function createFlowWithSchema(config) {
112
+ return Effect.gen(function* () {
113
+ // Resolve nodes - handle mixed arrays of pure nodes and Effect nodes
114
+ const resolvedNodes = yield* Effect.all(config.nodes.map((node) => Effect.isEffect(node)
115
+ ? node
116
+ : Effect.succeed(node)));
117
+ const { flowId, name, onEvent, edges, inputSchema, outputSchema, typeChecker, } = config;
118
+ const nodes = resolvedNodes;
119
+ const typeValidator = new FlowTypeValidator(typeChecker);
120
+ // Build adjacency list for topological sorting
121
+ const buildGraph = () => {
122
+ const graph = {};
123
+ const inDegree = {};
124
+ const reverseGraph = {};
125
+ // Initialize
126
+ nodes.forEach((node) => {
127
+ graph[node.id] = [];
128
+ reverseGraph[node.id] = [];
129
+ inDegree[node.id] = 0;
130
+ });
131
+ // Build edges
132
+ edges.forEach((edge) => {
133
+ graph[edge.source]?.push(edge.target);
134
+ reverseGraph[edge.target]?.push(edge.source);
135
+ inDegree[edge.target] = (inDegree[edge.target] || 0) + 1;
136
+ });
137
+ return { graph, reverseGraph, inDegree };
138
+ };
139
+ // Topological sort to determine execution order
140
+ const topologicalSort = () => {
141
+ const { graph, inDegree } = buildGraph();
142
+ const queue = [];
143
+ const result = [];
144
+ // Add nodes with no incoming edges
145
+ Object.keys(inDegree).forEach((nodeId) => {
146
+ if (inDegree[nodeId] === 0) {
147
+ queue.push(nodeId);
148
+ }
149
+ });
150
+ while (queue.length > 0) {
151
+ const current = queue.shift();
152
+ if (!current) {
153
+ throw new Error("No current node found");
154
+ }
155
+ result.push(current);
156
+ graph[current]?.forEach((neighbor) => {
157
+ inDegree[neighbor] = (inDegree[neighbor] || 0) - 1;
158
+ if (inDegree[neighbor] === 0) {
159
+ queue.push(neighbor);
160
+ }
161
+ });
162
+ }
163
+ return result;
164
+ };
165
+ // Evaluate condition for conditional nodes using Effect
166
+ const evaluateCondition = (node, data) => {
167
+ if (!node.condition)
168
+ return Effect.succeed(true);
169
+ const { field, operator, value } = node.condition;
170
+ const dataRecord = data;
171
+ const metadata = dataRecord?.metadata;
172
+ const fieldValue = metadata?.[field] || dataRecord?.[field];
173
+ const result = (() => {
174
+ switch (operator) {
175
+ case "equals":
176
+ return fieldValue === value;
177
+ case "notEquals":
178
+ return fieldValue !== value;
179
+ case "greaterThan":
180
+ return Number(fieldValue) > Number(value);
181
+ case "lessThan":
182
+ return Number(fieldValue) < Number(value);
183
+ case "contains":
184
+ return String(fieldValue).includes(String(value));
185
+ case "startsWith":
186
+ return String(fieldValue).startsWith(String(value));
187
+ default:
188
+ return true;
189
+ }
190
+ })();
191
+ return Effect.succeed(result);
192
+ };
193
+ // Get all inputs for a node
194
+ const getNodeInputs = (nodeId, nodeResults) => {
195
+ const { reverseGraph } = buildGraph();
196
+ const incomingNodes = reverseGraph[nodeId] || [];
197
+ const inputs = {};
198
+ incomingNodes.forEach((sourceNodeId) => {
199
+ const result = nodeResults.get(sourceNodeId);
200
+ if (result !== undefined) {
201
+ inputs[sourceNodeId] = result;
202
+ }
203
+ });
204
+ return inputs;
205
+ };
206
+ // Map flow inputs to input nodes
207
+ const mapFlowInputsToNodes = (flowInputs) => {
208
+ const inputNodes = nodes.filter((node) => node.type === "input");
209
+ const mappedInputs = {};
210
+ inputNodes.forEach((node) => {
211
+ if (flowInputs &&
212
+ typeof flowInputs === "object" &&
213
+ node.id in flowInputs) {
214
+ mappedInputs[node.id] = inputSchema.parse(flowInputs[node.id]);
215
+ }
216
+ });
217
+ return mappedInputs;
218
+ };
219
+ // Collect outputs from output nodes
220
+ const collectFlowOutputs = (nodeResults) => {
221
+ const outputNodes = nodes.filter((node) => node.type === "output");
222
+ const flowOutputs = {};
223
+ outputNodes.forEach((node) => {
224
+ const result = nodeResults.get(node.id);
225
+ if (result !== undefined) {
226
+ flowOutputs[node.id] = result;
227
+ }
228
+ });
229
+ return flowOutputs;
230
+ };
231
+ // Execute a single node using Effect
232
+ const executeNode = (nodeId, storageId, nodeInputs, nodeResults, nodeMap, jobId, clientId) => {
233
+ return Effect.gen(function* () {
234
+ const node = nodeMap.get(nodeId);
235
+ if (!node) {
236
+ return yield* UploadistaError.fromCode("FLOW_NODE_NOT_FOUND").toEffect();
237
+ }
238
+ // Emit NodeStart event if provided
239
+ if (onEvent) {
240
+ yield* onEvent({
241
+ jobId,
242
+ flowId,
243
+ nodeId,
244
+ eventType: EventType.NodeStart,
245
+ nodeName: node.name,
246
+ nodeType: node.type,
247
+ });
248
+ }
249
+ // Get retry configuration
250
+ const maxRetries = node.retry?.maxRetries ?? 0;
251
+ const baseDelay = node.retry?.retryDelay ?? 1000;
252
+ const useExponentialBackoff = node.retry?.exponentialBackoff ?? true;
253
+ let retryCount = 0;
254
+ let lastError = null;
255
+ // Retry loop
256
+ while (retryCount <= maxRetries) {
257
+ try {
258
+ // Prepare input data for the node
259
+ let nodeInput;
260
+ let nodeInputsForExecution = {};
261
+ if (node.type === "input") {
262
+ // For input nodes, use the mapped flow input
263
+ nodeInput = nodeInputs[nodeId];
264
+ if (nodeInput === undefined) {
265
+ return yield* UploadistaError.fromCode("FLOW_NODE_ERROR", {
266
+ cause: new Error(`Input node ${nodeId} has no input data`),
267
+ }).toEffect();
268
+ }
269
+ }
270
+ else {
271
+ // Get all inputs for the node
272
+ nodeInputsForExecution = getNodeInputs(nodeId, nodeResults);
273
+ if (Object.keys(nodeInputsForExecution).length === 0) {
274
+ return yield* UploadistaError.fromCode("FLOW_NODE_ERROR", {
275
+ cause: new Error(`Node ${nodeId} has no input data`),
276
+ }).toEffect();
277
+ }
278
+ // For single input nodes, use the first input
279
+ if (!node.multiInput) {
280
+ const firstInputKey = Object.keys(nodeInputsForExecution)[0];
281
+ if (!firstInputKey) {
282
+ return yield* UploadistaError.fromCode("FLOW_NODE_ERROR", {
283
+ cause: new Error(`Node ${nodeId} has no input data`),
284
+ }).toEffect();
285
+ }
286
+ nodeInput = nodeInputsForExecution[firstInputKey];
287
+ }
288
+ else {
289
+ // For multi-input nodes, pass all inputs
290
+ nodeInput = nodeInputsForExecution;
291
+ }
292
+ }
293
+ // Check condition for conditional nodes
294
+ if (node.type === "conditional") {
295
+ const conditionResult = yield* evaluateCondition(node, nodeInput);
296
+ if (!conditionResult) {
297
+ // Skip this node - return success but no result
298
+ if (onEvent) {
299
+ yield* onEvent({
300
+ jobId,
301
+ flowId,
302
+ nodeId,
303
+ eventType: EventType.NodeEnd,
304
+ nodeName: node.name,
305
+ });
306
+ }
307
+ return {
308
+ nodeId,
309
+ result: nodeInput,
310
+ success: true,
311
+ waiting: false,
312
+ };
313
+ }
314
+ }
315
+ // Execute the node
316
+ const executionResult = yield* node.run({
317
+ data: nodeInput,
318
+ inputs: nodeInputsForExecution,
319
+ jobId,
320
+ flowId,
321
+ storageId,
322
+ clientId,
323
+ });
324
+ // Handle execution result
325
+ if (executionResult.type === "waiting") {
326
+ // Node is waiting for more data - pause execution
327
+ const result = executionResult.partialData;
328
+ // Emit NodePause event with partial data result
329
+ if (onEvent) {
330
+ yield* onEvent({
331
+ jobId,
332
+ flowId,
333
+ nodeId,
334
+ eventType: EventType.NodePause,
335
+ nodeName: node.name,
336
+ partialData: result,
337
+ });
338
+ }
339
+ return {
340
+ nodeId,
341
+ result,
342
+ success: true,
343
+ waiting: true,
344
+ };
345
+ }
346
+ // Node completed successfully
347
+ const result = executionResult.data;
348
+ // Emit NodeEnd event with result
349
+ if (onEvent) {
350
+ yield* onEvent({
351
+ jobId,
352
+ flowId,
353
+ nodeId,
354
+ eventType: EventType.NodeEnd,
355
+ nodeName: node.name,
356
+ result,
357
+ });
358
+ }
359
+ return { nodeId, result, success: true, waiting: false };
360
+ }
361
+ catch (error) {
362
+ // Store the error
363
+ lastError =
364
+ error instanceof UploadistaError
365
+ ? error
366
+ : UploadistaError.fromCode("FLOW_NODE_ERROR", { cause: error });
367
+ // Check if we should retry
368
+ if (retryCount < maxRetries) {
369
+ retryCount++;
370
+ // Calculate delay with exponential backoff if enabled
371
+ const delay = useExponentialBackoff
372
+ ? baseDelay * 2 ** (retryCount - 1)
373
+ : baseDelay;
374
+ // Log retry attempt
375
+ yield* Effect.logWarning(`Node ${nodeId} (${node.name}) failed, retrying (${retryCount}/${maxRetries}) after ${delay}ms`);
376
+ // Wait before retrying
377
+ yield* Effect.sleep(delay);
378
+ // Continue to next iteration of retry loop
379
+ continue;
380
+ }
381
+ // No more retries - emit final error event
382
+ if (onEvent) {
383
+ yield* onEvent({
384
+ jobId,
385
+ flowId,
386
+ nodeId,
387
+ eventType: EventType.NodeError,
388
+ nodeName: node.name,
389
+ error: lastError.body,
390
+ retryCount,
391
+ });
392
+ }
393
+ return yield* lastError.toEffect();
394
+ }
395
+ }
396
+ // If we get here, all retries failed
397
+ if (lastError) {
398
+ return yield* lastError.toEffect();
399
+ }
400
+ // Should never reach here
401
+ return yield* UploadistaError.fromCode("FLOW_NODE_ERROR", {
402
+ cause: new Error("Unexpected error in retry loop"),
403
+ }).toEffect();
404
+ });
405
+ };
406
+ // Internal execution function that can start fresh or resume
407
+ const executeFlow = ({ inputs, storageId, jobId, resumeFrom, clientId, }) => {
408
+ return Effect.gen(function* () {
409
+ // Emit FlowStart event only if starting fresh
410
+ if (!resumeFrom && onEvent) {
411
+ yield* onEvent({
412
+ jobId,
413
+ eventType: EventType.FlowStart,
414
+ flowId,
415
+ });
416
+ }
417
+ // Map flow inputs to input nodes
418
+ const nodeInputs = mapFlowInputsToNodes(inputs || {});
419
+ // Get execution order and results - either fresh or from resume state
420
+ let executionOrder;
421
+ let nodeResults;
422
+ let startIndex;
423
+ if (resumeFrom) {
424
+ // Resume from saved state
425
+ executionOrder = resumeFrom.executionOrder;
426
+ nodeResults = resumeFrom.nodeResults;
427
+ startIndex = resumeFrom.currentIndex;
428
+ }
429
+ else {
430
+ // Start fresh
431
+ executionOrder = topologicalSort();
432
+ nodeResults = new Map();
433
+ startIndex = 0;
434
+ // Check for cycles
435
+ if (executionOrder.length !== nodes.length) {
436
+ return yield* UploadistaError.fromCode("FLOW_CYCLE_ERROR").toEffect();
437
+ }
438
+ }
439
+ // Create node map for quick lookup
440
+ const nodeMap = new Map(nodes.map((node) => [node.id, node]));
441
+ // Determine execution strategy
442
+ const useParallelExecution = config.parallelExecution?.enabled ?? false;
443
+ if (useParallelExecution) {
444
+ // Parallel execution using execution levels
445
+ yield* Effect.logDebug(`Flow ${flowId}: Executing in parallel mode (maxConcurrency: ${config.parallelExecution?.maxConcurrency ?? 4})`);
446
+ const scheduler = new ParallelScheduler({
447
+ maxConcurrency: config.parallelExecution?.maxConcurrency ?? 4,
448
+ });
449
+ // Get execution levels
450
+ const executionLevels = scheduler.groupNodesByExecutionLevel(nodes, edges);
451
+ yield* Effect.logDebug(`Flow ${flowId}: Grouped nodes into ${executionLevels.length} execution levels`);
452
+ // Build reverse graph for dependency checking
453
+ const reverseGraph = {};
454
+ nodes.forEach((node) => {
455
+ reverseGraph[node.id] = [];
456
+ });
457
+ edges.forEach((edge) => {
458
+ reverseGraph[edge.target]?.push(edge.source);
459
+ });
460
+ // Execute each level sequentially, but nodes within level in parallel
461
+ for (const level of executionLevels) {
462
+ yield* Effect.logDebug(`Flow ${flowId}: Executing level ${level.level} with nodes: ${level.nodes.join(", ")}`);
463
+ // Create executor functions for all nodes in this level
464
+ const nodeExecutors = level.nodes.map((nodeId) => () => Effect.gen(function* () {
465
+ // Emit NodeResume event if we're resuming from a paused state at this node
466
+ if (resumeFrom && nodeId === resumeFrom.executionOrder[startIndex] && onEvent) {
467
+ const node = nodeMap.get(nodeId);
468
+ if (node) {
469
+ yield* onEvent({
470
+ jobId,
471
+ flowId,
472
+ nodeId,
473
+ eventType: EventType.NodeResume,
474
+ nodeName: node.name,
475
+ nodeType: node.type,
476
+ });
477
+ }
478
+ }
479
+ const nodeResult = yield* executeNode(nodeId, storageId, nodeInputs, nodeResults, nodeMap, jobId, clientId);
480
+ return { nodeId, nodeResult };
481
+ }));
482
+ // Execute all nodes in this level in parallel
483
+ const levelResults = yield* scheduler.executeNodesInParallel(nodeExecutors);
484
+ // Process results and check for waiting nodes
485
+ for (const { nodeId, nodeResult } of levelResults) {
486
+ if (nodeResult.waiting) {
487
+ // Node is waiting - pause execution and return state
488
+ if (nodeResult.result !== undefined) {
489
+ nodeResults.set(nodeId, nodeResult.result);
490
+ }
491
+ return {
492
+ type: "paused",
493
+ nodeId,
494
+ executionState: {
495
+ executionOrder,
496
+ currentIndex: executionOrder.indexOf(nodeId),
497
+ inputs: nodeInputs,
498
+ },
499
+ };
500
+ }
501
+ if (nodeResult.success) {
502
+ nodeResults.set(nodeId, nodeResult.result);
503
+ }
504
+ }
505
+ }
506
+ }
507
+ else {
508
+ // Sequential execution (original behavior)
509
+ yield* Effect.logDebug(`Flow ${flowId}: Executing in sequential mode`);
510
+ for (let i = startIndex; i < executionOrder.length; i++) {
511
+ const nodeId = executionOrder[i];
512
+ if (!nodeId) {
513
+ return yield* UploadistaError.fromCode("FLOW_NODE_NOT_FOUND").toEffect();
514
+ }
515
+ // Emit NodeResume event if we're resuming from a paused state at this node
516
+ if (resumeFrom && i === startIndex && onEvent) {
517
+ const node = nodeMap.get(nodeId);
518
+ if (node) {
519
+ yield* onEvent({
520
+ jobId,
521
+ flowId,
522
+ nodeId,
523
+ eventType: EventType.NodeResume,
524
+ nodeName: node.name,
525
+ nodeType: node.type,
526
+ });
527
+ }
528
+ }
529
+ const nodeResult = yield* executeNode(nodeId, storageId, nodeInputs, nodeResults, nodeMap, jobId, clientId);
530
+ if (nodeResult.waiting) {
531
+ // Node is waiting - pause execution and return state
532
+ if (nodeResult.result !== undefined) {
533
+ nodeResults.set(nodeResult.nodeId, nodeResult.result);
534
+ }
535
+ return {
536
+ type: "paused",
537
+ nodeId: nodeResult.nodeId,
538
+ executionState: {
539
+ executionOrder,
540
+ currentIndex: i, // Stay at current index to re-execute this node on resume
541
+ inputs: nodeInputs,
542
+ },
543
+ };
544
+ }
545
+ if (nodeResult.success) {
546
+ nodeResults.set(nodeResult.nodeId, nodeResult.result);
547
+ }
548
+ }
549
+ }
550
+ // All nodes completed - collect outputs
551
+ const finalResult = collectFlowOutputs(nodeResults);
552
+ const finalResultSchema = z.record(z.string(), outputSchema);
553
+ // Validate the final result against the output schema
554
+ const parseResult = finalResultSchema.safeParse(finalResult);
555
+ if (!parseResult.success) {
556
+ const validationError = `Flow output validation failed: ${parseResult.error.message}. Expected outputs: ${JSON.stringify(Object.keys(collectFlowOutputs(nodeResults)))}. Output nodes: ${nodes
557
+ .filter((n) => n.type === "output")
558
+ .map((n) => n.id)
559
+ .join(", ")}`;
560
+ // Emit FlowError event for validation failure
561
+ if (onEvent) {
562
+ yield* onEvent({
563
+ jobId,
564
+ eventType: EventType.FlowError,
565
+ flowId,
566
+ error: validationError,
567
+ });
568
+ }
569
+ return yield* UploadistaError.fromCode("FLOW_OUTPUT_VALIDATION_ERROR", {
570
+ body: validationError,
571
+ cause: parseResult.error,
572
+ }).toEffect();
573
+ }
574
+ const validatedResult = parseResult.data;
575
+ // Emit FlowEnd event
576
+ if (onEvent) {
577
+ yield* onEvent({
578
+ jobId,
579
+ eventType: EventType.FlowEnd,
580
+ flowId,
581
+ result: validatedResult,
582
+ });
583
+ }
584
+ return { type: "completed", result: validatedResult };
585
+ });
586
+ };
587
+ const run = ({ inputs, storageId, jobId, clientId, }) => {
588
+ return executeFlow({ inputs, storageId, jobId, clientId });
589
+ };
590
+ const resume = ({ jobId, storageId, nodeResults, executionState, clientId, }) => {
591
+ return executeFlow({
592
+ inputs: executionState.inputs,
593
+ storageId,
594
+ jobId,
595
+ resumeFrom: {
596
+ executionOrder: executionState.executionOrder,
597
+ nodeResults: new Map(Object.entries(nodeResults)),
598
+ currentIndex: executionState.currentIndex,
599
+ },
600
+ clientId,
601
+ });
602
+ };
603
+ const validateTypes = () => {
604
+ // Convert FlowNode to FlowNode for validation
605
+ const compatibleNodes = nodes;
606
+ return typeValidator.validateFlow(compatibleNodes, edges);
607
+ };
608
+ const validateInputs = (inputs) => {
609
+ return typeValidator.validateData(inputs, inputSchema);
610
+ };
611
+ const validateOutputs = (outputs) => {
612
+ return typeValidator.validateData(outputs, outputSchema);
613
+ };
614
+ return {
615
+ id: flowId,
616
+ name,
617
+ nodes,
618
+ edges,
619
+ inputSchema,
620
+ outputSchema,
621
+ onEvent,
622
+ run,
623
+ resume,
624
+ validateTypes,
625
+ validateInputs,
626
+ validateOutputs,
627
+ };
628
+ });
629
+ }
@@ -0,0 +1 @@
1
+ require(`../uploadista-error-BB-Wdiz9.cjs`),require(`../errors-CRm1FHHT.cjs`);const e=require(`../flow-2zXnEiWL.cjs`);require(`../types-BT-cvi7T.cjs`),require(`../upload-DLuICjpP.cjs`),require(`../generate-id-xHp_Z7Cl.cjs`),require(`../stream-limiter-JgOwmkMa.cjs`),require(`../semaphore-DVrONiAV.cjs`),exports.EventType=e.EventType,exports.FlowProvider=e.FlowProvider,exports.FlowServer=e.FlowServer,exports.ImagePlugin=e.ImagePlugin,exports.NodeType=e.NodeType,exports.ParallelScheduler=e.ParallelScheduler,exports.completeNodeExecution=e.completeNodeExecution,exports.createFlow=e.createFlow,exports.createFlowEdge=e.createFlowEdge,exports.createFlowNode=e.createFlowNode,exports.createFlowServer=e.createFlowServer,exports.createInputNode=e.createInputNode,exports.createStorageNode=e.createStorageNode,exports.createStreamingInputNode=e.createStreamingInputNode,exports.flowDataSchema=e.flowDataSchema,exports.flowFileBatchSchema=e.flowFileBatchSchema,exports.flowFileSchema=e.flowFileSchema,exports.flowServer=e.flowServer,exports.getFlowData=e.getFlowData,exports.getNodeData=e.getNodeData,exports.isFlowFile=e.isFlowFile,exports.optimizeParamsSchema=e.optimizeParamsSchema,exports.resizeParamsSchema=e.resizeParamsSchema,exports.runArgsSchema=e.runArgsSchema,exports.storageParamsSchema=e.storageParamsSchema,exports.waitingNodeExecution=e.waitingNodeExecution;
@@ -0,0 +1,6 @@
1
+ import "../uploadista-error-kKlhLRhY.cjs";
2
+ import "../index-BtBZHVmz.cjs";
3
+ import { ConditionField, ConditionOperator, ConditionValue, EventType, ExecutionLevel, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowEnd, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodeResponse, FlowEventNodeStart, FlowExecutionContext, FlowExecutionResult, FlowFile, FlowFileBatch, FlowFileData, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowProvider, FlowProviderShape, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, ImagePlugin, ImagePluginShape, NodeConnectionValidator, NodeExecutionResult, NodeType, NodeTypeMap, OptimizeParams, ParallelScheduler, ParallelSchedulerConfig, ResizeParams, RunArgs, StorageParams, TypeCompatibilityChecker, completeNodeExecution, createFlow, createFlowEdge, createFlowNode, createFlowServer, createInputNode, createStorageNode, createStreamingInputNode, flowDataSchema, flowFileBatchSchema, flowFileSchema, flowServer, getFlowData, getNodeData, isFlowFile, optimizeParamsSchema, resizeParamsSchema, runArgsSchema, storageParamsSchema, waitingNodeExecution } from "../index-BO8GZlbD.cjs";
4
+ import "../generate-id-LjJRLD6N.cjs";
5
+ import "../semaphore-BHprIjFI.cjs";
6
+ export { ConditionField, ConditionOperator, ConditionValue, EventType, ExecutionLevel, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowEnd, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodeResponse, FlowEventNodeStart, FlowExecutionContext, FlowExecutionResult, FlowFile, FlowFileBatch, FlowFileData, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowProvider, FlowProviderShape, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, ImagePlugin, ImagePluginShape, NodeConnectionValidator, NodeExecutionResult, NodeType, NodeTypeMap, OptimizeParams, ParallelScheduler, ParallelSchedulerConfig, ResizeParams, RunArgs, StorageParams, TypeCompatibilityChecker, completeNodeExecution, createFlow, createFlowEdge, createFlowNode, createFlowServer, createInputNode, createStorageNode, createStreamingInputNode, flowDataSchema, flowFileBatchSchema, flowFileSchema, flowServer, getFlowData, getNodeData, isFlowFile, optimizeParamsSchema, resizeParamsSchema, runArgsSchema, storageParamsSchema, waitingNodeExecution };
@@ -0,0 +1,24 @@
1
+ export type { FlowEdge } from "./edge";
2
+ export * from "./edge";
3
+ export * from "./event";
4
+ export type { Flow, FlowData } from "./flow";
5
+ export * from "./flow";
6
+ export { createFlowWithSchema } from "./flow";
7
+ export * from "./flow-server";
8
+ export * from "./node";
9
+ export { createFlowNode, NodeType } from "./node";
10
+ export * from "./nodes";
11
+ export * from "./parallel-scheduler";
12
+ export * from "./plugins/credential-provider";
13
+ export * from "./plugins/image-ai-plugin";
14
+ export * from "./plugins/image-plugin";
15
+ export * from "./plugins/types";
16
+ export * from "./plugins/zip-plugin";
17
+ export * from "./typed-flow";
18
+ export { createFlow } from "./typed-flow";
19
+ export * from "./types/flow-file";
20
+ export * from "./types/flow-job";
21
+ export * from "./types/flow-types";
22
+ export * from "./types/run-args";
23
+ export * from "./utils/resolve-upload-metadata";
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,cAAc,QAAQ,CAAC;AAEvB,cAAc,SAAS,CAAC;AACxB,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7C,cAAc,QAAQ,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClD,cAAc,SAAS,CAAC;AAExB,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC"}