@tranquilload/core 0.1.0 → 0.1.1

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 (55) hide show
  1. package/.turbo/turbo-build.log +68 -68
  2. package/CHANGELOG.md +67 -0
  3. package/dist/errors.cjs +3 -1
  4. package/dist/errors.d.cts +2 -2
  5. package/dist/errors.d.mts +2 -2
  6. package/dist/errors.mjs +2 -2
  7. package/dist/index-BaeUV_fj.d.cts +139 -0
  8. package/dist/index-BaeUV_fj.d.cts.map +1 -0
  9. package/dist/index-bpWq6tje.d.mts +139 -0
  10. package/dist/index-bpWq6tje.d.mts.map +1 -0
  11. package/dist/multipart.cjs +80 -12
  12. package/dist/multipart.cjs.map +1 -1
  13. package/dist/multipart.d.cts +2 -2
  14. package/dist/multipart.d.mts +2 -2
  15. package/dist/multipart.mjs +80 -12
  16. package/dist/multipart.mjs.map +1 -1
  17. package/dist/{normalize-callback-BNBZZ1jT.cjs → normalize-callback-BdLtk9jb.cjs} +2 -2
  18. package/dist/{normalize-callback-BNBZZ1jT.cjs.map → normalize-callback-BdLtk9jb.cjs.map} +1 -1
  19. package/dist/{normalize-callback-DQ6C4gaV.mjs → normalize-callback-tcZ_nyq5.mjs} +2 -2
  20. package/dist/{normalize-callback-DQ6C4gaV.mjs.map → normalize-callback-tcZ_nyq5.mjs.map} +1 -1
  21. package/dist/oneshot.cjs +2 -2
  22. package/dist/oneshot.d.cts +2 -2
  23. package/dist/oneshot.d.mts +2 -2
  24. package/dist/oneshot.mjs +2 -2
  25. package/dist/progress.d.cts +2 -2
  26. package/dist/progress.d.mts +2 -2
  27. package/dist/{upload-error-BUexBh08.cjs → upload-error-BG1dOOl3.cjs} +26 -1
  28. package/dist/upload-error-BG1dOOl3.cjs.map +1 -0
  29. package/dist/{upload-error-B2ISUc_k.d.cts → upload-error-DTYVNlaJ.d.cts} +19 -3
  30. package/dist/{upload-error-B2ISUc_k.d.cts.map → upload-error-DTYVNlaJ.d.cts.map} +1 -1
  31. package/dist/{upload-error-zDvpxT9X.mjs → upload-error-Dbz_9j81.mjs} +21 -2
  32. package/dist/upload-error-Dbz_9j81.mjs.map +1 -0
  33. package/dist/{upload-error-jol-eoDW.d.mts → upload-error-jBco270d.d.mts} +19 -3
  34. package/dist/{upload-error-jol-eoDW.d.mts.map → upload-error-jBco270d.d.mts.map} +1 -1
  35. package/dist/{upload-event-C9TOVp5l.d.mts → upload-event-BT_nXgM9.d.cts} +7 -1
  36. package/dist/upload-event-BT_nXgM9.d.cts.map +1 -0
  37. package/dist/{upload-event-D77olieX.d.cts → upload-event-DOGbegxa.d.mts} +7 -1
  38. package/dist/upload-event-DOGbegxa.d.mts.map +1 -0
  39. package/package.json +1 -1
  40. package/src/errors/index.ts +2 -0
  41. package/src/errors/upload-error.test.ts +35 -0
  42. package/src/errors/upload-error.ts +27 -0
  43. package/src/multipart/index.test.ts +164 -1
  44. package/src/multipart/index.ts +96 -5
  45. package/src/multipart/upload-stream.test.ts +201 -2
  46. package/src/multipart/upload-stream.ts +160 -16
  47. package/src/progress/upload-event.ts +6 -0
  48. package/dist/index-Ch8xM6Xt.d.cts +0 -60
  49. package/dist/index-Ch8xM6Xt.d.cts.map +0 -1
  50. package/dist/index-DBGtgXEd.d.mts +0 -60
  51. package/dist/index-DBGtgXEd.d.mts.map +0 -1
  52. package/dist/upload-error-BUexBh08.cjs.map +0 -1
  53. package/dist/upload-error-zDvpxT9X.mjs.map +0 -1
  54. package/dist/upload-event-C9TOVp5l.d.mts.map +0 -1
  55. package/dist/upload-event-D77olieX.d.cts.map +0 -1
@@ -1,5 +1,5 @@
1
1
 
2
- > @tranquilload/core@0.1.0 build /home/runner/work/Tranquilload/Tranquilload/packages/tranquilload-core
2
+ > @tranquilload/core@0.1.1 build /home/runner/work/Tranquilload/Tranquilload/packages/tranquilload-core
3
3
  > tsdown
4
4
 
5
5
  ℹ tsdown v0.21.0 powered by rolldown v1.0.0-rc.7
@@ -7,82 +7,82 @@
7
7
  ℹ entry: src/multipart/index.ts, src/oneshot/index.ts, src/pipeline/index.ts, src/services/index.ts, src/errors/index.ts, src/progress/index.ts
8
8
  ℹ tsconfig: tsconfig.json
9
9
  ℹ Build start
