@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,38 @@
1
+ import { Stream } from "effect";
2
+ import { UploadistaError } from "../errors";
3
+ /**
4
+ * Converts a ReadableStream to an Effect Stream.
5
+ *
6
+ * This utility function wraps a ReadableStream in an Effect Stream, providing
7
+ * proper error handling and integration with the Effect ecosystem. It's used
8
+ * throughout the upload system to convert raw streams into Effect-compatible
9
+ * streams for processing.
10
+ *
11
+ * The function handles:
12
+ * - Stream conversion with proper error mapping
13
+ * - UploadistaError creation for stream errors
14
+ * - Integration with Effect Stream processing
15
+ *
16
+ * @param data - The ReadableStream to convert
17
+ * @returns Effect Stream that can be processed with Effect operations
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Convert a file stream to Effect Stream
22
+ * const fileStream = new ReadableStream(...);
23
+ * const effectStream = convertToStream(fileStream);
24
+ *
25
+ * // Process with Effect operations
26
+ * const processedStream = effectStream.pipe(
27
+ * Stream.map((chunk) => processChunk(chunk)),
28
+ * Stream.filter((chunk) => chunk.length > 0)
29
+ * );
30
+ *
31
+ * // Run the stream
32
+ * await Stream.runForEach(processedStream, (chunk) =>
33
+ * Effect.logInfo(`Processed chunk: ${chunk.length} bytes`)
34
+ * );
35
+ * ```
36
+ */
37
+ export declare function convertToStream<T>(data: ReadableStream<T>): Stream.Stream<T, UploadistaError, never>;
38
+ //# sourceMappingURL=convert-to-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-to-stream.d.ts","sourceRoot":"","sources":["../../src/upload/convert-to-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,4CAUzD"}
@@ -0,0 +1,43 @@
1
+ import { Stream } from "effect";
2
+ import { UploadistaError } from "../errors";
3
+ /**
4
+ * Converts a ReadableStream to an Effect Stream.
5
+ *
6
+ * This utility function wraps a ReadableStream in an Effect Stream, providing
7
+ * proper error handling and integration with the Effect ecosystem. It's used
8
+ * throughout the upload system to convert raw streams into Effect-compatible
9
+ * streams for processing.
10
+ *
11
+ * The function handles:
12
+ * - Stream conversion with proper error mapping
13
+ * - UploadistaError creation for stream errors
14
+ * - Integration with Effect Stream processing
15
+ *
16
+ * @param data - The ReadableStream to convert
17
+ * @returns Effect Stream that can be processed with Effect operations
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Convert a file stream to Effect Stream
22
+ * const fileStream = new ReadableStream(...);
23
+ * const effectStream = convertToStream(fileStream);
24
+ *
25
+ * // Process with Effect operations
26
+ * const processedStream = effectStream.pipe(
27
+ * Stream.map((chunk) => processChunk(chunk)),
28
+ * Stream.filter((chunk) => chunk.length > 0)
29
+ * );
30
+ *
31
+ * // Run the stream
32
+ * await Stream.runForEach(processedStream, (chunk) =>
33
+ * Effect.logInfo(`Processed chunk: ${chunk.length} bytes`)
34
+ * );
35
+ * ```
36
+ */
37
+ export function convertToStream(data) {
38
+ return Stream.fromReadableStream(() => data, (error) => new UploadistaError({
39
+ code: "UNKNOWN_ERROR",
40
+ status: 500,
41
+ body: String(error),
42
+ }));
43
+ }
@@ -0,0 +1,14 @@
1
+ import { Effect } from "effect";
2
+ import type { UploadFile } from "../types";
3
+ import type { UploadServerShape } from "./upload-server";
4
+ export declare const uploadFileToFlowFile: (uploadFile: UploadFile, uploadServer: UploadServerShape) => Effect.Effect<{
5
+ path: string;
6
+ inputBytes: Uint8Array<ArrayBufferLike>;
7
+ metadata: {
8
+ mimeType: string;
9
+ size: number;
10
+ originalName: string;
11
+ extension: string;
12
+ };
13
+ }, import("..").UploadistaError, never>;
14
+ //# sourceMappingURL=convert-upload-to-flow-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-upload-to-flow-file.d.ts","sourceRoot":"","sources":["../../src/upload/convert-upload-to-flow-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,eAAO,MAAM,oBAAoB,GAC/B,YAAY,UAAU,EACtB,cAAc,iBAAiB;;;;;;;;;uCAqBhC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Effect } from "effect";
2
+ import { detectMimeType } from "./mime";
3
+ // Helper to convert UploadFile to FlowFile
4
+ export const uploadFileToFlowFile = (uploadFile, uploadServer) => {
5
+ return Effect.gen(function* () {
6
+ const metadata = uploadFile.metadata || {};
7
+ const originalName = metadata.fileName || `upload-${uploadFile.id}`;
8
+ const mimeType = metadata.type || detectMimeType(new Uint8Array(0), originalName);
9
+ const fileBytes = yield* uploadServer.read(uploadFile.id);
10
+ return {
11
+ path: originalName,
12
+ inputBytes: fileBytes,
13
+ metadata: {
14
+ mimeType,
15
+ size: uploadFile.size || 0,
16
+ originalName,
17
+ extension: originalName.split(".").pop() || "",
18
+ },
19
+ };
20
+ });
21
+ };
@@ -0,0 +1,68 @@
1
+ import { Effect } from "effect";
2
+ import { type EventEmitter, type InputFile, type KvStore, type UploadEvent, type UploadFile, type UploadFileDataStoresShape } from "../types";
3
+ import type { GenerateIdShape } from "../utils/generate-id";
4
+ /**
5
+ * Creates a new upload and initializes it in the storage system.
6
+ *
7
+ * This function handles the initial upload creation process including:
8
+ * - Generating a unique upload ID
9
+ * - Routing to appropriate data store based on storage ID
10
+ * - Creating the upload record in the data store
11
+ * - Storing upload metadata in KV store
12
+ * - Emitting upload started events
13
+ * - Parsing and validating metadata
14
+ *
15
+ * The function includes comprehensive observability with:
16
+ * - Effect tracing spans for performance monitoring
17
+ * - Metrics tracking for upload creation, file sizes, and success rates
18
+ * - Structured logging for debugging and monitoring
19
+ * - Error handling with proper UploadistaError types
20
+ *
21
+ * @param inputFile - Input file configuration including storage, size, type, etc.
22
+ * @param clientId - Client identifier (null for anonymous uploads)
23
+ * @param dataStoreService - Service for routing to appropriate data stores
24
+ * @param kvStore - KV store for upload metadata persistence
25
+ * @param eventEmitter - Event emitter for upload lifecycle events
26
+ * @param generateId - ID generator for creating unique upload identifiers
27
+ * @returns Effect that yields the created UploadFile
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Create a new upload
32
+ * const inputFile: InputFile = {
33
+ * storageId: "s3-production",
34
+ * size: 1024000,
35
+ * type: "image/jpeg",
36
+ * fileName: "photo.jpg",
37
+ * metadata: JSON.stringify({ category: "photos" })
38
+ * };
39
+ *
40
+ * const createEffect = createUpload(
41
+ * inputFile,
42
+ * "client-123",
43
+ * {
44
+ * dataStoreService,
45
+ * kvStore,
46
+ * eventEmitter,
47
+ * generateId
48
+ * }
49
+ * );
50
+ *
51
+ * // Run with dependencies
52
+ * const upload = await Effect.runPromise(
53
+ * createEffect.pipe(
54
+ * Effect.provide(dataStoreLayer),
55
+ * Effect.provide(kvStoreLayer),
56
+ * Effect.provide(eventEmitterLayer),
57
+ * Effect.provide(generateIdLayer)
58
+ * )
59
+ * );
60
+ * ```
61
+ */
62
+ export declare const createUpload: (inputFile: InputFile, clientId: string | null, { dataStoreService, kvStore, eventEmitter, generateId, }: {
63
+ dataStoreService: UploadFileDataStoresShape;
64
+ kvStore: KvStore<UploadFile>;
65
+ eventEmitter: EventEmitter<UploadEvent>;
66
+ generateId: GenerateIdShape;
67
+ }) => Effect.Effect<UploadFile, import("..").UploadistaError, never>;
68
+ //# sourceMappingURL=create-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-upload.d.ts","sourceRoot":"","sources":["../../src/upload/create-upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA4B,MAAM,QAAQ,CAAC;AAC1D,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,WAAW,EAEhB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC/B,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,eAAO,MAAM,YAAY,GACvB,WAAW,SAAS,EACpB,UAAU,MAAM,GAAG,IAAI,EACvB,0DAKG;IACD,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,UAAU,EAAE,eAAe,CAAC;CAC7B,mEAkIA,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { Effect, Metric, MetricBoundaries } from "effect";
2
+ import { UploadEventType, } from "../types";
3
+ /**
4
+ * Creates a new upload and initializes it in the storage system.
5
+ *
6
+ * This function handles the initial upload creation process including:
7
+ * - Generating a unique upload ID
8
+ * - Routing to appropriate data store based on storage ID
9
+ * - Creating the upload record in the data store
10
+ * - Storing upload metadata in KV store
11
+ * - Emitting upload started events
12
+ * - Parsing and validating metadata
13
+ *
14
+ * The function includes comprehensive observability with:
15
+ * - Effect tracing spans for performance monitoring
16
+ * - Metrics tracking for upload creation, file sizes, and success rates
17
+ * - Structured logging for debugging and monitoring
18
+ * - Error handling with proper UploadistaError types
19
+ *
20
+ * @param inputFile - Input file configuration including storage, size, type, etc.
21
+ * @param clientId - Client identifier (null for anonymous uploads)
22
+ * @param dataStoreService - Service for routing to appropriate data stores
23
+ * @param kvStore - KV store for upload metadata persistence
24
+ * @param eventEmitter - Event emitter for upload lifecycle events
25
+ * @param generateId - ID generator for creating unique upload identifiers
26
+ * @returns Effect that yields the created UploadFile
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * // Create a new upload
31
+ * const inputFile: InputFile = {
32
+ * storageId: "s3-production",
33
+ * size: 1024000,
34
+ * type: "image/jpeg",
35
+ * fileName: "photo.jpg",
36
+ * metadata: JSON.stringify({ category: "photos" })
37
+ * };
38
+ *
39
+ * const createEffect = createUpload(
40
+ * inputFile,
41
+ * "client-123",
42
+ * {
43
+ * dataStoreService,
44
+ * kvStore,
45
+ * eventEmitter,
46
+ * generateId
47
+ * }
48
+ * );
49
+ *
50
+ * // Run with dependencies
51
+ * const upload = await Effect.runPromise(
52
+ * createEffect.pipe(
53
+ * Effect.provide(dataStoreLayer),
54
+ * Effect.provide(kvStoreLayer),
55
+ * Effect.provide(eventEmitterLayer),
56
+ * Effect.provide(generateIdLayer)
57
+ * )
58
+ * );
59
+ * ```
60
+ */
61
+ export const createUpload = (inputFile, clientId, { dataStoreService, kvStore, eventEmitter, generateId, }) => Effect.gen(function* () {
62
+ // Get datastore using Effect
63
+ const dataStore = yield* dataStoreService.getDataStore(inputFile.storageId, clientId);
64
+ const id = yield* generateId.generateId();
65
+ const { size, type, fileName, lastModified, metadata, flow } = inputFile;
66
+ let parsedMetadata = {};
67
+ if (metadata) {
68
+ try {
69
+ parsedMetadata = JSON.parse(metadata);
70
+ }
71
+ catch {
72
+ parsedMetadata = {};
73
+ }
74
+ }
75
+ const metadataObject = {
76
+ ...parsedMetadata,
77
+ type,
78
+ fileName: fileName ?? "",
79
+ };
80
+ if (lastModified) {
81
+ metadataObject.lastModified = lastModified.toString();
82
+ }
83
+ const file = {
84
+ id,
85
+ size,
86
+ metadata: metadataObject,
87
+ offset: 0,
88
+ creationDate: new Date().toISOString(),
89
+ storage: {
90
+ id: inputFile.storageId,
91
+ type,
92
+ path: "",
93
+ bucket: dataStore.bucket,
94
+ },
95
+ flow,
96
+ };
97
+ // Create file using Effect
98
+ const fileCreated = yield* dataStore.create(file);
99
+ // Store in KV store
100
+ yield* kvStore.set(id, fileCreated);
101
+ // Emit event
102
+ yield* eventEmitter.emit(id, {
103
+ type: UploadEventType.UPLOAD_STARTED,
104
+ data: fileCreated,
105
+ flow: fileCreated.flow,
106
+ });
107
+ return fileCreated;
108
+ }).pipe(
109
+ // Add tracing span for the entire create operation
110
+ Effect.withSpan("upload-create", {
111
+ attributes: {
112
+ "upload.file_name": inputFile.fileName ?? "unknown",
113
+ "upload.file_size": inputFile.size?.toString() ?? "0",
114
+ "upload.storage_id": inputFile.storageId,
115
+ "upload.mime_type": inputFile.type,
116
+ "upload.has_flow": inputFile.flow ? "true" : "false",
117
+ },
118
+ }),
119
+ // Track upload creation metrics
120
+ Effect.tap((file) => Effect.gen(function* () {
121
+ // Increment upload created counter
122
+ yield* Metric.increment(Metric.counter("upload_created_total", {
123
+ description: "Total number of uploads created",
124
+ }));
125
+ // Record file size
126
+ if (file.size) {
127
+ const fileSizeHistogram = Metric.histogram("upload_file_size_bytes", MetricBoundaries.exponential({
128
+ start: 1024,
129
+ factor: 2,
130
+ count: 25,
131
+ }));
132
+ yield* Metric.update(fileSizeHistogram, file.size);
133
+ }
134
+ // Track active uploads gauge
135
+ const activeUploadsGauge = Metric.gauge("active_uploads");
136
+ yield* Metric.increment(activeUploadsGauge);
137
+ })),
138
+ // Add structured logging
139
+ Effect.tap((file) => Effect.logInfo("Upload created").pipe(Effect.annotateLogs({
140
+ "upload.id": file.id,
141
+ "upload.file_name": inputFile.fileName ?? "unknown",
142
+ "upload.file_size": inputFile.size?.toString() ?? "0",
143
+ "upload.storage_id": inputFile.storageId,
144
+ }))),
145
+ // Handle errors with logging and metrics
146
+ Effect.tapError((error) => Effect.gen(function* () {
147
+ // Log error
148
+ yield* Effect.logError("Upload creation failed").pipe(Effect.annotateLogs({
149
+ "upload.file_name": inputFile.fileName ?? "unknown",
150
+ "upload.storage_id": inputFile.storageId,
151
+ error: String(error),
152
+ }));
153
+ // Track failed upload metric
154
+ yield* Metric.increment(Metric.counter("upload_failed_total", {
155
+ description: "Total number of uploads that failed",
156
+ }));
157
+ })));
@@ -0,0 +1 @@
1
+ require(`../uploadista-error-BB-Wdiz9.cjs`),require(`../errors-CRm1FHHT.cjs`),require(`../types-BT-cvi7T.cjs`);const e=require(`../upload-DLuICjpP.cjs`);require(`../generate-id-xHp_Z7Cl.cjs`),require(`../stream-limiter-JgOwmkMa.cjs`),exports.UploadServer=e.UploadServer,exports.UploadStrategyNegotiator=e.UploadStrategyNegotiator,exports.createUploadServer=e.createUploadServer,exports.detectMimeType=e.detectMimeType,exports.uploadServer=e.uploadServer;
@@ -0,0 +1,6 @@
1
+ import "../uploadista-error-kKlhLRhY.cjs";
2
+ import "../index-BtBZHVmz.cjs";
3
+ import { NegotiatedStrategy, UploadServer, UploadServerOptions, UploadServerShape, UploadStrategyNegotiator, UploadStrategyOptions, createUploadServer, detectMimeType, uploadServer } from "../index-BO8GZlbD.cjs";
4
+ import "../generate-id-LjJRLD6N.cjs";
5
+ import "../semaphore-BHprIjFI.cjs";
6
+ export { NegotiatedStrategy, UploadServer, UploadServerOptions, UploadServerShape, UploadStrategyNegotiator, UploadStrategyOptions, createUploadServer, detectMimeType, uploadServer };
@@ -0,0 +1,4 @@
1
+ export * from "./mime";
2
+ export * from "./upload-server";
3
+ export * from "./upload-strategy-negotiator";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upload/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./mime";
2
+ export * from "./upload-server";
3
+ export * from "./upload-strategy-negotiator";
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Detect MIME type from buffer using magic bytes (file signatures).
3
+ * Supports a wide range of common file types including images, videos, audio, documents, and archives.
4
+ *
5
+ * @param buffer - File content as Uint8Array
6
+ * @param filename - Optional filename for extension-based fallback
7
+ * @returns Detected MIME type or "application/octet-stream" if unknown
8
+ */
9
+ export declare const detectMimeType: (buffer: Uint8Array, filename?: string) => string;
10
+ /**
11
+ * Compare two MIME types with lenient matching.
12
+ * Matches on major type (e.g., "image/*") to allow for minor variations.
13
+ *
14
+ * @param declared - MIME type provided by client
15
+ * @param detected - MIME type detected from file content
16
+ * @returns true if MIME types are compatible
17
+ *
18
+ * @example
19
+ * compareMimeTypes("image/png", "image/apng") // true
20
+ * compareMimeTypes("image/jpeg", "image/png") // true (both images)
21
+ * compareMimeTypes("image/png", "application/pdf") // false
22
+ */
23
+ export declare function compareMimeTypes(declared: string, detected: string): boolean;
24
+ //# sourceMappingURL=mime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/upload/mime.ts"],"names":[],"mappings":"AA2BA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,UAAU,EAClB,WAAW,MAAM,KAChB,MAkXF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY5E"}