@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,378 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import type { UploadistaError } from "../errors";
3
+ import type { FlowEvent } from "../flow/event";
4
+ import type { WebSocketConnection } from "./websocket";
5
+ /**
6
+ * Base event emitter interface for raw string message broadcasting.
7
+ *
8
+ * This is the low-level interface that event broadcasting implementations
9
+ * (WebSocket, Server-Sent Events, etc.) implement. It emits raw string messages
10
+ * without type safety or serialization.
11
+ *
12
+ * @property subscribe - Registers a WebSocket connection to receive events for a key
13
+ * @property unsubscribe - Removes subscription for a key
14
+ * @property emit - Broadcasts a string message to all subscribers of a key
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Implement BaseEventEmitter with WebSocket broadcast
19
+ * const websocketEmitter: BaseEventEmitter = {
20
+ * subscribe: (key, connection) => Effect.sync(() => {
21
+ * connections.set(key, [...(connections.get(key) || []), connection]);
22
+ * }),
23
+ *
24
+ * unsubscribe: (key) => Effect.sync(() => {
25
+ * connections.delete(key);
26
+ * }),
27
+ *
28
+ * emit: (key, event) => Effect.sync(() => {
29
+ * const subs = connections.get(key) || [];
30
+ * subs.forEach(conn => conn.send(event));
31
+ * })
32
+ * };
33
+ * ```
34
+ */
35
+ export interface BaseEventEmitter {
36
+ readonly subscribe: (key: string, connection: WebSocketConnection) => Effect.Effect<void, UploadistaError>;
37
+ readonly unsubscribe: (key: string) => Effect.Effect<void, UploadistaError>;
38
+ readonly emit: (key: string, event: string) => Effect.Effect<void, UploadistaError>;
39
+ }
40
+ /**
41
+ * Type-safe event emitter interface with automatic serialization.
42
+ *
43
+ * This wraps a BaseEventEmitter and handles event serialization to JSON messages,
44
+ * providing type safety for events and ensuring consistent message format.
45
+ *
46
+ * @template TEvent - The type of events emitted by this emitter
47
+ *
48
+ * @property subscribe - Registers a WebSocket connection to receive typed events
49
+ * @property unsubscribe - Removes subscription
50
+ * @property emit - Serializes and broadcasts a typed event
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // Use a typed event emitter
55
+ * const uploadEmitter: EventEmitter<UploadEvent> = new TypedEventEmitter(
56
+ * baseEmitter,
57
+ * (event) => JSON.stringify({ type: 'upload', payload: event })
58
+ * );
59
+ *
60
+ * // Emit type-safe events
61
+ * const program = Effect.gen(function* () {
62
+ * const event: UploadEvent = {
63
+ * uploadId: "upload123",
64
+ * type: "progress",
65
+ * offset: 1024,
66
+ * size: 2048
67
+ * };
68
+ *
69
+ * // Automatic serialization
70
+ * yield* uploadEmitter.emit("upload123", event);
71
+ * });
72
+ * ```
73
+ */
74
+ export type EventEmitter<TEvent> = {
75
+ readonly subscribe: (key: string, connection: WebSocketConnection) => Effect.Effect<void, UploadistaError>;
76
+ readonly unsubscribe: (key: string) => Effect.Effect<void, UploadistaError>;
77
+ readonly emit: (key: string, event: TEvent) => Effect.Effect<void, UploadistaError>;
78
+ };
79
+ /**
80
+ * Typed wrapper class that adds event serialization to a BaseEventEmitter.
81
+ *
82
+ * This class implements the EventEmitter interface by wrapping a BaseEventEmitter
83
+ * and handling serialization for a specific event type. It converts typed events
84
+ * to JSON message strings before broadcasting.
85
+ *
86
+ * @template TEvent - The type of events to emit
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Create a typed emitter for UploadEvent
91
+ * const uploadEmitter = new TypedEventEmitter<UploadEvent>(
92
+ * baseEmitter,
93
+ * (event) => JSON.stringify({
94
+ * type: "upload_event",
95
+ * payload: event,
96
+ * timestamp: new Date().toISOString()
97
+ * })
98
+ * );
99
+ *
100
+ * // Use the emitter
101
+ * const effect = Effect.gen(function* () {
102
+ * // Subscribe a WebSocket connection
103
+ * yield* uploadEmitter.subscribe("upload123", websocket);
104
+ *
105
+ * // Emit an event (automatically serialized)
106
+ * yield* uploadEmitter.emit("upload123", {
107
+ * uploadId: "upload123",
108
+ * type: "completed",
109
+ * offset: 2048,
110
+ * size: 2048
111
+ * });
112
+ *
113
+ * // Unsubscribe when done
114
+ * yield* uploadEmitter.unsubscribe("upload123");
115
+ * });
116
+ *
117
+ * // Custom message format
118
+ * const customEmitter = new TypedEventEmitter<MyEvent>(
119
+ * baseEmitter,
120
+ * (event) => `EVENT:${event.type}:${JSON.stringify(event.data)}`
121
+ * );
122
+ * ```
123
+ */
124
+ export declare class TypedEventEmitter<TEvent> implements EventEmitter<TEvent> {
125
+ private baseEmitter;
126
+ private eventToMessage;
127
+ constructor(baseEmitter: BaseEventEmitter, eventToMessage: (event: TEvent) => string);
128
+ subscribe: (key: string, connection: WebSocketConnection) => Effect.Effect<void, UploadistaError>;
129
+ unsubscribe: (key: string) => Effect.Effect<void, UploadistaError>;
130
+ emit: (key: string, event: TEvent) => Effect.Effect<void, UploadistaError>;
131
+ }
132
+ /**
133
+ * Default event-to-message serialization helper.
134
+ *
135
+ * Creates a standardized JSON message format with type, payload, and timestamp.
136
+ * This is the recommended way to serialize events for WebSocket transmission.
137
+ *
138
+ * @param messageType - The message type identifier ("upload_event" or "flow_event")
139
+ * @returns An object with an eventToMessage function
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * // Create emitter with standard serialization
144
+ * const emitter = new TypedEventEmitter<UploadEvent>(
145
+ * baseEmitter,
146
+ * eventToMessageSerializer("upload_event").eventToMessage
147
+ * );
148
+ *
149
+ * // Messages will be formatted as:
150
+ * // {
151
+ * // "type": "upload_event",
152
+ * // "payload": { ...event data... },
153
+ * // "timestamp": "2024-01-15T10:30:00.000Z"
154
+ * // }
155
+ * ```
156
+ */
157
+ export declare const eventToMessageSerializer: (messageType: "upload_event" | "flow_event") => {
158
+ eventToMessage: <T>(event: T) => string;
159
+ };
160
+ declare const BaseEventEmitterService_base: Context.TagClass<BaseEventEmitterService, "BaseEventEmitter", BaseEventEmitter>;
161
+ /**
162
+ * Effect-TS context tag for the base untyped event emitter.
163
+ *
164
+ * This is the low-level emitter that broadcasting implementations provide.
165
+ * Most application code should use typed emitters like UploadEventEmitter instead.
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * // Provide a base emitter implementation
170
+ * const baseEmitterLayer = Layer.succeed(BaseEventEmitterService, websocketEmitter);
171
+ *
172
+ * // Use in an Effect
173
+ * const effect = Effect.gen(function* () {
174
+ * const baseEmitter = yield* BaseEventEmitterService;
175
+ * yield* baseEmitter.emit("channel1", "raw message");
176
+ * });
177
+ * ```
178
+ */
179
+ export declare class BaseEventEmitterService extends BaseEventEmitterService_base {
180
+ }
181
+ declare const UploadEventEmitter_base: Context.TagClass<UploadEventEmitter, "UploadEventEmitter", EventEmitter<{
182
+ type: import("./upload-event").UploadEventType.UPLOAD_STARTED | import("./upload-event").UploadEventType.UPLOAD_COMPLETE;
183
+ data: {
184
+ id: string;
185
+ offset: number;
186
+ storage: {
187
+ id: string;
188
+ type: string;
189
+ path?: string | undefined;
190
+ uploadId?: string | undefined;
191
+ bucket?: string | undefined;
192
+ };
193
+ size?: number | undefined;
194
+ metadata?: Record<string, string | number | boolean> | undefined;
195
+ creationDate?: string | undefined;
196
+ url?: string | undefined;
197
+ sizeIsDeferred?: boolean | undefined;
198
+ checksum?: string | undefined;
199
+ checksumAlgorithm?: string | undefined;
200
+ flow?: {
201
+ flowId: string;
202
+ nodeId: string;
203
+ jobId: string;
204
+ } | undefined;
205
+ };
206
+ flow?: {
207
+ flowId: string;
208
+ nodeId: string;
209
+ jobId: string;
210
+ } | undefined;
211
+ } | {
212
+ type: import("./upload-event").UploadEventType.UPLOAD_PROGRESS;
213
+ data: {
214
+ id: string;
215
+ progress: number;
216
+ total: number;
217
+ };
218
+ flow?: {
219
+ flowId: string;
220
+ nodeId: string;
221
+ jobId: string;
222
+ } | undefined;
223
+ } | {
224
+ type: import("./upload-event").UploadEventType.UPLOAD_FAILED;
225
+ data: {
226
+ id: string;
227
+ error: string;
228
+ };
229
+ flow?: {
230
+ flowId: string;
231
+ nodeId: string;
232
+ jobId: string;
233
+ } | undefined;
234
+ } | {
235
+ type: import("./upload-event").UploadEventType.UPLOAD_VALIDATION_SUCCESS;
236
+ data: {
237
+ id: string;
238
+ validationType: "checksum" | "mimetype";
239
+ algorithm?: string | undefined;
240
+ };
241
+ flow?: {
242
+ flowId: string;
243
+ nodeId: string;
244
+ jobId: string;
245
+ } | undefined;
246
+ } | {
247
+ type: import("./upload-event").UploadEventType.UPLOAD_VALIDATION_FAILED;
248
+ data: {
249
+ id: string;
250
+ reason: string;
251
+ expected: string;
252
+ actual: string;
253
+ };
254
+ flow?: {
255
+ flowId: string;
256
+ nodeId: string;
257
+ jobId: string;
258
+ } | undefined;
259
+ } | {
260
+ type: import("./upload-event").UploadEventType.UPLOAD_VALIDATION_WARNING;
261
+ data: {
262
+ id: string;
263
+ message: string;
264
+ };
265
+ flow?: {
266
+ flowId: string;
267
+ nodeId: string;
268
+ jobId: string;
269
+ } | undefined;
270
+ }>>;
271
+ /**
272
+ * Effect-TS context tag for the UploadEvent typed emitter.
273
+ *
274
+ * This provides type-safe event emission for upload progress and lifecycle events.
275
+ * It's the primary way to broadcast upload events to connected clients.
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * const uploadEffect = Effect.gen(function* () {
280
+ * const emitter = yield* UploadEventEmitter;
281
+ *
282
+ * // Subscribe a client to upload events
283
+ * yield* emitter.subscribe("upload123", websocketConnection);
284
+ *
285
+ * // Emit progress event
286
+ * yield* emitter.emit("upload123", {
287
+ * uploadId: "upload123",
288
+ * type: "progress",
289
+ * offset: 512000,
290
+ * size: 1024000
291
+ * });
292
+ *
293
+ * // Emit completion event
294
+ * yield* emitter.emit("upload123", {
295
+ * uploadId: "upload123",
296
+ * type: "completed",
297
+ * offset: 1024000,
298
+ * size: 1024000
299
+ * });
300
+ * });
301
+ * ```
302
+ */
303
+ export declare class UploadEventEmitter extends UploadEventEmitter_base {
304
+ }
305
+ /**
306
+ * Effect Layer that creates the UploadEventEmitter from a BaseEventEmitter.
307
+ *
308
+ * This layer automatically wires up JSON serialization for UploadEvent objects
309
+ * with the standard "upload_event" message format.
310
+ *
311
+ * @example
312
+ * ```typescript
313
+ * const program = Effect.gen(function* () {
314
+ * const emitter = yield* UploadEventEmitter;
315
+ * // Use the emitter...
316
+ * }).pipe(
317
+ * Effect.provide(uploadEventEmitter),
318
+ * Effect.provide(baseEmitterLayer)
319
+ * );
320
+ * ```
321
+ */
322
+ export declare const uploadEventEmitter: Layer.Layer<UploadEventEmitter, never, BaseEventEmitterService>;
323
+ declare const FlowEventEmitter_base: Context.TagClass<FlowEventEmitter, "FlowEventEmitter", EventEmitter<FlowEvent>>;
324
+ /**
325
+ * Effect-TS context tag for the FlowEvent typed emitter.
326
+ *
327
+ * This provides type-safe event emission for flow processing lifecycle events.
328
+ * It's used to broadcast flow execution progress, node completion, and errors.
329
+ *
330
+ * @example
331
+ * ```typescript
332
+ * const flowEffect = Effect.gen(function* () {
333
+ * const emitter = yield* FlowEventEmitter;
334
+ *
335
+ * // Subscribe a client to flow job events
336
+ * yield* emitter.subscribe("job123", websocketConnection);
337
+ *
338
+ * // Emit node start event
339
+ * yield* emitter.emit("job123", {
340
+ * jobId: "job123",
341
+ * eventType: "NodeStart",
342
+ * flowId: "flow_resize",
343
+ * nodeId: "resize_1"
344
+ * });
345
+ *
346
+ * // Emit node completion event
347
+ * yield* emitter.emit("job123", {
348
+ * jobId: "job123",
349
+ * eventType: "NodeEnd",
350
+ * flowId: "flow_resize",
351
+ * nodeId: "resize_1",
352
+ * result: { width: 800, height: 600 }
353
+ * });
354
+ * });
355
+ * ```
356
+ */
357
+ export declare class FlowEventEmitter extends FlowEventEmitter_base {
358
+ }
359
+ /**
360
+ * Effect Layer that creates the FlowEventEmitter from a BaseEventEmitter.
361
+ *
362
+ * This layer automatically wires up JSON serialization for FlowEvent objects
363
+ * with the standard "flow_event" message format.
364
+ *
365
+ * @example
366
+ * ```typescript
367
+ * const program = Effect.gen(function* () {
368
+ * const emitter = yield* FlowEventEmitter;
369
+ * // Use the emitter...
370
+ * }).pipe(
371
+ * Effect.provide(flowEventEmitter),
372
+ * Effect.provide(baseEmitterLayer)
373
+ * );
374
+ * ```
375
+ */
376
+ export declare const flowEventEmitter: Layer.Layer<FlowEventEmitter, never, BaseEventEmitterService>;
377
+ export {};
378
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/types/event-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ /**
3
+ * Typed wrapper class that adds event serialization to a BaseEventEmitter.
4
+ *
5
+ * This class implements the EventEmitter interface by wrapping a BaseEventEmitter
6
+ * and handling serialization for a specific event type. It converts typed events
7
+ * to JSON message strings before broadcasting.
8
+ *
9
+ * @template TEvent - The type of events to emit
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // Create a typed emitter for UploadEvent
14
+ * const uploadEmitter = new TypedEventEmitter<UploadEvent>(
15
+ * baseEmitter,
16
+ * (event) => JSON.stringify({
17
+ * type: "upload_event",
18
+ * payload: event,
19
+ * timestamp: new Date().toISOString()
20
+ * })
21
+ * );
22
+ *
23
+ * // Use the emitter
24
+ * const effect = Effect.gen(function* () {
25
+ * // Subscribe a WebSocket connection
26
+ * yield* uploadEmitter.subscribe("upload123", websocket);
27
+ *
28
+ * // Emit an event (automatically serialized)
29
+ * yield* uploadEmitter.emit("upload123", {
30
+ * uploadId: "upload123",
31
+ * type: "completed",
32
+ * offset: 2048,
33
+ * size: 2048
34
+ * });
35
+ *
36
+ * // Unsubscribe when done
37
+ * yield* uploadEmitter.unsubscribe("upload123");
38
+ * });
39
+ *
40
+ * // Custom message format
41
+ * const customEmitter = new TypedEventEmitter<MyEvent>(
42
+ * baseEmitter,
43
+ * (event) => `EVENT:${event.type}:${JSON.stringify(event.data)}`
44
+ * );
45
+ * ```
46
+ */
47
+ export class TypedEventEmitter {
48
+ baseEmitter;
49
+ eventToMessage;
50
+ constructor(baseEmitter, eventToMessage) {
51
+ this.baseEmitter = baseEmitter;
52
+ this.eventToMessage = eventToMessage;
53
+ }
54
+ subscribe = (key, connection) => this.baseEmitter.subscribe(key, connection);
55
+ unsubscribe = (key) => this.baseEmitter.unsubscribe(key);
56
+ emit = (key, event) => {
57
+ const message = this.eventToMessage(event);
58
+ return this.baseEmitter.emit(key, message);
59
+ };
60
+ }
61
+ /**
62
+ * Default event-to-message serialization helper.
63
+ *
64
+ * Creates a standardized JSON message format with type, payload, and timestamp.
65
+ * This is the recommended way to serialize events for WebSocket transmission.
66
+ *
67
+ * @param messageType - The message type identifier ("upload_event" or "flow_event")
68
+ * @returns An object with an eventToMessage function
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * // Create emitter with standard serialization
73
+ * const emitter = new TypedEventEmitter<UploadEvent>(
74
+ * baseEmitter,
75
+ * eventToMessageSerializer("upload_event").eventToMessage
76
+ * );
77
+ *
78
+ * // Messages will be formatted as:
79
+ * // {
80
+ * // "type": "upload_event",
81
+ * // "payload": { ...event data... },
82
+ * // "timestamp": "2024-01-15T10:30:00.000Z"
83
+ * // }
84
+ * ```
85
+ */
86
+ export const eventToMessageSerializer = (messageType) => ({
87
+ eventToMessage: (event) => JSON.stringify({
88
+ type: messageType,
89
+ payload: event,
90
+ timestamp: new Date().toISOString(),
91
+ }),
92
+ });
93
+ /**
94
+ * Effect-TS context tag for the base untyped event emitter.
95
+ *
96
+ * This is the low-level emitter that broadcasting implementations provide.
97
+ * Most application code should use typed emitters like UploadEventEmitter instead.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // Provide a base emitter implementation
102
+ * const baseEmitterLayer = Layer.succeed(BaseEventEmitterService, websocketEmitter);
103
+ *
104
+ * // Use in an Effect
105
+ * const effect = Effect.gen(function* () {
106
+ * const baseEmitter = yield* BaseEventEmitterService;
107
+ * yield* baseEmitter.emit("channel1", "raw message");
108
+ * });
109
+ * ```
110
+ */
111
+ export class BaseEventEmitterService extends Context.Tag("BaseEventEmitter")() {
112
+ }
113
+ /**
114
+ * Effect-TS context tag for the UploadEvent typed emitter.
115
+ *
116
+ * This provides type-safe event emission for upload progress and lifecycle events.
117
+ * It's the primary way to broadcast upload events to connected clients.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const uploadEffect = Effect.gen(function* () {
122
+ * const emitter = yield* UploadEventEmitter;
123
+ *
124
+ * // Subscribe a client to upload events
125
+ * yield* emitter.subscribe("upload123", websocketConnection);
126
+ *
127
+ * // Emit progress event
128
+ * yield* emitter.emit("upload123", {
129
+ * uploadId: "upload123",
130
+ * type: "progress",
131
+ * offset: 512000,
132
+ * size: 1024000
133
+ * });
134
+ *
135
+ * // Emit completion event
136
+ * yield* emitter.emit("upload123", {
137
+ * uploadId: "upload123",
138
+ * type: "completed",
139
+ * offset: 1024000,
140
+ * size: 1024000
141
+ * });
142
+ * });
143
+ * ```
144
+ */
145
+ export class UploadEventEmitter extends Context.Tag("UploadEventEmitter")() {
146
+ }
147
+ /**
148
+ * Effect Layer that creates the UploadEventEmitter from a BaseEventEmitter.
149
+ *
150
+ * This layer automatically wires up JSON serialization for UploadEvent objects
151
+ * with the standard "upload_event" message format.
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const program = Effect.gen(function* () {
156
+ * const emitter = yield* UploadEventEmitter;
157
+ * // Use the emitter...
158
+ * }).pipe(
159
+ * Effect.provide(uploadEventEmitter),
160
+ * Effect.provide(baseEmitterLayer)
161
+ * );
162
+ * ```
163
+ */
164
+ export const uploadEventEmitter = Layer.effect(UploadEventEmitter, Effect.gen(function* () {
165
+ const baseEmitter = yield* BaseEventEmitterService;
166
+ return new TypedEventEmitter(baseEmitter, eventToMessageSerializer("upload_event").eventToMessage);
167
+ }));
168
+ /**
169
+ * Effect-TS context tag for the FlowEvent typed emitter.
170
+ *
171
+ * This provides type-safe event emission for flow processing lifecycle events.
172
+ * It's used to broadcast flow execution progress, node completion, and errors.
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const flowEffect = Effect.gen(function* () {
177
+ * const emitter = yield* FlowEventEmitter;
178
+ *
179
+ * // Subscribe a client to flow job events
180
+ * yield* emitter.subscribe("job123", websocketConnection);
181
+ *
182
+ * // Emit node start event
183
+ * yield* emitter.emit("job123", {
184
+ * jobId: "job123",
185
+ * eventType: "NodeStart",
186
+ * flowId: "flow_resize",
187
+ * nodeId: "resize_1"
188
+ * });
189
+ *
190
+ * // Emit node completion event
191
+ * yield* emitter.emit("job123", {
192
+ * jobId: "job123",
193
+ * eventType: "NodeEnd",
194
+ * flowId: "flow_resize",
195
+ * nodeId: "resize_1",
196
+ * result: { width: 800, height: 600 }
197
+ * });
198
+ * });
199
+ * ```
200
+ */
201
+ export class FlowEventEmitter extends Context.Tag("FlowEventEmitter")() {
202
+ }
203
+ /**
204
+ * Effect Layer that creates the FlowEventEmitter from a BaseEventEmitter.
205
+ *
206
+ * This layer automatically wires up JSON serialization for FlowEvent objects
207
+ * with the standard "flow_event" message format.
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const program = Effect.gen(function* () {
212
+ * const emitter = yield* FlowEventEmitter;
213
+ * // Use the emitter...
214
+ * }).pipe(
215
+ * Effect.provide(flowEventEmitter),
216
+ * Effect.provide(baseEmitterLayer)
217
+ * );
218
+ * ```
219
+ */
220
+ export const flowEventEmitter = Layer.effect(FlowEventEmitter, Effect.gen(function* () {
221
+ const baseEmitter = yield* BaseEventEmitterService;
222
+ return new TypedEventEmitter(baseEmitter, eventToMessageSerializer("flow_event").eventToMessage);
223
+ }));
@@ -0,0 +1 @@
1
+ require(`../uploadista-error-BB-Wdiz9.cjs`),require(`../errors-CRm1FHHT.cjs`);const e=require(`../types-BT-cvi7T.cjs`);exports.BaseEventEmitterService=e.BaseEventEmitterService,exports.BaseKvStoreService=e.BaseKvStoreService,exports.BufferedUploadFileDataStore=e.BufferedUploadFileDataStore,exports.DataStoreRegistry=e.DataStoreRegistry,exports.FlowEventEmitter=e.FlowEventEmitter,exports.FlowJobKVStore=e.FlowJobKVStore,exports.MiddlewareService=e.MiddlewareService,exports.MiddlewareServiceLive=e.MiddlewareServiceLive,exports.TypedEventEmitter=e.TypedEventEmitter,exports.TypedKvStore=e.TypedKvStore,exports.UploadEventEmitter=e.UploadEventEmitter,exports.UploadEventType=e.UploadEventType,exports.UploadFileDataStore=e.UploadFileDataStore,exports.UploadFileDataStores=e.UploadFileDataStores,exports.UploadFileKVStore=e.UploadFileKVStore,exports.eventToMessageSerializer=e.eventToMessageSerializer,exports.flowEventEmitter=e.flowEventEmitter,exports.flowJobKvStore=e.flowJobKvStore,exports.inputFileSchema=e.inputFileSchema,exports.jsonSerializer=e.jsonSerializer,exports.uploadEventEmitter=e.uploadEventEmitter,exports.uploadEventSchema=e.uploadEventSchema,exports.uploadFileKvStore=e.uploadFileKvStore,exports.uploadFileSchema=e.uploadFileSchema,exports.webSocketMessageSchema=e.webSocketMessageSchema;
@@ -0,0 +1,6 @@
1
+ import "../uploadista-error-kKlhLRhY.cjs";
2
+ import "../index-BtBZHVmz.cjs";
3
+ import { BaseEventEmitter, BaseEventEmitterService, BaseKvStore, BaseKvStoreService, BufferedUploadFileDataStore, DataStore, DataStoreCapabilities, DataStoreRegistry, DataStoreWriteOptions, EventEmitter, FlowEventEmitter, FlowJobKVStore, InputFile, KvStore, Middleware, MiddlewareContext, MiddlewareNext, MiddlewareService, MiddlewareServiceLive, TypedEventEmitter, TypedKvStore, UploadEvent, UploadEventEmitter, UploadEventType, UploadFile, UploadFileDataStore, UploadFileDataStores, UploadFileDataStoresShape, UploadFileKVStore, UploadStrategy, WebSocketConnection, WebSocketMessage, eventToMessageSerializer, flowEventEmitter, flowJobKvStore, inputFileSchema, jsonSerializer, uploadEventEmitter, uploadEventSchema, uploadFileKvStore, uploadFileSchema, webSocketMessageSchema } from "../index-BO8GZlbD.cjs";
4
+ import "../generate-id-LjJRLD6N.cjs";
5
+ import "../semaphore-BHprIjFI.cjs";
6
+ export { BaseEventEmitter, BaseEventEmitterService, BaseKvStore, BaseKvStoreService, BufferedUploadFileDataStore, DataStore, DataStoreCapabilities, DataStoreRegistry, DataStoreWriteOptions, EventEmitter, FlowEventEmitter, FlowJobKVStore, InputFile, KvStore, Middleware, MiddlewareContext, MiddlewareNext, MiddlewareService, MiddlewareServiceLive, TypedEventEmitter, TypedKvStore, UploadEvent, UploadEventEmitter, UploadEventType, UploadFile, UploadFileDataStore, UploadFileDataStores, UploadFileDataStoresShape, UploadFileKVStore, UploadStrategy, WebSocketConnection, WebSocketMessage, eventToMessageSerializer, flowEventEmitter, flowJobKvStore, inputFileSchema, jsonSerializer, uploadEventEmitter, uploadEventSchema, uploadFileKvStore, uploadFileSchema, webSocketMessageSchema };
@@ -0,0 +1,10 @@
1
+ export * from "./data-store";
2
+ export * from "./event-broadcaster";
3
+ export * from "./event-emitter";
4
+ export * from "./input-file";
5
+ export * from "./kv-store";
6
+ export * from "./middleware";
7
+ export * from "./upload-event";
8
+ export * from "./upload-file";
9
+ export * from "./websocket";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from "./data-store";
2
+ export * from "./event-broadcaster";
3
+ export * from "./event-emitter";
4
+ export * from "./input-file";
5
+ export * from "./kv-store";
6
+ export * from "./middleware";
7
+ export * from "./upload-event";
8
+ export * from "./upload-file";
9
+ export * from "./websocket";