10
- ℹ [CJS] dist/multipart.cjs 10.93 kB │ gzip: 2.98 kB
11
- ℹ [CJS] dist/oneshot.cjs  2.83 kB │ gzip: 1.12 kB
12
- ℹ [CJS] dist/pipeline.cjs  0.92 kB │ gzip: 0.46 kB
13
- ℹ [CJS] dist/services.cjs  0.62 kB │ gzip: 0.23 kB
14
- ℹ [CJS] dist/errors.cjs  0.61 kB │ gzip: 0.24 kB
15
- ℹ [CJS] dist/progress.cjs  0.00 kB │ gzip: 0.02 kB
16
- ℹ [CJS] dist/multipart.cjs.map 25.56 kB │ gzip: 6.86 kB
17
- ℹ [CJS] dist/oneshot.cjs.map  6.41 kB │ gzip: 2.27 kB
18
- ℹ [CJS] dist/upload-error-BUexBh08.cjs.map  3.48 kB │ gzip: 0.86 kB
19
- ℹ [CJS] dist/upload-error-BUexBh08.cjs  2.98 kB │ gzip: 0.65 kB
20
- ℹ [CJS] dist/pipeline.cjs.map  2.17 kB │ gzip: 0.81 kB
21
- ℹ [CJS] dist/normalize-callback-BNBZZ1jT.cjs.map  1.99 kB │ gzip: 0.84 kB
22
- ℹ [CJS] dist/compression-service-Bn86iTJe.cjs.map  1.73 kB │ gzip: 0.80 kB
23
- ℹ [CJS] dist/normalize-callback-BNBZZ1jT.cjs  1.30 kB │ gzip: 0.54 kB
24
- ℹ [CJS] dist/compression-service-Bn86iTJe.cjs  1.24 kB │ gzip: 0.49 kB
25
- ℹ [CJS] dist/logger-service-cx8vzkXs.cjs.map  0.82 kB │ gzip: 0.48 kB
26
- ℹ [CJS] dist/logger-service-cx8vzkXs.cjs  0.58 kB │ gzip: 0.32 kB
27
- ℹ [CJS] 17 files, total: 64.16 kB
28
- ℹ [CJS] dist/index-Ch8xM6Xt.d.cts.map 1.27 kB │ gzip: 0.49 kB
29
- ℹ [CJS] dist/upload-error-B2ISUc_k.d.cts.map 0.87 kB │ gzip: 0.30 kB
30
- ℹ [CJS] dist/upload-event-D77olieX.d.cts.map 0.59 kB │ gzip: 0.23 kB
10
+ ℹ [CJS] dist/multipart.cjs 15.08 kB │ gzip: 3.94 kB
11
+ ℹ [CJS] dist/oneshot.cjs  2.83 kB │ gzip: 1.12 kB
12
+ ℹ [CJS] dist/pipeline.cjs  0.92 kB │ gzip: 0.46 kB
13
+ ℹ [CJS] dist/errors.cjs  0.75 kB │ gzip: 0.27 kB
14
+ ℹ [CJS] dist/services.cjs  0.62 kB │ gzip: 0.23 kB
15
+ ℹ [CJS] dist/progress.cjs  0.00 kB │ gzip: 0.02 kB
16
+ ℹ [CJS] dist/multipart.cjs.map 37.96 kB │ gzip: 10.59 kB
17
+ ℹ [CJS] dist/oneshot.cjs.map  6.41 kB │ gzip: 2.27 kB
18
+ ℹ [CJS] dist/upload-error-BG1dOOl3.cjs.map  4.63 kB │ gzip: 1.28 kB
19
+ ℹ [CJS] dist/upload-error-BG1dOOl3.cjs  3.90 kB │ gzip: 0.99 kB
20
+ ℹ [CJS] dist/pipeline.cjs.map  2.17 kB │ gzip: 0.81 kB
21
+ ℹ [CJS] dist/normalize-callback-BdLtk9jb.cjs.map  1.99 kB │ gzip: 0.84 kB
22
+ ℹ [CJS] dist/compression-service-Bn86iTJe.cjs.map  1.73 kB │ gzip: 0.80 kB
23
+ ℹ [CJS] dist/normalize-callback-BdLtk9jb.cjs  1.30 kB │ gzip: 0.54 kB
24
+ ℹ [CJS] dist/compression-service-Bn86iTJe.cjs  1.24 kB │ gzip: 0.49 kB
25
+ ℹ [CJS] dist/logger-service-cx8vzkXs.cjs.map  0.82 kB │ gzip: 0.48 kB
26
+ ℹ [CJS] dist/logger-service-cx8vzkXs.cjs  0.58 kB │ gzip: 0.32 kB
27
+ ℹ [CJS] 17 files, total: 82.94 kB
28
+ ℹ [CJS] dist/index-BaeUV_fj.d.cts.map 1.61 kB │ gzip: 0.59 kB
29
+ ℹ [CJS] dist/upload-error-DTYVNlaJ.d.cts.map 0.98 kB │ gzip: 0.33 kB
30
+ ℹ [CJS] dist/upload-event-BT_nXgM9.d.cts.map 0.62 kB │ gzip: 0.25 kB
31
31
  ℹ [CJS] dist/oneshot.d.cts.map 0.51 kB │ gzip: 0.27 kB
32
32
  ℹ [CJS] dist/middleware-CYcctmlY.d.cts.map 0.42 kB │ gzip: 0.23 kB
33
33
  ℹ [CJS] dist/compression-service-CiF7Px08.d.cts.map 0.36 kB │ gzip: 0.24 kB
34
34
  ℹ [CJS] dist/logger-service-CbN12RhO.d.cts.map 0.28 kB │ gzip: 0.20 kB
35
35
  ℹ [CJS] dist/pipeline.d.cts.map 0.18 kB │ gzip: 0.15 kB
36
36
  ℹ [CJS] dist/oneshot.d.cts 1.19 kB │ gzip: 0.52 kB
37
+ ℹ [CJS] dist/errors.d.cts 0.48 kB │ gzip: 0.22 kB
37
38
  ℹ [CJS] dist/pipeline.d.cts 0.43 kB │ gzip: 0.27 kB
38
- ℹ [CJS] dist/errors.d.cts 0.39 kB │ gzip: 0.19 kB
39
39
  ℹ [CJS] dist/services.d.cts 0.38 kB │ gzip: 0.18 kB
40
40
  ℹ [CJS] dist/progress.d.cts 0.36 kB │ gzip: 0.20 kB
41
- ℹ [CJS] dist/multipart.d.cts 0.29 kB │ gzip: 0.16 kB
42
- ℹ [CJS] dist/index-Ch8xM6Xt.d.cts 2.49 kB │ gzip: 0.86 kB
43
- ℹ [CJS] dist/upload-error-B2ISUc_k.d.cts 1.81 kB │ gzip: 0.44 kB
44
- ℹ [CJS] dist/upload-event-D77olieX.d.cts 1.12 kB │ gzip: 0.37 kB
41
+ ℹ [CJS] dist/multipart.d.cts 0.32 kB │ gzip: 0.18 kB
42
+ ℹ [CJS] dist/index-BaeUV_fj.d.cts 6.50 kB │ gzip: 2.42 kB
43
+ ℹ [CJS] dist/upload-error-DTYVNlaJ.d.cts 2.82 kB │ gzip: 0.81 kB
44
+ ℹ [CJS] dist/upload-event-BT_nXgM9.d.cts 1.38 kB │ gzip: 0.52 kB
45
45
  ℹ [CJS] dist/compression-service-CiF7Px08.d.cts 0.79 kB │ gzip: 0.36 kB
46
46
  ℹ [CJS] dist/logger-service-CbN12RhO.d.cts 0.57 kB │ gzip: 0.33 kB
47
47
  ℹ [CJS] dist/middleware-CYcctmlY.d.cts 0.50 kB │ gzip: 0.26 kB
