@lossless.org/client 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 (255) hide show
  1. package/.smartconfig.json +37 -0
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/classes.losslessorgclient.d.ts +32 -0
  5. package/dist_ts/classes.losslessorgclient.js +103 -0
  6. package/dist_ts/core/classes.error.d.ts +16 -0
  7. package/dist_ts/core/classes.error.js +29 -0
  8. package/dist_ts/core/classes.operation.d.ts +17 -0
  9. package/dist_ts/core/classes.operation.js +70 -0
  10. package/dist_ts/core/interfaces.d.ts +18 -0
  11. package/dist_ts/core/interfaces.js +2 -0
  12. package/dist_ts/index.d.ts +4 -0
  13. package/dist_ts/index.js +3 -0
  14. package/dist_ts/nosqldb/classes.atomicdelete.d.ts +26 -0
  15. package/dist_ts/nosqldb/classes.atomicdelete.js +44 -0
  16. package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +27 -0
  17. package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +86 -0
  18. package/dist_ts/nosqldb/classes.atomicupdate.d.ts +26 -0
  19. package/dist_ts/nosqldb/classes.atomicupdate.js +55 -0
  20. package/dist_ts/nosqldb/classes.bootstraprecord.d.ts +14 -0
  21. package/dist_ts/nosqldb/classes.bootstraprecord.js +80 -0
  22. package/dist_ts/nosqldb/classes.bsonassertion.d.ts +2 -0
  23. package/dist_ts/nosqldb/classes.bsonassertion.js +29 -0
  24. package/dist_ts/nosqldb/classes.bsonobjectid.d.ts +2 -0
  25. package/dist_ts/nosqldb/classes.bsonobjectid.js +50 -0
  26. package/dist_ts/nosqldb/classes.bsonsnapshot.d.ts +3 -0
  27. package/dist_ts/nosqldb/classes.bsonsnapshot.js +126 -0
  28. package/dist_ts/nosqldb/classes.cached-document.d.ts +27 -0
  29. package/dist_ts/nosqldb/classes.cached-document.js +112 -0
  30. package/dist_ts/nosqldb/classes.collection.d.ts +302 -0
  31. package/dist_ts/nosqldb/classes.collection.js +1568 -0
  32. package/dist_ts/nosqldb/classes.collectionfactory.d.ts +30 -0
  33. package/dist_ts/nosqldb/classes.collectionfactory.js +65 -0
  34. package/dist_ts/nosqldb/classes.collectionlifecycle.d.ts +4 -0
  35. package/dist_ts/nosqldb/classes.collectionlifecycle.js +15 -0
  36. package/dist_ts/nosqldb/classes.collectionpreparation.d.ts +34 -0
  37. package/dist_ts/nosqldb/classes.collectionpreparation.js +134 -0
  38. package/dist_ts/nosqldb/classes.collectiontopology.d.ts +47 -0
  39. package/dist_ts/nosqldb/classes.collectiontopology.js +388 -0
  40. package/dist_ts/nosqldb/classes.connection.d.ts +18 -0
  41. package/dist_ts/nosqldb/classes.connection.js +23 -0
  42. package/dist_ts/nosqldb/classes.convenience.d.ts +1 -0
  43. package/dist_ts/nosqldb/classes.convenience.js +5 -0
  44. package/dist_ts/nosqldb/classes.cursor.d.ts +15 -0
  45. package/dist_ts/nosqldb/classes.cursor.js +82 -0
  46. package/dist_ts/nosqldb/classes.cursoroperation.d.ts +7 -0
  47. package/dist_ts/nosqldb/classes.cursoroperation.js +36 -0
  48. package/dist_ts/nosqldb/classes.db.d.ts +98 -0
  49. package/dist_ts/nosqldb/classes.db.js +434 -0
  50. package/dist_ts/nosqldb/classes.distributedcoordinator.d.ts +52 -0
  51. package/dist_ts/nosqldb/classes.distributedcoordinator.js +314 -0
  52. package/dist_ts/nosqldb/classes.doc.d.ts +722 -0
  53. package/dist_ts/nosqldb/classes.doc.js +2976 -0
  54. package/dist_ts/nosqldb/classes.easystore.d.ts +42 -0
  55. package/dist_ts/nosqldb/classes.easystore.js +199 -0
  56. package/dist_ts/nosqldb/classes.exactpersistence.d.ts +141 -0
  57. package/dist_ts/nosqldb/classes.exactpersistence.js +1110 -0
  58. package/dist_ts/nosqldb/classes.lucene.adapter.d.ts +173 -0
  59. package/dist_ts/nosqldb/classes.lucene.adapter.js +623 -0
  60. package/dist_ts/nosqldb/classes.mongoadministration.d.ts +73 -0
  61. package/dist_ts/nosqldb/classes.mongoadministration.js +497 -0
  62. package/dist_ts/nosqldb/classes.namespaceinspection.d.ts +42 -0
  63. package/dist_ts/nosqldb/classes.namespaceinspection.js +138 -0
  64. package/dist_ts/nosqldb/classes.operationbudget.d.ts +22 -0
  65. package/dist_ts/nosqldb/classes.operationbudget.js +65 -0
  66. package/dist_ts/nosqldb/classes.ordinarypersistence.d.ts +18 -0
  67. package/dist_ts/nosqldb/classes.ordinarypersistence.js +71 -0
  68. package/dist_ts/nosqldb/classes.persistence.d.ts +14 -0
  69. package/dist_ts/nosqldb/classes.persistence.js +34 -0
  70. package/dist_ts/nosqldb/classes.session.d.ts +28 -0
  71. package/dist_ts/nosqldb/classes.session.js +246 -0
  72. package/dist_ts/nosqldb/classes.storedinspection.d.ts +44 -0
  73. package/dist_ts/nosqldb/classes.storedinspection.js +100 -0
  74. package/dist_ts/nosqldb/classes.testdatabase.d.ts +56 -0
  75. package/dist_ts/nosqldb/classes.testdatabase.js +250 -0
  76. package/dist_ts/nosqldb/classes.watcher.d.ts +37 -0
  77. package/dist_ts/nosqldb/classes.watcher.js +98 -0
  78. package/dist_ts/nosqldb/index.d.ts +27 -0
  79. package/dist_ts/nosqldb/index.js +18 -0
  80. package/dist_ts/nosqldb/logging.d.ts +2 -0
  81. package/dist_ts/nosqldb/logging.js +3 -0
  82. package/dist_ts/nosqldb/plugins.d.ts +17 -0
  83. package/dist_ts/nosqldb/plugins.js +20 -0
  84. package/dist_ts/nosqldb/shim.d.ts +1 -0
  85. package/dist_ts/nosqldb/shim.js +8 -0
  86. package/dist_ts/nosqldb/testsupport.d.ts +3 -0
  87. package/dist_ts/nosqldb/testsupport.js +3 -0
  88. package/dist_ts/objectstorage/classes.bucket.d.ts +227 -0
  89. package/dist_ts/objectstorage/classes.bucket.js +939 -0
  90. package/dist_ts/objectstorage/classes.connection.d.ts +21 -0
  91. package/dist_ts/objectstorage/classes.connection.js +27 -0
  92. package/dist_ts/objectstorage/classes.directory.d.ts +124 -0
  93. package/dist_ts/objectstorage/classes.directory.js +335 -0
  94. package/dist_ts/objectstorage/classes.exactpathpurgeerror.d.ts +5 -0
  95. package/dist_ts/objectstorage/classes.exactpathpurgeerror.js +18 -0
  96. package/dist_ts/objectstorage/classes.exactuploaderror.d.ts +5 -0
  97. package/dist_ts/objectstorage/classes.exactuploaderror.js +19 -0
  98. package/dist_ts/objectstorage/classes.file.d.ts +91 -0
  99. package/dist_ts/objectstorage/classes.file.js +255 -0
  100. package/dist_ts/objectstorage/classes.listcursor.d.ts +41 -0
  101. package/dist_ts/objectstorage/classes.listcursor.js +67 -0
  102. package/dist_ts/objectstorage/classes.metadata.d.ts +57 -0
  103. package/dist_ts/objectstorage/classes.metadata.js +113 -0
  104. package/dist_ts/objectstorage/classes.smartbucket.d.ts +57 -0
  105. package/dist_ts/objectstorage/classes.smartbucket.js +357 -0
  106. package/dist_ts/objectstorage/classes.trash.d.ts +11 -0
  107. package/dist_ts/objectstorage/classes.trash.js +22 -0
  108. package/dist_ts/objectstorage/classes.watcher.d.ts +79 -0
  109. package/dist_ts/objectstorage/classes.watcher.js +249 -0
  110. package/dist_ts/objectstorage/helpers.d.ts +25 -0
  111. package/dist_ts/objectstorage/helpers.js +215 -0
  112. package/dist_ts/objectstorage/index.d.ts +13 -0
  113. package/dist_ts/objectstorage/index.js +13 -0
  114. package/dist_ts/objectstorage/interfaces.d.ts +276 -0
  115. package/dist_ts/objectstorage/interfaces.js +2 -0
  116. package/dist_ts/objectstorage/internal.exactpathpurge.operations.d.ts +11 -0
  117. package/dist_ts/objectstorage/internal.exactpathpurge.operations.js +1069 -0
  118. package/dist_ts/objectstorage/internal.exactupload.capability.d.ts +40 -0
  119. package/dist_ts/objectstorage/internal.exactupload.capability.js +382 -0
  120. package/dist_ts/objectstorage/internal.exactupload.operations.d.ts +11 -0
  121. package/dist_ts/objectstorage/internal.exactupload.operations.js +1104 -0
  122. package/dist_ts/objectstorage/internal.multipart.planner.d.ts +8 -0
  123. package/dist_ts/objectstorage/internal.multipart.planner.js +63 -0
  124. package/dist_ts/objectstorage/internal.multipart.stream.d.ts +17 -0
  125. package/dist_ts/objectstorage/internal.multipart.stream.js +440 -0
  126. package/dist_ts/objectstorage/internal.multipart.types.d.ts +82 -0
  127. package/dist_ts/objectstorage/internal.multipart.types.js +2 -0
  128. package/dist_ts/objectstorage/plugins.d.ts +17 -0
  129. package/dist_ts/objectstorage/plugins.js +23 -0
  130. package/dist_ts/plugins.d.ts +4 -0
  131. package/dist_ts/plugins.js +5 -0
  132. package/dist_ts/sqldb/classes.clickhouseconnection.d.ts +39 -0
  133. package/dist_ts/sqldb/classes.clickhouseconnection.js +225 -0
  134. package/dist_ts/sqldb/classes.sqlconnection.d.ts +50 -0
  135. package/dist_ts/sqldb/classes.sqlconnection.js +376 -0
  136. package/dist_ts/sqldb/classes.sqltable.d.ts +29 -0
  137. package/dist_ts/sqldb/classes.sqltable.js +70 -0
  138. package/dist_ts/sqldb/clickhouse/classes.metricwriter.d.ts +27 -0
  139. package/dist_ts/sqldb/clickhouse/classes.metricwriter.js +89 -0
  140. package/dist_ts/sqldb/clickhouse/index.d.ts +9 -0
  141. package/dist_ts/sqldb/clickhouse/index.js +13 -0
  142. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.d.ts +88 -0
  143. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.js +304 -0
  144. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.d.ts +28 -0
  145. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.js +46 -0
  146. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.d.ts +43 -0
  147. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.js +155 -0
  148. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.d.ts +13 -0
  149. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.js +36 -0
  150. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.d.ts +49 -0
  151. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.js +106 -0
  152. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.d.ts +51 -0
  153. package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.js +96 -0
  154. package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.d.ts +5 -0
  155. package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.js +6 -0
  156. package/dist_ts/sqldb/clickhouse/smartclickhouse.types.d.ts +53 -0
  157. package/dist_ts/sqldb/clickhouse/smartclickhouse.types.js +41 -0
  158. package/dist_ts/sqldb/index.d.ts +6 -0
  159. package/dist_ts/sqldb/index.js +6 -0
  160. package/dist_ts/sqldb/interfaces.d.ts +53 -0
  161. package/dist_ts/sqldb/interfaces.js +19 -0
  162. package/dist_ts/sqldb/internal.sqlpool.d.ts +51 -0
  163. package/dist_ts/sqldb/internal.sqlpool.js +214 -0
  164. package/dist_ts/sqldb/plugins.clickhouse.d.ts +4 -0
  165. package/dist_ts/sqldb/plugins.clickhouse.js +5 -0
  166. package/dist_ts/sqldb/plugins.mariadb.d.ts +4 -0
  167. package/dist_ts/sqldb/plugins.mariadb.js +5 -0
  168. package/docs/source/smartbucket/license.md +19 -0
  169. package/docs/source/smartclickhouse/license.md +19 -0
  170. package/license.md +21 -0
  171. package/package.json +101 -0
  172. package/readme.md +157 -0
  173. package/ts/00_commitinfo_data.ts +8 -0
  174. package/ts/classes.losslessorgclient.ts +104 -0
  175. package/ts/core/classes.error.ts +31 -0
  176. package/ts/core/classes.operation.ts +60 -0
  177. package/ts/core/interfaces.ts +24 -0
  178. package/ts/index.ts +4 -0
  179. package/ts/nosqldb/classes.atomicdelete.ts +81 -0
  180. package/ts/nosqldb/classes.atomicfindoneandupdate.ts +152 -0
  181. package/ts/nosqldb/classes.atomicupdate.ts +99 -0
  182. package/ts/nosqldb/classes.bootstraprecord.ts +107 -0
  183. package/ts/nosqldb/classes.bsonassertion.ts +25 -0
  184. package/ts/nosqldb/classes.bsonobjectid.ts +45 -0
  185. package/ts/nosqldb/classes.bsonsnapshot.ts +105 -0
  186. package/ts/nosqldb/classes.cached-document.ts +67 -0
  187. package/ts/nosqldb/classes.collection.ts +2399 -0
  188. package/ts/nosqldb/classes.collectionfactory.ts +87 -0
  189. package/ts/nosqldb/classes.collectionlifecycle.ts +24 -0
  190. package/ts/nosqldb/classes.collectionpreparation.ts +164 -0
  191. package/ts/nosqldb/classes.collectiontopology.ts +645 -0
  192. package/ts/nosqldb/classes.connection.ts +31 -0
  193. package/ts/nosqldb/classes.convenience.ts +5 -0
  194. package/ts/nosqldb/classes.cursor.ts +88 -0
  195. package/ts/nosqldb/classes.cursoroperation.ts +38 -0
  196. package/ts/nosqldb/classes.db.ts +637 -0
  197. package/ts/nosqldb/classes.distributedcoordinator.ts +305 -0
  198. package/ts/nosqldb/classes.doc.ts +4928 -0
  199. package/ts/nosqldb/classes.easystore.ts +154 -0
  200. package/ts/nosqldb/classes.exactpersistence.ts +1974 -0
  201. package/ts/nosqldb/classes.lucene.adapter.ts +780 -0
  202. package/ts/nosqldb/classes.mongoadministration.ts +867 -0
  203. package/ts/nosqldb/classes.namespaceinspection.ts +199 -0
  204. package/ts/nosqldb/classes.operationbudget.ts +75 -0
  205. package/ts/nosqldb/classes.ordinarypersistence.ts +84 -0
  206. package/ts/nosqldb/classes.persistence.ts +62 -0
  207. package/ts/nosqldb/classes.session.ts +389 -0
  208. package/ts/nosqldb/classes.storedinspection.ts +151 -0
  209. package/ts/nosqldb/classes.testdatabase.ts +272 -0
  210. package/ts/nosqldb/classes.watcher.ts +96 -0
  211. package/ts/nosqldb/index.ts +51 -0
  212. package/ts/nosqldb/logging.ts +3 -0
  213. package/ts/nosqldb/plugins.ts +37 -0
  214. package/ts/nosqldb/shim.ts +6 -0
  215. package/ts/nosqldb/testsupport.ts +13 -0
  216. package/ts/objectstorage/classes.bucket.ts +1114 -0
  217. package/ts/objectstorage/classes.connection.ts +36 -0
  218. package/ts/objectstorage/classes.directory.ts +425 -0
  219. package/ts/objectstorage/classes.exactpathpurgeerror.ts +24 -0
  220. package/ts/objectstorage/classes.exactuploaderror.ts +25 -0
  221. package/ts/objectstorage/classes.file.ts +303 -0
  222. package/ts/objectstorage/classes.listcursor.ts +89 -0
  223. package/ts/objectstorage/classes.metadata.ts +134 -0
  224. package/ts/objectstorage/classes.smartbucket.ts +445 -0
  225. package/ts/objectstorage/classes.trash.ts +30 -0
  226. package/ts/objectstorage/classes.watcher.ts +289 -0
  227. package/ts/objectstorage/helpers.ts +254 -0
  228. package/ts/objectstorage/index.ts +13 -0
  229. package/ts/objectstorage/interfaces.ts +389 -0
  230. package/ts/objectstorage/internal.exactpathpurge.operations.ts +1936 -0
  231. package/ts/objectstorage/internal.exactupload.capability.ts +580 -0
  232. package/ts/objectstorage/internal.exactupload.operations.ts +1715 -0
  233. package/ts/objectstorage/internal.multipart.planner.ts +90 -0
  234. package/ts/objectstorage/internal.multipart.stream.ts +606 -0
  235. package/ts/objectstorage/internal.multipart.types.ts +106 -0
  236. package/ts/objectstorage/plugins.ts +35 -0
  237. package/ts/plugins.ts +4 -0
  238. package/ts/sqldb/classes.clickhouseconnection.ts +189 -0
  239. package/ts/sqldb/classes.sqlconnection.ts +350 -0
  240. package/ts/sqldb/classes.sqltable.ts +70 -0
  241. package/ts/sqldb/clickhouse/classes.metricwriter.ts +72 -0
  242. package/ts/sqldb/clickhouse/index.ts +16 -0
  243. package/ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.ts +372 -0
  244. package/ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.ts +52 -0
  245. package/ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.ts +120 -0
  246. package/ts/sqldb/clickhouse/smartclickhouse.classes.resultset.ts +44 -0
  247. package/ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.ts +123 -0
  248. package/ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.ts +114 -0
  249. package/ts/sqldb/clickhouse/smartclickhouse.plugins.ts +5 -0
  250. package/ts/sqldb/clickhouse/smartclickhouse.types.ts +134 -0
  251. package/ts/sqldb/index.ts +6 -0
  252. package/ts/sqldb/interfaces.ts +61 -0
  253. package/ts/sqldb/internal.sqlpool.ts +179 -0
  254. package/ts/sqldb/plugins.clickhouse.ts +4 -0
  255. package/ts/sqldb/plugins.mariadb.ts +4 -0
