@aws-amplify/storage 6.4.7 → 6.4.8-unstable.0a07393.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.
- package/dist/cjs/providers/s3/apis/internal/list.js +25 -5
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/utils/constants.js +2 -1
- package/dist/cjs/providers/s3/utils/constants.js.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs +26 -6
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/constants.d.ts +1 -0
- package/dist/esm/providers/s3/utils/constants.mjs +2 -1
- package/dist/esm/providers/s3/utils/constants.mjs.map +1 -1
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/options.d.ts +50 -0
- package/dist/esm/types/outputs.d.ts +4 -0
- package/package.json +107 -107
- package/src/providers/s3/apis/internal/list.ts +53 -14
- package/src/providers/s3/utils/constants.ts +2 -0
- package/src/types/index.ts +1 -0
- package/src/types/options.ts +53 -0
- package/src/types/outputs.ts +4 -0
|
@@ -26,6 +26,7 @@ const list = async (amplify, input) => {
|
|
|
26
26
|
Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,
|
|
27
27
|
MaxKeys: options?.listAll ? undefined : options?.pageSize,
|
|
28
28
|
ContinuationToken: options?.listAll ? undefined : options?.nextToken,
|
|
29
|
+
Delimiter: getDelimiter(options.subpathStrategy),
|
|
29
30
|
};
|
|
30
31
|
utils_3.logger.debug(`listing items from "${listParams.Prefix}"`);
|
|
31
32
|
const listInputArgs = {
|
|
@@ -104,9 +105,10 @@ const _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {
|
|
|
104
105
|
};
|
|
105
106
|
const _listAllWithPath = async ({ s3Config, listParams, }) => {
|
|
106
107
|
const listResult = [];
|
|
108
|
+
const excludedSubpaths = [];
|
|
107
109
|
let continuationToken = listParams.ContinuationToken;
|
|
108
110
|
do {
|
|
109
|
-
const { items: pageResults, nextToken: pageNextToken } = await _listWithPath({
|
|
111
|
+
const { items: pageResults, excludedSubpaths: pageExcludedSubpaths, nextToken: pageNextToken, } = await _listWithPath({
|
|
110
112
|
s3Config,
|
|
111
113
|
listParams: {
|
|
112
114
|
...listParams,
|
|
@@ -115,10 +117,12 @@ const _listAllWithPath = async ({ s3Config, listParams, }) => {
|
|
|
115
117
|
},
|
|
116
118
|
});
|
|
117
119
|
listResult.push(...pageResults);
|
|
120
|
+
excludedSubpaths.push(...(pageExcludedSubpaths ?? []));
|
|
118
121
|
continuationToken = pageNextToken;
|
|
119
122
|
} while (continuationToken);
|
|
120
123
|
return {
|
|
121
124
|
items: listResult,
|
|
125
|
+
excludedSubpaths,
|
|
122
126
|
};
|
|
123
127
|
};
|
|
124
128
|
const _listWithPath = async ({ s3Config, listParams, }) => {
|
|
@@ -127,23 +131,39 @@ const _listWithPath = async ({ s3Config, listParams, }) => {
|
|
|
127
131
|
utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);
|
|
128
132
|
listParamsClone.MaxKeys = MAX_PAGE_SIZE;
|
|
129
133
|
}
|
|
130
|
-
const
|
|
134
|
+
const { Contents: contents, NextContinuationToken: nextContinuationToken, CommonPrefixes: commonPrefixes, } = await (0, client_1.listObjectsV2)({
|
|
131
135
|
...s3Config,
|
|
132
136
|
userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),
|
|
133
137
|
}, listParamsClone);
|
|
134
|
-
|
|
138
|
+
const excludedSubpaths = commonPrefixes && mapCommonPrefixesToExcludedSubpaths(commonPrefixes);
|
|
139
|
+
if (!contents) {
|
|
135
140
|
return {
|
|
136
141
|
items: [],
|
|
142
|
+
excludedSubpaths,
|
|
137
143
|
};
|
|
138
144
|
}
|
|
139
145
|
return {
|
|
140
|
-
items:
|
|
146
|
+
items: contents.map(item => ({
|
|
141
147
|
path: item.Key,
|
|
142
148
|
eTag: item.ETag,
|
|
143
149
|
lastModified: item.LastModified,
|
|
144
150
|
size: item.Size,
|
|
145
151
|
})),
|
|
146
|
-
nextToken:
|
|
152
|
+
nextToken: nextContinuationToken,
|
|
153
|
+
excludedSubpaths,
|
|
147
154
|
};
|
|
148
155
|
};
|
|
156
|
+
const mapCommonPrefixesToExcludedSubpaths = (commonPrefixes) => {
|
|
157
|
+
return commonPrefixes.reduce((mappedSubpaths, { Prefix }) => {
|
|
158
|
+
if (Prefix) {
|
|
159
|
+
mappedSubpaths.push(Prefix);
|
|
160
|
+
}
|
|
161
|
+
return mappedSubpaths;
|
|
162
|
+
}, []);
|
|
163
|
+
};
|
|
164
|
+
const getDelimiter = (subpathStrategy) => {
|
|
165
|
+
if (subpathStrategy?.strategy === 'exclude') {
|
|
166
|
+
return subpathStrategy?.delimiter ?? constants_1.DEFAULT_DELIMITER;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
149
169
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.list = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../utils\");\nconst client_1 = require(\"../../utils/client\");\nconst userAgent_1 = require(\"../../utils/userAgent\");\nconst utils_3 = require(\"../../../../utils\");\nconst constants_1 = require(\"../../utils/constants\");\nconst MAX_PAGE_SIZE = 1000;\nconst list = async (amplify, input) => {\n const { options = {} } = input;\n const { s3Config, bucket, keyPrefix: generatedPrefix, identityId, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, options);\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInputWithPrefix)(input, identityId);\n const isInputWithPrefix = inputType === constants_1.STORAGE_INPUT_PREFIX;\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n utils_3.logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n };\n utils_3.logger.debug(`listing items from \"${listParams.Prefix}\"`);\n const listInputArgs = {\n s3Config,\n listParams,\n };\n if (options.listAll) {\n if (isInputWithPrefix) {\n return _listAllWithPrefix({\n ...listInputArgs,\n generatedPrefix,\n });\n }\n else {\n return _listAllWithPath(listInputArgs);\n }\n }\n else {\n if (isInputWithPrefix) {\n return _listWithPrefix({ ...listInputArgs, generatedPrefix });\n }\n else {\n return _listWithPath(listInputArgs);\n }\n }\n};\nexports.list = list;\n/** @deprecated Use {@link _listAllWithPath} instead. */\nconst _listAllWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPrefix({\n generatedPrefix,\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\n/** @deprecated Use {@link _listWithPath} instead. */\nconst _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await (0, client_1.listObjectsV2)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n key: generatedPrefix\n ? item.Key.substring(generatedPrefix.length)\n : item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\nconst _listAllWithPath = async ({ s3Config, listParams, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPath({\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\nconst _listWithPath = async ({ s3Config, listParams, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await (0, client_1.listObjectsV2)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n path: item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list.js","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.list = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../utils\");\nconst client_1 = require(\"../../utils/client\");\nconst userAgent_1 = require(\"../../utils/userAgent\");\nconst utils_3 = require(\"../../../../utils\");\nconst constants_1 = require(\"../../utils/constants\");\nconst MAX_PAGE_SIZE = 1000;\nconst list = async (amplify, input) => {\n const { options = {} } = input;\n const { s3Config, bucket, keyPrefix: generatedPrefix, identityId, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, options);\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInputWithPrefix)(input, identityId);\n const isInputWithPrefix = inputType === constants_1.STORAGE_INPUT_PREFIX;\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n utils_3.logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n Delimiter: getDelimiter(options.subpathStrategy),\n };\n utils_3.logger.debug(`listing items from \"${listParams.Prefix}\"`);\n const listInputArgs = {\n s3Config,\n listParams,\n };\n if (options.listAll) {\n if (isInputWithPrefix) {\n return _listAllWithPrefix({\n ...listInputArgs,\n generatedPrefix,\n });\n }\n else {\n return _listAllWithPath(listInputArgs);\n }\n }\n else {\n if (isInputWithPrefix) {\n return _listWithPrefix({ ...listInputArgs, generatedPrefix });\n }\n else {\n return _listWithPath(listInputArgs);\n }\n }\n};\nexports.list = list;\n/** @deprecated Use {@link _listAllWithPath} instead. */\nconst _listAllWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPrefix({\n generatedPrefix,\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\n/** @deprecated Use {@link _listWithPath} instead. */\nconst _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await (0, client_1.listObjectsV2)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n key: generatedPrefix\n ? item.Key.substring(generatedPrefix.length)\n : item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\nconst _listAllWithPath = async ({ s3Config, listParams, }) => {\n const listResult = [];\n const excludedSubpaths = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, excludedSubpaths: pageExcludedSubpaths, nextToken: pageNextToken, } = await _listWithPath({\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n excludedSubpaths.push(...(pageExcludedSubpaths ?? []));\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n excludedSubpaths,\n };\n};\nconst _listWithPath = async ({ s3Config, listParams, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n utils_3.logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const { Contents: contents, NextContinuationToken: nextContinuationToken, CommonPrefixes: commonPrefixes, } = await (0, client_1.listObjectsV2)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.List),\n }, listParamsClone);\n const excludedSubpaths = commonPrefixes && mapCommonPrefixesToExcludedSubpaths(commonPrefixes);\n if (!contents) {\n return {\n items: [],\n excludedSubpaths,\n };\n }\n return {\n items: contents.map(item => ({\n path: item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: nextContinuationToken,\n excludedSubpaths,\n };\n};\nconst mapCommonPrefixesToExcludedSubpaths = (commonPrefixes) => {\n return commonPrefixes.reduce((mappedSubpaths, { Prefix }) => {\n if (Prefix) {\n mappedSubpaths.push(Prefix);\n }\n return mappedSubpaths;\n }, []);\n};\nconst getDelimiter = (subpathStrategy) => {\n if (subpathStrategy?.strategy === 'exclude') {\n return subpathStrategy?.delimiter ?? constants_1.DEFAULT_DELIMITER;\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.STORAGE_INPUT_PATH = exports.STORAGE_INPUT_KEY = exports.STORAGE_INPUT_PREFIX = exports.UPLOADS_STORAGE_KEY = exports.DEFAULT_QUEUE_SIZE = exports.MAX_PARTS_COUNT = exports.MAX_OBJECT_SIZE = exports.DEFAULT_PART_SIZE = exports.MAX_URL_EXPIRATION = exports.DEFAULT_PRESIGN_EXPIRATION = exports.DEFAULT_ACCESS_LEVEL = exports.LOCAL_TESTING_S3_ENDPOINT = void 0;
|
|
6
|
+
exports.DEFAULT_DELIMITER = exports.STORAGE_INPUT_PATH = exports.STORAGE_INPUT_KEY = exports.STORAGE_INPUT_PREFIX = exports.UPLOADS_STORAGE_KEY = exports.DEFAULT_QUEUE_SIZE = exports.MAX_PARTS_COUNT = exports.MAX_OBJECT_SIZE = exports.DEFAULT_PART_SIZE = exports.MAX_URL_EXPIRATION = exports.DEFAULT_PRESIGN_EXPIRATION = exports.DEFAULT_ACCESS_LEVEL = exports.LOCAL_TESTING_S3_ENDPOINT = void 0;
|
|
7
7
|
exports.LOCAL_TESTING_S3_ENDPOINT = 'http://localhost:20005';
|
|
8
8
|
exports.DEFAULT_ACCESS_LEVEL = 'guest';
|
|
9
9
|
exports.DEFAULT_PRESIGN_EXPIRATION = 900;
|
|
@@ -19,4 +19,5 @@ exports.UPLOADS_STORAGE_KEY = '__uploadInProgress';
|
|
|
19
19
|
exports.STORAGE_INPUT_PREFIX = 'prefix';
|
|
20
20
|
exports.STORAGE_INPUT_KEY = 'key';
|
|
21
21
|
exports.STORAGE_INPUT_PATH = 'path';
|
|
22
|
+
exports.DEFAULT_DELIMITER = '/';
|
|
22
23
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../src/providers/s3/utils/constants.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.STORAGE_INPUT_PATH = exports.STORAGE_INPUT_KEY = exports.STORAGE_INPUT_PREFIX = exports.UPLOADS_STORAGE_KEY = exports.DEFAULT_QUEUE_SIZE = exports.MAX_PARTS_COUNT = exports.MAX_OBJECT_SIZE = exports.DEFAULT_PART_SIZE = exports.MAX_URL_EXPIRATION = exports.DEFAULT_PRESIGN_EXPIRATION = exports.DEFAULT_ACCESS_LEVEL = exports.LOCAL_TESTING_S3_ENDPOINT = void 0;\nexports.LOCAL_TESTING_S3_ENDPOINT = 'http://localhost:20005';\nexports.DEFAULT_ACCESS_LEVEL = 'guest';\nexports.DEFAULT_PRESIGN_EXPIRATION = 900;\nexports.MAX_URL_EXPIRATION = 7 * 24 * 60 * 60 * 1000;\nconst MiB = 1024 * 1024;\nconst GiB = 1024 * MiB;\nconst TiB = 1024 * GiB;\nexports.DEFAULT_PART_SIZE = 5 * MiB;\nexports.MAX_OBJECT_SIZE = 5 * TiB;\nexports.MAX_PARTS_COUNT = 10000;\nexports.DEFAULT_QUEUE_SIZE = 4;\nexports.UPLOADS_STORAGE_KEY = '__uploadInProgress';\nexports.STORAGE_INPUT_PREFIX = 'prefix';\nexports.STORAGE_INPUT_KEY = 'key';\nexports.STORAGE_INPUT_PATH = 'path';\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../src/providers/s3/utils/constants.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_DELIMITER = exports.STORAGE_INPUT_PATH = exports.STORAGE_INPUT_KEY = exports.STORAGE_INPUT_PREFIX = exports.UPLOADS_STORAGE_KEY = exports.DEFAULT_QUEUE_SIZE = exports.MAX_PARTS_COUNT = exports.MAX_OBJECT_SIZE = exports.DEFAULT_PART_SIZE = exports.MAX_URL_EXPIRATION = exports.DEFAULT_PRESIGN_EXPIRATION = exports.DEFAULT_ACCESS_LEVEL = exports.LOCAL_TESTING_S3_ENDPOINT = void 0;\nexports.LOCAL_TESTING_S3_ENDPOINT = 'http://localhost:20005';\nexports.DEFAULT_ACCESS_LEVEL = 'guest';\nexports.DEFAULT_PRESIGN_EXPIRATION = 900;\nexports.MAX_URL_EXPIRATION = 7 * 24 * 60 * 60 * 1000;\nconst MiB = 1024 * 1024;\nconst GiB = 1024 * MiB;\nconst TiB = 1024 * GiB;\nexports.DEFAULT_PART_SIZE = 5 * MiB;\nexports.MAX_OBJECT_SIZE = 5 * TiB;\nexports.MAX_PARTS_COUNT = 10000;\nexports.DEFAULT_QUEUE_SIZE = 4;\nexports.UPLOADS_STORAGE_KEY = '__uploadInProgress';\nexports.STORAGE_INPUT_PREFIX = 'prefix';\nexports.STORAGE_INPUT_KEY = 'key';\nexports.STORAGE_INPUT_PATH = 'path';\nexports.DEFAULT_DELIMITER = '/';\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;AAC3Y,OAAO,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;AAC7D,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC;AACvC,OAAO,CAAC,0BAA0B,GAAG,GAAG,CAAC;AACzC,OAAO,CAAC,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrD,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACvB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACvB,OAAO,CAAC,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC;AACpC,OAAO,CAAC,eAAe,GAAG,CAAC,GAAG,GAAG,CAAC;AAClC,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;AAChC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC/B,OAAO,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;AACnD,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC;AACxC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAClC,OAAO,CAAC,kBAAkB,GAAG,MAAM,CAAC;AACpC,OAAO,CAAC,iBAAiB,GAAG,GAAG;;"}
|
|
@@ -8,7 +8,7 @@ import 'buffer';
|
|
|
8
8
|
import { resolveS3ConfigAndInput } from '../../utils/resolveS3ConfigAndInput.mjs';
|
|
9
9
|
import '../../../../errors/types/validation.mjs';
|
|
10
10
|
import { logger } from '../../../../utils/logger.mjs';
|
|
11
|
-
import { STORAGE_INPUT_PREFIX } from '../../utils/constants.mjs';
|
|
11
|
+
import { DEFAULT_DELIMITER, STORAGE_INPUT_PREFIX } from '../../utils/constants.mjs';
|
|
12
12
|
import { validateStorageOperationInputWithPrefix } from '../../utils/validateStorageOperationInputWithPrefix.mjs';
|
|
13
13
|
import '../../utils/client/base.mjs';
|
|
14
14
|
import '../../utils/client/getObject.mjs';
|
|
@@ -42,6 +42,7 @@ const list = async (amplify, input) => {
|
|
|
42
42
|
Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,
|
|
43
43
|
MaxKeys: options?.listAll ? undefined : options?.pageSize,
|
|
44
44
|
ContinuationToken: options?.listAll ? undefined : options?.nextToken,
|
|
45
|
+
Delimiter: getDelimiter(options.subpathStrategy),
|
|
45
46
|
};
|
|
46
47
|
logger.debug(`listing items from "${listParams.Prefix}"`);
|
|
47
48
|
const listInputArgs = {
|
|
@@ -119,9 +120,10 @@ const _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {
|
|
|
119
120
|
};
|
|
120
121
|
const _listAllWithPath = async ({ s3Config, listParams, }) => {
|
|
121
122
|
const listResult = [];
|
|
123
|
+
const excludedSubpaths = [];
|
|
122
124
|
let continuationToken = listParams.ContinuationToken;
|
|
123
125
|
do {
|
|
124
|
-
const { items: pageResults, nextToken: pageNextToken } = await _listWithPath({
|
|
126
|
+
const { items: pageResults, excludedSubpaths: pageExcludedSubpaths, nextToken: pageNextToken, } = await _listWithPath({
|
|
125
127
|
s3Config,
|
|
126
128
|
listParams: {
|
|
127
129
|
...listParams,
|
|
@@ -130,10 +132,12 @@ const _listAllWithPath = async ({ s3Config, listParams, }) => {
|
|
|
130
132
|
},
|
|
131
133
|
});
|
|
132
134
|
listResult.push(...pageResults);
|
|
135
|
+
excludedSubpaths.push(...(pageExcludedSubpaths ?? []));
|
|
133
136
|
continuationToken = pageNextToken;
|
|
134
137
|
} while (continuationToken);
|
|
135
138
|
return {
|
|
136
139
|
items: listResult,
|
|
140
|
+
excludedSubpaths,
|
|
137
141
|
};
|
|
138
142
|
};
|
|
139
143
|
const _listWithPath = async ({ s3Config, listParams, }) => {
|
|
@@ -142,25 +146,41 @@ const _listWithPath = async ({ s3Config, listParams, }) => {
|
|
|
142
146
|
logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);
|
|
143
147
|
listParamsClone.MaxKeys = MAX_PAGE_SIZE;
|
|
144
148
|
}
|
|
145
|
-
const
|
|
149
|
+
const { Contents: contents, NextContinuationToken: nextContinuationToken, CommonPrefixes: commonPrefixes, } = await listObjectsV2({
|
|
146
150
|
...s3Config,
|
|
147
151
|
userAgentValue: getStorageUserAgentValue(StorageAction.List),
|
|
148
152
|
}, listParamsClone);
|
|
149
|
-
|
|
153
|
+
const excludedSubpaths = commonPrefixes && mapCommonPrefixesToExcludedSubpaths(commonPrefixes);
|
|
154
|
+
if (!contents) {
|
|
150
155
|
return {
|
|
151
156
|
items: [],
|
|
157
|
+
excludedSubpaths,
|
|
152
158
|
};
|
|
153
159
|
}
|
|
154
160
|
return {
|
|
155
|
-
items:
|
|
161
|
+
items: contents.map(item => ({
|
|
156
162
|
path: item.Key,
|
|
157
163
|
eTag: item.ETag,
|
|
158
164
|
lastModified: item.LastModified,
|
|
159
165
|
size: item.Size,
|
|
160
166
|
})),
|
|
161
|
-
nextToken:
|
|
167
|
+
nextToken: nextContinuationToken,
|
|
168
|
+
excludedSubpaths,
|
|
162
169
|
};
|
|
163
170
|
};
|
|
171
|
+
const mapCommonPrefixesToExcludedSubpaths = (commonPrefixes) => {
|
|
172
|
+
return commonPrefixes.reduce((mappedSubpaths, { Prefix }) => {
|
|
173
|
+
if (Prefix) {
|
|
174
|
+
mappedSubpaths.push(Prefix);
|
|
175
|
+
}
|
|
176
|
+
return mappedSubpaths;
|
|
177
|
+
}, []);
|
|
178
|
+
};
|
|
179
|
+
const getDelimiter = (subpathStrategy) => {
|
|
180
|
+
if (subpathStrategy?.strategy === 'exclude') {
|
|
181
|
+
return subpathStrategy?.delimiter ?? DEFAULT_DELIMITER;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
164
184
|
|
|
165
185
|
export { list };
|
|
166
186
|
//# sourceMappingURL=list.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.mjs","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput, validateStorageOperationInputWithPrefix, } from '../../utils';\nimport { listObjectsV2, } from '../../utils/client';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nimport { STORAGE_INPUT_PREFIX } from '../../utils/constants';\nconst MAX_PAGE_SIZE = 1000;\nexport const list = async (amplify, input) => {\n const { options = {} } = input;\n const { s3Config, bucket, keyPrefix: generatedPrefix, identityId, } = await resolveS3ConfigAndInput(amplify, options);\n const { inputType, objectKey } = validateStorageOperationInputWithPrefix(input, identityId);\n const isInputWithPrefix = inputType === STORAGE_INPUT_PREFIX;\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n };\n logger.debug(`listing items from \"${listParams.Prefix}\"`);\n const listInputArgs = {\n s3Config,\n listParams,\n };\n if (options.listAll) {\n if (isInputWithPrefix) {\n return _listAllWithPrefix({\n ...listInputArgs,\n generatedPrefix,\n });\n }\n else {\n return _listAllWithPath(listInputArgs);\n }\n }\n else {\n if (isInputWithPrefix) {\n return _listWithPrefix({ ...listInputArgs, generatedPrefix });\n }\n else {\n return _listWithPath(listInputArgs);\n }\n }\n};\n/** @deprecated Use {@link _listAllWithPath} instead. */\nconst _listAllWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPrefix({\n generatedPrefix,\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\n/** @deprecated Use {@link _listWithPath} instead. */\nconst _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await listObjectsV2({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n key: generatedPrefix\n ? item.Key.substring(generatedPrefix.length)\n : item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\nconst _listAllWithPath = async ({ s3Config, listParams, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPath({\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\nconst _listWithPath = async ({ s3Config, listParams, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await listObjectsV2({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n path: item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list.mjs","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput, validateStorageOperationInputWithPrefix, } from '../../utils';\nimport { listObjectsV2, } from '../../utils/client';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nimport { DEFAULT_DELIMITER, STORAGE_INPUT_PREFIX } from '../../utils/constants';\nconst MAX_PAGE_SIZE = 1000;\nexport const list = async (amplify, input) => {\n const { options = {} } = input;\n const { s3Config, bucket, keyPrefix: generatedPrefix, identityId, } = await resolveS3ConfigAndInput(amplify, options);\n const { inputType, objectKey } = validateStorageOperationInputWithPrefix(input, identityId);\n const isInputWithPrefix = inputType === STORAGE_INPUT_PREFIX;\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n Delimiter: getDelimiter(options.subpathStrategy),\n };\n logger.debug(`listing items from \"${listParams.Prefix}\"`);\n const listInputArgs = {\n s3Config,\n listParams,\n };\n if (options.listAll) {\n if (isInputWithPrefix) {\n return _listAllWithPrefix({\n ...listInputArgs,\n generatedPrefix,\n });\n }\n else {\n return _listAllWithPath(listInputArgs);\n }\n }\n else {\n if (isInputWithPrefix) {\n return _listWithPrefix({ ...listInputArgs, generatedPrefix });\n }\n else {\n return _listWithPath(listInputArgs);\n }\n }\n};\n/** @deprecated Use {@link _listAllWithPath} instead. */\nconst _listAllWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _listWithPrefix({\n generatedPrefix,\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\n/** @deprecated Use {@link _listWithPath} instead. */\nconst _listWithPrefix = async ({ s3Config, listParams, generatedPrefix, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await listObjectsV2({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n return {\n items: response.Contents.map(item => ({\n key: generatedPrefix\n ? item.Key.substring(generatedPrefix.length)\n : item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: response.NextContinuationToken,\n };\n};\nconst _listAllWithPath = async ({ s3Config, listParams, }) => {\n const listResult = [];\n const excludedSubpaths = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, excludedSubpaths: pageExcludedSubpaths, nextToken: pageNextToken, } = await _listWithPath({\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n excludedSubpaths.push(...(pageExcludedSubpaths ?? []));\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n excludedSubpaths,\n };\n};\nconst _listWithPath = async ({ s3Config, listParams, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const { Contents: contents, NextContinuationToken: nextContinuationToken, CommonPrefixes: commonPrefixes, } = await listObjectsV2({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.List),\n }, listParamsClone);\n const excludedSubpaths = commonPrefixes && mapCommonPrefixesToExcludedSubpaths(commonPrefixes);\n if (!contents) {\n return {\n items: [],\n excludedSubpaths,\n };\n }\n return {\n items: contents.map(item => ({\n path: item.Key,\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n })),\n nextToken: nextContinuationToken,\n excludedSubpaths,\n };\n};\nconst mapCommonPrefixesToExcludedSubpaths = (commonPrefixes) => {\n return commonPrefixes.reduce((mappedSubpaths, { Prefix }) => {\n if (Prefix) {\n mappedSubpaths.push(Prefix);\n }\n return mappedSubpaths;\n }, []);\n};\nconst getDelimiter = (subpathStrategy) => {\n if (subpathStrategy?.strategy === 'exclude') {\n return subpathStrategy?.delimiter ?? DEFAULT_DELIMITER;\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -10,3 +10,4 @@ export declare const UPLOADS_STORAGE_KEY = "__uploadInProgress";
|
|
|
10
10
|
export declare const STORAGE_INPUT_PREFIX = "prefix";
|
|
11
11
|
export declare const STORAGE_INPUT_KEY = "key";
|
|
12
12
|
export declare const STORAGE_INPUT_PATH = "path";
|
|
13
|
+
export declare const DEFAULT_DELIMITER = "/";
|
|
@@ -15,6 +15,7 @@ const UPLOADS_STORAGE_KEY = '__uploadInProgress';
|
|
|
15
15
|
const STORAGE_INPUT_PREFIX = 'prefix';
|
|
16
16
|
const STORAGE_INPUT_KEY = 'key';
|
|
17
17
|
const STORAGE_INPUT_PATH = 'path';
|
|
18
|
+
const DEFAULT_DELIMITER = '/';
|
|
18
19
|
|
|
19
|
-
export { DEFAULT_ACCESS_LEVEL, DEFAULT_PART_SIZE, DEFAULT_PRESIGN_EXPIRATION, DEFAULT_QUEUE_SIZE, LOCAL_TESTING_S3_ENDPOINT, MAX_OBJECT_SIZE, MAX_PARTS_COUNT, MAX_URL_EXPIRATION, STORAGE_INPUT_KEY, STORAGE_INPUT_PATH, STORAGE_INPUT_PREFIX, UPLOADS_STORAGE_KEY };
|
|
20
|
+
export { DEFAULT_ACCESS_LEVEL, DEFAULT_DELIMITER, DEFAULT_PART_SIZE, DEFAULT_PRESIGN_EXPIRATION, DEFAULT_QUEUE_SIZE, LOCAL_TESTING_S3_ENDPOINT, MAX_OBJECT_SIZE, MAX_PARTS_COUNT, MAX_URL_EXPIRATION, STORAGE_INPUT_KEY, STORAGE_INPUT_PATH, STORAGE_INPUT_PREFIX, UPLOADS_STORAGE_KEY };
|
|
20
21
|
//# sourceMappingURL=constants.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sources":["../../../../../src/providers/s3/utils/constants.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport const LOCAL_TESTING_S3_ENDPOINT = 'http://localhost:20005';\nexport const DEFAULT_ACCESS_LEVEL = 'guest';\nexport const DEFAULT_PRESIGN_EXPIRATION = 900;\nexport const MAX_URL_EXPIRATION = 7 * 24 * 60 * 60 * 1000;\nconst MiB = 1024 * 1024;\nconst GiB = 1024 * MiB;\nconst TiB = 1024 * GiB;\nexport const DEFAULT_PART_SIZE = 5 * MiB;\nexport const MAX_OBJECT_SIZE = 5 * TiB;\nexport const MAX_PARTS_COUNT = 10000;\nexport const DEFAULT_QUEUE_SIZE = 4;\nexport const UPLOADS_STORAGE_KEY = '__uploadInProgress';\nexport const STORAGE_INPUT_PREFIX = 'prefix';\nexport const STORAGE_INPUT_KEY = 'key';\nexport const STORAGE_INPUT_PATH = 'path';\n"],"names":[],"mappings":"AAAA;AACA;AACY,MAAC,yBAAyB,GAAG,yBAAyB;AACtD,MAAC,oBAAoB,GAAG,QAAQ;AAChC,MAAC,0BAA0B,GAAG,IAAI;AAClC,MAAC,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;AAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACvB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACX,MAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI;AAC7B,MAAC,eAAe,GAAG,CAAC,GAAG,IAAI;AAC3B,MAAC,eAAe,GAAG,MAAM;AACzB,MAAC,kBAAkB,GAAG,EAAE;AACxB,MAAC,mBAAmB,GAAG,qBAAqB;AAC5C,MAAC,oBAAoB,GAAG,SAAS;AACjC,MAAC,iBAAiB,GAAG,MAAM;AAC3B,MAAC,kBAAkB,GAAG;;;;"}
|
|
1
|
+
{"version":3,"file":"constants.mjs","sources":["../../../../../src/providers/s3/utils/constants.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport const LOCAL_TESTING_S3_ENDPOINT = 'http://localhost:20005';\nexport const DEFAULT_ACCESS_LEVEL = 'guest';\nexport const DEFAULT_PRESIGN_EXPIRATION = 900;\nexport const MAX_URL_EXPIRATION = 7 * 24 * 60 * 60 * 1000;\nconst MiB = 1024 * 1024;\nconst GiB = 1024 * MiB;\nconst TiB = 1024 * GiB;\nexport const DEFAULT_PART_SIZE = 5 * MiB;\nexport const MAX_OBJECT_SIZE = 5 * TiB;\nexport const MAX_PARTS_COUNT = 10000;\nexport const DEFAULT_QUEUE_SIZE = 4;\nexport const UPLOADS_STORAGE_KEY = '__uploadInProgress';\nexport const STORAGE_INPUT_PREFIX = 'prefix';\nexport const STORAGE_INPUT_KEY = 'key';\nexport const STORAGE_INPUT_PATH = 'path';\nexport const DEFAULT_DELIMITER = '/';\n"],"names":[],"mappings":"AAAA;AACA;AACY,MAAC,yBAAyB,GAAG,yBAAyB;AACtD,MAAC,oBAAoB,GAAG,QAAQ;AAChC,MAAC,0BAA0B,GAAG,IAAI;AAClC,MAAC,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;AAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACvB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACX,MAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI;AAC7B,MAAC,eAAe,GAAG,CAAC,GAAG,IAAI;AAC3B,MAAC,eAAe,GAAG,MAAM;AACzB,MAAC,kBAAkB,GAAG,EAAE;AACxB,MAAC,mBAAmB,GAAG,qBAAqB;AAC5C,MAAC,oBAAoB,GAAG,SAAS;AACjC,MAAC,iBAAiB,GAAG,MAAM;AAC3B,MAAC,kBAAkB,GAAG,OAAO;AAC7B,MAAC,iBAAiB,GAAG;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { DownloadTask, TransferProgressEvent, TransferTaskState, UploadTask, } from './common';
|
|
2
2
|
export { StorageGetPropertiesInputWithKey, StorageGetPropertiesInputWithPath, StorageListInputWithPrefix, StorageListInputWithPath, StorageRemoveInputWithPath, StorageRemoveInputWithKey, StorageDownloadDataInputWithKey, StorageDownloadDataInputWithPath, StorageUploadDataInputWithKey, StorageUploadDataInputWithPath, StorageCopyInputWithKey, StorageCopyInputWithPath, StorageGetUrlInputWithKey, StorageGetUrlInputWithPath, StorageUploadDataPayload, } from './inputs';
|
|
3
|
-
export { StorageOptions, StorageRemoveOptions, StorageListAllOptions, StorageListPaginateOptions, } from './options';
|
|
3
|
+
export { StorageOptions, StorageRemoveOptions, StorageListAllOptions, StorageListPaginateOptions, StorageSubpathStrategy, } from './options';
|
|
4
4
|
export { StorageItem, StorageItemWithKey, StorageItemWithPath, StorageListOutput, StorageDownloadDataOutput, StorageGetUrlOutput, StorageUploadOutput, } from './outputs';
|
|
@@ -5,10 +5,60 @@ export interface StorageOptions {
|
|
|
5
5
|
}
|
|
6
6
|
export type StorageListAllOptions = StorageOptions & {
|
|
7
7
|
listAll: true;
|
|
8
|
+
subpathStrategy?: StorageSubpathStrategy;
|
|
8
9
|
};
|
|
9
10
|
export type StorageListPaginateOptions = StorageOptions & {
|
|
10
11
|
listAll?: false;
|
|
11
12
|
pageSize?: number;
|
|
12
13
|
nextToken?: string;
|
|
14
|
+
subpathStrategy?: StorageSubpathStrategy;
|
|
13
15
|
};
|
|
14
16
|
export type StorageRemoveOptions = StorageOptions;
|
|
17
|
+
export type StorageSubpathStrategy = {
|
|
18
|
+
/**
|
|
19
|
+
* Default behavior. Includes all subpaths for a given page in the result.
|
|
20
|
+
*/
|
|
21
|
+
strategy: 'include';
|
|
22
|
+
} | {
|
|
23
|
+
/**
|
|
24
|
+
* When passed, the output of the list API will provide a list of `excludedSubpaths`
|
|
25
|
+
* that are delimited by the `/` (by default) character.
|
|
26
|
+
*
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const { excludedSubpaths } = await list({
|
|
31
|
+
* path: 'photos/',
|
|
32
|
+
* options: {
|
|
33
|
+
* subpathStrategy: {
|
|
34
|
+
* strategy: 'exclude',
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* console.log(excludedSubpaths);
|
|
40
|
+
*
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
strategy: 'exclude';
|
|
44
|
+
/**
|
|
45
|
+
* Deliminate with with a custom delimiter character.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const { excludedSubpaths } = await list({
|
|
50
|
+
* path: 'photos/',
|
|
51
|
+
* options: {
|
|
52
|
+
* subpathStrategy: {
|
|
53
|
+
* strategy: 'exclude',
|
|
54
|
+
* delimiter: '-'
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* console.log(excludedSubpaths);
|
|
60
|
+
*
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
delimiter?: string;
|
|
64
|
+
};
|
|
@@ -59,4 +59,8 @@ export interface StorageListOutput<Item extends StorageItem> {
|
|
|
59
59
|
* List of items returned by the list API.
|
|
60
60
|
*/
|
|
61
61
|
items: Item[];
|
|
62
|
+
/**
|
|
63
|
+
* List of excluded subpaths when `exclude` is passed as part of the `subpathStrategy` of the input options.
|
|
64
|
+
*/
|
|
65
|
+
excludedSubpaths?: string[];
|
|
62
66
|
}
|
package/package.json
CHANGED
|
@@ -1,109 +1,109 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
2
|
+
"name": "@aws-amplify/storage",
|
|
3
|
+
"version": "6.4.8-unstable.0a07393.0+0a07393",
|
|
4
|
+
"description": "Storage category of aws-amplify",
|
|
5
|
+
"main": "./dist/cjs/index.js",
|
|
6
|
+
"module": "./dist/esm/index.mjs",
|
|
7
|
+
"react-native": {
|
|
8
|
+
"./dist/cjs/index": "./src/index.ts",
|
|
9
|
+
"fast-xml-parser": "fast-xml-parser",
|
|
10
|
+
"buffer": "buffer"
|
|
11
|
+
},
|
|
12
|
+
"typings": "./dist/esm/index.d.ts",
|
|
13
|
+
"browser": {
|
|
14
|
+
"./dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs": "./dist/esm/providers/s3/utils/client/runtime/base64/index.browser.mjs",
|
|
15
|
+
"./dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs": "./dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs",
|
|
16
|
+
"./dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs": "./dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs",
|
|
17
|
+
"fast-xml-parser": false,
|
|
18
|
+
"buffer": false
|
|
19
|
+
},
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "npm run lint && jest -w 1 --coverage --logHeapUsage",
|
|
26
|
+
"build-with-test": "npm test && npm run build",
|
|
27
|
+
"build:umd": "webpack && webpack --config ./webpack.config.dev.js",
|
|
28
|
+
"build:esm-cjs": "rollup --forceExit -c rollup.config.mjs",
|
|
29
|
+
"build:watch": "npm run build:esm-cjs -- --watch",
|
|
30
|
+
"build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
|
|
31
|
+
"clean": "npm run clean:size && rimraf lib-esm lib dist",
|
|
32
|
+
"clean:size": "rimraf dual-publish-tmp tmp*",
|
|
33
|
+
"format": "echo \"Not implemented\"",
|
|
34
|
+
"lint": "eslint '**/*.{ts,tsx}' && npm run ts-coverage",
|
|
35
|
+
"lint:fix": "eslint '**/*.{ts,tsx}' --fix",
|
|
36
|
+
"ts-coverage": "typescript-coverage-report -p ./tsconfig.build.json -t 90.31"
|
|
37
|
+
},
|
|
38
|
+
"typesVersions": {
|
|
39
|
+
">=4.2": {
|
|
40
|
+
"s3": [
|
|
41
|
+
"./dist/esm/providers/s3/index.d.ts"
|
|
42
|
+
],
|
|
43
|
+
"server": [
|
|
44
|
+
"./dist/esm/server.d.ts"
|
|
45
|
+
],
|
|
46
|
+
"s3/server": [
|
|
47
|
+
"./dist/esm/providers/s3/server.d.ts"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "https://github.com/aws-amplify/amplify-js.git"
|
|
54
|
+
},
|
|
55
|
+
"author": "Amazon Web Services",
|
|
56
|
+
"license": "Apache-2.0",
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/aws/aws-amplify/issues"
|
|
59
|
+
},
|
|
60
|
+
"homepage": "https://aws-amplify.github.io/",
|
|
61
|
+
"files": [
|
|
62
|
+
"dist/cjs",
|
|
63
|
+
"dist/esm",
|
|
64
|
+
"src",
|
|
65
|
+
"server",
|
|
66
|
+
"s3"
|
|
67
|
+
],
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"@aws-sdk/types": "3.398.0",
|
|
70
|
+
"@smithy/md5-js": "2.0.7",
|
|
71
|
+
"buffer": "4.9.2",
|
|
72
|
+
"fast-xml-parser": "^4.2.5",
|
|
73
|
+
"tslib": "^2.5.0"
|
|
74
|
+
},
|
|
75
|
+
"exports": {
|
|
76
|
+
".": {
|
|
77
|
+
"types": "./dist/esm/index.d.ts",
|
|
78
|
+
"import": "./dist/esm/index.mjs",
|
|
79
|
+
"require": "./dist/cjs/index.js",
|
|
80
|
+
"react-native": "./src/index.ts"
|
|
81
|
+
},
|
|
82
|
+
"./server": {
|
|
83
|
+
"types": "./dist/esm/server.d.ts",
|
|
84
|
+
"import": "./dist/esm/server.mjs",
|
|
85
|
+
"require": "./dist/cjs/server.js"
|
|
86
|
+
},
|
|
87
|
+
"./s3": {
|
|
88
|
+
"types": "./dist/esm/providers/s3/index.d.ts",
|
|
89
|
+
"import": "./dist/esm/providers/s3/index.mjs",
|
|
90
|
+
"require": "./dist/cjs/providers/s3/index.js",
|
|
91
|
+
"react-native": "./src/providers/s3/index.ts"
|
|
92
|
+
},
|
|
93
|
+
"./s3/server": {
|
|
94
|
+
"types": "./dist/esm/providers/s3/server.d.ts",
|
|
95
|
+
"import": "./dist/esm/providers/s3/server.mjs",
|
|
96
|
+
"require": "./dist/cjs/providers/s3/server.js"
|
|
97
|
+
},
|
|
98
|
+
"./package.json": "./package.json"
|
|
99
|
+
},
|
|
100
|
+
"peerDependencies": {
|
|
101
|
+
"@aws-amplify/core": "6.3.4-unstable.0a07393.0+0a07393"
|
|
102
|
+
},
|
|
103
|
+
"devDependencies": {
|
|
104
|
+
"@aws-amplify/core": "6.3.4-unstable.0a07393.0+0a07393",
|
|
105
|
+
"@aws-amplify/react-native": "1.1.2-unstable.0a07393.0+0a07393",
|
|
106
|
+
"typescript": "5.0.2"
|
|
107
|
+
},
|
|
108
|
+
"gitHead": "0a07393dad8d6e37b19e03cfb6394b0664b061c9"
|
|
109
109
|
}
|
|
@@ -28,7 +28,9 @@ import {
|
|
|
28
28
|
} from '../../utils/client';
|
|
29
29
|
import { getStorageUserAgentValue } from '../../utils/userAgent';
|
|
30
30
|
import { logger } from '../../../../utils';
|
|
31
|
-
import { STORAGE_INPUT_PREFIX } from '../../utils/constants';
|
|
31
|
+
import { DEFAULT_DELIMITER, STORAGE_INPUT_PREFIX } from '../../utils/constants';
|
|
32
|
+
import { CommonPrefix } from '../../utils/client/types';
|
|
33
|
+
import { StorageSubpathStrategy } from '../../../../types';
|
|
32
34
|
|
|
33
35
|
const MAX_PAGE_SIZE = 1000;
|
|
34
36
|
|
|
@@ -79,6 +81,7 @@ export const list = async (
|
|
|
79
81
|
Prefix: isInputWithPrefix ? `${generatedPrefix}${objectKey}` : objectKey,
|
|
80
82
|
MaxKeys: options?.listAll ? undefined : options?.pageSize,
|
|
81
83
|
ContinuationToken: options?.listAll ? undefined : options?.nextToken,
|
|
84
|
+
Delimiter: getDelimiter(options.subpathStrategy),
|
|
82
85
|
};
|
|
83
86
|
logger.debug(`listing items from "${listParams.Prefix}"`);
|
|
84
87
|
|
|
@@ -86,6 +89,7 @@ export const list = async (
|
|
|
86
89
|
s3Config,
|
|
87
90
|
listParams,
|
|
88
91
|
};
|
|
92
|
+
|
|
89
93
|
if (options.listAll) {
|
|
90
94
|
if (isInputWithPrefix) {
|
|
91
95
|
return _listAllWithPrefix({
|
|
@@ -176,23 +180,29 @@ const _listAllWithPath = async ({
|
|
|
176
180
|
listParams,
|
|
177
181
|
}: ListInputArgs): Promise<ListAllWithPathOutput> => {
|
|
178
182
|
const listResult: ListOutputItemWithPath[] = [];
|
|
183
|
+
const excludedSubpaths: string[] = [];
|
|
179
184
|
let continuationToken = listParams.ContinuationToken;
|
|
180
185
|
do {
|
|
181
|
-
const {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
const {
|
|
187
|
+
items: pageResults,
|
|
188
|
+
excludedSubpaths: pageExcludedSubpaths,
|
|
189
|
+
nextToken: pageNextToken,
|
|
190
|
+
} = await _listWithPath({
|
|
191
|
+
s3Config,
|
|
192
|
+
listParams: {
|
|
193
|
+
...listParams,
|
|
194
|
+
ContinuationToken: continuationToken,
|
|
195
|
+
MaxKeys: MAX_PAGE_SIZE,
|
|
196
|
+
},
|
|
197
|
+
});
|
|
190
198
|
listResult.push(...pageResults);
|
|
199
|
+
excludedSubpaths.push(...(pageExcludedSubpaths ?? []));
|
|
191
200
|
continuationToken = pageNextToken;
|
|
192
201
|
} while (continuationToken);
|
|
193
202
|
|
|
194
203
|
return {
|
|
195
204
|
items: listResult,
|
|
205
|
+
excludedSubpaths,
|
|
196
206
|
};
|
|
197
207
|
};
|
|
198
208
|
|
|
@@ -206,7 +216,11 @@ const _listWithPath = async ({
|
|
|
206
216
|
listParamsClone.MaxKeys = MAX_PAGE_SIZE;
|
|
207
217
|
}
|
|
208
218
|
|
|
209
|
-
const
|
|
219
|
+
const {
|
|
220
|
+
Contents: contents,
|
|
221
|
+
NextContinuationToken: nextContinuationToken,
|
|
222
|
+
CommonPrefixes: commonPrefixes,
|
|
223
|
+
}: ListObjectsV2Output = await listObjectsV2(
|
|
210
224
|
{
|
|
211
225
|
...s3Config,
|
|
212
226
|
userAgentValue: getStorageUserAgentValue(StorageAction.List),
|
|
@@ -214,19 +228,44 @@ const _listWithPath = async ({
|
|
|
214
228
|
listParamsClone,
|
|
215
229
|
);
|
|
216
230
|
|
|
217
|
-
|
|
231
|
+
const excludedSubpaths =
|
|
232
|
+
commonPrefixes && mapCommonPrefixesToExcludedSubpaths(commonPrefixes);
|
|
233
|
+
|
|
234
|
+
if (!contents) {
|
|
218
235
|
return {
|
|
219
236
|
items: [],
|
|
237
|
+
excludedSubpaths,
|
|
220
238
|
};
|
|
221
239
|
}
|
|
222
240
|
|
|
223
241
|
return {
|
|
224
|
-
items:
|
|
242
|
+
items: contents.map(item => ({
|
|
225
243
|
path: item.Key!,
|
|
226
244
|
eTag: item.ETag,
|
|
227
245
|
lastModified: item.LastModified,
|
|
228
246
|
size: item.Size,
|
|
229
247
|
})),
|
|
230
|
-
nextToken:
|
|
248
|
+
nextToken: nextContinuationToken,
|
|
249
|
+
excludedSubpaths,
|
|
231
250
|
};
|
|
232
251
|
};
|
|
252
|
+
|
|
253
|
+
const mapCommonPrefixesToExcludedSubpaths = (
|
|
254
|
+
commonPrefixes: CommonPrefix[],
|
|
255
|
+
): string[] => {
|
|
256
|
+
return commonPrefixes.reduce((mappedSubpaths, { Prefix }) => {
|
|
257
|
+
if (Prefix) {
|
|
258
|
+
mappedSubpaths.push(Prefix);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return mappedSubpaths;
|
|
262
|
+
}, [] as string[]);
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
const getDelimiter = (
|
|
266
|
+
subpathStrategy?: StorageSubpathStrategy,
|
|
267
|
+
): string | undefined => {
|
|
268
|
+
if (subpathStrategy?.strategy === 'exclude') {
|
|
269
|
+
return subpathStrategy?.delimiter ?? DEFAULT_DELIMITER;
|
|
270
|
+
}
|
|
271
|
+
};
|
package/src/types/index.ts
CHANGED
package/src/types/options.ts
CHANGED
|
@@ -10,12 +10,65 @@ export interface StorageOptions {
|
|
|
10
10
|
|
|
11
11
|
export type StorageListAllOptions = StorageOptions & {
|
|
12
12
|
listAll: true;
|
|
13
|
+
subpathStrategy?: StorageSubpathStrategy;
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
export type StorageListPaginateOptions = StorageOptions & {
|
|
16
17
|
listAll?: false;
|
|
17
18
|
pageSize?: number;
|
|
18
19
|
nextToken?: string;
|
|
20
|
+
subpathStrategy?: StorageSubpathStrategy;
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
export type StorageRemoveOptions = StorageOptions;
|
|
24
|
+
|
|
25
|
+
export type StorageSubpathStrategy =
|
|
26
|
+
| {
|
|
27
|
+
/**
|
|
28
|
+
* Default behavior. Includes all subpaths for a given page in the result.
|
|
29
|
+
*/
|
|
30
|
+
strategy: 'include';
|
|
31
|
+
}
|
|
32
|
+
| {
|
|
33
|
+
/**
|
|
34
|
+
* When passed, the output of the list API will provide a list of `excludedSubpaths`
|
|
35
|
+
* that are delimited by the `/` (by default) character.
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const { excludedSubpaths } = await list({
|
|
41
|
+
* path: 'photos/',
|
|
42
|
+
* options: {
|
|
43
|
+
* subpathStrategy: {
|
|
44
|
+
* strategy: 'exclude',
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* console.log(excludedSubpaths);
|
|
50
|
+
*
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
strategy: 'exclude';
|
|
54
|
+
/**
|
|
55
|
+
* Deliminate with with a custom delimiter character.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* const { excludedSubpaths } = await list({
|
|
60
|
+
* path: 'photos/',
|
|
61
|
+
* options: {
|
|
62
|
+
* subpathStrategy: {
|
|
63
|
+
* strategy: 'exclude',
|
|
64
|
+
* delimiter: '-'
|
|
65
|
+
* }
|
|
66
|
+
* }
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* console.log(excludedSubpaths);
|
|
70
|
+
*
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
delimiter?: string;
|
|
74
|
+
};
|
package/src/types/outputs.ts
CHANGED
|
@@ -70,4 +70,8 @@ export interface StorageListOutput<Item extends StorageItem> {
|
|
|
70
70
|
* List of items returned by the list API.
|
|
71
71
|
*/
|
|
72
72
|
items: Item[];
|
|
73
|
+
/**
|
|
74
|
+
* List of excluded subpaths when `exclude` is passed as part of the `subpathStrategy` of the input options.
|
|
75
|
+
*/
|
|
76
|
+
excludedSubpaths?: string[];
|
|
73
77
|
}
|