48
- ℹ [CJS] 20 files, total: 14.79 kB
49
- ✔ Build complete in 2839ms
50
- ℹ [ESM] dist/multipart.mjs 10.01 kB │ gzip: 2.93 kB
51
- ℹ [ESM] dist/oneshot.mjs  2.55 kB │ gzip: 1.05 kB
52
- ℹ [ESM] dist/pipeline.mjs  0.76 kB │ gzip: 0.39 kB
53
- ℹ [ESM] dist/errors.mjs  0.35 kB │ gzip: 0.18 kB
54
- ℹ [ESM] dist/services.mjs  0.35 kB │ gzip: 0.17 kB
55
- ℹ [ESM] dist/progress.mjs  0.01 kB │ gzip: 0.03 kB
56
- ℹ [ESM] dist/multipart.mjs.map 24.41 kB │ gzip: 6.58 kB
57
- ℹ [ESM] dist/oneshot.mjs.map  6.07 kB │ gzip: 2.17 kB
58
- ℹ [ESM] dist/upload-error-zDvpxT9X.mjs.map  3.48 kB │ gzip: 0.87 kB
59
- ℹ [ESM] dist/upload-error-zDvpxT9X.mjs  2.17 kB │ gzip: 0.58 kB
60
- ℹ [ESM] dist/pipeline.mjs.map  2.09 kB │ gzip: 0.80 kB
61
- ℹ [ESM] dist/normalize-callback-DQ6C4gaV.mjs.map  1.88 kB │ gzip: 0.82 kB
62
- ℹ [ESM] dist/compression-service-Bm1VBnhT.mjs.map  1.67 kB │ gzip: 0.79 kB
63
- ℹ [ESM] dist/index-DBGtgXEd.d.mts.map  1.27 kB │ gzip: 0.49 kB
64
- ℹ [ESM] dist/normalize-callback-DQ6C4gaV.mjs  1.00 kB │ gzip: 0.48 kB
65
- ℹ [ESM] dist/compression-service-Bm1VBnhT.mjs  0.91 kB │ gzip: 0.44 kB
66
- ℹ [ESM] dist/upload-error-jol-eoDW.d.mts.map  0.87 kB │ gzip: 0.30 kB
67
- ℹ [ESM] dist/logger-service-1J5r_akj.mjs.map  0.79 kB │ gzip: 0.46 kB
68
- ℹ [ESM] dist/upload-event-C9TOVp5l.d.mts.map  0.59 kB │ gzip: 0.24 kB
69
- ℹ [ESM] dist/oneshot.d.mts.map  0.51 kB │ gzip: 0.27 kB
70
- ℹ [ESM] dist/middleware-CAI0cnW2.d.mts.map  0.42 kB │ gzip: 0.23 kB
71
- ℹ [ESM] dist/logger-service-1J5r_akj.mjs  0.38 kB │ gzip: 0.26 kB
72
- ℹ [ESM] dist/compression-service-DI7ZXVxH.d.mts.map  0.36 kB │ gzip: 0.24 kB
73
- ℹ [ESM] dist/logger-service-BF2pZOHN.d.mts.map  0.28 kB │ gzip: 0.20 kB
74
- ℹ [ESM] dist/pipeline.d.mts.map  0.18 kB │ gzip: 0.15 kB
75
- ℹ [ESM] dist/oneshot.d.mts  1.19 kB │ gzip: 0.52 kB
76
- ℹ [ESM] dist/pipeline.d.mts  0.43 kB │ gzip: 0.27 kB
77
- ℹ [ESM] dist/errors.d.mts  0.39 kB │ gzip: 0.19 kB
78
- ℹ [ESM] dist/services.d.mts  0.38 kB │ gzip: 0.18 kB
79
- ℹ [ESM] dist/progress.d.mts  0.36 kB │ gzip: 0.20 kB
80
- ℹ [ESM] dist/multipart.d.mts  0.29 kB │ gzip: 0.17 kB
81
- ℹ [ESM] dist/index-DBGtgXEd.d.mts  2.49 kB │ gzip: 0.87 kB
82
- ℹ [ESM] dist/upload-error-jol-eoDW.d.mts  1.81 kB │ gzip: 0.44 kB
83
- ℹ [ESM] dist/upload-event-C9TOVp5l.d.mts  1.12 kB │ gzip: 0.37 kB
84
- ℹ [ESM] dist/compression-service-DI7ZXVxH.d.mts  0.79 kB │ gzip: 0.36 kB
85
- ℹ [ESM] dist/logger-service-BF2pZOHN.d.mts  0.57 kB │ gzip: 0.33 kB
86
- ℹ [ESM] dist/middleware-CAI0cnW2.d.mts  0.50 kB │ gzip: 0.27 kB
87
- ℹ [ESM] 37 files, total: 73.70 kB
88
- ✔ Build complete in 2847ms
48
+ ℹ [CJS] 20 files, total: 20.68 kB
49
+ ✔ Build complete in 2670ms
50
+ ℹ [ESM] dist/multipart.mjs 13.88 kB │ gzip: 3.89 kB
51
+ ℹ [ESM] dist/oneshot.mjs  2.55 kB │ gzip: 1.05 kB
52
+ ℹ [ESM] dist/pipeline.mjs  0.76 kB │ gzip: 0.39 kB
53
+ ℹ [ESM] dist/errors.mjs  0.44 kB │ gzip: 0.21 kB
54
+ ℹ [ESM] dist/services.mjs  0.35 kB │ gzip: 0.17 kB
55
+ ℹ [ESM] dist/progress.mjs  0.01 kB │ gzip: 0.03 kB
56
+ ℹ [ESM] dist/multipart.mjs.map 36.62 kB │ gzip: 10.29 kB
57
+ ℹ [ESM] dist/oneshot.mjs.map  6.07 kB │ gzip: 2.17 kB
58
+ ℹ [ESM] dist/upload-error-Dbz_9j81.mjs.map  4.63 kB │ gzip: 1.29 kB
59
+ ℹ [ESM] dist/upload-error-Dbz_9j81.mjs  2.99 kB │ gzip: 0.92 kB
60
+ ℹ [ESM] dist/pipeline.mjs.map  2.09 kB │ gzip: 0.80 kB
61
+ ℹ [ESM] dist/normalize-callback-tcZ_nyq5.mjs.map  1.88 kB │ gzip: 0.82 kB
62
+ ℹ [ESM] dist/compression-service-Bm1VBnhT.mjs.map  1.67 kB │ gzip: 0.79 kB
63
+ ℹ [ESM] dist/index-bpWq6tje.d.mts.map  1.61 kB │ gzip: 0.59 kB
64
+ ℹ [ESM] dist/normalize-callback-tcZ_nyq5.mjs  1.00 kB │ gzip: 0.48 kB
65
+ ℹ [ESM] dist/upload-error-jBco270d.d.mts.map  0.98 kB │ gzip: 0.33 kB
66
+ ℹ [ESM] dist/compression-service-Bm1VBnhT.mjs  0.91 kB │ gzip: 0.44 kB
67
+ ℹ [ESM] dist/logger-service-1J5r_akj.mjs.map  0.79 kB │ gzip: 0.46 kB
68
+ ℹ [ESM] dist/upload-event-DOGbegxa.d.mts.map  0.62 kB │ gzip: 0.25 kB
69
+ ℹ [ESM] dist/oneshot.d.mts.map  0.51 kB │ gzip: 0.27 kB
70
+ ℹ [ESM] dist/middleware-CAI0cnW2.d.mts.map  0.42 kB │ gzip: 0.23 kB
71
+ ℹ [ESM] dist/logger-service-1J5r_akj.mjs  0.38 kB │ gzip: 0.26 kB
72
+ ℹ [ESM] dist/compression-service-DI7ZXVxH.d.mts.map  0.36 kB │ gzip: 0.24 kB
73
+ ℹ [ESM] dist/logger-service-BF2pZOHN.d.mts.map  0.28 kB │ gzip: 0.20 kB
74
+ ℹ [ESM] dist/pipeline.d.mts.map  0.18 kB │ gzip: 0.15 kB
75
+ ℹ [ESM] dist/oneshot.d.mts  1.19 kB │ gzip: 0.52 kB
76
+ ℹ [ESM] dist/errors.d.mts  0.48 kB │ gzip: 0.22 kB
77
+ ℹ [ESM] dist/pipeline.d.mts  0.43 kB │ gzip: 0.27 kB
78
+ ℹ [ESM] dist/services.d.mts  0.38 kB │ gzip: 0.18 kB
79
+ ℹ [ESM] dist/progress.d.mts  0.36 kB │ gzip: 0.20 kB
80
+ ℹ [ESM] dist/multipart.d.mts  0.32 kB │ gzip: 0.18 kB
81
+ ℹ [ESM] dist/index-bpWq6tje.d.mts  6.50 kB │ gzip: 2.42 kB
82
+ ℹ [ESM] dist/upload-error-jBco270d.d.mts  2.82 kB │ gzip: 0.82 kB
83
+ ℹ [ESM] dist/upload-event-DOGbegxa.d.mts  1.38 kB │ gzip: 0.51 kB
84
+ ℹ [ESM] dist/compression-service-DI7ZXVxH.d.mts  0.79 kB │ gzip: 0.36 kB
85
+ ℹ [ESM] dist/logger-service-BF2pZOHN.d.mts  0.57 kB │ gzip: 0.33 kB
86
+ ℹ [ESM] dist/middleware-CAI0cnW2.d.mts  0.50 kB │ gzip: 0.27 kB
87
+ ℹ [ESM] 37 files, total: 97.73 kB
88
+ ✔ Build complete in 2683ms
package/CHANGELOG.md ADDED
@@ -0,0 +1,67 @@
1
+ # @tranquilload/core
2
+
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 6ca9186: Resume safety: opaque `ResumeState`, content-digest validation, pipeline-identity check.
8
+
9
+ The pre-v0.2 resume pattern (re-passing a stored `uploadId` via `initiate`)
10
+ had three silent-corruption gaps: chunkSize drift, content swap, and pipeline
11
+ drift. This release ships an opaque `ResumeState` that the lib produces, you
12
+ persist, and the lib re-validates before any byte is uploaded.
13
+
14
+ **New surface:**
15
+
16
+ - `ResumeState` — opaque, JSON-serializable resume metadata carrying `version`,
17
+ `uploadId`, `chunkSize`, optional `pipelineIdentity`, optional `contentDigest`,
18
+ and the `contentDigestCaptured` flag.
19
+ - `resumeFrom: ResumeState` option on `uploadMultipart` — validates match
20
+ synchronously (version, chunkSize, pipelineIdentity, captured-but-dropped
21
+ digest) and asynchronously (digest value), then uses `resumeFrom.uploadId`
22
+ directly (skipping `initiate`).
23
+ - `getContentDigest: () => string | Promise<string> | Effect<string, UploadError>`
24
+ option — lightweight stable identifier of the source content. Captured on
25
+ fresh init, compared on resume. Stable patterns:
26
+ `` `${name}|${size}|${lastModified}` `` for browser files;
27
+ `` `${path}|${stat.size}|${stat.mtimeMs}` `` for Node fs.
28
+ - `pipelineIdentity: string` option — opaque, strict-equality identifier for
29
+ the upstream pipeline composition.
30
+ - `resumeState: Promise<ResumeState>` on `uploadMultipart`'s return — resolves
31
+ with the state you should persist.
32
+ - `ResumeMismatchError` — new `UploadError` variant with a `reason`
33
+ discriminant: `version_mismatch | chunksize_mismatch | pipeline_mismatch |
34
+ content_mismatch`. Dispatch with `Match.value(err.reason)` inside the
35
+ `Match.tag("ResumeMismatchError", ...)` handler.
36
+
37
+ **Behaviour change (semver-minor under pre-1.0 SemVer):** `initiate` semantics
38
+ are now "always fresh". Users on the v0.1.x legacy pattern (`initiate +
39
+ reconcileCompletedParts + no resumeFrom`) get an unconditional `console.warn`
40
+ pointing at `MIGRATION.md`. A second warning fires when `pipeline` is set
41
+ without `pipelineIdentity` — without an identity, pipeline-mismatch protection
42
+ on resume is disabled.
43
+
44
+ **Resume is now silent.** On the resume branch, the lib does **not** emit a
45
+ synthetic `UploadInitiated` event; the first event after setup is whatever
46
+ the parts stream emits next (`PartCompleted` or `ProgressTick`). The
47
+ `uploadId` Promise resolves synchronously with `resumeFrom.uploadId`. The
48
+ existing fresh-init flow is unchanged.
49
+
50
+ **Bundled fix:** `CircuitOpenError` is now exported from
51
+ `@tranquilload/core/errors`. It was defined internally but had never been
52
+ re-exported, so callers had no way to `instanceof`-check it.
53
+
54
+ **NOT in this release** (explicit non-feature note): auto-re-initiate on dead
55
+ `uploadId` was considered but deferred to a future version. If your stored
56
+ `uploadId` is no longer valid server-side, you'll currently see
57
+ `PartUploadError(1, 1, <404>)` on the first part upload — same as before.
58
+
59
+ See `MIGRATION.md` for the migration guide.
60
+
61
+ - 6ca9186: Validate `chunkSize > 0` in `uploadMultipart` / `uploadMultipartEffect`.
62
+
63
+ Previously, passing `chunkSize: 0` (or `NaN`, `Infinity`, negative values) caused an infinite loop on the first byte of the source stream — the chunking loop `while (buffer.length >= chunkSize)` never terminated.
64
+
65
+ Now: `uploadMultipart` (and the `.effect` escape hatch) throws `TypeError` synchronously at construction time when `chunkSize` is not a positive finite number. Behaviour for all valid `chunkSize` values is unchanged.
66
+
67
+ This is a behaviour change for users who were passing invalid `chunkSize` — but those uploads never worked (they hung forever), so this is semver-patch.
package/dist/errors.cjs CHANGED
@@ -1,9 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_upload_error = require("./upload-error-BUexBh08.cjs");
2
+ const require_upload_error = require("./upload-error-BG1dOOl3.cjs");
3
3
  exports.AbortError = require_upload_error.AbortError;
