@aws-amplify/storage 6.0.28 → 6.0.29-gen2-storage.e54bfa9.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/errors/types/validation.js +22 -2
- package/dist/cjs/errors/types/validation.js.map +1 -1
- package/dist/cjs/providers/s3/apis/copy.js +2 -12
- package/dist/cjs/providers/s3/apis/copy.js.map +1 -1
- package/dist/cjs/providers/s3/apis/downloadData.js +13 -38
- package/dist/cjs/providers/s3/apis/downloadData.js.map +1 -1
- package/dist/cjs/providers/s3/apis/getProperties.js +2 -11
- package/dist/cjs/providers/s3/apis/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/getUrl.js +2 -18
- package/dist/cjs/providers/s3/apis/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/copy.js +41 -7
- package/dist/cjs/providers/s3/apis/internal/copy.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getProperties.js +10 -6
- package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getUrl.js +8 -6
- package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js +86 -16
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/remove.js +20 -7
- package/dist/cjs/providers/s3/apis/internal/remove.js.map +1 -1
- package/dist/cjs/providers/s3/apis/list.js +4 -4
- package/dist/cjs/providers/s3/apis/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/remove.js +2 -9
- package/dist/cjs/providers/s3/apis/remove.js.map +1 -1
- package/dist/cjs/providers/s3/apis/server/copy.js +4 -4
- package/dist/cjs/providers/s3/apis/server/copy.js.map +1 -1
- package/dist/cjs/providers/s3/apis/server/getProperties.js +2 -2
- package/dist/cjs/providers/s3/apis/server/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/server/getUrl.js +2 -2
- package/dist/cjs/providers/s3/apis/server/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/server/list.js +4 -4
- package/dist/cjs/providers/s3/apis/server/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/server/remove.js +2 -2
- package/dist/cjs/providers/s3/apis/server/remove.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/index.js +4 -50
- package/dist/cjs/providers/s3/apis/uploadData/index.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js +8 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +28 -13
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js +10 -5
- package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/constants.js +4 -1
- package/dist/cjs/providers/s3/utils/constants.js.map +1 -1
- package/dist/cjs/providers/s3/utils/index.js +7 -1
- package/dist/cjs/providers/s3/utils/index.js.map +1 -1
- package/dist/cjs/providers/s3/utils/isInputWithPath.js +11 -0
- package/dist/cjs/providers/s3/utils/isInputWithPath.js.map +1 -0
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +2 -1
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
- package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js +31 -0
- package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js.map +1 -0
- package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js +32 -0
- package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js.map +1 -0
- package/dist/esm/errors/types/validation.d.ts +7 -2
- package/dist/esm/errors/types/validation.mjs +22 -2
- package/dist/esm/errors/types/validation.mjs.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/providers/s3/apis/copy.d.ts +22 -9
- package/dist/esm/providers/s3/apis/copy.mjs +2 -12
- package/dist/esm/providers/s3/apis/copy.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/downloadData.d.ts +41 -7
- package/dist/esm/providers/s3/apis/downloadData.mjs +15 -39
- package/dist/esm/providers/s3/apis/downloadData.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/getProperties.d.ts +18 -5
- package/dist/esm/providers/s3/apis/getProperties.mjs +2 -11
- package/dist/esm/providers/s3/apis/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/getUrl.d.ts +27 -7
- package/dist/esm/providers/s3/apis/getUrl.mjs +2 -18
- package/dist/esm/providers/s3/apis/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/copy.d.ts +4 -2
- package/dist/esm/providers/s3/apis/internal/copy.mjs +41 -6
- package/dist/esm/providers/s3/apis/internal/copy.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.d.ts +2 -2
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs +11 -6
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getUrl.d.ts +2 -2
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs +10 -7
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.d.ts +2 -2
- package/dist/esm/providers/s3/apis/internal/list.mjs +87 -16
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/remove.d.ts +2 -2
- package/dist/esm/providers/s3/apis/internal/remove.mjs +21 -7
- package/dist/esm/providers/s3/apis/internal/remove.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/list.d.ts +39 -22
- package/dist/esm/providers/s3/apis/list.mjs +2 -2
- package/dist/esm/providers/s3/apis/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/remove.d.ts +18 -5
- package/dist/esm/providers/s3/apis/remove.mjs +2 -9
- package/dist/esm/providers/s3/apis/remove.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/server/copy.d.ts +27 -2
- package/dist/esm/providers/s3/apis/server/copy.mjs +2 -2
- package/dist/esm/providers/s3/apis/server/copy.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/server/getProperties.d.ts +26 -2
- package/dist/esm/providers/s3/apis/server/getProperties.mjs +2 -2
- package/dist/esm/providers/s3/apis/server/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/server/getUrl.d.ts +40 -2
- package/dist/esm/providers/s3/apis/server/getUrl.mjs +2 -2
- package/dist/esm/providers/s3/apis/server/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/server/list.d.ts +41 -22
- package/dist/esm/providers/s3/apis/server/list.mjs +2 -2
- package/dist/esm/providers/s3/apis/server/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/server/remove.d.ts +24 -2
- package/dist/esm/providers/s3/apis/server/remove.mjs +2 -2
- package/dist/esm/providers/s3/apis/server/remove.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/index.d.ts +64 -7
- package/dist/esm/providers/s3/apis/uploadData/index.mjs +4 -50
- package/dist/esm/providers/s3/apis/uploadData/index.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +2 -2
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs +8 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.d.ts +4 -4
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +30 -14
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/putObjectJob.d.ts +3 -3
- package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs +11 -5
- package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs.map +1 -1
- package/dist/esm/providers/s3/index.d.ts +2 -2
- package/dist/esm/providers/s3/types/index.d.ts +3 -3
- package/dist/esm/providers/s3/types/inputs.d.ts +51 -11
- package/dist/esm/providers/s3/types/options.d.ts +41 -10
- package/dist/esm/providers/s3/types/outputs.d.ts +68 -13
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/constants.d.ts +3 -0
- package/dist/esm/providers/s3/utils/constants.mjs +4 -1
- package/dist/esm/providers/s3/utils/constants.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/index.d.ts +3 -0
- package/dist/esm/providers/s3/utils/index.mjs +3 -0
- package/dist/esm/providers/s3/utils/index.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/isInputWithPath.d.ts +2 -0
- package/dist/esm/providers/s3/utils/isInputWithPath.mjs +8 -0
- package/dist/esm/providers/s3/utils/isInputWithPath.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +2 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +2 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/validateStorageOperationInput.d.ts +5 -0
- package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs +29 -0
- package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.d.ts +5 -0
- package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs +30 -0
- package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs.map +1 -0
- package/dist/esm/types/index.d.ts +2 -2
- package/dist/esm/types/inputs.d.ts +41 -13
- package/dist/esm/types/options.d.ts +1 -0
- package/dist/esm/types/outputs.d.ts +26 -6
- package/package.json +107 -107
- package/src/errors/types/validation.ts +23 -2
- package/src/index.ts +16 -0
- package/src/providers/s3/apis/copy.ts +30 -11
- package/src/providers/s3/apis/downloadData.ts +78 -19
- package/src/providers/s3/apis/getProperties.ts +31 -8
- package/src/providers/s3/apis/getUrl.ts +37 -10
- package/src/providers/s3/apis/internal/copy.ts +89 -8
- package/src/providers/s3/apis/internal/getProperties.ts +27 -12
- package/src/providers/s3/apis/internal/getUrl.ts +28 -14
- package/src/providers/s3/apis/internal/list.ts +135 -29
- package/src/providers/s3/apis/internal/remove.ts +36 -13
- package/src/providers/s3/apis/list.ts +54 -26
- package/src/providers/s3/apis/remove.ts +28 -7
- package/src/providers/s3/apis/server/copy.ts +42 -5
- package/src/providers/s3/apis/server/getProperties.ts +41 -4
- package/src/providers/s3/apis/server/getUrl.ts +55 -4
- package/src/providers/s3/apis/server/list.ts +64 -32
- package/src/providers/s3/apis/server/remove.ts +39 -4
- package/src/providers/s3/apis/uploadData/index.ts +77 -8
- package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +4 -3
- package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +11 -2
- package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +50 -20
- package/src/providers/s3/apis/uploadData/putObjectJob.ts +23 -9
- package/src/providers/s3/index.ts +16 -0
- package/src/providers/s3/types/index.ts +37 -14
- package/src/providers/s3/types/inputs.ts +95 -26
- package/src/providers/s3/types/options.ts +73 -27
- package/src/providers/s3/types/outputs.ts +80 -13
- package/src/providers/s3/utils/client/utils/parsePayload.ts +1 -1
- package/src/providers/s3/utils/constants.ts +4 -0
- package/src/providers/s3/utils/index.ts +3 -0
- package/src/providers/s3/utils/isInputWithPath.ts +13 -0
- package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +3 -2
- package/src/providers/s3/utils/validateStorageOperationInput.ts +39 -0
- package/src/providers/s3/utils/validateStorageOperationInputWithPrefix.ts +46 -0
- package/src/types/index.ts +16 -8
- package/src/types/inputs.ts +73 -20
- package/src/types/options.ts +1 -0
- package/src/types/outputs.ts +29 -6
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
3
|
import {
|
|
5
4
|
AmplifyServer,
|
|
6
5
|
getAmplifyServerContext,
|
|
@@ -9,45 +8,78 @@ import {
|
|
|
9
8
|
import {
|
|
10
9
|
ListAllInput,
|
|
11
10
|
ListAllOutput,
|
|
11
|
+
ListAllWithPathInput,
|
|
12
|
+
ListAllWithPathOutput,
|
|
12
13
|
ListPaginateInput,
|
|
13
14
|
ListPaginateOutput,
|
|
14
|
-
|
|
15
|
+
ListPaginateWithPathInput,
|
|
16
|
+
ListPaginateWithPathOutput,
|
|
15
17
|
} from '../../types';
|
|
16
18
|
import { list as listInternal } from '../internal/list';
|
|
17
|
-
import { StorageValidationErrorCode } from '../../../../errors/types/validation';
|
|
18
19
|
|
|
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
|
-
|
|
20
|
+
/**
|
|
21
|
+
* List files in pages with the given `path`.
|
|
22
|
+
* `pageSize` is defaulted to 1000. Additionally, the result will include a `nextToken` if there are more items to retrieve.
|
|
23
|
+
* @param input - The `ListPaginateWithPathInput` object.
|
|
24
|
+
* @param contextSpec - The context spec used to get the Amplify server context.
|
|
25
|
+
* @returns A list of objects with path and metadata
|
|
26
|
+
* @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
|
|
27
|
+
* @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
|
|
28
|
+
*/
|
|
29
|
+
export function list(
|
|
30
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
31
|
+
input: ListPaginateWithPathInput,
|
|
32
|
+
): Promise<ListPaginateWithPathOutput>;
|
|
33
|
+
/**
|
|
34
|
+
* List all files from S3 for a given `path`. You can set `listAll` to true in `options` to get all the files from S3.
|
|
35
|
+
* @param input - The `ListAllWithPathInput` object.
|
|
36
|
+
* @param contextSpec - The context spec used to get the Amplify server context.
|
|
37
|
+
* @returns A list of all objects with path and metadata
|
|
38
|
+
* @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
|
|
39
|
+
* @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
|
|
40
|
+
*/
|
|
41
|
+
export function list(
|
|
42
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
43
|
+
input: ListAllWithPathInput,
|
|
44
|
+
): Promise<ListAllWithPathOutput>;
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated The `prefix` and `accessLevel` parameters are deprecated and may be removed in the next major version.
|
|
47
|
+
* Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/list | path} instead.
|
|
48
|
+
* List files in pages with the given `prefix`.
|
|
49
|
+
* `pageSize` is defaulted to 1000. Additionally, the result will include a `nextToken` if there are more items to retrieve.
|
|
50
|
+
* @param input - The `ListPaginateInput` object.
|
|
51
|
+
* @returns A list of objects with key and metadata
|
|
52
|
+
* @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
|
|
53
|
+
* @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
|
|
54
|
+
*/
|
|
55
|
+
export function list(
|
|
56
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
57
|
+
input?: ListPaginateInput,
|
|
58
|
+
): Promise<ListPaginateOutput>;
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated The `prefix` and `accessLevel` parameters are deprecated and may be removed in the next major version.
|
|
61
|
+
* Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/list | path} instead.
|
|
62
|
+
* List all files from S3 for a given `prefix`. You can set `listAll` to true in `options` to get all the files from S3.
|
|
63
|
+
* @param input - The `ListAllInput` object.
|
|
64
|
+
* @returns A list of all objects with key and metadata
|
|
65
|
+
* @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
|
|
66
|
+
* @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
|
|
67
|
+
*/
|
|
68
|
+
export function list(
|
|
69
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
70
|
+
input?: ListAllInput,
|
|
71
|
+
): Promise<ListAllOutput>;
|
|
44
72
|
|
|
45
|
-
export
|
|
73
|
+
export function list(
|
|
46
74
|
contextSpec: AmplifyServer.ContextSpec,
|
|
47
|
-
input?:
|
|
48
|
-
|
|
75
|
+
input?:
|
|
76
|
+
| ListAllInput
|
|
77
|
+
| ListPaginateInput
|
|
78
|
+
| ListAllWithPathInput
|
|
79
|
+
| ListPaginateWithPathInput,
|
|
80
|
+
) {
|
|
49
81
|
return listInternal(
|
|
50
82
|
getAmplifyServerContext(contextSpec).amplify,
|
|
51
83
|
input ?? {},
|
|
52
84
|
);
|
|
53
|
-
}
|
|
85
|
+
}
|
|
@@ -6,12 +6,47 @@ import {
|
|
|
6
6
|
getAmplifyServerContext,
|
|
7
7
|
} from '@aws-amplify/core/internals/adapter-core';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
RemoveInput,
|
|
11
|
+
RemoveOutput,
|
|
12
|
+
RemoveWithPathInput,
|
|
13
|
+
RemoveWithPathOutput,
|
|
14
|
+
} from '../../types';
|
|
10
15
|
import { remove as removeInternal } from '../internal/remove';
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Remove a file from your S3 bucket.
|
|
19
|
+
* @param input - The `RemoveWithPathInput` object.
|
|
20
|
+
* @param contextSpec - The context spec used to get the Amplify server context.
|
|
21
|
+
* @return Output containing the removed object path.
|
|
22
|
+
* @throws service: `S3Exception` - S3 service errors thrown while while removing the object.
|
|
23
|
+
* @throws validation: `StorageValidationErrorCode` - Validation errors thrown
|
|
24
|
+
* when there is no path or path is empty or path has a leading slash.
|
|
25
|
+
*/
|
|
26
|
+
export function remove(
|
|
27
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
28
|
+
input: RemoveWithPathInput,
|
|
29
|
+
): Promise<RemoveWithPathOutput>;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated The `key` and `accessLevel` parameters are deprecated and may be removed in the next major version.
|
|
32
|
+
* Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/remove | path} instead.
|
|
33
|
+
*
|
|
34
|
+
* Remove a file from your S3 bucket.
|
|
35
|
+
* @param input - The `RemoveInput` object.
|
|
36
|
+
* @param contextSpec - The context spec used to get the Amplify server context.
|
|
37
|
+
* @return Output containing the removed object key
|
|
38
|
+
* @throws service: `S3Exception` - S3 service errors thrown while while removing the object
|
|
39
|
+
* @throws validation: `StorageValidationErrorCode` - Validation errors thrown
|
|
40
|
+
* when there is no key or its empty.
|
|
41
|
+
*/
|
|
42
|
+
export function remove(
|
|
13
43
|
contextSpec: AmplifyServer.ContextSpec,
|
|
14
44
|
input: RemoveInput,
|
|
15
|
-
): Promise<RemoveOutput
|
|
45
|
+
): Promise<RemoveOutput>;
|
|
46
|
+
|
|
47
|
+
export function remove(
|
|
48
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
49
|
+
input: RemoveInput | RemoveWithPathInput,
|
|
50
|
+
) {
|
|
16
51
|
return removeInternal(getAmplifyServerContext(contextSpec).amplify, input);
|
|
17
|
-
}
|
|
52
|
+
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
UploadDataInput,
|
|
6
|
+
UploadDataOutput,
|
|
7
|
+
UploadDataWithPathInput,
|
|
8
|
+
UploadDataWithPathOutput,
|
|
9
|
+
} from '../../types';
|
|
5
10
|
import { createUploadTask } from '../../utils';
|
|
6
11
|
import { assertValidationError } from '../../../../errors/utils/assertValidationError';
|
|
7
12
|
import { StorageValidationErrorCode } from '../../../../errors/types/validation';
|
|
@@ -12,18 +17,77 @@ import { putObjectJob } from './putObjectJob';
|
|
|
12
17
|
import { getMultipartUploadHandlers } from './multipart';
|
|
13
18
|
|
|
14
19
|
/**
|
|
15
|
-
* Upload data to specified S3 object. By default
|
|
16
|
-
* Otherwise,
|
|
20
|
+
* Upload data to the specified S3 object path. By default uses single PUT operation to upload if the payload is less than 5MB.
|
|
21
|
+
* Otherwise, uses multipart upload to upload the payload. If the payload length cannot be determined, uses multipart upload.
|
|
17
22
|
*
|
|
18
23
|
* Limitations:
|
|
19
24
|
* * Maximum object size is 5TB.
|
|
20
25
|
* * Maximum object size if the size cannot be determined before upload is 50GB.
|
|
21
26
|
*
|
|
22
|
-
* @
|
|
27
|
+
* @throws Service: `S3Exception` thrown when checking for existence of the object.
|
|
28
|
+
* @throws Validation: `StorageValidationErrorCode` thrown when a validation error occurs.
|
|
29
|
+
*
|
|
30
|
+
* @param input - A `UploadDataWithPathInput` object.
|
|
31
|
+
*
|
|
23
32
|
* @returns A cancelable and resumable task exposing result promise from `result`
|
|
24
33
|
* property.
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* // Upload a file to s3 bucket
|
|
38
|
+
* await uploadData({ path, data: file, options: {
|
|
39
|
+
* onProgress, // Optional progress callback.
|
|
40
|
+
* } }).result;
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* // Cancel a task
|
|
46
|
+
* const uploadTask = uploadData({ path, data: file });
|
|
47
|
+
* //...
|
|
48
|
+
* uploadTask.cancel();
|
|
49
|
+
* try {
|
|
50
|
+
* await uploadTask.result;
|
|
51
|
+
* } catch (error) {
|
|
52
|
+
* if(isCancelError(error)) {
|
|
53
|
+
* // Handle error thrown by task cancelation.
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
*```
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* // Pause and resume a task
|
|
61
|
+
* const uploadTask = uploadData({ path, data: file });
|
|
62
|
+
* //...
|
|
63
|
+
* uploadTask.pause();
|
|
64
|
+
* //...
|
|
65
|
+
* uploadTask.resume();
|
|
66
|
+
* //...
|
|
67
|
+
* await uploadTask.result;
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function uploadData(
|
|
71
|
+
input: UploadDataWithPathInput,
|
|
72
|
+
): UploadDataWithPathOutput;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Upload data to the specified S3 object key. By default uses single PUT operation to upload if the payload is less than 5MB.
|
|
76
|
+
* Otherwise, uses multipart upload to upload the payload. If the payload length cannot be determined, uses multipart upload.
|
|
77
|
+
*
|
|
78
|
+
* Limitations:
|
|
79
|
+
* * Maximum object size is 5TB.
|
|
80
|
+
* * Maximum object size if the size cannot be determined before upload is 50GB.
|
|
81
|
+
*
|
|
82
|
+
* @deprecated The `key` and `accessLevel` parameters are deprecated and will be removed in next major version.
|
|
83
|
+
* Please use {@link https://docs.amplify.aws/javascript/build-a-backend/storage/upload/#uploaddata | path} instead.
|
|
84
|
+
*
|
|
85
|
+
* @throws Service: `S3Exception` thrown when checking for existence of the object.
|
|
86
|
+
* @throws Validation: `StorageValidationErrorCode` thrown when a validation error occurs.
|
|
87
|
+
*
|
|
88
|
+
* @param input - A `UploadDataInput` object.
|
|
89
|
+
*
|
|
90
|
+
* @returns A cancelable and resumable task exposing result promise from the `result` property.
|
|
27
91
|
*
|
|
28
92
|
* @example
|
|
29
93
|
* ```ts
|
|
@@ -32,6 +96,7 @@ import { getMultipartUploadHandlers } from './multipart';
|
|
|
32
96
|
* onProgress, // Optional progress callback.
|
|
33
97
|
* } }).result;
|
|
34
98
|
* ```
|
|
99
|
+
*
|
|
35
100
|
* @example
|
|
36
101
|
* ```ts
|
|
37
102
|
* // Cancel a task
|
|
@@ -59,7 +124,9 @@ import { getMultipartUploadHandlers } from './multipart';
|
|
|
59
124
|
* await uploadTask.result;
|
|
60
125
|
* ```
|
|
61
126
|
*/
|
|
62
|
-
export
|
|
127
|
+
export function uploadData(input: UploadDataInput): UploadDataOutput;
|
|
128
|
+
|
|
129
|
+
export function uploadData(input: UploadDataInput | UploadDataWithPathInput) {
|
|
63
130
|
const { data } = input;
|
|
64
131
|
|
|
65
132
|
const dataByteLength = byteLength(data);
|
|
@@ -69,6 +136,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
|
|
|
69
136
|
);
|
|
70
137
|
|
|
71
138
|
if (dataByteLength && dataByteLength <= DEFAULT_PART_SIZE) {
|
|
139
|
+
// Single part upload
|
|
72
140
|
const abortController = new AbortController();
|
|
73
141
|
|
|
74
142
|
return createUploadTask({
|
|
@@ -79,6 +147,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
|
|
|
79
147
|
},
|
|
80
148
|
});
|
|
81
149
|
} else {
|
|
150
|
+
// Multipart upload
|
|
82
151
|
const { multipartUploadJob, onPause, onResume, onCancel } =
|
|
83
152
|
getMultipartUploadHandlers(input, dataByteLength);
|
|
84
153
|
|
|
@@ -92,4 +161,4 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
|
|
|
92
161
|
onResume,
|
|
93
162
|
});
|
|
94
163
|
}
|
|
95
|
-
}
|
|
164
|
+
}
|
|
@@ -18,8 +18,8 @@ interface LoadOrCreateMultipartUploadOptions {
|
|
|
18
18
|
s3Config: ResolvedS3Config;
|
|
19
19
|
data: StorageUploadDataPayload;
|
|
20
20
|
bucket: string;
|
|
21
|
-
accessLevel
|
|
22
|
-
keyPrefix
|
|
21
|
+
accessLevel?: StorageAccessLevel;
|
|
22
|
+
keyPrefix?: string;
|
|
23
23
|
key: string;
|
|
24
24
|
contentType?: string;
|
|
25
25
|
contentDisposition?: string;
|
|
@@ -54,7 +54,7 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
54
54
|
metadata,
|
|
55
55
|
abortSignal,
|
|
56
56
|
}: LoadOrCreateMultipartUploadOptions): Promise<LoadOrCreateMultipartUploadResult> => {
|
|
57
|
-
const finalKey = keyPrefix + key;
|
|
57
|
+
const finalKey = keyPrefix !== undefined ? keyPrefix + key : key;
|
|
58
58
|
|
|
59
59
|
let cachedUpload:
|
|
60
60
|
| {
|
|
@@ -75,6 +75,7 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
75
75
|
accessLevel,
|
|
76
76
|
key,
|
|
77
77
|
});
|
|
78
|
+
|
|
78
79
|
const cachedUploadParts = await findCachedUploadParts({
|
|
79
80
|
s3Config,
|
|
80
81
|
cacheKey: uploadCacheKey,
|
|
@@ -94,7 +94,7 @@ interface UploadsCacheKeyOptions {
|
|
|
94
94
|
size: number;
|
|
95
95
|
contentType?: string;
|
|
96
96
|
bucket: string;
|
|
97
|
-
accessLevel
|
|
97
|
+
accessLevel?: StorageAccessLevel;
|
|
98
98
|
key: string;
|
|
99
99
|
file?: File;
|
|
100
100
|
}
|
|
@@ -112,10 +112,19 @@ export const getUploadsCacheKey = ({
|
|
|
112
112
|
accessLevel,
|
|
113
113
|
key,
|
|
114
114
|
}: UploadsCacheKeyOptions) => {
|
|
115
|
+
let levelStr;
|
|
115
116
|
const resolvedContentType =
|
|
116
117
|
contentType ?? file?.type ?? 'application/octet-stream';
|
|
117
|
-
|
|
118
|
+
|
|
119
|
+
// If no access level is defined, we're using custom gen2 access rules
|
|
120
|
+
if (accessLevel === undefined) {
|
|
121
|
+
levelStr = 'custom';
|
|
122
|
+
} else {
|
|
123
|
+
levelStr = accessLevel === 'guest' ? 'public' : accessLevel;
|
|
124
|
+
}
|
|
125
|
+
|
|
118
126
|
const baseId = `${size}_${resolvedContentType}_${bucket}_${levelStr}_${key}`;
|
|
127
|
+
|
|
119
128
|
if (file) {
|
|
120
129
|
return `${file.name}_${file.lastModified}_${baseId}`;
|
|
121
130
|
} else {
|
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
import { Amplify, StorageAccessLevel } from '@aws-amplify/core';
|
|
5
5
|
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
6
6
|
|
|
7
|
-
import { UploadDataInput } from '../../../types';
|
|
8
|
-
import {
|
|
9
|
-
|
|
7
|
+
import { UploadDataInput, UploadDataWithPathInput } from '../../../types';
|
|
8
|
+
import {
|
|
9
|
+
resolveS3ConfigAndInput,
|
|
10
|
+
validateStorageOperationInput,
|
|
11
|
+
} from '../../../utils';
|
|
12
|
+
import { ItemWithKey, ItemWithPath } from '../../../types/outputs';
|
|
10
13
|
import {
|
|
11
14
|
DEFAULT_ACCESS_LEVEL,
|
|
12
15
|
DEFAULT_QUEUE_SIZE,
|
|
16
|
+
STORAGE_INPUT_KEY,
|
|
13
17
|
} from '../../../utils/constants';
|
|
14
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
ResolvedS3Config,
|
|
20
|
+
UploadDataOptionsWithKey,
|
|
21
|
+
} from '../../../types/options';
|
|
15
22
|
import { StorageError } from '../../../../../errors/StorageError';
|
|
16
23
|
import { CanceledError } from '../../../../../errors/CanceledError';
|
|
17
24
|
import {
|
|
@@ -36,10 +43,12 @@ import { getDataChunker } from './getDataChunker';
|
|
|
36
43
|
* @internal
|
|
37
44
|
*/
|
|
38
45
|
export const getMultipartUploadHandlers = (
|
|
39
|
-
|
|
46
|
+
uploadDataInput: UploadDataInput | UploadDataWithPathInput,
|
|
40
47
|
size?: number,
|
|
41
48
|
) => {
|
|
42
|
-
let resolveCallback:
|
|
49
|
+
let resolveCallback:
|
|
50
|
+
| ((value: ItemWithKey | ItemWithPath) => void)
|
|
51
|
+
| undefined;
|
|
43
52
|
let rejectCallback: ((reason?: any) => void) | undefined;
|
|
44
53
|
let inProgressUpload:
|
|
45
54
|
| {
|
|
@@ -49,43 +58,62 @@ export const getMultipartUploadHandlers = (
|
|
|
49
58
|
| undefined;
|
|
50
59
|
let resolvedS3Config: ResolvedS3Config | undefined;
|
|
51
60
|
let abortController: AbortController | undefined;
|
|
61
|
+
let resolvedAccessLevel: StorageAccessLevel | undefined;
|
|
52
62
|
let resolvedBucket: string | undefined;
|
|
53
63
|
let resolvedKeyPrefix: string | undefined;
|
|
64
|
+
let resolvedIdentityId: string | undefined;
|
|
54
65
|
let uploadCacheKey: string | undefined;
|
|
66
|
+
let finalKey: string;
|
|
55
67
|
// Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().
|
|
56
68
|
// The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.
|
|
57
69
|
// This should be replaced by a special abort reason. However,the support of this API is lagged behind.
|
|
58
70
|
let isAbortSignalFromPause = false;
|
|
59
71
|
|
|
60
|
-
const startUpload = async (): Promise<
|
|
72
|
+
const startUpload = async (): Promise<ItemWithKey | ItemWithPath> => {
|
|
73
|
+
const { options: uploadDataOptions, data } = uploadDataInput;
|
|
61
74
|
const resolvedS3Options = await resolveS3ConfigAndInput(
|
|
62
75
|
Amplify,
|
|
63
76
|
uploadDataOptions,
|
|
64
77
|
);
|
|
65
78
|
|
|
79
|
+
abortController = new AbortController();
|
|
80
|
+
isAbortSignalFromPause = false;
|
|
66
81
|
resolvedS3Config = resolvedS3Options.s3Config;
|
|
67
82
|
resolvedBucket = resolvedS3Options.bucket;
|
|
68
|
-
|
|
83
|
+
resolvedIdentityId = resolvedS3Options.identityId;
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
const { inputType, objectKey } = validateStorageOperationInput(
|
|
86
|
+
uploadDataInput,
|
|
87
|
+
resolvedIdentityId,
|
|
88
|
+
);
|
|
72
89
|
|
|
73
90
|
const {
|
|
74
91
|
contentDisposition,
|
|
75
92
|
contentEncoding,
|
|
76
93
|
contentType = 'application/octet-stream',
|
|
77
94
|
metadata,
|
|
78
|
-
accessLevel,
|
|
79
95
|
onProgress,
|
|
80
96
|
} = uploadDataOptions ?? {};
|
|
81
97
|
|
|
98
|
+
finalKey = objectKey;
|
|
99
|
+
|
|
100
|
+
// Resolve "key" specific options
|
|
101
|
+
if (inputType === STORAGE_INPUT_KEY) {
|
|
102
|
+
const accessLevel = (uploadDataOptions as UploadDataOptionsWithKey)
|
|
103
|
+
?.accessLevel;
|
|
104
|
+
|
|
105
|
+
resolvedKeyPrefix = resolvedS3Options.keyPrefix;
|
|
106
|
+
finalKey = resolvedKeyPrefix + objectKey;
|
|
107
|
+
resolvedAccessLevel = resolveAccessLevel(accessLevel);
|
|
108
|
+
}
|
|
109
|
+
|
|
82
110
|
if (!inProgressUpload) {
|
|
83
111
|
const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
|
|
84
112
|
s3Config: resolvedS3Config,
|
|
85
|
-
accessLevel:
|
|
113
|
+
accessLevel: resolvedAccessLevel,
|
|
86
114
|
bucket: resolvedBucket,
|
|
87
115
|
keyPrefix: resolvedKeyPrefix,
|
|
88
|
-
key,
|
|
116
|
+
key: objectKey,
|
|
89
117
|
contentType,
|
|
90
118
|
contentDisposition,
|
|
91
119
|
contentEncoding,
|
|
@@ -100,15 +128,14 @@ export const getMultipartUploadHandlers = (
|
|
|
100
128
|
};
|
|
101
129
|
}
|
|
102
130
|
|
|
103
|
-
const finalKey = resolvedKeyPrefix + key;
|
|
104
131
|
uploadCacheKey = size
|
|
105
132
|
? getUploadsCacheKey({
|
|
106
133
|
file: data instanceof File ? data : undefined,
|
|
107
|
-
accessLevel:
|
|
134
|
+
accessLevel: resolvedAccessLevel,
|
|
108
135
|
contentType: uploadDataOptions?.contentType,
|
|
109
136
|
bucket: resolvedBucket!,
|
|
110
137
|
size,
|
|
111
|
-
key,
|
|
138
|
+
key: objectKey,
|
|
112
139
|
})
|
|
113
140
|
: undefined;
|
|
114
141
|
|
|
@@ -186,12 +213,15 @@ export const getMultipartUploadHandlers = (
|
|
|
186
213
|
await removeCachedUpload(uploadCacheKey);
|
|
187
214
|
}
|
|
188
215
|
|
|
189
|
-
|
|
190
|
-
key,
|
|
216
|
+
const result = {
|
|
191
217
|
eTag,
|
|
192
218
|
contentType,
|
|
193
219
|
metadata,
|
|
194
220
|
};
|
|
221
|
+
|
|
222
|
+
return inputType === STORAGE_INPUT_KEY
|
|
223
|
+
? { key: objectKey, ...result }
|
|
224
|
+
: { path: objectKey, ...result };
|
|
195
225
|
};
|
|
196
226
|
|
|
197
227
|
const startUploadWithResumability = () =>
|
|
@@ -208,7 +238,7 @@ export const getMultipartUploadHandlers = (
|
|
|
208
238
|
});
|
|
209
239
|
|
|
210
240
|
const multipartUploadJob = () =>
|
|
211
|
-
new Promise<
|
|
241
|
+
new Promise<ItemWithKey | ItemWithPath>((resolve, reject) => {
|
|
212
242
|
resolveCallback = resolve;
|
|
213
243
|
rejectCallback = reject;
|
|
214
244
|
startUploadWithResumability();
|
|
@@ -232,7 +262,7 @@ export const getMultipartUploadHandlers = (
|
|
|
232
262
|
// 3. clear multipart upload on server side.
|
|
233
263
|
await abortMultipartUpload(resolvedS3Config!, {
|
|
234
264
|
Bucket: resolvedBucket,
|
|
235
|
-
Key:
|
|
265
|
+
Key: finalKey,
|
|
236
266
|
UploadId: inProgressUpload?.uploadId,
|
|
237
267
|
});
|
|
238
268
|
};
|
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
import { Amplify } from '@aws-amplify/core';
|
|
5
5
|
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
6
6
|
|
|
7
|
-
import { UploadDataInput } from '../../types';
|
|
8
|
-
import {
|
|
9
|
-
|
|
7
|
+
import { UploadDataInput, UploadDataWithPathInput } from '../../types';
|
|
8
|
+
import {
|
|
9
|
+
calculateContentMd5,
|
|
10
|
+
resolveS3ConfigAndInput,
|
|
11
|
+
validateStorageOperationInput,
|
|
12
|
+
} from '../../utils';
|
|
13
|
+
import { ItemWithKey, ItemWithPath } from '../../types/outputs';
|
|
10
14
|
import { putObject } from '../../utils/client';
|
|
11
15
|
import { getStorageUserAgentValue } from '../../utils/userAgent';
|
|
16
|
+
import { STORAGE_INPUT_KEY } from '../../utils/constants';
|
|
12
17
|
|
|
13
18
|
/**
|
|
14
19
|
* Get a function the returns a promise to call putObject API to S3.
|
|
@@ -17,15 +22,21 @@ import { getStorageUserAgentValue } from '../../utils/userAgent';
|
|
|
17
22
|
*/
|
|
18
23
|
export const putObjectJob =
|
|
19
24
|
(
|
|
20
|
-
|
|
25
|
+
uploadDataInput: UploadDataInput | UploadDataWithPathInput,
|
|
21
26
|
abortSignal: AbortSignal,
|
|
22
27
|
totalLength?: number,
|
|
23
28
|
) =>
|
|
24
|
-
async (): Promise<
|
|
25
|
-
const {
|
|
29
|
+
async (): Promise<ItemWithKey | ItemWithPath> => {
|
|
30
|
+
const { options: uploadDataOptions, data } = uploadDataInput;
|
|
31
|
+
const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } =
|
|
26
32
|
await resolveS3ConfigAndInput(Amplify, uploadDataOptions);
|
|
33
|
+
const { inputType, objectKey } = validateStorageOperationInput(
|
|
34
|
+
uploadDataInput,
|
|
35
|
+
identityId,
|
|
36
|
+
);
|
|
27
37
|
|
|
28
|
-
const finalKey =
|
|
38
|
+
const finalKey =
|
|
39
|
+
inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;
|
|
29
40
|
const {
|
|
30
41
|
contentDisposition,
|
|
31
42
|
contentEncoding,
|
|
@@ -55,12 +66,15 @@ export const putObjectJob =
|
|
|
55
66
|
},
|
|
56
67
|
);
|
|
57
68
|
|
|
58
|
-
|
|
59
|
-
key,
|
|
69
|
+
const result = {
|
|
60
70
|
eTag,
|
|
61
71
|
versionId,
|
|
62
72
|
contentType,
|
|
63
73
|
metadata,
|
|
64
74
|
size: totalLength,
|
|
65
75
|
};
|
|
76
|
+
|
|
77
|
+
return inputType === STORAGE_INPUT_KEY
|
|
78
|
+
? { key: objectKey, ...result }
|
|
79
|
+
: { path: objectKey, ...result };
|
|
66
80
|
};
|
|
@@ -13,22 +13,38 @@ export {
|
|
|
13
13
|
|
|
14
14
|
export {
|
|
15
15
|
UploadDataInput,
|
|
16
|
+
UploadDataWithPathInput,
|
|
16
17
|
DownloadDataInput,
|
|
18
|
+
DownloadDataWithPathInput,
|
|
17
19
|
RemoveInput,
|
|
20
|
+
RemoveWithPathInput,
|
|
18
21
|
ListAllInput,
|
|
22
|
+
ListAllWithPathInput,
|
|
19
23
|
ListPaginateInput,
|
|
24
|
+
ListPaginateWithPathInput,
|
|
20
25
|
GetPropertiesInput,
|
|
26
|
+
GetPropertiesWithPathInput,
|
|
21
27
|
CopyInput,
|
|
28
|
+
CopyWithPathInput,
|
|
22
29
|
GetUrlInput,
|
|
30
|
+
GetUrlWithPathInput,
|
|
23
31
|
} from './types/inputs';
|
|
24
32
|
|
|
25
33
|
export {
|
|
26
34
|
UploadDataOutput,
|
|
35
|
+
UploadDataWithPathOutput,
|
|
27
36
|
DownloadDataOutput,
|
|
37
|
+
DownloadDataWithPathOutput,
|
|
28
38
|
RemoveOutput,
|
|
39
|
+
RemoveWithPathOutput,
|
|
29
40
|
ListAllOutput,
|
|
41
|
+
ListAllWithPathOutput,
|
|
30
42
|
ListPaginateOutput,
|
|
43
|
+
ListPaginateWithPathOutput,
|
|
31
44
|
GetPropertiesOutput,
|
|
45
|
+
GetPropertiesWithPathOutput,
|
|
32
46
|
CopyOutput,
|
|
47
|
+
CopyWithPathOutput,
|
|
33
48
|
GetUrlOutput,
|
|
49
|
+
GetUrlWithPathOutput,
|
|
34
50
|
} from './types/outputs';
|