@aws-amplify/storage
Version:
Storage category of aws-amplify
80 lines (78 loc) • 3.14 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.list = void 0;
const utils_1 = require("@aws-amplify/core/internals/utils");
const utils_2 = require("../../utils");
const client_1 = require("../../utils/client");
const userAgent_1 = require("../../utils/userAgent");
const utils_3 = require("../../../../utils");
const MAX_PAGE_SIZE = 1000;
const list = async (amplify, input) => {
const { options = {}, prefix: path = '' } = input ?? {};
const { s3Config, bucket, keyPrefix: prefix, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, options);
// @ts-expect-error pageSize and nextToken should not coexist with listAll
if (options?.listAll && (options?.pageSize || options?.nextToken)) {
const anyOptions = options;
utils_3.logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);
}
const listParams = {
Bucket: bucket,
Prefix: `${prefix}${path}`,
MaxKeys: options?.listAll ? undefined : options?.pageSize,
ContinuationToken: options?.listAll ? undefined : options?.nextToken,
};
utils_3.logger.debug(`listing items from "${listParams.Prefix}"`);
return options.listAll
? await _listAll({ s3Config, listParams, prefix })
: await _list({ s3Config, listParams, prefix });
};
exports.list = list;
const _listAll = async ({ s3Config, listParams, prefix, }) => {
const listResult = [];
let continuationToken = listParams.ContinuationToken;
do {
const { items: pageResults, nextToken: pageNextToken } = await _list({
prefix,
s3Config,
listParams: {
...listParams,
ContinuationToken: continuationToken,
MaxKeys: MAX_PAGE_SIZE,
},
});
listResult.push(...pageResults);
continuationToken = pageNextToken;
} while (continuationToken);
return {
items: listResult,
};
};
const _list = async ({ s3Config, listParams, prefix, }) => {
const listParamsClone = { ...listParams };
if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {
utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);
listParamsClone.MaxKeys = MAX_PAGE_SIZE;
}
const response = await (0, client_1.listObjectsV2)({
...s3Config,
userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),
}, listParamsClone);
if (!response?.Contents) {
return {
items: [],
};
}
const listResult = response.Contents.map(item => ({
key: item.Key.substring(prefix.length),
eTag: item.ETag,
lastModified: item.LastModified,
size: item.Size,
}));
return {
items: listResult,
nextToken: response.NextContinuationToken,
};
};
//# sourceMappingURL=list.js.map
;