@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,321 @@
1
+ /**
2
+ * Core flow type definitions and node specifications.
3
+ *
4
+ * This module defines the fundamental types for the Flow Engine, including node
5
+ * definitions, execution results, edges, and configuration. These types form the
6
+ * foundation of the DAG processing system.
7
+ *
8
+ * @module flow/types/flow-types
9
+ * @see {@link FlowNode} for node specification
10
+ * @see {@link FlowConfig} for flow configuration
11
+ */
12
+ /** biome-ignore-all lint/suspicious/noExplicitAny: any is used to allow for dynamic types */
13
+ import type { Effect } from "effect";
14
+ import type { z } from "zod";
15
+ import type { UploadistaError } from "../../errors";
16
+ import type { FlowEvent, FlowEventFlowEnd, FlowEventFlowStart } from "../event";
17
+ import { NodeType } from "../node";
18
+ /**
19
+ * Type mapping for node input/output schemas.
20
+ * Used for type-safe node connections in typed flows.
21
+ */
22
+ export type NodeTypeMap = Record<string, {
23
+ input: unknown;
24
+ output: unknown;
25
+ }>;
26
+ /**
27
+ * Minimal node data without execution logic.
28
+ * Used for serialization and UI display.
29
+ *
30
+ * @property id - Unique node identifier
31
+ * @property name - Human-readable node name
32
+ * @property description - Explanation of what the node does
33
+ * @property type - Node category (input, transform, conditional, output, etc.)
34
+ */
35
+ export type FlowNodeData = {
36
+ id: string;
37
+ name: string;
38
+ description: string;
39
+ type: NodeType;
40
+ };
41
+ /**
42
+ * Result of a node execution - either complete or waiting for more data.
43
+ *
44
+ * @template TOutput - Type of the node's output data
45
+ *
46
+ * @remarks
47
+ * Nodes can return "waiting" to pause flow execution when they need additional
48
+ * data (e.g., chunked uploads, external service responses). The flow can be
49
+ * resumed later with the missing data.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // Node completes immediately
54
+ * return completeNodeExecution({ processedData });
55
+ *
56
+ * // Node waits for more chunks
57
+ * if (needsMoreData) {
58
+ * return waitingNodeExecution({ receivedChunks: 3, totalChunks: 10 });
59
+ * }
60
+ * ```
61
+ */
62
+ export type NodeExecutionResult<TOutput> = {
63
+ type: "complete";
64
+ data: TOutput;
65
+ } | {
66
+ type: "waiting";
67
+ partialData?: unknown;
68
+ };
69
+ /**
70
+ * Helper function to create a complete node execution result.
71
+ *
72
+ * @template TOutput - Type of the output data
73
+ * @param data - The output data from the node
74
+ * @returns A complete execution result
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * return completeNodeExecution({
79
+ * url: uploadedFile.url,
80
+ * size: uploadedFile.size
81
+ * });
82
+ * ```
83
+ */
84
+ export declare const completeNodeExecution: <TOutput>(data: TOutput) => {
85
+ type: "complete";
86
+ data: TOutput;
87
+ };
88
+ /**
89
+ * Helper function to create a waiting node execution result.
90
+ *
91
+ * @param partialData - Optional partial data available so far
92
+ * @returns A waiting execution result that pauses the flow
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * // Wait for more upload chunks
97
+ * return waitingNodeExecution({
98
+ * receivedBytes: currentSize,
99
+ * totalBytes: expectedSize
100
+ * });
101
+ * ```
102
+ */
103
+ export declare const waitingNodeExecution: (partialData?: unknown) => {
104
+ type: "waiting";
105
+ partialData: unknown;
106
+ };
107
+ /**
108
+ * A flow node represents a single processing step in the DAG.
109
+ *
110
+ * Nodes are the building blocks of flows. Each node has typed inputs/outputs,
111
+ * execution logic, and optional features like conditions, retries, and pausing.
112
+ *
113
+ * @template TInput - Type of data the node accepts
114
+ * @template TOutput - Type of data the node produces
115
+ * @template TError - Type of errors the node can throw
116
+ *
117
+ * @property inputSchema - Zod schema for validating input data
118
+ * @property outputSchema - Zod schema for validating output data
119
+ * @property run - Effect-based execution function
120
+ * @property condition - Optional conditional execution rule
121
+ * @property multiInput - Whether node accepts multiple inputs (default: false)
122
+ * @property multiOutput - Whether node produces multiple outputs (default: false)
123
+ * @property pausable - Whether node can pause execution (default: false)
124
+ * @property retry - Optional retry configuration
125
+ *
126
+ * @remarks
127
+ * - Nodes use Effect for composable error handling and dependency injection
128
+ * - Input/output schemas ensure type safety at runtime
129
+ * - Conditions are evaluated before execution
130
+ * - Retry logic supports exponential backoff
131
+ * - Pausable nodes can halt flow execution and resume later
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * const resizeNode: FlowNode<InputFile, UploadFile> = {
136
+ * id: "resize",
137
+ * name: "Resize Image",
138
+ * description: "Resize image to specified dimensions",
139
+ * type: NodeType.transform,
140
+ * inputSchema: inputFileSchema,
141
+ * outputSchema: uploadFileSchema,
142
+ * run: ({ data, storageId }) => Effect.gen(function* () {
143
+ * const resized = yield* resizeImage(data, { width: 1920, height: 1080 });
144
+ * return completeNodeExecution(resized);
145
+ * }),
146
+ * retry: {
147
+ * maxRetries: 3,
148
+ * retryDelay: 1000,
149
+ * exponentialBackoff: true
150
+ * }
151
+ * };
152
+ * ```
153
+ *
154
+ * @see {@link NodeExecutionResult} for return type options
155
+ * @see {@link FlowCondition} for conditional execution
156
+ */
157
+ export type FlowNode<TInput = unknown, TOutput = unknown, TError = UploadistaError> = FlowNodeData & {
158
+ inputSchema: z.ZodSchema<TInput>;
159
+ outputSchema: z.ZodSchema<TOutput>;
160
+ run: (args: {
161
+ data: TInput;
162
+ jobId: string;
163
+ storageId: string;
164
+ flowId: string;
165
+ inputs?: Record<string, unknown>;
166
+ clientId: string | null;
167
+ }) => Effect.Effect<NodeExecutionResult<TOutput>, TError>;
168
+ condition?: {
169
+ field: string;
170
+ operator: string;
171
+ value: unknown;
172
+ };
173
+ multiInput?: boolean;
174
+ multiOutput?: boolean;
175
+ pausable?: boolean;
176
+ retry?: {
177
+ maxRetries?: number;
178
+ retryDelay?: number;
179
+ exponentialBackoff?: boolean;
180
+ };
181
+ };
182
+ /**
183
+ * Represents a directed edge connecting two nodes in the flow graph.
184
+ *
185
+ * Edges define the data flow direction and can specify ports for multi-input/output nodes.
186
+ *
187
+ * @property source - ID of the source node
188
+ * @property target - ID of the target node
189
+ * @property sourcePort - Optional output port name for multi-output nodes
190
+ * @property targetPort - Optional input port name for multi-input nodes
191
+ *
192
+ * @remarks
193
+ * - Edges must not create cycles (DAG constraint)
194
+ * - Source node's output type should be compatible with target node's input type
195
+ * - Ports allow routing specific outputs to specific inputs
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * // Simple edge
200
+ * const edge: FlowEdge = {
201
+ * source: "resize-node",
202
+ * target: "optimize-node"
203
+ * };
204
+ *
205
+ * // Edge with ports (for multiplex nodes)
206
+ * const multiplexEdge: FlowEdge = {
207
+ * source: "multiplex-node",
208
+ * target: "output-node",
209
+ * sourcePort: "image",
210
+ * targetPort: "primary"
211
+ * };
212
+ * ```
213
+ */
214
+ export type FlowEdge = {
215
+ source: string;
216
+ target: string;
217
+ sourcePort?: string;
218
+ targetPort?: string;
219
+ };
220
+ /**
221
+ * Function type for checking schema compatibility between nodes.
222
+ *
223
+ * @param from - Source node's output schema
224
+ * @param to - Target node's input schema
225
+ * @returns true if schemas are compatible
226
+ *
227
+ * @remarks
228
+ * Custom type checkers can implement more sophisticated compatibility rules
229
+ * than the default checker.
230
+ *
231
+ * @see {@link FlowTypeValidator} for the default implementation
232
+ */
233
+ export type TypeCompatibilityChecker = (from: z.ZodSchema<any>, to: z.ZodSchema<any>) => boolean;
234
+ /**
235
+ * Interface for validating node connections and schema compatibility.
236
+ *
237
+ * @remarks
238
+ * Validators ensure that connected nodes have compatible types,
239
+ * preventing runtime type errors in flow execution.
240
+ *
241
+ * @see {@link FlowTypeValidator} for the implementation
242
+ */
243
+ export type NodeConnectionValidator = {
244
+ validateConnection: (sourceNode: FlowNode<any, any>, targetNode: FlowNode<any, any>, edge: FlowEdge) => boolean;
245
+ getCompatibleTypes: (sourceSchema: z.ZodSchema<any>, targetSchema: z.ZodSchema<any>) => boolean;
246
+ };
247
+ /**
248
+ * Configuration object for creating a new flow.
249
+ *
250
+ * FlowConfig defines all aspects of a flow including its nodes, connections,
251
+ * schemas, and optional features like event handlers and parallel execution.
252
+ *
253
+ * @template TFlowInputSchema - Zod schema for flow inputs
254
+ * @template TFlowOutputSchema - Zod schema for flow outputs
255
+ * @template TNodeError - Union of possible errors from node Effects
256
+ * @template TNodeRequirements - Union of requirements from node Effects
257
+ *
258
+ * @property flowId - Unique identifier for the flow
259
+ * @property name - Human-readable flow name
260
+ * @property nodes - Array of nodes (can be plain nodes or Effects resolving to nodes)
261
+ * @property edges - Array of edges connecting the nodes
262
+ * @property inputSchema - Zod schema for validating flow inputs
263
+ * @property outputSchema - Zod schema for validating flow outputs
264
+ * @property typeChecker - Optional custom type compatibility checker
265
+ * @property onEvent - Optional event handler for monitoring execution
266
+ * @property parallelExecution - Optional parallel execution configuration
267
+ *
268
+ * @remarks
269
+ * - Nodes can be provided as plain objects or Effect-wrapped for lazy initialization
270
+ * - Event handlers receive all flow and node events
271
+ * - Parallel execution is experimental and disabled by default
272
+ * - Type checker allows custom schema compatibility rules
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const config: FlowConfig<
277
+ * z.ZodObject<{ file: z.ZodType<File> }>,
278
+ * z.ZodType<UploadFile>,
279
+ * never,
280
+ * never
281
+ * > = {
282
+ * flowId: "image-upload",
283
+ * name: "Image Upload Pipeline",
284
+ * nodes: [inputNode, resizeNode, optimizeNode, storageNode],
285
+ * edges: [
286
+ * { source: "input", target: "resize" },
287
+ * { source: "resize", target: "optimize" },
288
+ * { source: "optimize", target: "storage" }
289
+ * ],
290
+ * inputSchema: z.object({ file: z.instanceof(File) }),
291
+ * outputSchema: uploadFileSchema,
292
+ * onEvent: (event) => Effect.gen(function* () {
293
+ * yield* logEvent(event);
294
+ * return { eventId: event.jobId };
295
+ * })
296
+ * };
297
+ * ```
298
+ *
299
+ * @see {@link createFlowWithSchema} for creating flows from config
300
+ * @see {@link FlowNode} for node specifications
301
+ * @see {@link FlowEdge} for edge specifications
302
+ */
303
+ export type FlowConfig<TFlowInputSchema extends z.ZodSchema<any>, TFlowOutputSchema extends z.ZodSchema<any>, TNodeError = never, TNodeRequirements = never> = {
304
+ flowId: string;
305
+ name: string;
306
+ nodes: Array<FlowNode<any, any, UploadistaError> | Effect.Effect<FlowNode<any, any, UploadistaError>, TNodeError, TNodeRequirements>>;
307
+ edges: FlowEdge[];
308
+ inputSchema: TFlowInputSchema;
309
+ outputSchema: TFlowOutputSchema;
310
+ typeChecker?: TypeCompatibilityChecker;
311
+ onEvent?: (event: FlowEvent) => Effect.Effect<{
312
+ eventId: string | null;
313
+ }, UploadistaError>;
314
+ parallelExecution?: {
315
+ enabled?: boolean;
316
+ maxConcurrency?: number;
317
+ };
318
+ };
319
+ export { NodeType };
320
+ export type { FlowEvent, FlowEventFlowEnd, FlowEventFlowStart };
321
+ //# sourceMappingURL=flow-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-types.d.ts","sourceRoot":"","sources":["../../../src/flow/types/flow-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Core flow type definitions and node specifications.
3
+ *
4
+ * This module defines the fundamental types for the Flow Engine, including node
5
+ * definitions, execution results, edges, and configuration. These types form the
6
+ * foundation of the DAG processing system.
7
+ *
8
+ * @module flow/types/flow-types
9
+ * @see {@link FlowNode} for node specification
10
+ * @see {@link FlowConfig} for flow configuration
11
+ */
12
+ import { NodeType } from "../node";
13
+ /**
14
+ * Helper function to create a complete node execution result.
15
+ *
16
+ * @template TOutput - Type of the output data
17
+ * @param data - The output data from the node
18
+ * @returns A complete execution result
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * return completeNodeExecution({
23
+ * url: uploadedFile.url,
24
+ * size: uploadedFile.size
25
+ * });
26
+ * ```
27
+ */
28
+ export const completeNodeExecution = (data) => ({
29
+ type: "complete",
30
+ data,
31
+ });
32
+ /**
33
+ * Helper function to create a waiting node execution result.
34
+ *
35
+ * @param partialData - Optional partial data available so far
36
+ * @returns A waiting execution result that pauses the flow
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * // Wait for more upload chunks
41
+ * return waitingNodeExecution({
42
+ * receivedBytes: currentSize,
43
+ * totalBytes: expectedSize
44
+ * });
45
+ * ```
46
+ */
47
+ export const waitingNodeExecution = (partialData) => ({
48
+ type: "waiting",
49
+ partialData,
50
+ });
51
+ // Re-export existing types for compatibility
52
+ export { NodeType };
@@ -0,0 +1,4 @@
1
+ export type { FlowCondition } from "./flow-file";
2
+ export * from "./flow-types";
3
+ export * from "./type-validator";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/flow/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,cAAc,cAAc,CAAC;AAE7B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Export all flow types
2
+ export * from "./flow-types";
3
+ export * from "./type-validator";
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Flow execution argument schemas and types.
3
+ *
4
+ * Defines and validates the arguments passed when running a flow,
5
+ * ensuring inputs are properly structured before execution begins.
6
+ *
7
+ * @module flow/types/run-args
8
+ */
9
+ import { z } from "zod";
10
+ /**
11
+ * Zod schema for validating flow run arguments.
12
+ *
13
+ * @property inputs - Record mapping input node IDs to their input data
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const args = {
18
+ * inputs: {
19
+ * "input-node-1": { file: myFile, metadata: { ... } },
20
+ * "input-node-2": { file: anotherFile }
21
+ * }
22
+ * };
23
+ *
24
+ * // Validate before running
25
+ * const validated = runArgsSchema.parse(args);
26
+ * ```
27
+ */
28
+ export declare const runArgsSchema: z.ZodObject<{
29
+ inputs: z.ZodRecord<z.ZodString, z.ZodAny>;
30
+ }, z.core.$strip>;
31
+ /**
32
+ * Type representing validated flow run arguments.
33
+ *
34
+ * This type is inferred from the runArgsSchema and ensures type safety
35
+ * when passing inputs to flow execution.
36
+ */
37
+ export type RunArgs = z.infer<typeof runArgsSchema>;
38
+ //# sourceMappingURL=run-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-args.d.ts","sourceRoot":"","sources":["../../../src/flow/types/run-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa;;iBAExB,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Flow execution argument schemas and types.
3
+ *
4
+ * Defines and validates the arguments passed when running a flow,
5
+ * ensuring inputs are properly structured before execution begins.
6
+ *
7
+ * @module flow/types/run-args
8
+ */
9
+ import { z } from "zod";
10
+ /**
11
+ * Zod schema for validating flow run arguments.
12
+ *
13
+ * @property inputs - Record mapping input node IDs to their input data
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const args = {
18
+ * inputs: {
19
+ * "input-node-1": { file: myFile, metadata: { ... } },
20
+ * "input-node-2": { file: anotherFile }
21
+ * }
22
+ * };
23
+ *
24
+ * // Validate before running
25
+ * const validated = runArgsSchema.parse(args);
26
+ * ```
27
+ */
28
+ export const runArgsSchema = z.object({
29
+ inputs: z.record(z.string(), z.any()),
30
+ });
@@ -0,0 +1,26 @@
1
+ /** biome-ignore-all lint/suspicious/noExplicitAny: any is used to allow for dynamic types */
2
+ import type { z } from "zod";
3
+ import type { FlowEdge, FlowNode, NodeConnectionValidator, TypeCompatibilityChecker } from "./flow-types";
4
+ export declare const defaultTypeChecker: TypeCompatibilityChecker;
5
+ export declare class FlowTypeValidator implements NodeConnectionValidator {
6
+ private typeChecker;
7
+ constructor(typeChecker?: TypeCompatibilityChecker);
8
+ validateConnection(sourceNode: FlowNode<any, any>, targetNode: FlowNode<any, any>, _edge: FlowEdge): boolean;
9
+ getCompatibleTypes(sourceSchema: z.ZodSchema<any>, targetSchema: z.ZodSchema<any>): boolean;
10
+ validateFlow(nodes: FlowNode<any, any>[], edges: FlowEdge[]): {
11
+ isValid: boolean;
12
+ errors: string[];
13
+ };
14
+ getExpectedInputSchemas(nodeId: string, nodes: FlowNode<any, any>[], edges: FlowEdge[]): Record<string, unknown>;
15
+ getActualOutputSchemas(nodeId: string, nodes: FlowNode<any, any>[], edges: FlowEdge[]): Record<string, unknown>;
16
+ validateData(data: unknown, schema: unknown): {
17
+ isValid: boolean;
18
+ errors: string[];
19
+ };
20
+ }
21
+ export declare const typeUtils: {
22
+ isAssignable(fromSchema: z.ZodSchema<any>, toSchema: z.ZodSchema<any>): boolean;
23
+ getCommonSchema(schema1: z.ZodSchema<any>, schema2: z.ZodSchema<any>): z.ZodSchema<any>;
24
+ matchesSchema(value: unknown, schema: z.ZodSchema<any>): boolean;
25
+ };
26
+ //# sourceMappingURL=type-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-validator.d.ts","sourceRoot":"","sources":["../../../src/flow/types/type-validator.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAGtB,eAAO,MAAM,kBAAkB,EAAE,wBAyBhC,CAAC;AAGF,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,OAAO,CAAC,WAAW,CAA2B;gBAElC,WAAW,GAAE,wBAA6C;IAItE,kBAAkB,CAChB,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9B,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9B,KAAK,EAAE,QAAQ,GACd,OAAO;IAQV,kBAAkB,CAChB,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAC9B,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAC7B,OAAO;IAKV,YAAY,CACV,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC3B,KAAK,EAAE,QAAQ,EAAE,GAChB;QACD,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAgCD,uBAAuB,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC3B,KAAK,EAAE,QAAQ,EAAE,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB1B,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC3B,KAAK,EAAE,QAAQ,EAAE,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB1B,YAAY,CACV,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,GACd;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAmB1C;AAGD,eAAO,MAAM,SAAS;6BAGN,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAClB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GACzB,OAAO;6BAMC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAChB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GACxB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;yBASE,OAAO,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO;CAQjE,CAAC"}
@@ -0,0 +1,134 @@
1
+ // Default type compatibility checker using Zod schemas
2
+ export const defaultTypeChecker = (fromSchema, toSchema) => {
3
+ // Basic schema compatibility rules
4
+ if (fromSchema === toSchema)
5
+ return true;
6
+ // Check if schemas are compatible by comparing their types
7
+ try {
8
+ // For now, assume schemas are compatible if they're both Zod schemas
9
+ // In a more sophisticated system, you'd check actual schema compatibility
10
+ if (fromSchema &&
11
+ toSchema &&
12
+ typeof fromSchema === "object" &&
13
+ typeof toSchema === "object") {
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+ catch {
19
+ // If schema comparison fails, assume compatible
20
+ return true;
21
+ }
22
+ };
23
+ // Enhanced type validator with Zod schema support
24
+ export class FlowTypeValidator {
25
+ typeChecker;
26
+ constructor(typeChecker = defaultTypeChecker) {
27
+ this.typeChecker = typeChecker;
28
+ }
29
+ validateConnection(sourceNode, targetNode, _edge) {
30
+ // Check if source node output schema is compatible with target node input schema
31
+ return this.getCompatibleTypes(sourceNode.outputSchema, targetNode.inputSchema);
32
+ }
33
+ getCompatibleTypes(sourceSchema, targetSchema) {
34
+ return this.typeChecker(sourceSchema, targetSchema);
35
+ }
36
+ // Validate entire flow for type compatibility
37
+ validateFlow(nodes, edges) {
38
+ const errors = [];
39
+ const nodeMap = new Map(nodes.map((node) => [node.id, node]));
40
+ for (const edge of edges) {
41
+ const sourceNode = nodeMap.get(edge.source);
42
+ const targetNode = nodeMap.get(edge.target);
43
+ if (!sourceNode) {
44
+ errors.push(`Source node ${edge.source} not found`);
45
+ continue;
46
+ }
47
+ if (!targetNode) {
48
+ errors.push(`Target node ${edge.target} not found`);
49
+ continue;
50
+ }
51
+ if (!this.validateConnection(sourceNode, targetNode, edge)) {
52
+ errors.push(`Schema mismatch: ${sourceNode.id} output schema incompatible with ${targetNode.id} input schema`);
53
+ }
54
+ }
55
+ return {
56
+ isValid: errors.length === 0,
57
+ errors,
58
+ };
59
+ }
60
+ // Get expected input schemas for a node based on its incoming edges
61
+ getExpectedInputSchemas(nodeId, nodes, edges) {
62
+ const nodeMap = new Map(nodes.map((node) => [node.id, node]));
63
+ const expectedSchemas = {};
64
+ for (const edge of edges) {
65
+ if (edge.target === nodeId) {
66
+ const sourceNode = nodeMap.get(edge.source);
67
+ if (sourceNode) {
68
+ const portKey = edge.sourcePort || edge.source;
69
+ expectedSchemas[portKey] = sourceNode.outputSchema;
70
+ }
71
+ }
72
+ }
73
+ return expectedSchemas;
74
+ }
75
+ // Get actual output schemas for a node based on its outgoing edges
76
+ getActualOutputSchemas(nodeId, nodes, edges) {
77
+ const nodeMap = new Map(nodes.map((node) => [node.id, node]));
78
+ const actualSchemas = {};
79
+ for (const edge of edges) {
80
+ if (edge.source === nodeId) {
81
+ const targetNode = nodeMap.get(edge.target);
82
+ if (targetNode) {
83
+ const portKey = edge.targetPort || edge.target;
84
+ actualSchemas[portKey] = targetNode.inputSchema;
85
+ }
86
+ }
87
+ }
88
+ return actualSchemas;
89
+ }
90
+ // Validate data against a schema
91
+ validateData(data, schema) {
92
+ try {
93
+ schema.parse(data);
94
+ return { isValid: true, errors: [] };
95
+ }
96
+ catch (error) {
97
+ if (error instanceof Error && "errors" in error) {
98
+ return {
99
+ isValid: false,
100
+ errors: error.errors.map((err) => `${err.path.join(".")}: ${err.message}`),
101
+ };
102
+ }
103
+ return {
104
+ isValid: false,
105
+ errors: [error instanceof Error ? error.message : "Validation failed"],
106
+ };
107
+ }
108
+ }
109
+ }
110
+ // Utility functions for common type checks
111
+ export const typeUtils = {
112
+ // Check if a schema is assignable to another
113
+ isAssignable(fromSchema, toSchema) {
114
+ return defaultTypeChecker(fromSchema, toSchema);
115
+ },
116
+ // Get the most specific common schema
117
+ getCommonSchema(schema1, schema2) {
118
+ if (schema1 === schema2)
119
+ return schema1;
120
+ // For now, return the more specific schema or schema1
121
+ // In a more sophisticated system, you'd compute the intersection
122
+ return schema1;
123
+ },
124
+ // Check if a value matches a schema
125
+ matchesSchema(value, schema) {
126
+ try {
127
+ schema.parse(value);
128
+ return true;
129
+ }
130
+ catch {
131
+ return false;
132
+ }
133
+ },
134
+ };
@@ -0,0 +1,11 @@
1
+ import type { UploadFile } from "../../types";
2
+ type FileMetadata = UploadFile["metadata"];
3
+ export type ResolvedUploadMetadata = {
4
+ type: string;
5
+ fileName: string;
6
+ metadata: FileMetadata;
7
+ metadataJson: string | undefined;
8
+ };
9
+ export declare function resolveUploadMetadata(metadata: FileMetadata): ResolvedUploadMetadata;
10
+ export {};
11
+ //# sourceMappingURL=resolve-upload-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-upload-metadata.d.ts","sourceRoot":"","sources":["../../../src/flow/utils/resolve-upload-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,GACrB,sBAAsB,CAkCxB"}
@@ -0,0 +1,28 @@
1
+ export function resolveUploadMetadata(metadata) {
2
+ if (!metadata) {
3
+ return {
4
+ type: "",
5
+ fileName: "",
6
+ metadata: undefined,
7
+ metadataJson: undefined,
8
+ };
9
+ }
10
+ const normalized = { ...metadata };
11
+ const type = String(normalized.type || normalized.mimeType || normalized["content-type"] || "");
12
+ if (type) {
13
+ normalized.type ||= type;
14
+ normalized.mimeType ||= type;
15
+ }
16
+ const fileName = String(normalized.fileName || normalized.originalName || normalized.name || "");
17
+ if (fileName) {
18
+ normalized.fileName ||= fileName;
19
+ normalized.originalName ||= fileName;
20
+ normalized.name ||= fileName;
21
+ }
22
+ return {
23
+ type,
24
+ fileName,
25
+ metadata: normalized,
26
+ metadataJson: JSON.stringify(normalized),
27
+ };
28
+ }