@@ -0,0 +1,8 @@
1
+ import type { IMultipartPlanningOptions, TMultipartUploadPlan } from './internal.multipart.types.js';
2
+ export declare const MULTIPART_MIN_PART_SIZE: number;
3
+ export declare const MULTIPART_MAX_PART_SIZE: number;
4
+ export declare const MULTIPART_MAX_PART_COUNT = 10000;
5
+ export declare const MULTIPART_MAX_OBJECT_SIZE: number;
6
+ export declare const MULTIPART_DEFAULT_CONCURRENCY = 1;
7
+ export declare const MULTIPART_MAX_CONCURRENCY = 32;
8
+ export declare const planMultipartUpload: (optionsArg: IMultipartPlanningOptions) => TMultipartUploadPlan;
@@ -0,0 +1,63 @@
1
+ export const MULTIPART_MIN_PART_SIZE = 5 * 1024 * 1024;
2
+ export const MULTIPART_MAX_PART_SIZE = 5 * 1024 * 1024 * 1024;
3
+ export const MULTIPART_MAX_PART_COUNT = 10_000;
4
+ export const MULTIPART_MAX_OBJECT_SIZE = 5 * 1024 * 1024 * 1024 * 1024;
5
+ export const MULTIPART_DEFAULT_CONCURRENCY = 1;
6
+ export const MULTIPART_MAX_CONCURRENCY = 32;
7
+ const requireSafeNonNegativeInteger = (valueArg, nameArg) => {
8
+ if (!Number.isSafeInteger(valueArg) || valueArg < 0) {
9
+ throw new TypeError(`${nameArg} must be a non-negative safe integer.`);
10
+ }
11
+ };
12
+ const normalizeRequestedPartSize = (requestedPartSizeArg) => {
13
+ if (requestedPartSizeArg === undefined) {
14
+ return MULTIPART_MIN_PART_SIZE;
15
+ }
16
+ if (!Number.isSafeInteger(requestedPartSizeArg) || requestedPartSizeArg <= 0) {
17
+ throw new TypeError('requestedPartSize must be a positive safe integer.');
18
+ }
19
+ return Math.min(MULTIPART_MAX_PART_SIZE, Math.max(MULTIPART_MIN_PART_SIZE, requestedPartSizeArg));
20
+ };
21
+ const normalizeRequestedConcurrency = (requestedConcurrencyArg) => {
22
+ if (requestedConcurrencyArg === undefined) {
23
+ return MULTIPART_DEFAULT_CONCURRENCY;
24
+ }
25
+ if (!Number.isSafeInteger(requestedConcurrencyArg) || requestedConcurrencyArg <= 0) {
26
+ throw new TypeError('requestedConcurrency must be a positive safe integer.');
27
+ }
28
+ return Math.min(MULTIPART_MAX_CONCURRENCY, requestedConcurrencyArg);
29
+ };
30
+ export const planMultipartUpload = (optionsArg) => {
31
+ requireSafeNonNegativeInteger(optionsArg.objectSize, 'objectSize');
32
+ if (optionsArg.objectSize > MULTIPART_MAX_OBJECT_SIZE) {
33
+ throw new RangeError(`objectSize exceeds the ${MULTIPART_MAX_OBJECT_SIZE} byte multipart limit.`);
34
+ }
35
+ const requestedConcurrency = normalizeRequestedConcurrency(optionsArg.requestedConcurrency);
36
+ if (optionsArg.objectSize === 0) {
37
+ return {
38
+ classification: 'zero',
39
+ objectSize: 0,
40
+ partSize: 0,
41
+ partCount: 0,
42
+ concurrency: requestedConcurrency,
43
+ maximumBufferedBytes: 0,
44
+ };
45
+ }
46
+ const preferredPartSize = normalizeRequestedPartSize(optionsArg.requestedPartSize);
47
+ const minimumPartSizeForCount = Math.ceil(optionsArg.objectSize / MULTIPART_MAX_PART_COUNT);
48
+ const partSize = Math.max(preferredPartSize, minimumPartSizeForCount);
49
+ if (partSize > MULTIPART_MAX_PART_SIZE) {
50
+ throw new RangeError('The object cannot be represented by legal multipart parts.');
51
+ }
52
+ const partCount = Math.ceil(optionsArg.objectSize / partSize);
53
+ const concurrency = Math.min(requestedConcurrency, partCount);
54
+ return {
55
+ classification: 'multipart',
56
+ objectSize: optionsArg.objectSize,
57
+ partSize,
58
+ partCount,
59
+ concurrency,
60
+ maximumBufferedBytes: Math.min(optionsArg.objectSize, partSize * concurrency) + Math.min(optionsArg.objectSize, partSize),
61
+ };
62
+ };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwubXVsdGlwYXJ0LnBsYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2ludGVybmFsLm11bHRpcGFydC5wbGFubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBRTVDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFBUSxFQUFFO0lBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsT0FBTyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsb0JBQXdDLEVBQVUsRUFBRTtJQUN0RixJQUFJLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksb0JBQW9CLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0UsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQ2IsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsb0JBQW9CLENBQUMsQ0FDeEQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sNkJBQTZCLEdBQUcsQ0FDcEMsdUJBQTJDLEVBQ25DLEVBQUU7SUFDVixJQUFJLHVCQUF1QixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksdUJBQXVCLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkYsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxVQUFxQyxFQUNmLEVBQUU7SUFDeEIsNkJBQTZCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksVUFBVSxDQUNsQiwwQkFBMEIseUJBQXlCLHdCQUF3QixDQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sb0JBQW9CLEdBQUcsNkJBQTZCLENBQ3hELFVBQVUsQ0FBQyxvQkFBb0IsQ0FDaEMsQ0FBQztJQUNGLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsY0FBYyxFQUFFLE1BQU07WUFDdEIsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztZQUNYLFNBQVMsRUFBRSxDQUFDO1lBQ1osV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxvQkFBb0IsRUFBRSxDQUFDO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3ZDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsd0JBQXdCLENBQ2pELENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDdEUsSUFBSSxRQUFRLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksVUFBVSxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELE9BQU87UUFDTCxjQUFjLEVBQUUsV0FBVztRQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7UUFDakMsUUFBUTtRQUNSLFNBQVM7UUFDVCxXQUFXO1FBQ1gsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FDNUIsVUFBVSxDQUFDLFVBQVUsRUFDckIsUUFBUSxHQUFHLFdBQVcsQ0FDdkIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO0tBQzlDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -0,0 +1,17 @@
1
+ import type { IConsumeExactMultipartStreamOptions, IMultipartStreamConsumptionResult, IMultipartStreamFailureState } from './internal.multipart.types.js';
2
+ export declare class MultipartStreamConsumptionError extends Error {
3
+ readonly state: IMultipartStreamFailureState;
4
+ /**
5
+ * Non-rejecting settlement of every started part callback.
6
+ */
7
+ readonly callbackSettlement: Promise<void>;
8
+ /**
9
+ * Non-rejecting settlement of callbacks and owned reader cancellation.
10
+ */
11
+ readonly ownedSettlement: Promise<void>;
12
+ constructor(stateArg: IMultipartStreamFailureState, settlementsArg?: {
13
+ callbackSettlement: Promise<void>;
14
+ ownedSettlement: Promise<void>;
15
+ });
16
+ }
17
+ export declare const consumeExactMultipartStream: (optionsArg: IConsumeExactMultipartStreamOptions) => Promise<IMultipartStreamConsumptionResult>;
@@ -0,0 +1,440 @@
1
+ import { MULTIPART_MAX_CONCURRENCY, MULTIPART_MAX_OBJECT_SIZE, MULTIPART_MAX_PART_COUNT, MULTIPART_MAX_PART_SIZE, MULTIPART_MIN_PART_SIZE, } from './internal.multipart.planner.js';
2
+ const failureMessages = {
3
+ aborted: 'Multipart stream consumption was aborted.',
4
+ 'source-read': 'The multipart source stream failed while being read.',
5
+ 'source-buffer-limit': 'The multipart source emitted a chunk larger than the buffer limit.',
6
+ 'source-empty-chunk-limit': 'The multipart source emitted too many consecutive empty chunks.',
7
+ 'source-short': 'The multipart source ended before the declared content length.',
8
+ 'source-extra': 'The multipart source exceeded the declared content length.',
9
+ 'part-callback': 'A multipart part callback failed.',
10
+ };
11
+ const failureSettlementMaximumTimeoutMs = 30_000;
12
+ const maximumConsecutiveEmptyChunks = 1_024;
13
+ export class MultipartStreamConsumptionError extends Error {
14
+ state;
15
+ /**
16
+ * Non-rejecting settlement of every started part callback.
17
+ */
18
+ callbackSettlement;
19
+ /**
20
+ * Non-rejecting settlement of callbacks and owned reader cancellation.
21
+ */
22
+ ownedSettlement;
23
+ constructor(stateArg, settlementsArg) {
24
+ super(failureMessages[stateArg.kind], {
25
+ cause: stateArg.cause,
26
+ });
27
+ this.name = 'MultipartStreamConsumptionError';
28
+ this.state = stateArg;
29
+ this.callbackSettlement =
30
+ settlementsArg?.callbackSettlement ?? Promise.resolve();
31
+ this.ownedSettlement =
32
+ settlementsArg?.ownedSettlement ?? Promise.resolve();
33
+ }
34
+ }
35
+ const validatePlan = (planArg) => {
36
+ if (!Number.isSafeInteger(planArg.objectSize) ||
37
+ planArg.objectSize < 0 ||
38
+ planArg.objectSize > MULTIPART_MAX_OBJECT_SIZE) {
39
+ throw new TypeError('plan.objectSize is invalid.');
40
+ }
41
+ if (!Number.isSafeInteger(planArg.concurrency) ||
42
+ planArg.concurrency < 1 ||
43
+ planArg.concurrency > MULTIPART_MAX_CONCURRENCY) {
44
+ throw new TypeError('plan.concurrency is invalid.');
45
+ }
46
+ if (planArg.classification === 'zero') {
47
+ if (planArg.objectSize !== 0 ||
48
+ planArg.partSize !== 0 ||
49
+ planArg.partCount !== 0 ||
50
+ planArg.maximumBufferedBytes !== 0) {
51
+ throw new TypeError('The zero-byte multipart plan is inconsistent.');
52
+ }
53
+ return;
54
+ }
55
+ if (planArg.objectSize === 0 ||
56
+ !Number.isSafeInteger(planArg.partSize) ||
57
+ planArg.partSize < MULTIPART_MIN_PART_SIZE ||
58
+ planArg.partSize > MULTIPART_MAX_PART_SIZE ||
59
+ planArg.partCount !== Math.ceil(planArg.objectSize / planArg.partSize) ||
60
+ planArg.partCount < 1 ||
61
+ planArg.partCount > MULTIPART_MAX_PART_COUNT ||
62
+ planArg.concurrency > planArg.partCount ||
63
+ planArg.maximumBufferedBytes !==
64
+ Math.min(planArg.objectSize, planArg.partSize * planArg.concurrency) +
65
+ Math.min(planArg.objectSize, planArg.partSize)) {
66
+ throw new TypeError('The multipart plan is inconsistent.');
67
+ }
68
+ };
69
+ export const consumeExactMultipartStream = async (optionsArg) => {
70
+ validatePlan(optionsArg.plan);
71
+ if (!optionsArg.readableStream ||
72
+ typeof optionsArg.readableStream.getReader !== 'function') {
73
+ throw new TypeError('readableStream must be a web ReadableStream.');
74
+ }
75
+ if (typeof optionsArg.onPart !== 'function') {
76
+ throw new TypeError('onPart must be a function.');
77
+ }
78
+ const failureSettlementTimeoutMs = optionsArg.failureSettlementTimeoutMs ??
79
+ failureSettlementMaximumTimeoutMs;
80
+ if (!Number.isSafeInteger(failureSettlementTimeoutMs) ||
81
+ failureSettlementTimeoutMs <= 0 ||
82
+ failureSettlementTimeoutMs > failureSettlementMaximumTimeoutMs) {
83
+ throw new TypeError(`failureSettlementTimeoutMs must be a positive safe integer no greater than ${failureSettlementMaximumTimeoutMs}.`);
84
+ }
85
+ const reader = optionsArg.readableStream.getReader();
86
+ const callbackAbortController = new AbortController();
87
+ const inFlightParts = new Map();
88
+ const completedPartNumbers = new Set();
89
+ let inFlightBytes = 0;
90
+ let currentPartBytes = 0;
91
+ let pendingChunkBytes = 0;
92
+ let peakBufferedBytes = 0;
93
+ let observedBytes = 0;
94
+ let partCallbacksStarted = 0;
95
+ let sourceClosed = false;
96
+ let consecutiveEmptyChunks = 0;
97
+ let resolveAbort;
98
+ const abortOutcome = new Promise((resolveArg) => {
99
+ resolveAbort = resolveArg;
100
+ });
101
+ const handleAbort = () => {
102
+ const cause = optionsArg.signal?.reason ?? new Error('Multipart stream aborted.');
103
+ callbackAbortController.abort(cause);
104
+ resolveAbort({
105
+ type: 'abort',
106
+ cause,
107
+ });
108
+ };
109
+ optionsArg.signal?.addEventListener('abort', handleAbort, { once: true });
110
+ if (optionsArg.signal?.aborted) {
111
+ handleAbort();
112
+ }
113
+ const processPartOutcome = (outcomeArg) => {
114
+ const inFlightPart = inFlightParts.get(outcomeArg.token);
115
+ if (!inFlightPart) {
116
+ return;
117
+ }
118
+ inFlightParts.delete(outcomeArg.token);
119
+ inFlightBytes -= inFlightPart.byteLength;
120
+ if (outcomeArg.succeeded) {
121
+ completedPartNumbers.add(outcomeArg.partNumber);
122
+ return;
123
+ }
124
+ throw {
125
+ kind: 'part-callback',
126
+ cause: outcomeArg.cause,
127
+ };
128
+ };
129
+ const observeBufferedBytes = () => {
130
+ const bufferedBytes = inFlightBytes + currentPartBytes + pendingChunkBytes;
131
+ if (bufferedBytes > optionsArg.plan.maximumBufferedBytes) {
132
+ throw {
133
+ kind: 'source-buffer-limit',
134
+ cause: new RangeError('Multipart buffering exceeded its planned bound.'),
135
+ };
136
+ }
137
+ peakBufferedBytes = Math.max(peakBufferedBytes, bufferedBytes);
138
+ };
139
+ const waitForOnePart = async () => {
140
+ const outcome = await Promise.race([
141
+ abortOutcome,
142
+ ...[...inFlightParts.values()].map((inFlightPartArg) => inFlightPartArg.outcome),
143
+ ]);
144
+ if (!('token' in outcome)) {
145
+ throw {
146
+ kind: 'aborted',
147
+ cause: outcome.cause,
148
+ };
149
+ }
150
+ processPartOutcome(outcome);
151
+ };
152
+ const waitForCapacity = async () => {
153
+ while (inFlightParts.size >= optionsArg.plan.concurrency) {
154
+ await waitForOnePart();
155
+ }
156
+ };
157
+ const readWhileObservingCallbacks = async () => {
158
+ const readOutcome = reader.read().then((resultArg) => ({
159
+ type: 'read',
160
+ result: resultArg,
161
+ }), (causeArg) => ({
162
+ type: 'read-error',
163
+ cause: causeArg,
164
+ }));
165
+ while (true) {
166
+ const outcome = await Promise.race([
167
+ readOutcome,
168
+ abortOutcome,
169
+ ...[...inFlightParts.values()].map((inFlightPartArg) => inFlightPartArg.outcome),
170
+ ]);
171
+ if ('token' in outcome) {
172
+ processPartOutcome(outcome);
173
+ continue;
174
+ }
175
+ if (outcome.type === 'abort') {
176
+ throw {
177
+ kind: 'aborted',
178
+ cause: outcome.cause,
179
+ };
180
+ }
181
+ if (outcome.type === 'read-error') {
182
+ throw {
183
+ kind: 'source-read',
184
+ cause: outcome.cause,
185
+ };
186
+ }
187
+ return outcome.result;
188
+ }
189
+ };
190
+ const dispatchPart = (dataArg, partNumberArg) => {
191
+ const token = Symbol(`multipart-part-${partNumberArg}`);
192
+ partCallbacksStarted++;
193
+ currentPartBytes = 0;
194
+ inFlightBytes += dataArg.byteLength;
195
+ observeBufferedBytes();
196
+ const outcome = Promise.resolve()
197
+ .then(() => optionsArg.onPart({
198
+ partNumber: partNumberArg,
199
+ byteOffset: (partNumberArg - 1) * optionsArg.plan.partSize,
200
+ isLastPart: partNumberArg === optionsArg.plan.partCount,
201
+ data: dataArg,
202
+ signal: callbackAbortController.signal,
203
+ }))
204
+ .then(() => ({
205
+ token,
206
+ partNumber: partNumberArg,
207
+ succeeded: true,
208
+ }), (causeArg) => ({
209
+ token,
210
+ partNumber: partNumberArg,
211
+ succeeded: false,
212
+ cause: causeArg,
213
+ }));
214
+ inFlightParts.set(token, {
215
+ byteLength: dataArg.byteLength,
216
+ outcome,
217
+ });
218
+ };
219
+ const acceptSourceChunk = (chunkArg) => {
220
+ if (chunkArg.byteLength > 0) {
221
+ consecutiveEmptyChunks = 0;
222
+ return true;
223
+ }
224
+ consecutiveEmptyChunks++;
225
+ if (consecutiveEmptyChunks > maximumConsecutiveEmptyChunks) {
226
+ throw {
227
+ kind: 'source-empty-chunk-limit',
228
+ cause: new RangeError(`The multipart source emitted more than ${maximumConsecutiveEmptyChunks} consecutive empty chunks.`),
229
+ };
230
+ }
231
+ return false;
232
+ };
233
+ try {
234
+ let pendingChunk;
235
+ let pendingChunkOffset = 0;
236
+ for (let partNumber = 1; partNumber <= optionsArg.plan.partCount; partNumber++) {
237
+ await waitForCapacity();
238
+ const partByteLength = Math.min(optionsArg.plan.partSize, optionsArg.plan.objectSize -
239
+ (partNumber - 1) * optionsArg.plan.partSize);
240
+ if (inFlightBytes + partByteLength >
241
+ optionsArg.plan.maximumBufferedBytes) {
242
+ throw new Error('The multipart plan cannot honor its buffering bound.');
243
+ }
244
+ const partData = new Uint8Array(partByteLength);
245
+ currentPartBytes = partByteLength;
246
+ observeBufferedBytes();
247
+ let partOffset = 0;
248
+ while (partOffset < partByteLength) {
249
+ if (pendingChunk &&
250
+ pendingChunkOffset < pendingChunk.byteLength) {
251
+ const copyByteLength = Math.min(partByteLength - partOffset, pendingChunk.byteLength - pendingChunkOffset);
252
+ partData.set(pendingChunk.subarray(pendingChunkOffset, pendingChunkOffset + copyByteLength), partOffset);
253
+ pendingChunkOffset += copyByteLength;
254
+ partOffset += copyByteLength;
255
+ if (pendingChunkOffset === pendingChunk.byteLength) {
256
+ pendingChunk = undefined;
257
+ pendingChunkOffset = 0;
258
+ pendingChunkBytes = 0;
259
+ }
260
+ continue;
261
+ }
262
+ const readResult = await readWhileObservingCallbacks();
263
+ if (readResult.done) {
264
+ sourceClosed = true;
265
+ throw {
266
+ kind: 'source-short',
267
+ };
268
+ }
269
+ if (!(readResult.value instanceof Uint8Array)) {
270
+ throw {
271
+ kind: 'source-read',
272
+ cause: new TypeError('The multipart source emitted a non-Uint8Array chunk.'),
273
+ };
274
+ }
275
+ if (!acceptSourceChunk(readResult.value)) {
276
+ continue;
277
+ }
278
+ observedBytes += readResult.value.byteLength;
279
+ if (observedBytes > optionsArg.plan.objectSize) {
280
+ throw {
281
+ kind: 'source-extra',
282
+ };
283
+ }
284
+ if (readResult.value.byteLength > optionsArg.plan.partSize) {
285
+ throw {
286
+ kind: 'source-buffer-limit',
287
+ cause: new RangeError(`Source chunks must not exceed ${optionsArg.plan.partSize} bytes.`),
288
+ };
289
+ }
290
+ pendingChunk = readResult.value;
291
+ pendingChunkBytes = readResult.value.byteLength;
292
+ observeBufferedBytes();
293
+ }
294
+ dispatchPart(partData, partNumber);
295
+ }
296
+ while (!sourceClosed) {
297
+ const readResult = await readWhileObservingCallbacks();
298
+ if (readResult.done) {
299
+ sourceClosed = true;
300
+ break;
301
+ }
302
+ if (!(readResult.value instanceof Uint8Array)) {
303
+ throw {
304
+ kind: 'source-read',
305
+ cause: new TypeError('The multipart source emitted a non-Uint8Array chunk.'),
306
+ };
307
+ }
308
+ if (!acceptSourceChunk(readResult.value)) {
309
+ continue;
310
+ }
311
+ observedBytes += readResult.value.byteLength;
312
+ throw {
313
+ kind: 'source-extra',
314
+ };
315
+ }
316
+ while (inFlightParts.size > 0) {
317
+ await waitForOnePart();
318
+ }
319
+ if (optionsArg.signal?.aborted) {
320
+ throw {
321
+ kind: 'aborted',
322
+ cause: optionsArg.signal.reason,
323
+ };
324
+ }
325
+ return {
326
+ completionAuthorized: true,
327
+ bytesConsumed: observedBytes,
328
+ partsConsumed: completedPartNumbers.size,
329
+ peakBufferedBytes,
330
+ maximumBufferedBytes: optionsArg.plan.maximumBufferedBytes,
331
+ };
332
+ }
333
+ catch (error) {
334
+ const failure = typeof error === 'object' &&
335
+ error !== null &&
336
+ 'kind' in error &&
337
+ typeof error.kind === 'string'
338
+ ? error
339
+ : {
340
+ kind: 'source-read',
341
+ cause: error,
342
+ };
343
+ callbackAbortController.abort(failure.cause ?? new Error(failureMessages[failure.kind]));
344
+ const readerCleanupPromise = sourceClosed
345
+ ? Promise.resolve({
346
+ status: 'closed',
347
+ })
348
+ : Promise.resolve()
349
+ .then(() => reader.cancel(failure.cause))
350
+ .then(() => ({
351
+ status: 'cancelled',
352
+ }), (causeArg) => ({
353
+ status: 'cancel-failed',
354
+ cause: causeArg,
355
+ }));
356
+ let callbacksSettled = false;
357
+ const callbackSettlement = Promise.all([...inFlightParts.values()].map((inFlightPartArg) => inFlightPartArg.outcome))
358
+ .then((remainingOutcomesArg) => {
359
+ for (const outcome of remainingOutcomesArg) {
360
+ if (outcome.succeeded) {
361
+ completedPartNumbers.add(outcome.partNumber);
362
+ }
363
+ }
364
+ inFlightParts.clear();
365
+ inFlightBytes = 0;
366
+ })
367
+ .then(() => undefined, () => undefined);
368
+ const observedCallbackSettlement = callbackSettlement.then(() => {
369
+ callbacksSettled = true;
370
+ });
371
+ let readerCleanup;
372
+ let readerCleanupSettled = false;
373
+ const observedReaderCleanup = readerCleanupPromise.then((readerCleanupArg) => {
374
+ readerCleanup = readerCleanupArg;
375
+ readerCleanupSettled = true;
376
+ }, () => {
377
+ readerCleanup = {
378
+ status: 'cancel-failed',
379
+ cause: new Error('Reader cancellation rejected unexpectedly.'),
380
+ };
381
+ readerCleanupSettled = true;
382
+ });
383
+ const ownedSettlement = Promise.allSettled([
384
+ observedCallbackSettlement,
385
+ observedReaderCleanup,
386
+ ]).then(() => undefined);
387
+ const settlementDeadlineToken = Symbol('multipart-failure-settlement-deadline');
388
+ let resolveSettlementDeadline;
389
+ const settlementDeadlineOutcome = new Promise((resolveArg) => {
390
+ resolveSettlementDeadline = resolveArg;
391
+ });
392
+ const settlementDeadline = setTimeout(() => {
393
+ resolveSettlementDeadline(settlementDeadlineToken);
394
+ }, failureSettlementTimeoutMs);
395
+ await Promise.race([ownedSettlement, settlementDeadlineOutcome]);
396
+ clearTimeout(settlementDeadline);
397
+ const retry = partCallbacksStarted === 0
398
+ ? {
399
+ disposition: 'safe-to-retry',
400
+ requiresMultipartAbort: false,
401
+ }
402
+ : {
403
+ disposition: 'abort-multipart-first',
404
+ requiresMultipartAbort: true,
405
+ };
406
+ throw new MultipartStreamConsumptionError({
407
+ completionAuthorized: false,
408
+ kind: failure.kind,
409
+ cause: failure.cause,
410
+ expectedBytes: optionsArg.plan.objectSize,
411
+ observedBytes,
412
+ partCallbacksStarted,
413
+ completedPartNumbers: [...completedPartNumbers].sort((leftArg, rightArg) => {
414
+ return leftArg - rightArg;
415
+ }),
416
+ cleanup: {
417
+ callbacks: callbacksSettled ? 'settled' : 'detached',
418
+ reader: readerCleanupSettled && readerCleanup
419
+ ? readerCleanup
420
+ : {
421
+ status: 'cancel-detached',
422
+ },
423
+ },
424
+ retry,
425
+ }, {
426
+ callbackSettlement,
427
+ ownedSettlement,
428
+ });
429
+ }
430
+ finally {
431
+ optionsArg.signal?.removeEventListener('abort', handleAbort);
432
+ try {
433
+ reader.releaseLock();
434
+ }
435
+ catch {
436
+ // Detached reader cancellation retains ownership until it settles.
437
+ }
438
+ }
439
+ };
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwubXVsdGlwYXJ0LnN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwubXVsdGlwYXJ0LnN0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixHQUN4QixNQUFNLGlDQUFpQyxDQUFDO0FBZ0R6QyxNQUFNLGVBQWUsR0FBZ0Q7SUFDbkUsT0FBTyxFQUFFLDJDQUEyQztJQUNwRCxhQUFhLEVBQUUsc0RBQXNEO0lBQ3JFLHFCQUFxQixFQUFFLG9FQUFvRTtJQUMzRiwwQkFBMEIsRUFDeEIsaUVBQWlFO0lBQ25FLGNBQWMsRUFBRSxnRUFBZ0U7SUFDaEYsY0FBYyxFQUFFLDREQUE0RDtJQUM1RSxlQUFlLEVBQUUsbUNBQW1DO0NBQ3JELENBQUM7QUFDRixNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQztBQUU1QyxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsS0FBSztJQUN4QyxLQUFLLENBQStCO0lBQ3BEOztPQUVHO0lBQ2Esa0JBQWtCLENBQWdCO0lBQ2xEOztPQUVHO0lBQ2EsZUFBZSxDQUFnQjtJQUUvQyxZQUNFLFFBQXNDLEVBQ3RDLGNBR0M7UUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxpQ0FBaUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLGNBQWMsRUFBRSxrQkFBa0IsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7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
@@ -0,0 +1,82 @@
1
+ export interface IMultipartPlanningOptions {
2
+ objectSize: number;
3
+ requestedPartSize?: number;
4
+ requestedConcurrency?: number;
5
+ }
6
+ interface IMultipartUploadPlanBase {
7
+ objectSize: number;
8
+ concurrency: number;
9
+ maximumBufferedBytes: number;
10
+ }
11
+ export interface IMultipartZeroUploadPlan extends IMultipartUploadPlanBase {
12
+ classification: 'zero';
13
+ objectSize: 0;
14
+ partSize: 0;
15
+ partCount: 0;
16
+ maximumBufferedBytes: 0;
17
+ }
18
+ export interface IMultipartDataUploadPlan extends IMultipartUploadPlanBase {
19
+ classification: 'multipart';
20
+ partSize: number;
21
+ partCount: number;
22
+ }
23
+ export type TMultipartUploadPlan = IMultipartZeroUploadPlan | IMultipartDataUploadPlan;
24
+ export interface IMultipartStreamPart {
25
+ partNumber: number;
26
+ byteOffset: number;
27
+ isLastPart: boolean;
28
+ /**
29
+ * An exact, exclusively owned copy. The consumer never mutates or reuses it.
30
+ */
31
+ data: Uint8Array;
32
+ signal: AbortSignal;
33
+ }
34
+ export interface IConsumeExactMultipartStreamOptions {
35
+ readableStream: ReadableStream<Uint8Array>;
36
+ plan: TMultipartUploadPlan;
37
+ onPart: (part: IMultipartStreamPart) => Promise<void>;
38
+ signal?: AbortSignal;
39
+ /** Internal failure-teardown bound (default and maximum: 30000ms). */
40
+ failureSettlementTimeoutMs?: number;
41
+ }
42
+ export interface IMultipartStreamConsumptionResult {
43
+ completionAuthorized: true;
44
+ bytesConsumed: number;
45
+ partsConsumed: number;
46
+ peakBufferedBytes: number;
47
+ maximumBufferedBytes: number;
48
+ }
49
+ export type TMultipartStreamFailureKind = 'aborted' | 'source-read' | 'source-buffer-limit' | 'source-empty-chunk-limit' | 'source-short' | 'source-extra' | 'part-callback';
50
+ export type TMultipartOwnedReaderCleanup = {
51
+ status: 'closed';
52
+ } | {
53
+ status: 'cancelled';
54
+ } | {
55
+ status: 'cancel-failed';
56
+ cause: unknown;
57
+ } | {
58
+ status: 'cancel-detached';
59
+ };
60
+ export interface IMultipartOwnedCleanupState {
61
+ callbacks: 'settled' | 'detached';
62
+ reader: TMultipartOwnedReaderCleanup;
63
+ }
64
+ export type TMultipartRetryState = {
65
+ disposition: 'safe-to-retry';
66
+ requiresMultipartAbort: false;
67
+ } | {
68
+ disposition: 'abort-multipart-first';
69
+ requiresMultipartAbort: true;
70
+ };
71
+ export interface IMultipartStreamFailureState {
72
+ completionAuthorized: false;
73
+ kind: TMultipartStreamFailureKind;
74
+ cause?: unknown;
75
+ expectedBytes: number;
76
+ observedBytes: number;
77
+ partCallbacksStarted: number;
78
+ completedPartNumbers: number[];
79
+ cleanup: IMultipartOwnedCleanupState;
80
+ retry: TMultipartRetryState;
81
+ }
82
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwubXVsdGlwYXJ0LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9pbnRlcm5hbC5tdWx0aXBhcnQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,17 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as path from 'node:path';
3
+ import * as stream from 'node:stream';
4
+ export { crypto, path, stream };
5
+ import * as smartmime from '@push.rocks/smartmime';
6
+ import * as smartpath from '@push.rocks/smartpath';
7
+ import * as smartpromise from '@push.rocks/smartpromise';
8
+ import * as smartrx from '@push.rocks/smartrx';
9
+ import * as smartstream from '@push.rocks/smartstream';
10
+ import * as smartstring from '@push.rocks/smartstring';
11
+ import * as smartunique from '@push.rocks/smartunique';
12
+ export { smartmime, smartpath, smartpromise, smartrx, smartstream, smartstring, smartunique };
13
+ import * as tsclass from '@tsclass/tsclass';
14
+ export { tsclass, };
15
+ import * as s3 from '@aws-sdk/client-s3';
16
+ import { Minimatch } from 'minimatch';
17
+ export { s3, Minimatch, };