@tranquilload/core 0.1.0

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 (114) hide show
  1. package/.turbo/turbo-build.log +88 -0
  2. package/dist/compression-service-Bm1VBnhT.mjs +18 -0
  3. package/dist/compression-service-Bm1VBnhT.mjs.map +1 -0
  4. package/dist/compression-service-Bn86iTJe.cjs +35 -0
  5. package/dist/compression-service-Bn86iTJe.cjs.map +1 -0
  6. package/dist/compression-service-CiF7Px08.d.cts +15 -0
  7. package/dist/compression-service-CiF7Px08.d.cts.map +1 -0
  8. package/dist/compression-service-DI7ZXVxH.d.mts +15 -0
  9. package/dist/compression-service-DI7ZXVxH.d.mts.map +1 -0
  10. package/dist/errors.cjs +9 -0
  11. package/dist/errors.d.cts +2 -0
  12. package/dist/errors.d.mts +2 -0
  13. package/dist/errors.mjs +2 -0
  14. package/dist/index-Ch8xM6Xt.d.cts +60 -0
  15. package/dist/index-Ch8xM6Xt.d.cts.map +1 -0
  16. package/dist/index-DBGtgXEd.d.mts +60 -0
  17. package/dist/index-DBGtgXEd.d.mts.map +1 -0
  18. package/dist/logger-service-1J5r_akj.mjs +8 -0
  19. package/dist/logger-service-1J5r_akj.mjs.map +1 -0
  20. package/dist/logger-service-BF2pZOHN.d.mts +12 -0
  21. package/dist/logger-service-BF2pZOHN.d.mts.map +1 -0
  22. package/dist/logger-service-CbN12RhO.d.cts +12 -0
  23. package/dist/logger-service-CbN12RhO.d.cts.map +1 -0
  24. package/dist/logger-service-cx8vzkXs.cjs +19 -0
  25. package/dist/logger-service-cx8vzkXs.cjs.map +1 -0
  26. package/dist/middleware-CAI0cnW2.d.mts +10 -0
  27. package/dist/middleware-CAI0cnW2.d.mts.map +1 -0
  28. package/dist/middleware-CYcctmlY.d.cts +10 -0
  29. package/dist/middleware-CYcctmlY.d.cts.map +1 -0
  30. package/dist/multipart.cjs +244 -0
  31. package/dist/multipart.cjs.map +1 -0
  32. package/dist/multipart.d.cts +2 -0
  33. package/dist/multipart.d.mts +2 -0
  34. package/dist/multipart.mjs +243 -0
  35. package/dist/multipart.mjs.map +1 -0
  36. package/dist/normalize-callback-BNBZZ1jT.cjs +44 -0
  37. package/dist/normalize-callback-BNBZZ1jT.cjs.map +1 -0
  38. package/dist/normalize-callback-DQ6C4gaV.mjs +33 -0
  39. package/dist/normalize-callback-DQ6C4gaV.mjs.map +1 -0
  40. package/dist/oneshot.cjs +64 -0
  41. package/dist/oneshot.cjs.map +1 -0
  42. package/dist/oneshot.d.cts +28 -0
  43. package/dist/oneshot.d.cts.map +1 -0
  44. package/dist/oneshot.d.mts +28 -0
  45. package/dist/oneshot.d.mts.map +1 -0
  46. package/dist/oneshot.mjs +63 -0
  47. package/dist/oneshot.mjs.map +1 -0
  48. package/dist/pipeline.cjs +16 -0
  49. package/dist/pipeline.cjs.map +1 -0
  50. package/dist/pipeline.d.cts +9 -0
  51. package/dist/pipeline.d.cts.map +1 -0
  52. package/dist/pipeline.d.mts +9 -0
  53. package/dist/pipeline.d.mts.map +1 -0
  54. package/dist/pipeline.mjs +14 -0
  55. package/dist/pipeline.mjs.map +1 -0
  56. package/dist/progress.cjs +0 -0
  57. package/dist/progress.d.cts +3 -0
  58. package/dist/progress.d.mts +3 -0
  59. package/dist/progress.mjs +1 -0
  60. package/dist/services.cjs +8 -0
  61. package/dist/services.d.cts +3 -0
  62. package/dist/services.d.mts +3 -0
  63. package/dist/services.mjs +3 -0
  64. package/dist/upload-error-B2ISUc_k.d.cts +48 -0
  65. package/dist/upload-error-B2ISUc_k.d.cts.map +1 -0
  66. package/dist/upload-error-BUexBh08.cjs +119 -0
  67. package/dist/upload-error-BUexBh08.cjs.map +1 -0
  68. package/dist/upload-error-jol-eoDW.d.mts +48 -0
  69. package/dist/upload-error-jol-eoDW.d.mts.map +1 -0
  70. package/dist/upload-error-zDvpxT9X.mjs +72 -0
  71. package/dist/upload-error-zDvpxT9X.mjs.map +1 -0
  72. package/dist/upload-event-C9TOVp5l.d.mts +36 -0
  73. package/dist/upload-event-C9TOVp5l.d.mts.map +1 -0
  74. package/dist/upload-event-D77olieX.d.cts +36 -0
  75. package/dist/upload-event-D77olieX.d.cts.map +1 -0
  76. package/package.json +70 -0
  77. package/src/errors/index.ts +10 -0
  78. package/src/errors/upload-error.test.ts +218 -0
  79. package/src/errors/upload-error.ts +89 -0
  80. package/src/multipart/chunk-stream.test.ts +79 -0
  81. package/src/multipart/chunk-stream.ts +37 -0
  82. package/src/multipart/circuit-breaker.test.ts +95 -0
  83. package/src/multipart/circuit-breaker.ts +68 -0
  84. package/src/multipart/index.test.ts +283 -0
  85. package/src/multipart/index.ts +119 -0
  86. package/src/multipart/upload-stream.test.ts +336 -0
  87. package/src/multipart/upload-stream.ts +246 -0
  88. package/src/oneshot/index.test.ts +153 -0
  89. package/src/oneshot/index.ts +76 -0
  90. package/src/oneshot/upload.test.ts +130 -0
  91. package/src/oneshot/upload.ts +52 -0
  92. package/src/pipeline/compress.test.ts +69 -0
  93. package/src/pipeline/compress.ts +8 -0
  94. package/src/pipeline/index.ts +3 -0
  95. package/src/pipeline/middleware.test.ts +102 -0
  96. package/src/pipeline/middleware.ts +30 -0
  97. package/src/progress/getprogress.test.ts +102 -0
  98. package/src/progress/index.ts +10 -0
  99. package/src/progress/upload-event.test.ts +102 -0
  100. package/src/progress/upload-event.ts +37 -0
  101. package/src/scaffold.test.ts +5 -0
  102. package/src/services/compression-service.test.ts +68 -0
  103. package/src/services/compression-service.ts +31 -0
  104. package/src/services/index.ts +11 -0
  105. package/src/services/logger-service-integration.test.ts +98 -0
  106. package/src/services/logger-service.test.ts +40 -0
  107. package/src/services/logger-service.ts +17 -0
  108. package/src/utils/abort-interop.test.ts +65 -0
  109. package/src/utils/abort-interop.ts +14 -0
  110. package/src/utils/normalize-callback.test.ts +46 -0
  111. package/src/utils/normalize-callback.ts +18 -0
  112. package/tsconfig.json +8 -0
  113. package/tsdown.config.ts +16 -0
  114. package/vitest.config.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-callback-BNBZZ1jT.cjs","names":["Effect","AbortError","Effect"],"sources":["../src/utils/abort-interop.ts","../src/utils/normalize-callback.ts"],"sourcesContent":["import { Effect } from \"effect\"\nimport { AbortError } from \"../errors/upload-error.js\"\n\nexport const fromAbortSignal = (signal?: AbortSignal): Effect.Effect<never, AbortError> =>\n Effect.async<never, AbortError>((resume) => {\n if (!signal) return\n if (signal.aborted) {\n resume(Effect.fail(new AbortError()))\n return\n }\n const handler = (): void => resume(Effect.fail(new AbortError()))\n signal.addEventListener(\"abort\", handler, { once: true })\n return Effect.sync(() => signal.removeEventListener(\"abort\", handler))\n })\n","import { Effect } from \"effect\"\n\nexport const normalizeCallback = <A, E = never>(\n fn: () => A | Promise<A> | Effect.Effect<A, E>\n): Effect.Effect<A, E | unknown> =>\n Effect.suspend((): Effect.Effect<A, E | unknown> => {\n let result: A | Promise<A> | Effect.Effect<A, E>\n try {\n result = fn()\n } catch (e) {\n return Effect.fail(e)\n }\n if (Effect.isEffect(result)) return result\n if (result instanceof Promise) {\n return Effect.tryPromise({ try: () => result as Promise<A>, catch: (e) => e })\n }\n return Effect.succeed(result)\n })\n"],"mappings":";;;AAGA,MAAa,mBAAmB,WAC9BA,OAAAA,OAAO,OAA0B,WAAW;AAC1C,KAAI,CAAC,OAAQ;AACb,KAAI,OAAO,SAAS;AAClB,SAAOA,OAAAA,OAAO,KAAK,IAAIC,qBAAAA,YAAY,CAAC,CAAC;AACrC;;CAEF,MAAM,gBAAsB,OAAOD,OAAAA,OAAO,KAAK,IAAIC,qBAAAA,YAAY,CAAC,CAAC;AACjE,QAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;AACzD,QAAOD,OAAAA,OAAO,WAAW,OAAO,oBAAoB,SAAS,QAAQ,CAAC;EACtE;;;ACXJ,MAAa,qBACX,OAEAE,OAAAA,OAAO,cAA6C;CAClD,IAAI;AACJ,KAAI;AACF,WAAS,IAAI;UACN,GAAG;AACV,SAAOA,OAAAA,OAAO,KAAK,EAAE;;AAEvB,KAAIA,OAAAA,OAAO,SAAS,OAAO,CAAE,QAAO;AACpC,KAAI,kBAAkB,QACpB,QAAOA,OAAAA,OAAO,WAAW;EAAE,WAAW;EAAsB,QAAQ,MAAM;EAAG,CAAC;AAEhF,QAAOA,OAAAA,OAAO,QAAQ,OAAO;EAC7B"}
