@quatrain/storage-s3 1.2.6 → 1.2.8

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.
@@ -118,5 +118,5 @@ export declare class S3StorageAdapter extends AbstractStorageAdapter {
118
118
  * @param bucket - Target bucket name.
119
119
  * @returns A promise resolving to bucket statistics.
120
120
  */
121
- getBucketStats(bucket?: string): Promise<BucketStatsType>;
121
+ getBucketStats(bucket?: string, prefix?: string): Promise<BucketStatsType>;
122
122
  }
@@ -72,7 +72,14 @@ class S3StorageAdapter extends storage_1.AbstractStorageAdapter {
72
72
  return __awaiter(this, void 0, void 0, function* () {
73
73
  return new Promise((resolve, reject) => {
74
74
  const _buf = [];
75
- stream.on('data', (chunk) => _buf.push(chunk));
75
+ stream.on('data', (chunk) => {
76
+ if (typeof chunk === 'string') {
77
+ _buf.push(Buffer.from(chunk, 'utf-8'));
78
+ }
79
+ else {
80
+ _buf.push(Buffer.from(chunk));
81
+ }
82
+ });
76
83
  stream.on('end', () => resolve(Buffer.concat(_buf)));
77
84
  stream.on('error', (err) => reject(err));
78
85
  });
@@ -301,7 +308,7 @@ class S3StorageAdapter extends storage_1.AbstractStorageAdapter {
301
308
  * @param bucket - Target bucket name.
302
309
  * @returns A promise resolving to bucket statistics.
303
310
  */
304
- getBucketStats(bucket) {
311
+ getBucketStats(bucket, prefix) {
305
312
  return __awaiter(this, void 0, void 0, function* () {
306
313
  var _a;
307
314
  const targetBucket = bucket || this._params.config.bucket;
@@ -310,11 +317,13 @@ class S3StorageAdapter extends storage_1.AbstractStorageAdapter {
310
317
  let isTruncated = true;
311
318
  let continuationToken = undefined;
312
319
  const folders = {};
313
- storage_1.Storage.info(`Fetching bucket stats for ${targetBucket}`);
320
+ storage_1.Storage.info(`Fetching bucket stats for ${targetBucket} (prefix: ${prefix || 'none'})`);
321
+ const s3Prefix = prefix ? (prefix.endsWith('/') ? prefix : prefix + '/') : undefined;
314
322
  while (isTruncated) {
315
323
  const input = {
316
324
  Bucket: targetBucket,
317
325
  ContinuationToken: continuationToken,
326
+ Prefix: s3Prefix,
318
327
  };
319
328
  const command = new client_s3_1.ListObjectsV2Command(input);
320
329
  const res = yield this._client.send(command);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quatrain/storage-s3",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "description": "Storage adapter for S3 compatible services",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@aws-sdk/client-s3": "^3.337.0",
35
35
  "@aws-sdk/s3-request-presigner": "^3.342.0",
36
- "@quatrain/storage": "^1.2.7",
36
+ "@quatrain/storage": "^1.2.13",
37
37
  "fs-extra": "^11.2.0"
38
38
  },
39
39
  "scripts": {
@@ -87,9 +87,15 @@ export class S3StorageAdapter extends AbstractStorageAdapter {
87
87
  */
88
88
  async streamToBuffer(stream: Stream): Promise<Buffer> {
89
89
  return new Promise<Buffer>((resolve, reject) => {
90
- const _buf: any[] = []
90
+ const _buf: Buffer[] = []
91
91
 
92
- stream.on('data', (chunk) => _buf.push(chunk))
92
+ stream.on('data', (chunk) => {
93
+ if (typeof chunk === 'string') {
94
+ _buf.push(Buffer.from(chunk, 'utf-8'))
95
+ } else {
96
+ _buf.push(Buffer.from(chunk))
97
+ }
98
+ })
93
99
  stream.on('end', () => resolve(Buffer.concat(_buf)))
94
100
  stream.on('error', (err) => reject(err))
95
101
  })
@@ -343,7 +349,7 @@ export class S3StorageAdapter extends AbstractStorageAdapter {
343
349
  * @param bucket - Target bucket name.
344
350
  * @returns A promise resolving to bucket statistics.
345
351
  */
346
- async getBucketStats(bucket?: string): Promise<BucketStatsType> {
352
+ async getBucketStats(bucket?: string, prefix?: string): Promise<BucketStatsType> {
347
353
  const targetBucket = bucket || this._params.config.bucket
348
354
  let totalObjects = 0
349
355
  let totalSize = 0
@@ -351,12 +357,15 @@ export class S3StorageAdapter extends AbstractStorageAdapter {
351
357
  let continuationToken: string | undefined = undefined
352
358
  const folders: Record<string, any> = {}
353
359
 
354
- Storage.info(`Fetching bucket stats for ${targetBucket}`)
360
+ Storage.info(`Fetching bucket stats for ${targetBucket} (prefix: ${prefix || 'none'})`)
361
+
362
+ const s3Prefix = prefix ? (prefix.endsWith('/') ? prefix : prefix + '/') : undefined
355
363
 
356
364
  while (isTruncated) {
357
365
  const input: ListObjectsV2CommandInput = {
358
366
  Bucket: targetBucket,
359
367
  ContinuationToken: continuationToken,
368
+ Prefix: s3Prefix,
360
369
  }
361
370
  const command = new ListObjectsV2Command(input)
362
371
  const res: ListObjectsV2CommandOutput = await this._client.send(command)