@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,21 @@
1
+ import { SmartBucket } from './classes.smartbucket.js';
2
+ import type { ICapabilities, IOperationOptions, IReadiness } from '../core/interfaces.js';
3
+ export interface IObjectStorageConnectionOptions {
4
+ backend: 'objectstorage' | 's3';
5
+ endpoint: string;
6
+ region?: string;
7
+ credentials: {
8
+ accessKeyId: string;
9
+ secretAccessKey: string;
10
+ };
11
+ forcePathStyle?: boolean;
12
+ /** Existing bucket used by the read-only readiness probe; no bucket is created automatically. */
13
+ readinessBucket?: string;
14
+ }
15
+ export declare class ObjectStorageConnection extends SmartBucket {
16
+ readonly options: IObjectStorageConnectionOptions;
17
+ readonly backend: 'objectstorage' | 's3';
18
+ readonly capabilities: ICapabilities;
19
+ constructor(options: IObjectStorageConnectionOptions);
20
+ ready(options?: IOperationOptions): Promise<IReadiness>;
21
+ }
@@ -0,0 +1,27 @@
1
+ import { SmartBucket } from './classes.smartbucket.js';
2
+ export class ObjectStorageConnection extends SmartBucket {
3
+ options;
4
+ backend;
5
+ capabilities;
6
+ constructor(options) {
7
+ const endpoint = new URL(options.endpoint);
8
+ if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password ||
9
+ endpoint.pathname !== '/' || endpoint.search || endpoint.hash) {
10
+ throw new TypeError('Object storage requires an HTTP(S) origin with separate credentials.');
11
+ }
12
+ super({ endpoint: endpoint.hostname, port: Number(endpoint.port || (endpoint.protocol === 'https:' ? 443 : 80)),
13
+ useSsl: endpoint.protocol === 'https:', accessKey: options.credentials.accessKeyId,
14
+ accessSecret: options.credentials.secretAccessKey, region: options.region ?? 'us-east-1' }, { forcePathStyle: options.forcePathStyle });
15
+ this.options = options;
16
+ this.backend = options.backend;
17
+ this.capabilities = Object.freeze({ backend: this.backend, transactions: 'unsupported', changeStreams: 'unsupported',
18
+ objectMetrics: 'unsupported', diskResidentScans: 'unknown' });
19
+ }
20
+ async ready(options = {}) {
21
+ if (!this.options.readinessBucket)
22
+ return { ready: false, reason: 'readiness_bucket_required' };
23
+ const result = await this.checkReadiness(this.options.readinessBucket, options);
24
+ return result.ready ? { ready: true } : { ready: false, reason: result.reason };
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBYXZELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxXQUFXO0lBRzFCO0lBRlosT0FBTyxDQUF5QjtJQUNoQyxZQUFZLENBQWdCO0lBQzVDLFlBQTRCLE9BQXdDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRO1lBQzFGLFFBQVEsQ0FBQyxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0csTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVc7WUFDbEYsWUFBWSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVcsRUFBRSxFQUMxRixFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQVRwQixZQUFPLEdBQVAsT0FBTyxDQUFpQztRQVVsRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYTtZQUNsSCxhQUFhLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNNLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBNkIsRUFBRTtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixFQUFFLENBQUM7UUFDaEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,124 @@
1
+ import * as plugins from './plugins.js';
2
+ import { Bucket } from './classes.bucket.js';
3
+ import { File } from './classes.file.js';
4
+ import type { IDirectoryFastPutStreamOptions } from './interfaces.js';
5
+ export declare class Directory {
6
+ bucketRef: Bucket;
7
+ parentDirectoryRef: Directory;
8
+ name: string;
9
+ tree: string[];
10
+ files: string[];
11
+ folders: string[];
12
+ constructor(bucketRefArg: Bucket, parentDirectory: Directory, name: string);
13
+ /**
14
+ * returns an array of parent directories
15
+ */
16
+ getParentDirectories(): Directory[];
17
+ /**
18
+ * returns the directory level
19
+ */
20
+ getDirectoryLevel(): number;
21
+ /**
22
+ * updates the base path
23
+ */
24
+ getBasePath(): string;
25
+ /**
26
+ * gets a file by name
27
+ */
28
+ getFile(optionsArg: {
29
+ path: string;
30
+ createWithContents?: string | Buffer;
31
+ getFromTrash?: boolean;
32
+ }): Promise<File>;
33
+ /**
34
+ * Check if a file exists in this directory
35
+ */
36
+ fileExists(optionsArg: {
37
+ path: string;
38
+ }): Promise<boolean>;
39
+ /**
40
+ * Check if a subdirectory exists
41
+ */
42
+ directoryExists(dirNameArg: string): Promise<boolean>;
43
+ /**
44
+ * Collects all ListObjectsV2 pages for a prefix.
45
+ */
46
+ private listObjectsV2AllPages;
47
+ /**
48
+ * lists all files
49
+ */
50
+ listFiles(): Promise<File[]>;
51
+ /**
52
+ * lists all folders
53
+ */
54
+ listDirectories(): Promise<Directory[]>;
55
+ /**
56
+ * gets an array that has all objects with a certain prefix
57
+ */
58
+ getTreeArray(): Promise<plugins.s3._Object[] | undefined>;
59
+ /**
60
+ * gets a sub directory by name
61
+ */
62
+ getSubDirectoryByName(dirNameArg: string, optionsArg?: {
63
+ /**
64
+ * in object storage a directory does not exist if it is empty
65
+ * this option returns a directory even if it is empty
66
+ */
67
+ getEmptyDirectory?: boolean;
68
+ /**
69
+ * in object storage a directory does not exist if it is empty
70
+ * this option creates a directory even if it is empty using a initializer file
71
+ */
72
+ createWithInitializerFile?: boolean;
73
+ /**
74
+ * if the path is a file path, it will be treated as a file and the parent directory will be returned
75
+ */
76
+ couldBeFilePath?: boolean;
77
+ }): Promise<Directory>;
78
+ /**
79
+ * moves the directory
80
+ */
81
+ move(): Promise<void>;
82
+ /**
83
+ * creates an empty file within this directory
84
+ * @param relativePathArg
85
+ */
86
+ createEmptyFile(relativePathArg: string): Promise<File>;
87
+ fastPut(optionsArg: {
88
+ path: string;
89
+ contents: string | Buffer;
90
+ }): Promise<void>;
91
+ fastGet(optionsArg: {
92
+ path: string;
93
+ }): Promise<Buffer<ArrayBufferLike>>;
94
+ fastGetStream(optionsArg: {
95
+ path: string;
96
+ signal?: AbortSignal;
97
+ }, typeArg: 'webstream'): Promise<ReadableStream>;
98
+ fastGetStream(optionsArg: {
99
+ path: string;
100
+ signal?: AbortSignal;
101
+ }, typeArg: 'nodestream'): Promise<plugins.stream.Readable>;
102
+ /**
103
+ * fast put stream
104
+ */
105
+ fastPutStream(optionsArg: IDirectoryFastPutStreamOptions): Promise<void>;
106
+ /**
107
+ * removes a file within the directory
108
+ * uses file class to make sure effects for metadata etc. are handled correctly
109
+ * @param optionsArg
110
+ */
111
+ fastRemove(optionsArg: {
112
+ path: string;
113
+ /**
114
+ * wether the file should be placed into trash. Default is false.
115
+ */
116
+ mode?: 'permanent' | 'trash';
117
+ }): Promise<void>;
118
+ /**
119
+ * deletes the directory with all its contents
120
+ */
121
+ delete(optionsArg: {
122
+ mode?: 'permanent' | 'trash';
123
+ }): Promise<void>;
124
+ }
@@ -0,0 +1,335 @@
1
+ // classes.directory.ts
2
+ import * as plugins from './plugins.js';
3
+ import { Bucket } from './classes.bucket.js';
4
+ import { File } from './classes.file.js';
5
+ import * as helpers from './helpers.js';
6
+ export class Directory {
7
+ bucketRef;
8
+ parentDirectoryRef;
9
+ name;
10
+ tree;
11
+ files;
12
+ folders;
13
+ constructor(bucketRefArg, parentDirectory, name) {
14
+ this.bucketRef = bucketRefArg;
15
+ this.parentDirectoryRef = parentDirectory;
16
+ this.name = name;
17
+ }
18
+ /**
19
+ * returns an array of parent directories
20
+ */
21
+ getParentDirectories() {
22
+ let parentDirectories = [];
23
+ if (this.parentDirectoryRef) {
24
+ parentDirectories.push(this.parentDirectoryRef);
25
+ parentDirectories = parentDirectories.concat(this.parentDirectoryRef.getParentDirectories());
26
+ }
27
+ return parentDirectories;
28
+ }
29
+ /**
30
+ * returns the directory level
31
+ */
32
+ getDirectoryLevel() {
33
+ return this.getParentDirectories().length;
34
+ }
35
+ /**
36
+ * updates the base path
37
+ */
38
+ getBasePath() {
39
+ const parentDirectories = this.getParentDirectories();
40
+ let basePath = '';
41
+ for (const parentDir of parentDirectories) {
42
+ if (!parentDir.name && !basePath) {
43
+ basePath = this.name + '/';
44
+ continue;
45
+ }
46
+ if (parentDir.name && !basePath) {
47
+ basePath = parentDir.name + '/' + this.name + '/';
48
+ continue;
49
+ }
50
+ if (parentDir.name && basePath) {
51
+ basePath = parentDir.name + '/' + basePath;
52
+ continue;
53
+ }
54
+ }
55
+ return basePath;
56
+ }
57
+ /**
58
+ * gets a file by name
59
+ */
60
+ async getFile(optionsArg) {
61
+ const pathDescriptor = {
62
+ directory: this,
63
+ path: optionsArg.path,
64
+ };
65
+ const exists = await this.bucketRef.fastExists({
66
+ path: await helpers.reducePathDescriptorToPath(pathDescriptor),
67
+ });
68
+ if (!exists && optionsArg.getFromTrash) {
69
+ const trash = await this.bucketRef.getTrash();
70
+ const trashedFile = await trash.getTrashedFileByOriginalName(pathDescriptor);
71
+ return trashedFile;
72
+ }
73
+ if (!exists && !optionsArg.createWithContents) {
74
+ throw new Error(`File not found at path '${optionsArg.path}'`);
75
+ }
76
+ if (!exists && optionsArg.createWithContents) {
77
+ await File.create({
78
+ directory: this,
79
+ name: optionsArg.path,
80
+ contents: optionsArg.createWithContents,
81
+ });
82
+ }
83
+ return new File({
84
+ directoryRefArg: this,
85
+ fileName: optionsArg.path,
86
+ });
87
+ }
88
+ /**
89
+ * Check if a file exists in this directory
90
+ */
91
+ async fileExists(optionsArg) {
92
+ const pathDescriptor = {
93
+ directory: this,
94
+ path: optionsArg.path,
95
+ };
96
+ return this.bucketRef.fastExists({
97
+ path: await helpers.reducePathDescriptorToPath(pathDescriptor),
98
+ });
99
+ }
100
+ /**
101
+ * Check if a subdirectory exists
102
+ */
103
+ async directoryExists(dirNameArg) {
104
+ const directories = await this.listDirectories();
105
+ return directories.some(dir => dir.name === dirNameArg);
106
+ }
107
+ /**
108
+ * Collects all ListObjectsV2 pages for a prefix.
109
+ */
110
+ async listObjectsV2AllPages(prefix, delimiter) {
111
+ const allContents = [];
112
+ const allCommonPrefixes = [];
113
+ let continuationToken;
114
+ do {
115
+ const command = new plugins.s3.ListObjectsV2Command({
116
+ Bucket: this.bucketRef.name,
117
+ Prefix: prefix,
118
+ Delimiter: delimiter,
119
+ ContinuationToken: continuationToken,
120
+ });
121
+ const response = await this.bucketRef.smartbucketRef.storageClient.send(command);
122
+ if (response.Contents) {
123
+ allContents.push(...response.Contents);
124
+ }
125
+ if (response.CommonPrefixes) {
126
+ allCommonPrefixes.push(...response.CommonPrefixes);
127
+ }
128
+ continuationToken = response.IsTruncated ? response.NextContinuationToken : undefined;
129
+ } while (continuationToken);
130
+ return { contents: allContents, commonPrefixes: allCommonPrefixes };
131
+ }
132
+ /**
133
+ * lists all files
134
+ */
135
+ async listFiles() {
136
+ const { contents } = await this.listObjectsV2AllPages(this.getBasePath(), '/');
137
+ const fileArray = [];
138
+ contents.forEach((item) => {
139
+ if (item.Key && !item.Key.endsWith('/')) {
140
+ const subtractedPath = item.Key.replace(this.getBasePath(), '');
141
+ if (!subtractedPath.includes('/')) {
142
+ fileArray.push(new File({
143
+ directoryRefArg: this,
144
+ fileName: subtractedPath,
145
+ }));
146
+ }
147
+ }
148
+ });
149
+ return fileArray;
150
+ }
151
+ /**
152
+ * lists all folders
153
+ */
154
+ async listDirectories() {
155
+ try {
156
+ const { commonPrefixes } = await this.listObjectsV2AllPages(this.getBasePath(), '/');
157
+ const directoryArray = [];
158
+ if (commonPrefixes) {
159
+ commonPrefixes.forEach((item) => {
160
+ if (item.Prefix) {
161
+ const subtractedPath = item.Prefix.replace(this.getBasePath(), '');
162
+ if (subtractedPath.endsWith('/')) {
163
+ const dirName = subtractedPath.slice(0, -1);
164
+ // Ensure the directory name is not empty (which would indicate the base directory itself)
165
+ if (dirName) {
166
+ directoryArray.push(new Directory(this.bucketRef, this, dirName));
167
+ }
168
+ }
169
+ }
170
+ });
171
+ }
172
+ return directoryArray;
173
+ }
174
+ catch (error) {
175
+ console.error('Error listing directories:', error);
176
+ throw error;
177
+ }
178
+ }
179
+ /**
180
+ * gets an array that has all objects with a certain prefix
181
+ */
182
+ async getTreeArray() {
183
+ const command = new plugins.s3.ListObjectsV2Command({
184
+ Bucket: this.bucketRef.name,
185
+ Prefix: this.getBasePath(),
186
+ Delimiter: '/',
187
+ });
188
+ const response = await this.bucketRef.smartbucketRef.storageClient.send(command);
189
+ return response.Contents;
190
+ }
191
+ /**
192
+ * gets a sub directory by name
193
+ */
194
+ async getSubDirectoryByName(dirNameArg, optionsArg = {}) {
195
+ const dirNameArray = dirNameArg.split('/').filter(str => str.trim() !== "");
196
+ optionsArg = {
197
+ getEmptyDirectory: false,
198
+ createWithInitializerFile: false,
199
+ ...optionsArg,
200
+ };
201
+ const getDirectory = async (directoryArg, dirNameToSearch, isFinalDirectory) => {
202
+ const directories = await directoryArg.listDirectories();
203
+ let returnDirectory = directories.find((directory) => {
204
+ return directory.name === dirNameToSearch;
205
+ });
206
+ if (returnDirectory) {
207
+ return returnDirectory;
208
+ }
209
+ if (optionsArg.getEmptyDirectory || optionsArg.createWithInitializerFile) {
210
+ returnDirectory = new Directory(this.bucketRef, directoryArg, dirNameToSearch);
211
+ }
212
+ if (isFinalDirectory && optionsArg.createWithInitializerFile) {
213
+ returnDirectory?.createEmptyFile('00init.txt');
214
+ }
215
+ return returnDirectory || null;
216
+ };
217
+ if (optionsArg.couldBeFilePath) {
218
+ const baseDirectory = await this.bucketRef.getBaseDirectory();
219
+ const existingFile = await baseDirectory.getFile({
220
+ path: dirNameArg,
221
+ });
222
+ if (existingFile) {
223
+ const adjustedPath = dirNameArg.substring(0, dirNameArg.lastIndexOf('/'));
224
+ return this.getSubDirectoryByName(adjustedPath);
225
+ }
226
+ }
227
+ let wantedDirectory = null;
228
+ let counter = 0;
229
+ for (const dirNameToSearch of dirNameArray) {
230
+ counter++;
231
+ const directoryToSearchIn = wantedDirectory ? wantedDirectory : this;
232
+ wantedDirectory = await getDirectory(directoryToSearchIn, dirNameToSearch, counter === dirNameArray.length);
233
+ }
234
+ if (!wantedDirectory) {
235
+ throw new Error(`Directory not found at path '${dirNameArg}'`);
236
+ }
237
+ return wantedDirectory;
238
+ }
239
+ /**
240
+ * moves the directory
241
+ */
242
+ async move() {
243
+ // TODO
244
+ throw new Error('Moving a directory is not yet implemented');
245
+ }
246
+ /**
247
+ * creates an empty file within this directory
248
+ * @param relativePathArg
249
+ */
250
+ async createEmptyFile(relativePathArg) {
251
+ const emptyFile = await File.create({
252
+ directory: this,
253
+ name: relativePathArg,
254
+ contents: '',
255
+ });
256
+ return emptyFile;
257
+ }
258
+ // file operations
259
+ async fastPut(optionsArg) {
260
+ const path = plugins.path.join(this.getBasePath(), optionsArg.path);
261
+ await this.bucketRef.fastPut({
262
+ path,
263
+ contents: optionsArg.contents,
264
+ });
265
+ }
266
+ async fastGet(optionsArg) {
267
+ const path = plugins.path.join(this.getBasePath(), optionsArg.path);
268
+ const result = await this.bucketRef.fastGet({
269
+ path,
270
+ });
271
+ return result;
272
+ }
273
+ /**
274
+ * fastGetStream
275
+ * @param optionsArg
276
+ * @returns
277
+ */
278
+ async fastGetStream(optionsArg, typeArg) {
279
+ const path = plugins.path.join(this.getBasePath(), optionsArg.path);
280
+ const result = await this.bucketRef.fastGetStream({
281
+ path,
282
+ signal: optionsArg.signal,
283
+ }, typeArg);
284
+ return result;
285
+ }
286
+ /**
287
+ * fast put stream
288
+ */
289
+ async fastPutStream(optionsArg) {
290
+ const path = plugins.path.join(this.getBasePath(), optionsArg.path);
291
+ await this.bucketRef.fastPutStream({
292
+ path,
293
+ readableStream: optionsArg.stream,
294
+ contentLength: optionsArg.contentLength,
295
+ signal: optionsArg.signal,
296
+ });
297
+ }
298
+ /**
299
+ * removes a file within the directory
300
+ * uses file class to make sure effects for metadata etc. are handled correctly
301
+ * @param optionsArg
302
+ */
303
+ async fastRemove(optionsArg) {
304
+ const file = await this.getFile({
305
+ path: optionsArg.path,
306
+ });
307
+ await file.delete({
308
+ mode: optionsArg.mode ? optionsArg.mode : 'permanent',
309
+ });
310
+ }
311
+ /**
312
+ * deletes the directory with all its contents
313
+ */
314
+ async delete(optionsArg) {
315
+ const deleteDirectory = async (directoryArg) => {
316
+ const childDirectories = await directoryArg.listDirectories();
317
+ if (childDirectories.length === 0) {
318
+ console.log('Directory empty! Path complete!');
319
+ }
320
+ else {
321
+ for (const childDir of childDirectories) {
322
+ await deleteDirectory(childDir);
323
+ }
324
+ }
325
+ const files = await directoryArg.listFiles();
326
+ for (const file of files) {
327
+ await file.delete({
328
+ mode: optionsArg.mode ? optionsArg.mode : 'permanent',
329
+ });
330
+ }
331
+ };
332
+ await deleteDirectory(this);
333
+ }
334
+ }
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kaXJlY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9vYmplY3RzdG9yYWdlL2NsYXNzZXMuZGlyZWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVCQUF1QjtBQUV2QixPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDLE1BQU0sT0FBTyxTQUFTO0lBQ2IsU0FBUyxDQUFTO0lBQ2xCLGtCQUFrQixDQUFZO0lBQzlCLElBQUksQ0FBUztJQUViLElBQUksQ0FBWTtJQUNoQixLQUFLLENBQVk7SUFDakIsT0FBTyxDQUFZO0lBRTFCLFlBQVksWUFBb0IsRUFBRSxlQUEwQixFQUFFLElBQVk7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDekIsSUFBSSxpQkFBaUIsR0FBZ0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hELGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElB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
@@ -0,0 +1,5 @@
1
+ import type { IExactPathPurgeFailureState } from './interfaces.js';
2
+ export declare class ExactPathPurgeError extends Error {
3
+ readonly state: IExactPathPurgeFailureState;
4
+ constructor(stateArg: IExactPathPurgeFailureState, causeArg: unknown);
5
+ }
@@ -0,0 +1,18 @@
1
+ const phaseMessages = {
2
+ capability: 'The exact-path purge capability is invalid or stale.',
3
+ inventory: 'The exact path could not be inventoried safely.',
4
+ consistency: 'The exact path changed before purge mutation.',
5
+ delete: 'The exact path could not be deleted safely.',
6
+ verification: 'The exact-path purge could not be verified.',
7
+ };
8
+ export class ExactPathPurgeError extends Error {
9
+ state;
10
+ constructor(stateArg, causeArg) {
11
+ super(phaseMessages[stateArg.phase], {
12
+ cause: causeArg,
13
+ });
14
+ this.name = 'ExactPathPurgeError';
15
+ this.state = stateArg;
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5leGFjdHBhdGhwdXJnZWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmV4YWN0cGF0aHB1cmdlZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxhQUFhLEdBQWdEO0lBQ2pFLFVBQVUsRUFBRSxzREFBc0Q7SUFDbEUsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxXQUFXLEVBQUUsK0NBQStDO0lBQzVELE1BQU0sRUFBRSw2Q0FBNkM7SUFDckQsWUFBWSxFQUFFLDZDQUE2QztDQUM1RCxDQUFDO0FBRUYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDNUIsS0FBSyxDQUE4QjtJQUVuRCxZQUFZLFFBQXFDLEVBQUUsUUFBaUI7UUFDbEUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,5 @@
1
+ import type { IExactUploadFailureState } from './interfaces.js';
2
+ export declare class ExactUploadError extends Error {
3
+ readonly state: IExactUploadFailureState;
4
+ constructor(stateArg: IExactUploadFailureState, causeArg: unknown);
5
+ }
@@ -0,0 +1,19 @@
1
+ const phaseMessages = {
2
+ capability: 'The exact upload capability is invalid or stale.',
3
+ source: 'The exact upload source could not be consumed.',
4
+ 'put-zero': 'The conditional zero-byte object upload failed.',
5
+ 'create-multipart': 'The multipart upload could not be created.',
6
+ 'upload-part': 'A multipart upload part failed.',
7
+ 'complete-multipart': 'The conditional multipart completion failed.',
8
+ };
9
+ export class ExactUploadError extends Error {
10
+ state;
11
+ constructor(stateArg, causeArg) {
12
+ super(phaseMessages[stateArg.phase], {
13
+ cause: causeArg,
14
+ });
15
+ this.name = 'ExactUploadError';
16
+ this.state = stateArg;
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5leGFjdHVwbG9hZGVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmV4YWN0dXBsb2FkZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxhQUFhLEdBQTZDO0lBQzlELFVBQVUsRUFBRSxrREFBa0Q7SUFDOUQsTUFBTSxFQUFFLGdEQUFnRDtJQUN4RCxVQUFVLEVBQUUsaURBQWlEO0lBQzdELGtCQUFrQixFQUFFLDRDQUE0QztJQUNoRSxhQUFhLEVBQUUsaUNBQWlDO0lBQ2hELG9CQUFvQixFQUFFLDhDQUE4QztDQUNyRSxDQUFDO0FBRUYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLEtBQUs7SUFDekIsS0FBSyxDQUEyQjtJQUVoRCxZQUFZLFFBQWtDLEVBQUUsUUFBaUI7UUFDL0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,91 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as interfaces from './interfaces.js';
3
+ import { Directory } from './classes.directory.js';
4
+ import { MetaData } from './classes.metadata.js';
5
+ /**
6
+ * represents a file in a directory
7
+ */
8
+ export declare class File {
9
+ /**
10
+ * creates a file in draft mode
11
+ * you need to call .save() to store it in object storage
12
+ * @param optionsArg
13
+ */
14
+ static create(optionsArg: {
15
+ directory: Directory;
16
+ name: string;
17
+ contents: Buffer | string | plugins.stream.Readable;
18
+ /**
19
+ * if contents are of type string, you can specify the encoding here
20
+ */
21
+ encoding?: 'utf8' | 'binary';
22
+ }): Promise<File>;
23
+ parentDirectoryRef: Directory;
24
+ name: string;
25
+ /**
26
+ * get the full path to the file
27
+ * @returns the full path to the file
28
+ */
29
+ getBasePath(): string;
30
+ constructor(optionsArg: {
31
+ directoryRefArg: Directory;
32
+ fileName: string;
33
+ });
34
+ getContentsAsString(): Promise<string>;
35
+ getContents(): Promise<Buffer>;
36
+ getReadStream(typeArg: 'webstream'): Promise<ReadableStream>;
37
+ getReadStream(typeArg: 'nodestream'): Promise<plugins.stream.Readable>;
38
+ /**
39
+ * deletes this file
40
+ */
41
+ delete(optionsArg?: {
42
+ mode: 'trash' | 'permanent';
43
+ }): Promise<void>;
44
+ /**
45
+ * restores
46
+ */
47
+ restore(optionsArg?: {
48
+ useOriginalPath?: boolean;
49
+ toPath?: string;
50
+ overwrite?: boolean;
51
+ }): Promise<void>;
52
+ /**
53
+ * allows locking the file
54
+ * @param optionsArg
55
+ */
56
+ lock(optionsArg?: {
57
+ timeoutMillis?: number;
58
+ }): Promise<void>;
59
+ /**
60
+ * actively unlocks a file
61
+ *
62
+ */
63
+ unlock(optionsArg?: {
64
+ /**
65
+ * unlock the file even if not locked from this instance
66
+ */
67
+ force?: boolean;
68
+ }): Promise<void>;
69
+ updateWithContents(optionsArg: {
70
+ contents: Buffer | string | plugins.stream.Readable | ReadableStream;
71
+ encoding?: 'utf8' | 'binary';
72
+ }): Promise<void>;
73
+ /**
74
+ * moves the file to another directory
75
+ */
76
+ move(pathDescriptorArg: interfaces.IPathDecriptor): Promise<void>;
77
+ hasMetaData(): Promise<boolean>;
78
+ /**
79
+ * allows updating the metadata of a file
80
+ * @param updatedMetadata
81
+ */
82
+ getMetaData(): Promise<MetaData>;
83
+ /**
84
+ * gets the contents as json
85
+ */
86
+ getJsonData(): Promise<any>;
87
+ writeJsonData(dataArg: any): Promise<void>;
88
+ getMagicBytes(optionsArg: {
89
+ length: number;
90
+ }): Promise<Buffer>;
91
+ }