@@ -0,0 +1,33 @@
1
+ import { t as AbortError } from "./upload-error-zDvpxT9X.mjs";
2
+ import { Effect } from "effect";
3
+ //#region src/utils/abort-interop.ts
4
+ const fromAbortSignal = (signal) => Effect.async((resume) => {
5
+ if (!signal) return;
6
+ if (signal.aborted) {
7
+ resume(Effect.fail(new AbortError()));
8
+ return;
9
+ }
10
+ const handler = () => resume(Effect.fail(new AbortError()));
11
+ signal.addEventListener("abort", handler, { once: true });
12
+ return Effect.sync(() => signal.removeEventListener("abort", handler));
13
+ });
14
+ //#endregion
15
+ //#region src/utils/normalize-callback.ts
16
+ const normalizeCallback = (fn) => Effect.suspend(() => {
17
+ let result;
18
+ try {
19
+ result = fn();
20
+ } catch (e) {
21
+ return Effect.fail(e);
22
+ }
23
+ if (Effect.isEffect(result)) return result;
24
+ if (result instanceof Promise) return Effect.tryPromise({
25
+ try: () => result,
26
+ catch: (e) => e
27
+ });
28
+ return Effect.succeed(result);
29
+ });
30
+ //#endregion
31
+ export { fromAbortSignal as n, normalizeCallback as t };
32
+
33
+ //# sourceMappingURL=normalize-callback-DQ6C4gaV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-callback-DQ6C4gaV.mjs","names":[],"sources":["../src/utils/abort-interop.ts","../src/utils/normalize-callback.ts"],"sourcesContent":["import { Effect } from \"effect\"\nimport { AbortError } from \"../errors/upload-error.js\"\n\nexport const fromAbortSignal = (signal?: AbortSignal): Effect.Effect<never, AbortError> =>\n Effect.async<never, AbortError>((resume) => {\n if (!signal) return\n if (signal.aborted) {\n resume(Effect.fail(new AbortError()))\n return\n }\n const handler = (): void => resume(Effect.fail(new AbortError()))\n signal.addEventListener(\"abort\", handler, { once: true })\n return Effect.sync(() => signal.removeEventListener(\"abort\", handler))\n })\n","import { Effect } from \"effect\"\n\nexport const normalizeCallback = <A, E = never>(\n fn: () => A | Promise<A> | Effect.Effect<A, E>\n): Effect.Effect<A, E | unknown> =>\n Effect.suspend((): Effect.Effect<A, E | unknown> => {\n let result: A | Promise<A> | Effect.Effect<A, E>\n try {\n result = fn()\n } catch (e) {\n return Effect.fail(e)\n }\n if (Effect.isEffect(result)) return result\n if (result instanceof Promise) {\n return Effect.tryPromise({ try: () => result as Promise<A>, catch: (e) => e })\n }\n return Effect.succeed(result)\n })\n"],"mappings":";;;AAGA,MAAa,mBAAmB,WAC9B,OAAO,OAA0B,WAAW;AAC1C,KAAI,CAAC,OAAQ;AACb,KAAI,OAAO,SAAS;AAClB,SAAO,OAAO,KAAK,IAAI,YAAY,CAAC,CAAC;AACrC;;CAEF,MAAM,gBAAsB,OAAO,OAAO,KAAK,IAAI,YAAY,CAAC,CAAC;AACjE,QAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;AACzD,QAAO,OAAO,WAAW,OAAO,oBAAoB,SAAS,QAAQ,CAAC;EACtE;;;ACXJ,MAAa,qBACX,OAEA,OAAO,cAA6C;CAClD,IAAI;AACJ,KAAI;AACF,WAAS,IAAI;UACN,GAAG;AACV,SAAO,OAAO,KAAK,EAAE;;AAEvB,KAAI,OAAO,SAAS,OAAO,CAAE,QAAO;AACpC,KAAI,kBAAkB,QACpB,QAAO,OAAO,WAAW;EAAE,WAAW;EAAsB,QAAQ,MAAM;EAAG,CAAC;AAEhF,QAAO,OAAO,QAAQ,OAAO;EAC7B"}
@@ -0,0 +1,64 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_compression_service = require("./compression-service-Bn86iTJe.cjs");
3
+ const require_logger_service = require("./logger-service-cx8vzkXs.cjs");
4
+ const require_upload_error = require("./upload-error-BUexBh08.cjs");
5
+ const require_normalize_callback = require("./normalize-callback-BNBZZ1jT.cjs");
6
+ let effect = require("effect");
7
+ //#region src/oneshot/upload.ts
8
+ const uploadOnceEffect = (options) => {
9
+ const { stream, upload, signal } = options;
10
+ const program = effect.Effect.gen(function* () {
11
+ const logger = yield* require_logger_service.LoggerService;
12
+ yield* effect.Effect.sync(() => logger.log("info", "One-shot upload starting"));
13
+ const uploadEffect = require_normalize_callback.normalizeCallback(() => upload(stream)).pipe(effect.Effect.mapError((cause) => {
14
+ if (cause instanceof require_upload_error.AbortError) return cause;
15
+ return new require_upload_error.CompleteUploadError(cause);
16
+ }));
17
+ yield* signal ? effect.Effect.raceFirst(uploadEffect, require_normalize_callback.fromAbortSignal(signal)) : uploadEffect;
18
+ yield* effect.Effect.sync(() => logger.log("info", "One-shot upload completed"));
19
+ return {
20
+ _tag: "UploadCompleted",
21
+ uploadId: "",
22
+ totalParts: 1,
23
+ timestamp: Date.now()
24
+ };
25
+ });
26
+ return effect.Stream.fromEffect(program);
27
+ };
28
+ //#endregion
29
+ //#region src/oneshot/index.ts
30
+ const uploadOnce = (options) => {
31
+ const collected = (async () => {
32
+ let processedStream = options.stream;
33
+ if (options.pipeline !== void 0) if (typeof options.pipeline === "function") processedStream = options.pipeline(options.stream);
34
+ else processedStream = (await effect.Effect.runPromise(effect.Effect.provide(options.pipeline, require_compression_service.CompressionServiceLive)))(options.stream);
35
+ const program = uploadOnceEffect({
36
+ ...options,
37
+ stream: processedStream
38
+ }).pipe(effect.Stream.provideLayer(require_logger_service.LoggerServiceLive));
39
+ const exit = await effect.Stream.runCollect(program).pipe(effect.Effect.map((chunk) => Array.from(chunk)), effect.Effect.runPromiseExit);
40
+ if (effect.Exit.isSuccess(exit)) return exit.value;
41
+ return Promise.reject(effect.Cause.squash(exit.cause));
42
+ })();
43
+ return {
44
+ events: new ReadableStream({ async start(controller) {
45
+ try {
46
+ const evts = await collected;
47
+ for (const event of evts) controller.enqueue(event);
48
+ controller.close();
49
+ } catch (_) {
50
+ controller.close();
51
+ }
52
+ } }),
53
+ result: collected.then((evts) => {
54
+ const last = evts[evts.length - 1];
55
+ if (last === void 0) return Promise.reject(/* @__PURE__ */ new Error("uploadOnce: stream ended without emitting an event"));
56
+ return last;
57
+ })
58
+ };
59
+ };
60
+ uploadOnce.effect = uploadOnceEffect;
61
+ //#endregion
62
+ exports.uploadOnce = uploadOnce;
63
+
64
+ //# sourceMappingURL=oneshot.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oneshot.cjs","names":["Effect","LoggerService","normalizeCallback","AbortError","CompleteUploadError","fromAbortSignal","Stream","Effect","CompressionServiceLive","Stream","LoggerServiceLive","Exit","Cause"],"sources":["../src/oneshot/upload.ts","../src/oneshot/index.ts"],"sourcesContent":["import { Effect, Stream } from \"effect\"\nimport type { UploadError } from \"../errors/upload-error.js\"\nimport { AbortError, CompleteUploadError } from \"../errors/upload-error.js\"\nimport { LoggerService } from \"../services/logger-service.js\"\nimport { fromAbortSignal } from \"../utils/abort-interop.js\"\nimport { normalizeCallback } from \"../utils/normalize-callback.js\"\nimport type { UploadEvent } from \"../progress/upload-event.js\"\n\nexport interface UploadOnceOptions {\n readonly stream: ReadableStream<Uint8Array>\n readonly upload: (\n stream: ReadableStream<Uint8Array>\n ) => void | Promise<void> | Effect.Effect<void, UploadError>\n readonly signal?: AbortSignal\n}\n\nexport const uploadOnceEffect = (\n options: UploadOnceOptions\n): Stream.Stream<UploadEvent, UploadError, LoggerService> => {\n const { stream, upload, signal } = options\n\n const program: Effect.Effect<UploadEvent, UploadError, LoggerService> = Effect.gen(\n function* () {\n const logger = yield* LoggerService\n yield* Effect.sync(() => logger.log(\"info\", \"One-shot upload starting\"))\n\n const uploadEffect: Effect.Effect<void, UploadError> = normalizeCallback(\n () => upload(stream)\n ).pipe(\n Effect.mapError((cause): UploadError => {\n if (cause instanceof AbortError) return cause\n return new CompleteUploadError(cause)\n })\n )\n\n yield* signal\n ? Effect.raceFirst(uploadEffect, fromAbortSignal(signal))\n : uploadEffect\n\n yield* Effect.sync(() => logger.log(\"info\", \"One-shot upload completed\"))\n\n return {\n _tag: \"UploadCompleted\" as const,\n uploadId: \"\",\n totalParts: 1,\n timestamp: Date.now(),\n } satisfies UploadEvent\n }\n )\n\n return Stream.fromEffect(program)\n}\n","import { Cause, Effect, Exit, Stream } from \"effect\"\nimport type { UploadCompleted, UploadEvent } from \"../progress/upload-event.js\"\nimport type { Transform } from \"../pipeline/middleware.js\"\nimport { CompressionServiceLive } from \"../services/compression-service.js\"\nimport { LoggerServiceLive } from \"../services/logger-service.js\"\nimport { uploadOnceEffect, type UploadOnceOptions } from \"./upload.js\"\n\nexport type UploadResult = UploadCompleted\nexport type { UploadOnceOptions }\n\nexport interface OneShotPublicOptions extends UploadOnceOptions {\n readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>\n}\n\nexport const uploadOnce = (\n options: OneShotPublicOptions\n): {\n events: ReadableStream<UploadEvent>\n result: Promise<UploadResult>\n} => {\n const collected: Promise<ReadonlyArray<UploadEvent>> = (async () => {\n let processedStream = options.stream\n if (options.pipeline !== undefined) {\n if (typeof options.pipeline === \"function\") {\n processedStream = options.pipeline(options.stream)\n } else {\n const transform = await Effect.runPromise(\n Effect.provide(\n options.pipeline as Effect.Effect<Transform, unknown, never>,\n CompressionServiceLive\n )\n )\n processedStream = transform(options.stream)\n }\n }\n\n const program = uploadOnceEffect({ ...options, stream: processedStream }).pipe(\n Stream.provideLayer(LoggerServiceLive)\n )\n\n const exit = await Stream.runCollect(program).pipe(\n Effect.map((chunk) => Array.from(chunk)),\n Effect.runPromiseExit\n )\n if (Exit.isSuccess(exit)) return exit.value\n return Promise.reject(Cause.squash(exit.cause))\n })()\n\n // events: ReadableStream built from collected array; closes cleanly on error\n const events = new ReadableStream<UploadEvent>({\n async start(controller) {\n try {\n const evts = await collected\n for (const event of evts) controller.enqueue(event)\n controller.close()\n } catch (_) {\n // Close cleanly — abort/upload errors surface via `result` only\n controller.close()\n }\n },\n })\n\n // result: resolves with UploadCompleted, rejects with UploadError on failure\n const result: Promise<UploadResult> = collected.then((evts) => {\n const last = evts[evts.length - 1]\n if (last === undefined) {\n return Promise.reject(new Error(\"uploadOnce: stream ended without emitting an event\"))\n }\n return last as UploadResult\n })\n\n return { events, result }\n}\n\n// Effect escape hatch — LoggerService layer left open for user composition\nuploadOnce.effect = uploadOnceEffect\n"],"mappings":";;;;;;;AAgBA,MAAa,oBACX,YAC2D;CAC3D,MAAM,EAAE,QAAQ,QAAQ,WAAW;CAEnC,MAAM,UAAkEA,OAAAA,OAAO,IAC7E,aAAa;EACX,MAAM,SAAS,OAAOC,uBAAAA;AACtB,SAAOD,OAAAA,OAAO,WAAW,OAAO,IAAI,QAAQ,2BAA2B,CAAC;EAExE,MAAM,eAAiDE,2BAAAA,wBAC/C,OAAO,OAAO,CACrB,CAAC,KACAF,OAAAA,OAAO,UAAU,UAAuB;AACtC,OAAI,iBAAiBG,qBAAAA,WAAY,QAAO;AACxC,UAAO,IAAIC,qBAAAA,oBAAoB,MAAM;IACrC,CACH;AAED,SAAO,SACHJ,OAAAA,OAAO,UAAU,cAAcK,2BAAAA,gBAAgB,OAAO,CAAC,GACvD;AAEJ,SAAOL,OAAAA,OAAO,WAAW,OAAO,IAAI,QAAQ,4BAA4B,CAAC;AAEzE,SAAO;GACL,MAAM;GACN,UAAU;GACV,YAAY;GACZ,WAAW,KAAK,KAAK;GACtB;GAEJ;AAED,QAAOM,OAAAA,OAAO,WAAW,QAAQ;;;;ACpCnC,MAAa,cACX,YAIG;CACH,MAAM,aAAkD,YAAY;EAClE,IAAI,kBAAkB,QAAQ;AAC9B,MAAI,QAAQ,aAAa,KAAA,EACvB,KAAI,OAAO,QAAQ,aAAa,WAC9B,mBAAkB,QAAQ,SAAS,QAAQ,OAAO;MAQlD,oBANkB,MAAMC,OAAAA,OAAO,WAC7BA,OAAAA,OAAO,QACL,QAAQ,UACRC,4BAAAA,uBACD,CACF,EAC2B,QAAQ,OAAO;EAI/C,MAAM,UAAU,iBAAiB;GAAE,GAAG;GAAS,QAAQ;GAAiB,CAAC,CAAC,KACxEC,OAAAA,OAAO,aAAaC,uBAAAA,kBAAkB,CACvC;EAED,MAAM,OAAO,MAAMD,OAAAA,OAAO,WAAW,QAAQ,CAAC,KAC5CF,OAAAA,OAAO,KAAK,UAAU,MAAM,KAAK,MAAM,CAAC,EACxCA,OAAAA,OAAO,eACR;AACD,MAAII,OAAAA,KAAK,UAAU,KAAK,CAAE,QAAO,KAAK;AACtC,SAAO,QAAQ,OAAOC,OAAAA,MAAM,OAAO,KAAK,MAAM,CAAC;KAC7C;AAyBJ,QAAO;EAAE,QAtBM,IAAI,eAA4B,EAC7C,MAAM,MAAM,YAAY;AACtB,OAAI;IACF,MAAM,OAAO,MAAM;AACnB,SAAK,MAAM,SAAS,KAAM,YAAW,QAAQ,MAAM;AACnD,eAAW,OAAO;YACX,GAAG;AAEV,eAAW,OAAO;;KAGvB,CAAC;EAWe,QARqB,UAAU,MAAM,SAAS;GAC7D,MAAM,OAAO,KAAK,KAAK,SAAS;AAChC,OAAI,SAAS,KAAA,EACX,QAAO,QAAQ,uBAAO,IAAI,MAAM,qDAAqD,CAAC;AAExF,UAAO;IACP;EAEuB;;AAI3B,WAAW,SAAS"}
@@ -0,0 +1,28 @@
1
+ import { c as UploadError } from "./upload-error-B2ISUc_k.cjs";
2
+ import { n as LoggerService } from "./logger-service-CbN12RhO.cjs";
3
+ import { a as UploadEvent, i as UploadCompleted } from "./upload-event-D77olieX.cjs";
4
+ import { t as Transform } from "./middleware-CYcctmlY.cjs";
5
+ import { Effect, Stream } from "effect";
6
+
7
+ //#region src/oneshot/upload.d.ts
8
+ interface UploadOnceOptions {
9
+ readonly stream: ReadableStream<Uint8Array>;
10
+ readonly upload: (stream: ReadableStream<Uint8Array>) => void | Promise<void> | Effect.Effect<void, UploadError>;
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ //#endregion
14
+ //#region src/oneshot/index.d.ts
15
+ type UploadResult = UploadCompleted;
16
+ interface OneShotPublicOptions extends UploadOnceOptions {
17
+ readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>;
18
+ }
19
+ declare const uploadOnce: {
20
+ (options: OneShotPublicOptions): {
21
+ events: ReadableStream<UploadEvent>;
22
+ result: Promise<UploadResult>;
23
+ };
24
+ effect: (options: UploadOnceOptions) => Stream.Stream<UploadEvent, UploadError, LoggerService>;
25
+ };
26
+ //#endregion
27
+ export { OneShotPublicOptions, type UploadOnceOptions, UploadResult, uploadOnce };
28
+ //# sourceMappingURL=oneshot.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oneshot.d.cts","names":[],"sources":["../src/oneshot/upload.ts","../src/oneshot/index.ts"],"mappings":";;;;;;;UAQiB,iBAAA;EAAA,SACN,MAAA,EAAQ,cAAA,CAAe,UAAA;EAAA,SACvB,MAAA,GACP,MAAA,EAAQ,cAAA,CAAe,UAAA,aACb,OAAA,SAAgB,MAAA,CAAO,MAAA,OAAa,WAAA;EAAA,SACvC,MAAA,GAAS,WAAA;AAAA;;;KCNR,YAAA,GAAe,eAAA;AAAA,UAGV,oBAAA,SAA6B,iBAAA;EAAA,SACnC,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA;AAAA,cAGnC,UAAA;EAAA,UACF,oBAAA;IAET,MAAA,EAAQ,cAAA,CAAe,WAAA;IACvB,MAAA,EAAQ,OAAA,CAAQ,YAAA;EAAA"}
@@ -0,0 +1,28 @@
1
+ import { c as UploadError } from "./upload-error-jol-eoDW.mjs";
2
+ import { n as LoggerService } from "./logger-service-BF2pZOHN.mjs";
3
+ import { a as UploadEvent, i as UploadCompleted } from "./upload-event-C9TOVp5l.mjs";
4
+ import { t as Transform } from "./middleware-CAI0cnW2.mjs";
5
+ import { Effect, Stream } from "effect";
6
+
7
+ //#region src/oneshot/upload.d.ts
8
+ interface UploadOnceOptions {
9
+ readonly stream: ReadableStream<Uint8Array>;
10
+ readonly upload: (stream: ReadableStream<Uint8Array>) => void | Promise<void> | Effect.Effect<void, UploadError>;
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ //#endregion
14
+ //#region src/oneshot/index.d.ts
15
+ type UploadResult = UploadCompleted;
16
+ interface OneShotPublicOptions extends UploadOnceOptions {
17
+ readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>;
18
+ }
19
+ declare const uploadOnce: {
20
+ (options: OneShotPublicOptions): {
21
+ events: ReadableStream<UploadEvent>;
22
+ result: Promise<UploadResult>;
23
+ };
24
+ effect: (options: UploadOnceOptions) => Stream.Stream<UploadEvent, UploadError, LoggerService>;
25
+ };
26
+ //#endregion
27
+ export { OneShotPublicOptions, type UploadOnceOptions, UploadResult, uploadOnce };
28
+ //# sourceMappingURL=oneshot.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oneshot.d.mts","names":[],"sources":["../src/oneshot/upload.ts","../src/oneshot/index.ts"],"mappings":";;;;;;;UAQiB,iBAAA;EAAA,SACN,MAAA,EAAQ,cAAA,CAAe,UAAA;EAAA,SACvB,MAAA,GACP,MAAA,EAAQ,cAAA,CAAe,UAAA,aACb,OAAA,SAAgB,MAAA,CAAO,MAAA,OAAa,WAAA;EAAA,SACvC,MAAA,GAAS,WAAA;AAAA;;;KCNR,YAAA,GAAe,eAAA;AAAA,UAGV,oBAAA,SAA6B,iBAAA;EAAA,SACnC,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA;AAAA,cAGnC,UAAA;EAAA,UACF,oBAAA;IAET,MAAA,EAAQ,cAAA,CAAe,WAAA;IACvB,MAAA,EAAQ,OAAA,CAAQ,YAAA;EAAA"}
@@ -0,0 +1,63 @@
1
+ import { n as CompressionServiceLive } from "./compression-service-Bm1VBnhT.mjs";
2
+ import { n as LoggerServiceLive, t as LoggerService } from "./logger-service-1J5r_akj.mjs";
3
+ import { r as CompleteUploadError, t as AbortError } from "./upload-error-zDvpxT9X.mjs";
4
+ import { n as fromAbortSignal, t as normalizeCallback } from "./normalize-callback-DQ6C4gaV.mjs";
5
+ import { Cause, Effect, Exit, Stream } from "effect";
6
+ //#region src/oneshot/upload.ts
7
+ const uploadOnceEffect = (options) => {
8
+ const { stream, upload, signal } = options;
9
+ const program = Effect.gen(function* () {
10
+ const logger = yield* LoggerService;
11
+ yield* Effect.sync(() => logger.log("info", "One-shot upload starting"));
12
+ const uploadEffect = normalizeCallback(() => upload(stream)).pipe(Effect.mapError((cause) => {
13
+ if (cause instanceof AbortError) return cause;
14
+ return new CompleteUploadError(cause);
15
+ }));
16
+ yield* signal ? Effect.raceFirst(uploadEffect, fromAbortSignal(signal)) : uploadEffect;
17
+ yield* Effect.sync(() => logger.log("info", "One-shot upload completed"));
18
+ return {
19
+ _tag: "UploadCompleted",
20
+ uploadId: "",
21
+ totalParts: 1,
22
+ timestamp: Date.now()
23
+ };
24
+ });
25
+ return Stream.fromEffect(program);
26
+ };
27
+ //#endregion
28
+ //#region src/oneshot/index.ts
29
+ const uploadOnce = (options) => {
30
+ const collected = (async () => {
31
+ let processedStream = options.stream;
32
+ if (options.pipeline !== void 0) if (typeof options.pipeline === "function") processedStream = options.pipeline(options.stream);
33
+ else processedStream = (await Effect.runPromise(Effect.provide(options.pipeline, CompressionServiceLive)))(options.stream);
34
+ const program = uploadOnceEffect({
35
+ ...options,
36
+ stream: processedStream
37
+ }).pipe(Stream.provideLayer(LoggerServiceLive));
38
+ const exit = await Stream.runCollect(program).pipe(Effect.map((chunk) => Array.from(chunk)), Effect.runPromiseExit);
39
+ if (Exit.isSuccess(exit)) return exit.value;
40
+ return Promise.reject(Cause.squash(exit.cause));
41
+ })();
42
+ return {
43
+ events: new ReadableStream({ async start(controller) {
44
+ try {
45
+ const evts = await collected;
46
+ for (const event of evts) controller.enqueue(event);
47
+ controller.close();
48
+ } catch (_) {
49
+ controller.close();
50
+ }
51
+ } }),
52
+ result: collected.then((evts) => {
53
+ const last = evts[evts.length - 1];
54
+ if (last === void 0) return Promise.reject(/* @__PURE__ */ new Error("uploadOnce: stream ended without emitting an event"));
55
+ return last;
56
+ })
57
+ };
58
+ };
59
+ uploadOnce.effect = uploadOnceEffect;
60
+ //#endregion
61
+ export { uploadOnce };
62
+
63
+ //# sourceMappingURL=oneshot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oneshot.mjs","names":[],"sources":["../src/oneshot/upload.ts","../src/oneshot/index.ts"],"sourcesContent":["import { Effect, Stream } from \"effect\"\nimport type { UploadError } from \"../errors/upload-error.js\"\nimport { AbortError, CompleteUploadError } from \"../errors/upload-error.js\"\nimport { LoggerService } from \"../services/logger-service.js\"\nimport { fromAbortSignal } from \"../utils/abort-interop.js\"\nimport { normalizeCallback } from \"../utils/normalize-callback.js\"\nimport type { UploadEvent } from \"../progress/upload-event.js\"\n\nexport interface UploadOnceOptions {\n readonly stream: ReadableStream<Uint8Array>\n readonly upload: (\n stream: ReadableStream<Uint8Array>\n ) => void | Promise<void> | Effect.Effect<void, UploadError>\n readonly signal?: AbortSignal\n}\n\nexport const uploadOnceEffect = (\n options: UploadOnceOptions\n): Stream.Stream<UploadEvent, UploadError, LoggerService> => {\n const { stream, upload, signal } = options\n\n const program: Effect.Effect<UploadEvent, UploadError, LoggerService> = Effect.gen(\n function* () {\n const logger = yield* LoggerService\n yield* Effect.sync(() => logger.log(\"info\", \"One-shot upload starting\"))\n\n const uploadEffect: Effect.Effect<void, UploadError> = normalizeCallback(\n () => upload(stream)\n ).pipe(\n Effect.mapError((cause): UploadError => {\n if (cause instanceof AbortError) return cause\n return new CompleteUploadError(cause)\n })\n )\n\n yield* signal\n ? Effect.raceFirst(uploadEffect, fromAbortSignal(signal))\n : uploadEffect\n\n yield* Effect.sync(() => logger.log(\"info\", \"One-shot upload completed\"))\n\n return {\n _tag: \"UploadCompleted\" as const,\n uploadId: \"\",\n totalParts: 1,\n timestamp: Date.now(),\n } satisfies UploadEvent\n }\n )\n\n return Stream.fromEffect(program)\n}\n","import { Cause, Effect, Exit, Stream } from \"effect\"\nimport type { UploadCompleted, UploadEvent } from \"../progress/upload-event.js\"\nimport type { Transform } from \"../pipeline/middleware.js\"\nimport { CompressionServiceLive } from \"../services/compression-service.js\"\nimport { LoggerServiceLive } from \"../services/logger-service.js\"\nimport { uploadOnceEffect, type UploadOnceOptions } from \"./upload.js\"\n\nexport type UploadResult = UploadCompleted\nexport type { UploadOnceOptions }\n\nexport interface OneShotPublicOptions extends UploadOnceOptions {\n readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>\n}\n\nexport const uploadOnce = (\n options: OneShotPublicOptions\n): {\n events: ReadableStream<UploadEvent>\n result: Promise<UploadResult>\n} => {\n const collected: Promise<ReadonlyArray<UploadEvent>> = (async () => {\n let processedStream = options.stream\n if (options.pipeline !== undefined) {\n if (typeof options.pipeline === \"function\") {\n processedStream = options.pipeline(options.stream)\n } else {\n const transform = await Effect.runPromise(\n Effect.provide(\n options.pipeline as Effect.Effect<Transform, unknown, never>,\n CompressionServiceLive\n )\n )\n processedStream = transform(options.stream)\n }\n }\n\n const program = uploadOnceEffect({ ...options, stream: processedStream }).pipe(\n Stream.provideLayer(LoggerServiceLive)\n )\n\n const exit = await Stream.runCollect(program).pipe(\n Effect.map((chunk) => Array.from(chunk)),\n Effect.runPromiseExit\n )\n if (Exit.isSuccess(exit)) return exit.value\n return Promise.reject(Cause.squash(exit.cause))\n })()\n\n // events: ReadableStream built from collected array; closes cleanly on error\n const events = new ReadableStream<UploadEvent>({\n async start(controller) {\n try {\n const evts = await collected\n for (const event of evts) controller.enqueue(event)\n controller.close()\n } catch (_) {\n // Close cleanly — abort/upload errors surface via `result` only\n controller.close()\n }\n },\n })\n\n // result: resolves with UploadCompleted, rejects with UploadError on failure\n const result: Promise<UploadResult> = collected.then((evts) => {\n const last = evts[evts.length - 1]\n if (last === undefined) {\n return Promise.reject(new Error(\"uploadOnce: stream ended without emitting an event\"))\n }\n return last as UploadResult\n })\n\n return { events, result }\n}\n\n// Effect escape hatch — LoggerService layer left open for user composition\nuploadOnce.effect = uploadOnceEffect\n"],"mappings":";;;;;;AAgBA,MAAa,oBACX,YAC2D;CAC3D,MAAM,EAAE,QAAQ,QAAQ,WAAW;CAEnC,MAAM,UAAkE,OAAO,IAC7E,aAAa;EACX,MAAM,SAAS,OAAO;AACtB,SAAO,OAAO,WAAW,OAAO,IAAI,QAAQ,2BAA2B,CAAC;EAExE,MAAM,eAAiD,wBAC/C,OAAO,OAAO,CACrB,CAAC,KACA,OAAO,UAAU,UAAuB;AACtC,OAAI,iBAAiB,WAAY,QAAO;AACxC,UAAO,IAAI,oBAAoB,MAAM;IACrC,CACH;AAED,SAAO,SACH,OAAO,UAAU,cAAc,gBAAgB,OAAO,CAAC,GACvD;AAEJ,SAAO,OAAO,WAAW,OAAO,IAAI,QAAQ,4BAA4B,CAAC;AAEzE,SAAO;GACL,MAAM;GACN,UAAU;GACV,YAAY;GACZ,WAAW,KAAK,KAAK;GACtB;GAEJ;AAED,QAAO,OAAO,WAAW,QAAQ;;;;ACpCnC,MAAa,cACX,YAIG;CACH,MAAM,aAAkD,YAAY;EAClE,IAAI,kBAAkB,QAAQ;AAC9B,MAAI,QAAQ,aAAa,KAAA,EACvB,KAAI,OAAO,QAAQ,aAAa,WAC9B,mBAAkB,QAAQ,SAAS,QAAQ,OAAO;MAQlD,oBANkB,MAAM,OAAO,WAC7B,OAAO,QACL,QAAQ,UACR,uBACD,CACF,EAC2B,QAAQ,OAAO;EAI/C,MAAM,UAAU,iBAAiB;GAAE,GAAG;GAAS,QAAQ;GAAiB,CAAC,CAAC,KACxE,OAAO,aAAa,kBAAkB,CACvC;EAED,MAAM,OAAO,MAAM,OAAO,WAAW,QAAQ,CAAC,KAC5C,OAAO,KAAK,UAAU,MAAM,KAAK,MAAM,CAAC,EACxC,OAAO,eACR;AACD,MAAI,KAAK,UAAU,KAAK,CAAE,QAAO,KAAK;AACtC,SAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,MAAM,CAAC;KAC7C;AAyBJ,QAAO;EAAE,QAtBM,IAAI,eAA4B,EAC7C,MAAM,MAAM,YAAY;AACtB,OAAI;IACF,MAAM,OAAO,MAAM;AACnB,SAAK,MAAM,SAAS,KAAM,YAAW,QAAQ,MAAM;AACnD,eAAW,OAAO;YACX,GAAG;AAEV,eAAW,OAAO;;KAGvB,CAAC;EAWe,QARqB,UAAU,MAAM,SAAS;GAC7D,MAAM,OAAO,KAAK,KAAK,SAAS;AAChC,OAAI,SAAS,KAAA,EACX,QAAO,QAAQ,uBAAO,IAAI,MAAM,qDAAqD,CAAC;AAExF,UAAO;IACP;EAEuB;;AAI3B,WAAW,SAAS"}
@@ -0,0 +1,16 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_compression_service = require("./compression-service-Bn86iTJe.cjs");
3
+ let effect = require("effect");
4
+ //#region src/pipeline/middleware.ts
5
+ function compose(...transforms) {
6
+ if (!transforms.some((t) => typeof t !== "function") || transforms.length === 0) return (stream) => transforms.reduce((s, t) => t(s), stream);
7
+ return effect.Effect.map(effect.Effect.all(transforms.map((t) => typeof t === "function" ? effect.Effect.succeed(t) : t)), (resolved) => (stream) => resolved.reduce((s, t) => t(s), stream));
8
+ }
9
+ //#endregion
10
+ //#region src/pipeline/compress.ts
11
+ const compress = (algorithm = "deflate-raw") => effect.Effect.map(require_compression_service.CompressionService, (svc) => (stream) => svc.compress(stream, algorithm));
12
+ //#endregion
13
+ exports.compose = compose;
14
+ exports.compress = compress;
15
+
16
+ //# sourceMappingURL=pipeline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.cjs","names":["Effect","Effect","CompressionService"],"sources":["../src/pipeline/middleware.ts","../src/pipeline/compress.ts"],"sourcesContent":["import { Effect } from \"effect\"\n\nexport type Transform = (stream: ReadableStream<Uint8Array>) => ReadableStream<Uint8Array>\n\nexport function compose(): Transform\nexport function compose(...transforms: Transform[]): Transform\nexport function compose<E, R>(\n ...transforms: Array<Transform | Effect.Effect<Transform, E, R>>\n): Effect.Effect<Transform, E, R>\nexport function compose(\n ...transforms: Array<Transform | Effect.Effect<Transform, any, any>>\n): Transform | Effect.Effect<Transform, any, any> {\n const hasEffect = transforms.some((t) => typeof t !== \"function\")\n if (!hasEffect || transforms.length === 0) {\n return (stream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> =>\n (transforms as Transform[]).reduce((s, t) => t(s), stream)\n }\n return Effect.map(\n Effect.all(\n transforms.map((t) =>\n typeof t === \"function\"\n ? Effect.succeed(t as Transform)\n : (t as Effect.Effect<Transform, any, any>)\n )\n ),\n (resolved) =>\n (stream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> =>\n resolved.reduce((s, t) => t(s), stream)\n )\n}\n","import { Effect } from \"effect\"\nimport { CompressionService } from \"../services/compression-service.js\"\nimport type { Transform } from \"./middleware.js\"\n\nexport const compress = (\n algorithm: CompressionFormat = \"deflate-raw\"\n): Effect.Effect<Transform, never, CompressionService> =>\n Effect.map(CompressionService, (svc) => (stream) => svc.compress(stream, algorithm))\n"],"mappings":";;;;AASA,SAAgB,QACd,GAAG,YAC6C;AAEhD,KAAI,CADc,WAAW,MAAM,MAAM,OAAO,MAAM,WAAW,IAC/C,WAAW,WAAW,EACtC,SAAQ,WACL,WAA2B,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,OAAO;AAE9D,QAAOA,OAAAA,OAAO,IACZA,OAAAA,OAAO,IACL,WAAW,KAAK,MACd,OAAO,MAAM,aACTA,OAAAA,OAAO,QAAQ,EAAe,GAC7B,EACN,CACF,GACA,cACE,WACC,SAAS,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,OAAO,CAC5C;;;;ACxBH,MAAa,YACX,YAA+B,kBAE/BC,OAAAA,OAAO,IAAIC,4BAAAA,qBAAqB,SAAS,WAAW,IAAI,SAAS,QAAQ,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { n as compose, t as Transform } from "./middleware-CYcctmlY.cjs";
2
+ import { t as CompressionService } from "./compression-service-CiF7Px08.cjs";
3
+ import { Effect } from "effect";
4
+
5
+ //#region src/pipeline/compress.d.ts
6
+ declare const compress: (algorithm?: CompressionFormat) => Effect.Effect<Transform, never, CompressionService>;
7
+ //#endregion
8
+ export { type Transform, compose, compress };
9
+ //# sourceMappingURL=pipeline.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.cts","names":[],"sources":["../src/pipeline/compress.ts"],"mappings":";;;;;cAIa,QAAA,GACX,SAAA,GAAW,iBAAA,KACV,MAAA,CAAO,MAAA,CAAO,SAAA,SAAkB,kBAAA"}
@@ -0,0 +1,9 @@
1
+ import { n as compose, t as Transform } from "./middleware-CAI0cnW2.mjs";
2
+ import { t as CompressionService } from "./compression-service-DI7ZXVxH.mjs";
3
+ import { Effect } from "effect";
4
+
5
+ //#region src/pipeline/compress.d.ts
6
+ declare const compress: (algorithm?: CompressionFormat) => Effect.Effect<Transform, never, CompressionService>;
7
+ //#endregion
8
+ export { type Transform, compose, compress };
9
+ //# sourceMappingURL=pipeline.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.mts","names":[],"sources":["../src/pipeline/compress.ts"],"mappings":";;;;;cAIa,QAAA,GACX,SAAA,GAAW,iBAAA,KACV,MAAA,CAAO,MAAA,CAAO,SAAA,SAAkB,kBAAA"}
@@ -0,0 +1,14 @@
1
+ import { t as CompressionService } from "./compression-service-Bm1VBnhT.mjs";
2
+ import { Effect } from "effect";
3
+ //#region src/pipeline/middleware.ts
4
+ function compose(...transforms) {
5
+ if (!transforms.some((t) => typeof t !== "function") || transforms.length === 0) return (stream) => transforms.reduce((s, t) => t(s), stream);
6
+ return Effect.map(Effect.all(transforms.map((t) => typeof t === "function" ? Effect.succeed(t) : t)), (resolved) => (stream) => resolved.reduce((s, t) => t(s), stream));
7
+ }
8
+ //#endregion
9
+ //#region src/pipeline/compress.ts
10
+ const compress = (algorithm = "deflate-raw") => Effect.map(CompressionService, (svc) => (stream) => svc.compress(stream, algorithm));
11
+ //#endregion
12
+ export { compose, compress };
13
+
14
+ //# sourceMappingURL=pipeline.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.mjs","names":[],"sources":["../src/pipeline/middleware.ts","../src/pipeline/compress.ts"],"sourcesContent":["import { Effect } from \"effect\"\n\nexport type Transform = (stream: ReadableStream<Uint8Array>) => ReadableStream<Uint8Array>\n\nexport function compose(): Transform\nexport function compose(...transforms: Transform[]): Transform\nexport function compose<E, R>(\n ...transforms: Array<Transform | Effect.Effect<Transform, E, R>>\n): Effect.Effect<Transform, E, R>\nexport function compose(\n ...transforms: Array<Transform | Effect.Effect<Transform, any, any>>\n): Transform | Effect.Effect<Transform, any, any> {\n const hasEffect = transforms.some((t) => typeof t !== \"function\")\n if (!hasEffect || transforms.length === 0) {\n return (stream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> =>\n (transforms as Transform[]).reduce((s, t) => t(s), stream)\n }\n return Effect.map(\n Effect.all(\n transforms.map((t) =>\n typeof t === \"function\"\n ? Effect.succeed(t as Transform)\n : (t as Effect.Effect<Transform, any, any>)\n )\n ),\n (resolved) =>\n (stream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> =>\n resolved.reduce((s, t) => t(s), stream)\n )\n}\n","import { Effect } from \"effect\"\nimport { CompressionService } from \"../services/compression-service.js\"\nimport type { Transform } from \"./middleware.js\"\n\nexport const compress = (\n algorithm: CompressionFormat = \"deflate-raw\"\n): Effect.Effect<Transform, never, CompressionService> =>\n Effect.map(CompressionService, (svc) => (stream) => svc.compress(stream, algorithm))\n"],"mappings":";;;AASA,SAAgB,QACd,GAAG,YAC6C;AAEhD,KAAI,CADc,WAAW,MAAM,MAAM,OAAO,MAAM,WAAW,IAC/C,WAAW,WAAW,EACtC,SAAQ,WACL,WAA2B,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,OAAO;AAE9D,QAAO,OAAO,IACZ,OAAO,IACL,WAAW,KAAK,MACd,OAAO,MAAM,aACT,OAAO,QAAQ,EAAe,GAC7B,EACN,CACF,GACA,cACE,WACC,SAAS,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,OAAO,CAC5C;;;;ACxBH,MAAa,YACX,YAA+B,kBAE/B,OAAO,IAAI,qBAAqB,SAAS,WAAW,IAAI,SAAS,QAAQ,UAAU,CAAC"}
File without changes
@@ -0,0 +1,3 @@
1
+ import { a as UploadEvent, i as UploadCompleted, n as PartCompleted, o as UploadInitiated, r as ProgressTick, t as CircuitOpen } from "./upload-event-D77olieX.cjs";
2
+ import { n as Progress } from "./index-Ch8xM6Xt.cjs";
3
+ export { type CircuitOpen, type PartCompleted, type Progress, type ProgressTick, type UploadCompleted, type UploadEvent, type UploadInitiated };
@@ -0,0 +1,3 @@
1
+ import { a as UploadEvent, i as UploadCompleted, n as PartCompleted, o as UploadInitiated, r as ProgressTick, t as CircuitOpen } from "./upload-event-C9TOVp5l.mjs";
2
+ import { n as Progress } from "./index-DBGtgXEd.mjs";
3
+ export { type CircuitOpen, type PartCompleted, type Progress, type ProgressTick, type UploadCompleted, type UploadEvent, type UploadInitiated };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_compression_service = require("./compression-service-Bn86iTJe.cjs");
3
+ const require_logger_service = require("./logger-service-cx8vzkXs.cjs");
4
+ exports.CompressionService = require_compression_service.CompressionService;
5
+ exports.CompressionServiceLive = require_compression_service.CompressionServiceLive;
6
+ exports.CompressionUnavailableError = require_compression_service.CompressionUnavailableError;
7
+ exports.LoggerService = require_logger_service.LoggerService;
8
+ exports.LoggerServiceLive = require_logger_service.LoggerServiceLive;
@@ -0,0 +1,3 @@
1
+ import { n as LoggerService, r as LoggerServiceLive, t as LogLevel } from "./logger-service-CbN12RhO.cjs";
2
+ import { n as CompressionServiceLive, r as CompressionUnavailableError, t as CompressionService } from "./compression-service-CiF7Px08.cjs";
3
+ export { CompressionService, CompressionServiceLive, CompressionUnavailableError, type LogLevel, LoggerService, LoggerServiceLive };
@@ -0,0 +1,3 @@
1
+ import { n as LoggerService, r as LoggerServiceLive, t as LogLevel } from "./logger-service-BF2pZOHN.mjs";
2
+ import { n as CompressionServiceLive, r as CompressionUnavailableError, t as CompressionService } from "./compression-service-DI7ZXVxH.mjs";
3
+ export { CompressionService, CompressionServiceLive, CompressionUnavailableError, type LogLevel, LoggerService, LoggerServiceLive };
@@ -0,0 +1,3 @@
1
+ import { n as CompressionServiceLive, r as CompressionUnavailableError, t as CompressionService } from "./compression-service-Bm1VBnhT.mjs";
2
+ import { n as LoggerServiceLive, t as LoggerService } from "./logger-service-1J5r_akj.mjs";
3
+ export { CompressionService, CompressionServiceLive, CompressionUnavailableError, LoggerService, LoggerServiceLive };
@@ -0,0 +1,48 @@
1
+ //#region src/errors/upload-error.d.ts
2
+ declare class PartUploadError extends Error {
3
+ readonly partNumber: number;
4
+ readonly attempt: number;
5
+ readonly cause: unknown;
6
+ readonly _tag: "PartUploadError";
7
+ constructor(partNumber: number, attempt: number, cause: unknown);
8
+ }
9
+ declare class MaxRetriesExceededError extends Error {
10
+ readonly partNumber: number;
11
+ readonly totalAttempts: number;
12
+ readonly cause: unknown;
13
+ readonly _tag: "MaxRetriesExceededError";
14
+ constructor(partNumber: number, totalAttempts: number, cause: unknown);
15
+ }
16
+ declare class PresignedUrlError extends Error {
17
+ readonly cause: unknown;
18
+ readonly _tag: "PresignedUrlError";
19
+ constructor(cause: unknown);
20
+ }
21
+ declare class InitiateUploadError extends Error {
22
+ readonly cause: unknown;
23
+ readonly _tag: "InitiateUploadError";
24
+ constructor(cause: unknown);
25
+ }
26
+ declare class ReconcileError extends Error {
27
+ readonly cause: unknown;
28
+ readonly _tag: "ReconcileError";
29
+ constructor(cause: unknown);
30
+ }
31
+ declare class CompleteUploadError extends Error {
32
+ readonly cause: unknown;
33
+ readonly _tag: "CompleteUploadError";
34
+ constructor(cause: unknown);
35
+ }
36
+ declare class AbortError extends Error {
37
+ readonly _tag: "AbortError";
38
+ constructor();
39
+ }
40
+ declare class CircuitOpenError extends Error {
41
+ readonly failedParts: number;
42
+ readonly _tag: "CircuitOpenError";
43
+ constructor(failedParts: number);
44
+ }
45
+ type UploadError = PartUploadError | MaxRetriesExceededError | PresignedUrlError | InitiateUploadError | ReconcileError | CompleteUploadError | AbortError | CircuitOpenError;
46
+ //#endregion
47
+ export { PartUploadError as a, UploadError as c, MaxRetriesExceededError as i, CompleteUploadError as n, PresignedUrlError as o, InitiateUploadError as r, ReconcileError as s, AbortError as t };
48
+ //# sourceMappingURL=upload-error-B2ISUc_k.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-error-B2ISUc_k.d.cts","names":[],"sources":["../src/errors/upload-error.ts"],"mappings":";cAAa,eAAA,SAAwB,KAAA;EAAA,SAIxB,UAAA;EAAA,SACA,OAAA;EAAA,SACS,KAAA;EAAA,SALX,IAAA;cAGE,UAAA,UACA,OAAA,UACS,KAAA;AAAA;AAAA,cAOT,uBAAA,SAAgC,KAAA;EAAA,SAIhC,UAAA;EAAA,SACA,aAAA;EAAA,SACS,KAAA;EAAA,SALX,IAAA;cAGE,UAAA,UACA,aAAA,UACS,KAAA;AAAA;AAAA,cAOT,iBAAA,SAA0B,KAAA;EAAA,SAGP,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,mBAAA,SAA4B,KAAA;EAAA,SAGT,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,cAAA,SAAuB,KAAA;EAAA,SAGJ,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,mBAAA,SAA4B,KAAA;EAAA,SAGT,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,UAAA,SAAmB,KAAA;EAAA,SACrB,IAAA;;;cAQE,gBAAA,SAAyB,KAAA;EAAA,SAGf,WAAA;EAAA,SAFZ,IAAA;cAEY,WAAA;AAAA;AAAA,KAMX,WAAA,GACR,eAAA,GACA,uBAAA,GACA,iBAAA,GACA,mBAAA,GACA,cAAA,GACA,mBAAA,GACA,UAAA,GACA,gBAAA"}
@@ -0,0 +1,119 @@
1
+ //#region src/errors/upload-error.ts
2
+ var PartUploadError = class extends Error {
3
+ _tag = "PartUploadError";
4
+ constructor(partNumber, attempt, cause) {
5
+ super(`Part ${partNumber} failed on attempt ${attempt}`);
6
+ this.partNumber = partNumber;
7
+ this.attempt = attempt;
8
+ this.cause = cause;
9
+ this.name = "PartUploadError";
10
+ }
11
+ };
12
+ var MaxRetriesExceededError = class extends Error {
13
+ _tag = "MaxRetriesExceededError";
14
+ constructor(partNumber, totalAttempts, cause) {
15
+ super(`Part ${partNumber} failed after ${totalAttempts} attempts`);
16
+ this.partNumber = partNumber;
17
+ this.totalAttempts = totalAttempts;
18
+ this.cause = cause;
19
+ this.name = "MaxRetriesExceededError";
20
+ }
21
+ };
22
+ var PresignedUrlError = class extends Error {
23
+ _tag = "PresignedUrlError";
24
+ constructor(cause) {
25
+ super("Failed to obtain pre-signed URL");
26
+ this.cause = cause;
27
+ this.name = "PresignedUrlError";
28
+ }
29
+ };
30
+ var InitiateUploadError = class extends Error {
31
+ _tag = "InitiateUploadError";
32
+ constructor(cause) {
33
+ super("Failed to initiate multipart upload");
34
+ this.cause = cause;
35
+ this.name = "InitiateUploadError";
36
+ }
37
+ };
38
+ var ReconcileError = class extends Error {
39
+ _tag = "ReconcileError";
40
+ constructor(cause) {
41
+ super("Failed to reconcile completed parts");
42
+ this.cause = cause;
43
+ this.name = "ReconcileError";
44
+ }
45
+ };
46
+ var CompleteUploadError = class extends Error {
47
+ _tag = "CompleteUploadError";
48
+ constructor(cause) {
49
+ super("Failed to complete multipart upload");
50
+ this.cause = cause;
51
+ this.name = "CompleteUploadError";
52
+ }
53
+ };
54
+ var AbortError = class extends Error {
55
+ _tag = "AbortError";
56
+ constructor() {
57
+ super("Upload aborted");
58
+ this.name = "AbortError";
59
+ }
60
+ };
61
+ var CircuitOpenError = class extends Error {
62
+ _tag = "CircuitOpenError";
63
+ constructor(failedParts) {
64
+ super(`Circuit breaker opened after ${failedParts} consecutive part failures`);
65
+ this.failedParts = failedParts;
66
+ this.name = "CircuitOpenError";
67
+ }
68
+ };
69
+ //#endregion
70
+ Object.defineProperty(exports, "AbortError", {
71
+ enumerable: true,
72
+ get: function() {
73
+ return AbortError;
74
+ }
75
+ });
76
+ Object.defineProperty(exports, "CircuitOpenError", {
77
+ enumerable: true,
78
+ get: function() {
79
+ return CircuitOpenError;
80
+ }
81
+ });
82
+ Object.defineProperty(exports, "CompleteUploadError", {
83
+ enumerable: true,
84
+ get: function() {
85
+ return CompleteUploadError;
86
+ }
87
+ });
88
+ Object.defineProperty(exports, "InitiateUploadError", {
89
+ enumerable: true,
90
+ get: function() {
91
+ return InitiateUploadError;
92
+ }
93
+ });
94
+ Object.defineProperty(exports, "MaxRetriesExceededError", {
95
+ enumerable: true,
96
+ get: function() {
97
+ return MaxRetriesExceededError;
98
+ }
99
+ });
100
+ Object.defineProperty(exports, "PartUploadError", {
101
+ enumerable: true,
102
+ get: function() {
103
+ return PartUploadError;
104
+ }
105
+ });
106
+ Object.defineProperty(exports, "PresignedUrlError", {
107
+ enumerable: true,
108
+ get: function() {
109
+ return PresignedUrlError;
110
+ }
111
+ });
112
+ Object.defineProperty(exports, "ReconcileError", {
113
+ enumerable: true,
114
+ get: function() {
115
+ return ReconcileError;
116
+ }
117
+ });
118
+
119
+ //# sourceMappingURL=upload-error-BUexBh08.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-error-BUexBh08.cjs","names":[],"sources":["../src/errors/upload-error.ts"],"sourcesContent":["export class PartUploadError extends Error {\n readonly _tag = \"PartUploadError\" as const\n\n constructor(\n readonly partNumber: number,\n readonly attempt: number,\n override readonly cause: unknown\n ) {\n super(`Part ${partNumber} failed on attempt ${attempt}`)\n this.name = \"PartUploadError\"\n }\n}\n\nexport class MaxRetriesExceededError extends Error {\n readonly _tag = \"MaxRetriesExceededError\" as const\n\n constructor(\n readonly partNumber: number,\n readonly totalAttempts: number,\n override readonly cause: unknown\n ) {\n super(`Part ${partNumber} failed after ${totalAttempts} attempts`)\n this.name = \"MaxRetriesExceededError\"\n }\n}\n\nexport class PresignedUrlError extends Error {\n readonly _tag = \"PresignedUrlError\" as const\n\n constructor(override readonly cause: unknown) {\n super(\"Failed to obtain pre-signed URL\")\n this.name = \"PresignedUrlError\"\n }\n}\n\nexport class InitiateUploadError extends Error {\n readonly _tag = \"InitiateUploadError\" as const\n\n constructor(override readonly cause: unknown) {\n super(\"Failed to initiate multipart upload\")\n this.name = \"InitiateUploadError\"\n }\n}\n\nexport class ReconcileError extends Error {\n readonly _tag = \"ReconcileError\" as const\n\n constructor(override readonly cause: unknown) {\n super(\"Failed to reconcile completed parts\")\n this.name = \"ReconcileError\"\n }\n}\n\nexport class CompleteUploadError extends Error {\n readonly _tag = \"CompleteUploadError\" as const\n\n constructor(override readonly cause: unknown) {\n super(\"Failed to complete multipart upload\")\n this.name = \"CompleteUploadError\"\n }\n}\n\nexport class AbortError extends Error {\n readonly _tag = \"AbortError\" as const\n\n constructor() {\n super(\"Upload aborted\")\n this.name = \"AbortError\"\n }\n}\n\nexport class CircuitOpenError extends Error {\n readonly _tag = \"CircuitOpenError\" as const\n\n constructor(readonly failedParts: number) {\n super(`Circuit breaker opened after ${failedParts} consecutive part failures`)\n this.name = \"CircuitOpenError\"\n }\n}\n\nexport type UploadError =\n | PartUploadError\n | MaxRetriesExceededError\n | PresignedUrlError\n | InitiateUploadError\n | ReconcileError\n | CompleteUploadError\n | AbortError\n | CircuitOpenError\n"],"mappings":";AAAA,IAAa,kBAAb,cAAqC,MAAM;CACzC,OAAgB;CAEhB,YACE,YACA,SACA,OACA;AACA,QAAM,QAAQ,WAAW,qBAAqB,UAAU;AAJ/C,OAAA,aAAA;AACA,OAAA,UAAA;AACS,OAAA,QAAA;AAGlB,OAAK,OAAO;;;AAIhB,IAAa,0BAAb,cAA6C,MAAM;CACjD,OAAgB;CAEhB,YACE,YACA,eACA,OACA;AACA,QAAM,QAAQ,WAAW,gBAAgB,cAAc,WAAW;AAJzD,OAAA,aAAA;AACA,OAAA,gBAAA;AACS,OAAA,QAAA;AAGlB,OAAK,OAAO;;;AAIhB,IAAa,oBAAb,cAAuC,MAAM;CAC3C,OAAgB;CAEhB,YAAY,OAAkC;AAC5C,QAAM,kCAAkC;AADZ,OAAA,QAAA;AAE5B,OAAK,OAAO;;;AAIhB,IAAa,sBAAb,cAAyC,MAAM;CAC7C,OAAgB;CAEhB,YAAY,OAAkC;AAC5C,QAAM,sCAAsC;AADhB,OAAA,QAAA;AAE5B,OAAK,OAAO;;;AAIhB,IAAa,iBAAb,cAAoC,MAAM;CACxC,OAAgB;CAEhB,YAAY,OAAkC;AAC5C,QAAM,sCAAsC;AADhB,OAAA,QAAA;AAE5B,OAAK,OAAO;;;AAIhB,IAAa,sBAAb,cAAyC,MAAM;CAC7C,OAAgB;CAEhB,YAAY,OAAkC;AAC5C,QAAM,sCAAsC;AADhB,OAAA,QAAA;AAE5B,OAAK,OAAO;;;AAIhB,IAAa,aAAb,cAAgC,MAAM;CACpC,OAAgB;CAEhB,cAAc;AACZ,QAAM,iBAAiB;AACvB,OAAK,OAAO;;;AAIhB,IAAa,mBAAb,cAAsC,MAAM;CAC1C,OAAgB;CAEhB,YAAY,aAA8B;AACxC,QAAM,gCAAgC,YAAY,4BAA4B;AAD3D,OAAA,cAAA;AAEnB,OAAK,OAAO"}
@@ -0,0 +1,48 @@
1
+ //#region src/errors/upload-error.d.ts
2
+ declare class PartUploadError extends Error {
3
+ readonly partNumber: number;
4
+ readonly attempt: number;
5
+ readonly cause: unknown;
6
+ readonly _tag: "PartUploadError";
7
+ constructor(partNumber: number, attempt: number, cause: unknown);
8
+ }
9
+ declare class MaxRetriesExceededError extends Error {
10
+ readonly partNumber: number;
11
+ readonly totalAttempts: number;
12
+ readonly cause: unknown;
13
+ readonly _tag: "MaxRetriesExceededError";
14
+ constructor(partNumber: number, totalAttempts: number, cause: unknown);
15
+ }
16
+ declare class PresignedUrlError extends Error {
17
+ readonly cause: unknown;
18
+ readonly _tag: "PresignedUrlError";
19
+ constructor(cause: unknown);
20
+ }
21
+ declare class InitiateUploadError extends Error {
22
+ readonly cause: unknown;
23
+ readonly _tag: "InitiateUploadError";
24
+ constructor(cause: unknown);
25
+ }
26
+ declare class ReconcileError extends Error {
27
+ readonly cause: unknown;
28
+ readonly _tag: "ReconcileError";
29
+ constructor(cause: unknown);
30
+ }
31
+ declare class CompleteUploadError extends Error {
32
+ readonly cause: unknown;
33
+ readonly _tag: "CompleteUploadError";
34
+ constructor(cause: unknown);
35
+ }
36
+ declare class AbortError extends Error {
37
+ readonly _tag: "AbortError";
38
+ constructor();
39
+ }
40
+ declare class CircuitOpenError extends Error {
41
+ readonly failedParts: number;
42
+ readonly _tag: "CircuitOpenError";
43
+ constructor(failedParts: number);
44
+ }
45
+ type UploadError = PartUploadError | MaxRetriesExceededError | PresignedUrlError | InitiateUploadError | ReconcileError | CompleteUploadError | AbortError | CircuitOpenError;
46
+ //#endregion
47
+ export { PartUploadError as a, UploadError as c, MaxRetriesExceededError as i, CompleteUploadError as n, PresignedUrlError as o, InitiateUploadError as r, ReconcileError as s, AbortError as t };
48
+ //# sourceMappingURL=upload-error-jol-eoDW.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-error-jol-eoDW.d.mts","names":[],"sources":["../src/errors/upload-error.ts"],"mappings":";cAAa,eAAA,SAAwB,KAAA;EAAA,SAIxB,UAAA;EAAA,SACA,OAAA;EAAA,SACS,KAAA;EAAA,SALX,IAAA;cAGE,UAAA,UACA,OAAA,UACS,KAAA;AAAA;AAAA,cAOT,uBAAA,SAAgC,KAAA;EAAA,SAIhC,UAAA;EAAA,SACA,aAAA;EAAA,SACS,KAAA;EAAA,SALX,IAAA;cAGE,UAAA,UACA,aAAA,UACS,KAAA;AAAA;AAAA,cAOT,iBAAA,SAA0B,KAAA;EAAA,SAGP,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,mBAAA,SAA4B,KAAA;EAAA,SAGT,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,cAAA,SAAuB,KAAA;EAAA,SAGJ,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,mBAAA,SAA4B,KAAA;EAAA,SAGT,KAAA;EAAA,SAFrB,IAAA;cAEqB,KAAA;AAAA;AAAA,cAMnB,UAAA,SAAmB,KAAA;EAAA,SACrB,IAAA;;;cAQE,gBAAA,SAAyB,KAAA;EAAA,SAGf,WAAA;EAAA,SAFZ,IAAA;cAEY,WAAA;AAAA;AAAA,KAMX,WAAA,GACR,eAAA,GACA,uBAAA,GACA,iBAAA,GACA,mBAAA,GACA,cAAA,GACA,mBAAA,GACA,UAAA,GACA,gBAAA"}