@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
|
}
|
package/dist/S3StorageAdapter.js
CHANGED
|
@@ -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) =>
|
|
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.
|
|
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.
|
|
36
|
+
"@quatrain/storage": "^1.2.13",
|
|
37
37
|
"fs-extra": "^11.2.0"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
package/src/S3StorageAdapter.ts
CHANGED
|
@@ -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:
|
|
90
|
+
const _buf: Buffer[] = []
|
|
91
91
|
|
|
92
|
-
stream.on('data', (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)
|