4
+ exports.CircuitOpenError = require_upload_error.CircuitOpenError;
4
5
  exports.CompleteUploadError = require_upload_error.CompleteUploadError;
5
6
  exports.InitiateUploadError = require_upload_error.InitiateUploadError;
6
7
  exports.MaxRetriesExceededError = require_upload_error.MaxRetriesExceededError;
7
8
  exports.PartUploadError = require_upload_error.PartUploadError;
8
9
  exports.PresignedUrlError = require_upload_error.PresignedUrlError;
9
10
  exports.ReconcileError = require_upload_error.ReconcileError;
11
+ exports.ResumeMismatchError = require_upload_error.ResumeMismatchError;
package/dist/errors.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as PartUploadError, c as UploadError, i as MaxRetriesExceededError, n as CompleteUploadError, o as PresignedUrlError, r as InitiateUploadError, s as ReconcileError, t as AbortError } from "./upload-error-B2ISUc_k.cjs";
2
- export { AbortError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError, type UploadError };
1
+ import { a as MaxRetriesExceededError, c as ReconcileError, i as InitiateUploadError, l as ResumeMismatchError, n as CircuitOpenError, o as PartUploadError, r as CompleteUploadError, s as PresignedUrlError, t as AbortError, u as UploadError } from "./upload-error-DTYVNlaJ.cjs";
2
+ export { AbortError, CircuitOpenError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError, ResumeMismatchError, type UploadError };
package/dist/errors.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as PartUploadError, c as UploadError, i as MaxRetriesExceededError, n as CompleteUploadError, o as PresignedUrlError, r as InitiateUploadError, s as ReconcileError, t as AbortError } from "./upload-error-jol-eoDW.mjs";
2
- export { AbortError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError, type UploadError };
1
+ import { a as MaxRetriesExceededError, c as ReconcileError, i as InitiateUploadError, l as ResumeMismatchError, n as CircuitOpenError, o as PartUploadError, r as CompleteUploadError, s as PresignedUrlError, t as AbortError, u as UploadError } from "./upload-error-jBco270d.mjs";
2
+ export { AbortError, CircuitOpenError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError, ResumeMismatchError, type UploadError };
package/dist/errors.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as MaxRetriesExceededError, c as ReconcileError, i as InitiateUploadError, o as PartUploadError, r as CompleteUploadError, s as PresignedUrlError, t as AbortError } from "./upload-error-zDvpxT9X.mjs";
2
- export { AbortError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError };
1
+ import { a as MaxRetriesExceededError, c as ReconcileError, i as InitiateUploadError, l as ResumeMismatchError, n as CircuitOpenError, o as PartUploadError, r as CompleteUploadError, s as PresignedUrlError, t as AbortError } from "./upload-error-Dbz_9j81.mjs";
2
+ export { AbortError, CircuitOpenError, CompleteUploadError, InitiateUploadError, MaxRetriesExceededError, PartUploadError, PresignedUrlError, ReconcileError, ResumeMismatchError };
@@ -0,0 +1,139 @@
1
+ import { o as PartUploadError, u as UploadError } from "./upload-error-DTYVNlaJ.cjs";
2
+ import { n as LoggerService } from "./logger-service-CbN12RhO.cjs";
3
+ import { a as UploadEvent, i as UploadCompleted } from "./upload-event-BT_nXgM9.cjs";
4
+ import { t as Transform } from "./middleware-CYcctmlY.cjs";
5
+ import { Effect, Option, Schedule, Stream } from "effect";
6
+
7
+ //#region src/multipart/circuit-breaker.d.ts
8
+ interface CircuitBreakerConfig {
9
+ readonly threshold: number;
10
+ readonly cooldown: number;
11
+ }
12
+ //#endregion
13
+ //#region src/multipart/upload-stream.d.ts
14
+ interface CompletedPart {
15
+ readonly partNumber: number;
16
+ readonly etag: string;
17
+ }
18
+ /**
19
+ * Opaque resume metadata returned by `uploadMultipart` and persisted by the
20
+ * caller (typically `JSON.stringify` → localStorage). Pass it back as
21
+ * `resumeFrom` on the next session.
22
+ *
23
+ * The lib validates `version`, `chunkSize`, `pipelineIdentity`, and the content
24
+ * digest before any byte is uploaded. A mismatch fails the upload with a typed
25
+ * `ResumeMismatchError` — preventing the silent-corruption classes documented
26
+ * in the v0.2.x release notes.
27
+ *
28
+ * **Schema versioning.** The `version: 1` literal is a tripwire for schema
29
+ * evolution: future v2 schemas widen this union, and a persisted v1 state
30
+ * passed to a future v2 lib will fail with `ResumeMismatchError("version_mismatch")`
31
+ * rather than silently misinterpreting old fields.
32
+ */
33
+ interface ResumeState {
34
+ readonly version: 1;
35
+ readonly uploadId: string;
36
+ readonly chunkSize: number;
37
+ readonly pipelineIdentity?: string;
38
+ readonly contentDigest?: string;
39
+ /**
40
+ * True if the original session captured a digest. Detects persistence layers
41
+ * that drop the `contentDigest` field (which would otherwise silently bypass
42
+ * content-mismatch validation).
43
+ */
44
+ readonly contentDigestCaptured: boolean;
45
+ }
46
+ interface UploadMultipartOptions {
47
+ readonly stream: ReadableStream<Uint8Array>;
48
+ readonly chunkSize: number;
49
+ readonly uploadPart: (partNumber: number, chunk: Uint8Array) => string | Promise<string> | Effect.Effect<string, UploadError>;
50
+ readonly completeUpload: (uploadId: string, parts: ReadonlyArray<CompletedPart>) => void | Promise<void> | Effect.Effect<void, UploadError>;
51
+ readonly initiate?: () => {
52
+ uploadId: string;
53
+ } | Promise<{
54
+ uploadId: string;
55
+ }> | Effect.Effect<{
56
+ uploadId: string;
57
+ }, UploadError>;
58
+ readonly reconcileCompletedParts?: () => ReadonlyArray<CompletedPart> | Promise<ReadonlyArray<CompletedPart>> | Effect.Effect<ReadonlyArray<CompletedPart>, UploadError>;
59
+ /**
60
+ * Resume metadata persisted from a previous session. When set, the lib skips
61
+ * the `initiate` callback (the `uploadId` is read from `resumeFrom`) and
62
+ * validates `version`, `chunkSize`, `pipelineIdentity`, and `contentDigest`
63
+ * before any byte is uploaded. A mismatch fails the upload with
64
+ * `ResumeMismatchError`.
65
+ *
66
+ * Synchronous (pre-flight) validation happens at `uploadMultipart()` call
67
+ * time — `TypeError` for an empty `uploadId`, `ResumeMismatchError` for the
68
+ * rest. The asynchronous content-digest *value* match is verified inside
69
+ * the Effect once the upload stream is consumed.
70
+ */
71
+ readonly resumeFrom?: ResumeState;
72
+ /**
73
+ * Called once on fresh initiate to capture a digest of the source content.
74
+ * On a subsequent resume session, called again and compared to
75
+ * `resumeFrom.contentDigest`; a mismatch fails the upload with
76
+ * `ResumeMismatchError("content_mismatch")` before any byte is uploaded.
77
+ *
78
+ * **MUST be lightweight and stable across sessions.** Suggested patterns:
79
+ * - Browser `File`: `` `${name}|${size}|${lastModified}` ``
80
+ * - Node `Readable` from a file: `` `${path}|${stat.size}|${stat.mtimeMs}` ``
81
+ * - Synchronous strings; avoid full-file crypto hashes on the synchronous path.
82
+ *
83
+ * **MUST NOT consume bytes from the source stream** (passed in
84
+ * `options.stream`). The lib calls `getContentDigest` before any chunk is
85
+ * pulled from the source; consuming from the source here will produce a
86
+ * zero-byte upload because no bytes remain for `chunkStream`.
87
+ */
88
+ readonly getContentDigest?: () => string | Promise<string> | Effect.Effect<string, UploadError>;
89
+ /**
90
+ * An opaque, stable identifier for the upstream pipeline composition.
91
+ * Captured in `ResumeState` and validated strict-equality on resume.
92
+ * **You own keeping this stable** — if you configure `compress("deflate-raw")`
93
+ * in session A, you must pass the same `pipelineIdentity` on resume.
94
+ *
95
+ * **Strict equality limitation:** a pipeline that is logically identical but
96
+ * produces different identifier strings (e.g. tag bumps, version-stamped
97
+ * strings) triggers `ResumeMismatchError("pipeline_mismatch")`. Pick a stable
98
+ * string (e.g. `"deflate-raw-v1"`) and only change it when the pipeline's
99
+ * *byte-level output* changes.
100
+ *
101
+ * **Compression non-determinism caveat:** even with identical
102
+ * `pipelineIdentity`, a non-deterministic pipeline (e.g. gzip with `mtime`
103
+ * headers, encryption with random salt) produces different bytes per run.
104
+ * Resume against the same uploaded parts only works if the pipeline is
105
+ * byte-deterministic. Verify your pipeline's determinism before relying on
106
+ * this.
107
+ */
108
+ readonly pipelineIdentity?: string;
109
+ readonly maxConcurrency?: number;
110
+ readonly signal?: AbortSignal;
111
+ readonly retrySchedule?: Schedule.Schedule<unknown, PartUploadError>;
112
+ readonly circuitBreaker?: CircuitBreakerConfig;
113
+ }
114
+ //#endregion
115
+ //#region src/multipart/index.d.ts
116
+ type UploadResult = UploadCompleted;
117
+ interface Progress {
118
+ readonly bytesUploaded: number;
119
+ readonly totalBytes: Option.Option<number>;
120
+ }
121
+ interface MultipartPublicOptions extends UploadMultipartOptions {
122
+ readonly totalBytes?: number;
123
+ readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>;
124
+ }
125
+ declare const uploadMultipart: {
126
+ (options: MultipartPublicOptions): {
127
+ events: ReadableStream<UploadEvent>;
128
+ result: Promise<UploadResult>;
129
+ getProgress: (() => Promise<Progress>) & {
130
+ effect: Effect.Effect<Progress>;
131
+ };
132
+ uploadId: Promise<string>;
133
+ resumeState: Promise<ResumeState>;
134
+ };
135
+ effect: (options: UploadMultipartOptions) => Stream.Stream<UploadEvent, UploadError, LoggerService>;
136
+ };
137
+ //#endregion
138
+ export { CompletedPart as a, uploadMultipart as i, Progress as n, ResumeState as o, UploadResult as r, UploadMultipartOptions as s, MultipartPublicOptions as t };
139
+ //# sourceMappingURL=index-BaeUV_fj.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BaeUV_fj.d.cts","names":[],"sources":["../src/multipart/circuit-breaker.ts","../src/multipart/upload-stream.ts","../src/multipart/index.ts"],"mappings":";;;;;;;UAIiB,oBAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;AAAA;;;UCIM,aAAA;EAAA,SACN,UAAA;EAAA,SACA,IAAA;AAAA;;;;;;AAFX;;;;;AAoBA;;;;;UAAiB,WAAA;EAAA,SACN,OAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAMqB;AAGhC;;;;EAHgC,SAArB,qBAAA;AAAA;AAAA,UAGM,sBAAA;EAAA,SACN,MAAA,EAAQ,cAAA,CAAe,UAAA;EAAA,SACvB,SAAA;EAAA,SACA,UAAA,GACP,UAAA,UACA,KAAA,EAAO,UAAA,cACK,OAAA,WAAkB,MAAA,CAAO,MAAA,SAAe,WAAA;EAAA,SAC7C,cAAA,GACP,QAAA,UACA,KAAA,EAAO,aAAA,CAAc,aAAA,aACX,OAAA,SAAgB,MAAA,CAAO,MAAA,OAAa,WAAA;EAAA,SACvC,QAAA;IACH,QAAA;EAAA,IACF,OAAA;IAAU,QAAA;EAAA,KACV,MAAA,CAAO,MAAA;IAAS,QAAA;EAAA,GAAoB,WAAA;EAAA,SAC/B,uBAAA,SACL,aAAA,CAAc,aAAA,IACd,OAAA,CAAQ,aAAA,CAAc,aAAA,KACtB,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,aAAA,GAAgB,WAAA;EADtB;;;;;;;;;;;;EAAA,SAcjB,UAAA,GAAa,WAAA;EA2CG;;;;;;;;;;;;;;;;EAAA,SA1BhB,gBAAA,kBAEL,OAAA,WACA,MAAA,CAAO,MAAA,SAAe,WAAA;EA3CxB;;;;;;;;;;;;;;;;;;;EAAA,SA+DO,gBAAA;EAAA,SACA,cAAA;EAAA,SACA,MAAA,GAAS,WAAA;EAAA,SACT,aAAA,GAAgB,QAAA,CAAS,QAAA,UAAkB,eAAA;EAAA,SAC3C,cAAA,GAAiB,oBAAA;AAAA;;;KChHhB,YAAA,GAAe,eAAA;AAAA,UAGV,QAAA;EAAA,SACN,aAAA;EAAA,SACA,UAAA,EAAY,MAAA,CAAO,MAAA;AAAA;AAAA,UAGb,sBAAA,SAA+B,sBAAA;EAAA,SACrC,UAAA;EAAA,SACA,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA;AAAA,cAMnC,eAAA;EAAA,UACF,sBAAA;IAET,MAAA,EAAQ,cAAA,CAAe,WAAA;IACvB,MAAA,EAAQ,OAAA,CAAQ,YAAA;IAChB,WAAA,SAAoB,OAAA,CAAQ,QAAA;MAAe,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,QAAA;IAAA;IACjE,QAAA,EAAU,OAAA;IACV,WAAA,EAAa,OAAA,CAAQ,WAAA;EAAA"}
@@ -0,0 +1,139 @@
1
+ import { o as PartUploadError, u as UploadError } from "./upload-error-jBco270d.mjs";
2
+ import { n as LoggerService } from "./logger-service-BF2pZOHN.mjs";
3
+ import { a as UploadEvent, i as UploadCompleted } from "./upload-event-DOGbegxa.mjs";
4
+ import { t as Transform } from "./middleware-CAI0cnW2.mjs";
5
+ import { Effect, Option, Schedule, Stream } from "effect";
6
+
7
+ //#region src/multipart/circuit-breaker.d.ts
8
+ interface CircuitBreakerConfig {
9
+ readonly threshold: number;
10
+ readonly cooldown: number;
11
+ }
12
+ //#endregion
13
+ //#region src/multipart/upload-stream.d.ts
14
+ interface CompletedPart {
15
+ readonly partNumber: number;
16
+ readonly etag: string;
17
+ }
18
+ /**
19
+ * Opaque resume metadata returned by `uploadMultipart` and persisted by the
20
+ * caller (typically `JSON.stringify` → localStorage). Pass it back as
21
+ * `resumeFrom` on the next session.
22
+ *
23
+ * The lib validates `version`, `chunkSize`, `pipelineIdentity`, and the content
24
+ * digest before any byte is uploaded. A mismatch fails the upload with a typed
25
+ * `ResumeMismatchError` — preventing the silent-corruption classes documented
26
+ * in the v0.2.x release notes.
27
+ *
28
+ * **Schema versioning.** The `version: 1` literal is a tripwire for schema
29
+ * evolution: future v2 schemas widen this union, and a persisted v1 state
30
+ * passed to a future v2 lib will fail with `ResumeMismatchError("version_mismatch")`
31
+ * rather than silently misinterpreting old fields.
32
+ */
33
+ interface ResumeState {
34
+ readonly version: 1;
35
+ readonly uploadId: string;
36
+ readonly chunkSize: number;
37
+ readonly pipelineIdentity?: string;
38
+ readonly contentDigest?: string;
39
+ /**
40
+ * True if the original session captured a digest. Detects persistence layers
41
+ * that drop the `contentDigest` field (which would otherwise silently bypass
42
+ * content-mismatch validation).
43
+ */
44
+ readonly contentDigestCaptured: boolean;
45
+ }
46
+ interface UploadMultipartOptions {
47
+ readonly stream: ReadableStream<Uint8Array>;
48
+ readonly chunkSize: number;
49
+ readonly uploadPart: (partNumber: number, chunk: Uint8Array) => string | Promise<string> | Effect.Effect<string, UploadError>;
50
+ readonly completeUpload: (uploadId: string, parts: ReadonlyArray<CompletedPart>) => void | Promise<void> | Effect.Effect<void, UploadError>;
51
+ readonly initiate?: () => {
52
+ uploadId: string;
53
+ } | Promise<{
54
+ uploadId: string;
55
+ }> | Effect.Effect<{
56
+ uploadId: string;
57
+ }, UploadError>;
58
+ readonly reconcileCompletedParts?: () => ReadonlyArray<CompletedPart> | Promise<ReadonlyArray<CompletedPart>> | Effect.Effect<ReadonlyArray<CompletedPart>, UploadError>;
59
+ /**
60
+ * Resume metadata persisted from a previous session. When set, the lib skips
61
+ * the `initiate` callback (the `uploadId` is read from `resumeFrom`) and
62
+ * validates `version`, `chunkSize`, `pipelineIdentity`, and `contentDigest`
63
+ * before any byte is uploaded. A mismatch fails the upload with
64
+ * `ResumeMismatchError`.
65
+ *
66
+ * Synchronous (pre-flight) validation happens at `uploadMultipart()` call
67
+ * time — `TypeError` for an empty `uploadId`, `ResumeMismatchError` for the
68
+ * rest. The asynchronous content-digest *value* match is verified inside
69
+ * the Effect once the upload stream is consumed.
70
+ */
71
+ readonly resumeFrom?: ResumeState;
72
+ /**
73
+ * Called once on fresh initiate to capture a digest of the source content.
74
+ * On a subsequent resume session, called again and compared to
75
+ * `resumeFrom.contentDigest`; a mismatch fails the upload with
76
+ * `ResumeMismatchError("content_mismatch")` before any byte is uploaded.
77
+ *
78
+ * **MUST be lightweight and stable across sessions.** Suggested patterns:
79
+ * - Browser `File`: `` `${name}|${size}|${lastModified}` ``
80
+ * - Node `Readable` from a file: `` `${path}|${stat.size}|${stat.mtimeMs}` ``
81
+ * - Synchronous strings; avoid full-file crypto hashes on the synchronous path.
82
+ *
83
+ * **MUST NOT consume bytes from the source stream** (passed in
84
+ * `options.stream`). The lib calls `getContentDigest` before any chunk is
85
+ * pulled from the source; consuming from the source here will produce a
86
+ * zero-byte upload because no bytes remain for `chunkStream`.
87
+ */
88
+ readonly getContentDigest?: () => string | Promise<string> | Effect.Effect<string, UploadError>;
89
+ /**
90
+ * An opaque, stable identifier for the upstream pipeline composition.
91
+ * Captured in `ResumeState` and validated strict-equality on resume.
92
+ * **You own keeping this stable** — if you configure `compress("deflate-raw")`
93
+ * in session A, you must pass the same `pipelineIdentity` on resume.
94
+ *
95
+ * **Strict equality limitation:** a pipeline that is logically identical but
96
+ * produces different identifier strings (e.g. tag bumps, version-stamped
97
+ * strings) triggers `ResumeMismatchError("pipeline_mismatch")`. Pick a stable
98
+ * string (e.g. `"deflate-raw-v1"`) and only change it when the pipeline's
99
+ * *byte-level output* changes.
100
+ *
101
+ * **Compression non-determinism caveat:** even with identical
102
+ * `pipelineIdentity`, a non-deterministic pipeline (e.g. gzip with `mtime`
103
+ * headers, encryption with random salt) produces different bytes per run.
104
+ * Resume against the same uploaded parts only works if the pipeline is
105
+ * byte-deterministic. Verify your pipeline's determinism before relying on
106
+ * this.
107
+ */
108
+ readonly pipelineIdentity?: string;
109
+ readonly maxConcurrency?: number;
110
+ readonly signal?: AbortSignal;
111
+ readonly retrySchedule?: Schedule.Schedule<unknown, PartUploadError>;
112
+ readonly circuitBreaker?: CircuitBreakerConfig;
113
+ }
114
+ //#endregion
115
+ //#region src/multipart/index.d.ts
116
+ type UploadResult = UploadCompleted;
117
+ interface Progress {
118
+ readonly bytesUploaded: number;
119
+ readonly totalBytes: Option.Option<number>;
120
+ }
121
+ interface MultipartPublicOptions extends UploadMultipartOptions {
122
+ readonly totalBytes?: number;
123
+ readonly pipeline?: Transform | Effect.Effect<Transform, unknown, unknown>;
124
+ }
125
+ declare const uploadMultipart: {
126
+ (options: MultipartPublicOptions): {
127
+ events: ReadableStream<UploadEvent>;
128
+ result: Promise<UploadResult>;
129
+ getProgress: (() => Promise<Progress>) & {
130
+ effect: Effect.Effect<Progress>;
131
+ };
132
+ uploadId: Promise<string>;
133
+ resumeState: Promise<ResumeState>;
134
+ };
135
+ effect: (options: UploadMultipartOptions) => Stream.Stream<UploadEvent, UploadError, LoggerService>;
136
+ };
137
+ //#endregion
138
+ export { CompletedPart as a, uploadMultipart as i, Progress as n, ResumeState as o, UploadResult as r, UploadMultipartOptions as s, MultipartPublicOptions as t };
139
+ //# sourceMappingURL=index-bpWq6tje.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-bpWq6tje.d.mts","names":[],"sources":["../src/multipart/circuit-breaker.ts","../src/multipart/upload-stream.ts","../src/multipart/index.ts"],"mappings":";;;;;;;UAIiB,oBAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;AAAA;;;UCIM,aAAA;EAAA,SACN,UAAA;EAAA,SACA,IAAA;AAAA;;;;;;AAFX;;;;;AAoBA;;;;;UAAiB,WAAA;EAAA,SACN,OAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAMqB;AAGhC;;;;EAHgC,SAArB,qBAAA;AAAA;AAAA,UAGM,sBAAA;EAAA,SACN,MAAA,EAAQ,cAAA,CAAe,UAAA;EAAA,SACvB,SAAA;EAAA,SACA,UAAA,GACP,UAAA,UACA,KAAA,EAAO,UAAA,cACK,OAAA,WAAkB,MAAA,CAAO,MAAA,SAAe,WAAA;EAAA,SAC7C,cAAA,GACP,QAAA,UACA,KAAA,EAAO,aAAA,CAAc,aAAA,aACX,OAAA,SAAgB,MAAA,CAAO,MAAA,OAAa,WAAA;EAAA,SACvC,QAAA;IACH,QAAA;EAAA,IACF,OAAA;IAAU,QAAA;EAAA,KACV,MAAA,CAAO,MAAA;IAAS,QAAA;EAAA,GAAoB,WAAA;EAAA,SAC/B,uBAAA,SACL,aAAA,CAAc,aAAA,IACd,OAAA,CAAQ,aAAA,CAAc,aAAA,KACtB,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,aAAA,GAAgB,WAAA;EADtB;;;;;;;;;;;;EAAA,SAcjB,UAAA,GAAa,WAAA;EA2CG;;;;;;;;;;;;;;;;EAAA,SA1BhB,gBAAA,kBAEL,OAAA,WACA,MAAA,CAAO,MAAA,SAAe,WAAA;EA3CxB;;;;;;;;;;;;;;;;;;;EAAA,SA+DO,gBAAA;EAAA,SACA,cAAA;EAAA,SACA,MAAA,GAAS,WAAA;EAAA,SACT,aAAA,GAAgB,QAAA,CAAS,QAAA,UAAkB,eAAA;EAAA,SAC3C,cAAA,GAAiB,oBAAA;AAAA;;;KChHhB,YAAA,GAAe,eAAA;AAAA,UAGV,QAAA;EAAA,SACN,aAAA;EAAA,SACA,UAAA,EAAY,MAAA,CAAO,MAAA;AAAA;AAAA,UAGb,sBAAA,SAA+B,sBAAA;EAAA,SACrC,UAAA;EAAA,SACA,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA;AAAA,cAMnC,eAAA;EAAA,UACF,sBAAA;IAET,MAAA,EAAQ,cAAA,CAAe,WAAA;IACvB,MAAA,EAAQ,OAAA,CAAQ,YAAA;IAChB,WAAA,SAAoB,OAAA,CAAQ,QAAA;MAAe,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,QAAA;IAAA;IACjE,QAAA,EAAU,OAAA;IACV,WAAA,EAAa,OAAA,CAAQ,WAAA;EAAA"}