@aws-amplify/storage 6.0.17-unstable.e316a2e.0 → 6.0.17

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.
Files changed (185) hide show
  1. package/dist/cjs/providers/s3/apis/internal/getProperties.js +1 -1
  2. package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
  3. package/dist/cjs/providers/s3/apis/internal/getUrl.js +6 -6
  4. package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
  5. package/dist/cjs/providers/s3/apis/internal/list.js +2 -2
  6. package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
  7. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +1 -1
  8. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
  9. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +25 -25
  10. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
  11. package/dist/cjs/providers/s3/utils/client/base.js +1 -1
  12. package/dist/cjs/providers/s3/utils/client/base.js.map +1 -1
  13. package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js +1 -1
  14. package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js.map +1 -1
  15. package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js +3 -3
  16. package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js.map +1 -1
  17. package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js +1 -1
  18. package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js.map +1 -1
  19. package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js +4 -4
  20. package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js.map +1 -1
  21. package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js +4 -4
  22. package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js.map +1 -1
  23. package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js +4 -7
  24. package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js.map +1 -1
  25. package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js +6 -5
  26. package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js.map +1 -1
  27. package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +1 -1
  28. package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
  29. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +2 -2
  30. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
  31. package/dist/cjs/providers/s3/utils/md5.js +8 -3
  32. package/dist/cjs/providers/s3/utils/md5.js.map +1 -1
  33. package/dist/cjs/providers/s3/utils/md5.native.js +6 -2
  34. package/dist/cjs/providers/s3/utils/md5.native.js.map +1 -1
  35. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +1 -1
  36. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
  37. package/dist/cjs/providers/s3/utils/transferTask.js +10 -4
  38. package/dist/cjs/providers/s3/utils/transferTask.js.map +1 -1
  39. package/dist/esm/providers/s3/apis/getProperties.d.ts +1 -1
  40. package/dist/esm/providers/s3/apis/internal/getProperties.mjs +1 -1
  41. package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
  42. package/dist/esm/providers/s3/apis/internal/getUrl.mjs +3 -3
  43. package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
  44. package/dist/esm/providers/s3/apis/internal/list.d.ts +1 -1
  45. package/dist/esm/providers/s3/apis/internal/list.mjs +2 -2
  46. package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
  47. package/dist/esm/providers/s3/apis/list.d.ts +3 -3
  48. package/dist/esm/providers/s3/apis/server/list.d.ts +3 -3
  49. package/dist/esm/providers/s3/apis/uploadData/multipart/getDataChunker.d.ts +2 -2
  50. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +4 -4
  51. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +1 -1
  52. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
  53. package/dist/esm/providers/s3/apis/uploadData/multipart/progressTracker.d.ts +3 -3
  54. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +6 -6
  55. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +25 -25
  56. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
  57. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.d.ts +5 -5
  58. package/dist/esm/providers/s3/types/inputs.d.ts +2 -2
  59. package/dist/esm/providers/s3/types/options.d.ts +11 -11
  60. package/dist/esm/providers/s3/types/outputs.d.ts +1 -1
  61. package/dist/esm/providers/s3/utils/client/abortMultipartUpload.d.ts +2 -2
  62. package/dist/esm/providers/s3/utils/client/base.mjs +1 -1
  63. package/dist/esm/providers/s3/utils/client/base.mjs.map +1 -1
  64. package/dist/esm/providers/s3/utils/client/completeMultipartUpload.d.ts +2 -2
  65. package/dist/esm/providers/s3/utils/client/copyObject.d.ts +2 -2
  66. package/dist/esm/providers/s3/utils/client/copyObject.mjs.map +1 -1
  67. package/dist/esm/providers/s3/utils/client/createMultipartUpload.d.ts +3 -3
  68. package/dist/esm/providers/s3/utils/client/createMultipartUpload.mjs.map +1 -1
  69. package/dist/esm/providers/s3/utils/client/deleteObject.d.ts +2 -2
  70. package/dist/esm/providers/s3/utils/client/getObject.d.ts +3 -3
  71. package/dist/esm/providers/s3/utils/client/getObject.mjs.map +1 -1
  72. package/dist/esm/providers/s3/utils/client/headObject.d.ts +2 -2
  73. package/dist/esm/providers/s3/utils/client/listObjectsV2.d.ts +3 -3
  74. package/dist/esm/providers/s3/utils/client/listParts.d.ts +2 -2
  75. package/dist/esm/providers/s3/utils/client/listParts.mjs.map +1 -1
  76. package/dist/esm/providers/s3/utils/client/putObject.d.ts +2 -2
  77. package/dist/esm/providers/s3/utils/client/putObject.mjs.map +1 -1
  78. package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs +1 -1
  79. package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs.map +1 -1
  80. package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.d.ts +2 -2
  81. package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs +2 -2
  82. package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs.map +1 -1
  83. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.d.ts +2 -2
  84. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs +2 -2
  85. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs.map +1 -1
  86. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.d.ts +2 -2
  87. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs +6 -6
  88. package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs.map +1 -1
  89. package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.d.ts +2 -2
  90. package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs +4 -4
  91. package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs.map +1 -1
  92. package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs +4 -7
  93. package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs.map +1 -1
  94. package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs +6 -5
  95. package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs.map +1 -1
  96. package/dist/esm/providers/s3/utils/client/types.d.ts +11 -22
  97. package/dist/esm/providers/s3/utils/client/uploadPart.d.ts +2 -2
  98. package/dist/esm/providers/s3/utils/client/uploadPart.mjs.map +1 -1
  99. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +1 -3
  100. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +1 -1
  101. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
  102. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +2 -2
  103. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
  104. package/dist/esm/providers/s3/utils/client/utils/serializeHelpers.d.ts +1 -1
  105. package/dist/esm/providers/s3/utils/md5.mjs +8 -3
  106. package/dist/esm/providers/s3/utils/md5.mjs.map +1 -1
  107. package/dist/esm/providers/s3/utils/md5.native.mjs +6 -2
  108. package/dist/esm/providers/s3/utils/md5.native.mjs.map +1 -1
  109. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +4 -4
  110. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +1 -1
  111. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
  112. package/dist/esm/providers/s3/utils/transferTask.d.ts +10 -10
  113. package/dist/esm/providers/s3/utils/transferTask.mjs +10 -4
  114. package/dist/esm/providers/s3/utils/transferTask.mjs.map +1 -1
  115. package/dist/esm/types/common.d.ts +7 -7
  116. package/dist/esm/types/inputs.d.ts +9 -9
  117. package/dist/esm/types/options.d.ts +2 -2
  118. package/dist/esm/types/outputs.d.ts +6 -6
  119. package/dist/esm/utils/resolvePrefix.d.ts +2 -2
  120. package/package.json +107 -106
  121. package/src/errors/CanceledError.ts +1 -0
  122. package/src/errors/utils/assertValidationError.ts +1 -1
  123. package/src/providers/s3/apis/copy.ts +3 -1
  124. package/src/providers/s3/apis/downloadData.ts +5 -3
  125. package/src/providers/s3/apis/getProperties.ts +5 -2
  126. package/src/providers/s3/apis/getUrl.ts +3 -0
  127. package/src/providers/s3/apis/internal/copy.ts +5 -4
  128. package/src/providers/s3/apis/internal/getProperties.ts +8 -6
  129. package/src/providers/s3/apis/internal/getUrl.ts +11 -9
  130. package/src/providers/s3/apis/internal/list.ts +13 -10
  131. package/src/providers/s3/apis/internal/remove.ts +5 -3
  132. package/src/providers/s3/apis/list.ts +8 -4
  133. package/src/providers/s3/apis/remove.ts +4 -1
  134. package/src/providers/s3/apis/server/copy.ts +2 -1
  135. package/src/providers/s3/apis/server/getProperties.ts +3 -2
  136. package/src/providers/s3/apis/server/getUrl.ts +2 -1
  137. package/src/providers/s3/apis/server/list.ts +10 -7
  138. package/src/providers/s3/apis/server/remove.ts +2 -1
  139. package/src/providers/s3/apis/uploadData/byteLength.ts +1 -0
  140. package/src/providers/s3/apis/uploadData/index.ts +5 -2
  141. package/src/providers/s3/apis/uploadData/multipart/calculatePartSize.ts +1 -0
  142. package/src/providers/s3/apis/uploadData/multipart/getDataChunker.ts +6 -4
  143. package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +12 -9
  144. package/src/providers/s3/apis/uploadData/multipart/progressTracker.ts +5 -4
  145. package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +15 -12
  146. package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +42 -36
  147. package/src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts +7 -6
  148. package/src/providers/s3/apis/uploadData/putObjectJob.ts +2 -2
  149. package/src/providers/s3/types/inputs.ts +4 -4
  150. package/src/providers/s3/types/options.ts +11 -11
  151. package/src/providers/s3/types/outputs.ts +1 -1
  152. package/src/providers/s3/utils/client/abortMultipartUpload.ts +5 -4
  153. package/src/providers/s3/utils/client/base.ts +8 -6
  154. package/src/providers/s3/utils/client/completeMultipartUpload.ts +14 -6
  155. package/src/providers/s3/utils/client/copyObject.ts +7 -4
  156. package/src/providers/s3/utils/client/createMultipartUpload.ts +7 -5
  157. package/src/providers/s3/utils/client/deleteObject.ts +6 -5
  158. package/src/providers/s3/utils/client/getObject.ts +14 -12
  159. package/src/providers/s3/utils/client/headObject.ts +6 -5
  160. package/src/providers/s3/utils/client/listObjectsV2.ts +6 -3
  161. package/src/providers/s3/utils/client/listParts.ts +9 -6
  162. package/src/providers/s3/utils/client/putObject.ts +6 -5
  163. package/src/providers/s3/utils/client/runtime/base64/index.browser.ts +2 -1
  164. package/src/providers/s3/utils/client/runtime/base64/index.native.ts +1 -1
  165. package/src/providers/s3/utils/client/runtime/contentSha256middleware.ts +6 -4
  166. package/src/providers/s3/utils/client/runtime/s3TransferHandler/fetch.ts +7 -5
  167. package/src/providers/s3/utils/client/runtime/s3TransferHandler/xhr.ts +11 -11
  168. package/src/providers/s3/utils/client/runtime/xhrTransferHandler.ts +21 -14
  169. package/src/providers/s3/utils/client/runtime/xmlParser/dom.ts +6 -7
  170. package/src/providers/s3/utils/client/runtime/xmlParser/pureJs.ts +10 -5
  171. package/src/providers/s3/utils/client/types.ts +12 -14
  172. package/src/providers/s3/utils/client/uploadPart.ts +6 -5
  173. package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +13 -8
  174. package/src/providers/s3/utils/client/utils/parsePayload.ts +6 -4
  175. package/src/providers/s3/utils/client/utils/serializeHelpers.ts +8 -5
  176. package/src/providers/s3/utils/md5.native.ts +9 -3
  177. package/src/providers/s3/utils/md5.ts +12 -4
  178. package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +10 -8
  179. package/src/providers/s3/utils/transferTask.ts +26 -14
  180. package/src/providers/s3/utils/userAgent.ts +1 -1
  181. package/src/types/common.ts +7 -7
  182. package/src/types/inputs.ts +11 -11
  183. package/src/types/options.ts +2 -2
  184. package/src/types/outputs.ts +6 -6
  185. package/src/utils/resolvePrefix.ts +7 -4
@@ -5,15 +5,16 @@ import {
5
5
  AmplifyServer,
6
6
  getAmplifyServerContext,
7
7
  } from '@aws-amplify/core/internals/adapter-core';
8
+
8
9
  import { GetPropertiesInput, GetPropertiesOutput } from '../../types';
9
10
  import { getProperties as getPropertiesInternal } from '../internal/getProperties';
10
11
 
11
12
  export const getProperties = (
12
13
  contextSpec: AmplifyServer.ContextSpec,
13
- input: GetPropertiesInput
14
+ input: GetPropertiesInput,
14
15
  ): Promise<GetPropertiesOutput> => {
15
16
  return getPropertiesInternal(
16
17
  getAmplifyServerContext(contextSpec).amplify,
17
- input
18
+ input,
18
19
  );
19
20
  };
@@ -5,12 +5,13 @@ import {
5
5
  AmplifyServer,
6
6
  getAmplifyServerContext,
7
7
  } from '@aws-amplify/core/internals/adapter-core';
8
+
8
9
  import { GetUrlInput, GetUrlOutput } from '../../types';
9
10
  import { getUrl as getUrlInternal } from '../internal/getUrl';
10
11
 
11
12
  export const getUrl = async (
12
13
  contextSpec: AmplifyServer.ContextSpec,
13
- input: GetUrlInput
14
+ input: GetUrlInput,
14
15
  ): Promise<GetUrlOutput> => {
15
16
  return getUrlInternal(getAmplifyServerContext(contextSpec).amplify, input);
16
17
  };
@@ -5,15 +5,18 @@ import {
5
5
  AmplifyServer,
6
6
  getAmplifyServerContext,
7
7
  } from '@aws-amplify/core/internals/adapter-core';
8
+
8
9
  import {
9
10
  ListAllInput,
10
- ListPaginateInput,
11
11
  ListAllOutput,
12
+ ListPaginateInput,
12
13
  ListPaginateOutput,
14
+ S3Exception,
13
15
  } from '../../types';
14
16
  import { list as listInternal } from '../internal/list';
17
+ import { StorageValidationErrorCode } from '../../../../errors/types/validation';
15
18
 
16
- type ListApi = {
19
+ interface ListApi {
17
20
  /**
18
21
  * Lists bucket objects with pagination.
19
22
  * @param {ListPaginateInput} The input object
@@ -24,7 +27,7 @@ type ListApi = {
24
27
  */
25
28
  (
26
29
  contextSpec: AmplifyServer.ContextSpec,
27
- input?: ListPaginateInput
30
+ input?: ListPaginateInput,
28
31
  ): Promise<ListPaginateOutput>;
29
32
  /**
30
33
  * Lists all bucket objects.
@@ -35,16 +38,16 @@ type ListApi = {
35
38
  */
36
39
  (
37
40
  contextSpec: AmplifyServer.ContextSpec,
38
- input?: ListAllInput
41
+ input?: ListAllInput,
39
42
  ): Promise<ListAllOutput>;
40
- };
43
+ }
41
44
 
42
45
  export const list: ListApi = (
43
46
  contextSpec: AmplifyServer.ContextSpec,
44
- input?: ListAllInput | ListPaginateInput
47
+ input?: ListAllInput | ListPaginateInput,
45
48
  ): Promise<ListAllOutput | ListPaginateOutput> => {
46
49
  return listInternal(
47
50
  getAmplifyServerContext(contextSpec).amplify,
48
- input ?? {}
51
+ input ?? {},
49
52
  );
50
53
  };
@@ -5,12 +5,13 @@ import {
5
5
  AmplifyServer,
6
6
  getAmplifyServerContext,
7
7
  } from '@aws-amplify/core/internals/adapter-core';
8
+
8
9
  import { RemoveInput, RemoveOutput } from '../../types';
9
10
  import { remove as removeInternal } from '../internal/remove';
10
11
 
11
12
  export const remove = (
12
13
  contextSpec: AmplifyServer.ContextSpec,
13
- input: RemoveInput
14
+ input: RemoveInput,
14
15
  ): Promise<RemoveOutput> => {
15
16
  return removeInternal(getAmplifyServerContext(contextSpec).amplify, input);
16
17
  };
@@ -25,6 +25,7 @@ export const byteLength = (input?: any): number | undefined => {
25
25
  // handles browser File object
26
26
  return input.size;
27
27
  }
28
+
28
29
  // TODO: support Node.js stream size when Node.js runtime is supported out-of-box.
29
30
  return undefined;
30
31
  };
@@ -1,11 +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 { UploadDataInput, UploadDataOutput, S3Exception } from '../../types';
4
+ import { S3Exception, UploadDataInput, UploadDataOutput } from '../../types';
5
5
  import { createUploadTask } from '../../utils';
6
6
  import { assertValidationError } from '../../../../errors/utils/assertValidationError';
7
7
  import { StorageValidationErrorCode } from '../../../../errors/types/validation';
8
8
  import { DEFAULT_PART_SIZE, MAX_OBJECT_SIZE } from '../../utils/constants';
9
+
9
10
  import { byteLength } from './byteLength';
10
11
  import { putObjectJob } from './putObjectJob';
11
12
  import { getMultipartUploadHandlers } from './multipart';
@@ -64,11 +65,12 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
64
65
  const dataByteLength = byteLength(data);
65
66
  assertValidationError(
66
67
  dataByteLength === undefined || dataByteLength <= MAX_OBJECT_SIZE,
67
- StorageValidationErrorCode.ObjectIsTooLarge
68
+ StorageValidationErrorCode.ObjectIsTooLarge,
68
69
  );
69
70
 
70
71
  if (dataByteLength && dataByteLength <= DEFAULT_PART_SIZE) {
71
72
  const abortController = new AbortController();
73
+
72
74
  return createUploadTask({
73
75
  isMultipartUpload: false,
74
76
  job: putObjectJob(input, abortController.signal, dataByteLength),
@@ -79,6 +81,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
79
81
  } else {
80
82
  const { multipartUploadJob, onPause, onResume, onCancel } =
81
83
  getMultipartUploadHandlers(input, dataByteLength);
84
+
82
85
  return createUploadTask({
83
86
  isMultipartUpload: true,
84
87
  job: multipartUploadJob,
@@ -13,5 +13,6 @@ export const calculatePartSize = (totalSize?: number): number => {
13
13
  partSize *= 2;
14
14
  partsCount = Math.ceil(totalSize / partSize);
15
15
  }
16
+
16
17
  return partSize;
17
18
  };
@@ -7,17 +7,18 @@ import {
7
7
  validationErrorMap,
8
8
  } from '../../../../../errors/types/validation';
9
9
  import { StorageError } from '../../../../../errors/StorageError';
10
+
10
11
  import { calculatePartSize } from './calculatePartSize';
11
12
 
12
- export type PartToUpload = {
13
+ export interface PartToUpload {
13
14
  partNumber: number;
14
15
  data: Blob | ArrayBuffer | string;
15
16
  size: number;
16
- };
17
+ }
17
18
 
18
19
  export const getDataChunker = (
19
20
  data: StorageUploadDataPayload,
20
- totalSize?: number
21
+ totalSize?: number,
21
22
  ): Generator<PartToUpload, void, undefined> => {
22
23
  const partSize = calculatePartSize(totalSize);
23
24
 
@@ -29,6 +30,7 @@ export const getDataChunker = (
29
30
  return helper(data, 0, data.byteLength, partSize);
30
31
  } else if (typeof data === 'string') {
31
32
  const blob = new Blob([data]);
33
+
32
34
  return getDataChunker(blob, blob.size);
33
35
  } else {
34
36
  throw new StorageError({
@@ -42,7 +44,7 @@ const helper = function* (
42
44
  buffer: ArrayBuffer | Blob,
43
45
  byteOffset: number,
44
46
  byteLength: number,
45
- partSize: number
47
+ partSize: number,
46
48
  ): Generator<PartToUpload, void, undefined> {
47
49
  let partNumber = 1;
48
50
  let startByte = byteOffset;
@@ -3,17 +3,18 @@
3
3
 
4
4
  import { StorageAccessLevel } from '@aws-amplify/core';
5
5
 
6
+ import { ResolvedS3Config } from '../../../types/options';
7
+ import { StorageUploadDataPayload } from '../../../../../types';
8
+ import { Part, createMultipartUpload } from '../../../utils/client';
9
+ import { logger } from '../../../../../utils';
10
+
6
11
  import {
7
12
  cacheMultipartUpload,
8
13
  findCachedUploadParts,
9
14
  getUploadsCacheKey,
10
15
  } from './uploadCache';
11
- import { ResolvedS3Config } from '../../../types/options';
12
- import { StorageUploadDataPayload } from '../../../../../types';
13
- import { Part, createMultipartUpload } from '../../../utils/client';
14
- import { logger } from '../../../../../utils';
15
16
 
16
- type LoadOrCreateMultipartUploadOptions = {
17
+ interface LoadOrCreateMultipartUploadOptions {
17
18
  s3Config: ResolvedS3Config;
18
19
  data: StorageUploadDataPayload;
19
20
  bucket: string;
@@ -26,12 +27,12 @@ type LoadOrCreateMultipartUploadOptions = {
26
27
  metadata?: Record<string, string>;
27
28
  size?: number;
28
29
  abortSignal?: AbortSignal;
29
- };
30
+ }
30
31
 
31
- type LoadOrCreateMultipartUploadResult = {
32
+ interface LoadOrCreateMultipartUploadResult {
32
33
  uploadId: string;
33
34
  cachedParts: Part[];
34
- };
35
+ }
35
36
 
36
37
  /**
37
38
  * Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart
@@ -103,10 +104,11 @@ export const loadOrCreateMultipartUpload = async ({
103
104
  ContentDisposition: contentDisposition,
104
105
  ContentEncoding: contentEncoding,
105
106
  Metadata: metadata,
106
- }
107
+ },
107
108
  );
108
109
  if (size === undefined) {
109
110
  logger.debug('uploaded data size cannot be determined, skipping cache.');
111
+
110
112
  return {
111
113
  uploadId: UploadId!,
112
114
  cachedParts: [],
@@ -126,6 +128,7 @@ export const loadOrCreateMultipartUpload = async ({
126
128
  key,
127
129
  fileName: data instanceof File ? data.name : '',
128
130
  });
131
+
129
132
  return {
130
133
  uploadId: UploadId!,
131
134
  cachedParts: [],
@@ -3,10 +3,10 @@
3
3
 
4
4
  import { TransferProgressEvent } from '../../../../../types';
5
5
 
6
- type ConcurrentUploadsProgressTrackerOptions = {
6
+ interface ConcurrentUploadsProgressTrackerOptions {
7
7
  size?: number;
8
- onProgress?: (event: TransferProgressEvent) => void;
9
- };
8
+ onProgress?(event: TransferProgressEvent): void;
9
+ }
10
10
 
11
11
  /**
12
12
  * Track the progress from multiple concurrent uploads, and invoke the onProgress callback.
@@ -22,13 +22,14 @@ export const getConcurrentUploadsProgressTracker = ({
22
22
  const getTransferredBytes = () =>
23
23
  transferredBytesPerListener.reduce(
24
24
  (acc, transferredBytes) => acc + transferredBytes,
25
- 0
25
+ 0,
26
26
  );
27
27
 
28
28
  return {
29
29
  getOnProgressListener: () => {
30
30
  transferredBytesPerListener.push(0);
31
31
  const listenerIndex = transferredBytesPerListener.length - 1;
32
+
32
33
  return (event: TransferProgressEvent) => {
33
34
  const { transferredBytes } = event;
34
35
  transferredBytesPerListener[listenerIndex] = transferredBytes;
@@ -2,9 +2,9 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import {
5
- defaultStorage,
6
5
  KeyValueStorageInterface,
7
6
  StorageAccessLevel,
7
+ defaultStorage,
8
8
  } from '@aws-amplify/core';
9
9
 
10
10
  import { UPLOADS_STORAGE_KEY } from '../../../utils/constants';
@@ -14,12 +14,12 @@ import { logger } from '../../../../../utils';
14
14
 
15
15
  const ONE_HOUR = 1000 * 60 * 60;
16
16
 
17
- type FindCachedUploadPartsOptions = {
17
+ interface FindCachedUploadPartsOptions {
18
18
  cacheKey: string;
19
19
  s3Config: ResolvedS3Config;
20
20
  bucket: string;
21
21
  finalKey: string;
22
- };
22
+ }
23
23
 
24
24
  /**
25
25
  * Find the cached multipart upload id and get the parts that have been uploaded
@@ -47,7 +47,7 @@ export const findCachedUploadParts = async ({
47
47
 
48
48
  await defaultStorage.setItem(
49
49
  UPLOADS_STORAGE_KEY,
50
- JSON.stringify(cachedUploads)
50
+ JSON.stringify(cachedUploads),
51
51
  );
52
52
 
53
53
  try {
@@ -56,6 +56,7 @@ export const findCachedUploadParts = async ({
56
56
  Key: finalKey,
57
57
  UploadId: cachedUpload.uploadId,
58
58
  });
59
+
59
60
  return {
60
61
  parts: Parts,
61
62
  uploadId: cachedUpload.uploadId,
@@ -63,38 +64,40 @@ export const findCachedUploadParts = async ({
63
64
  } catch (e) {
64
65
  logger.debug('failed to list cached parts, removing cached upload.');
65
66
  await removeCachedUpload(cacheKey);
67
+
66
68
  return null;
67
69
  }
68
70
  };
69
71
 
70
- type FileMetadata = {
72
+ interface FileMetadata {
71
73
  bucket: string;
72
74
  fileName: string;
73
75
  key: string;
74
76
  uploadId: string;
75
77
  // Unix timestamp in ms
76
78
  lastTouched: number;
77
- };
79
+ }
78
80
 
79
81
  const listCachedUploadTasks = async (
80
- kvStorage: KeyValueStorageInterface
82
+ kvStorage: KeyValueStorageInterface,
81
83
  ): Promise<Record<string, FileMetadata>> => {
82
84
  try {
83
85
  return JSON.parse((await kvStorage.getItem(UPLOADS_STORAGE_KEY)) ?? '{}');
84
86
  } catch (e) {
85
87
  logger.debug('failed to parse cached uploads record.');
88
+
86
89
  return {};
87
90
  }
88
91
  };
89
92
 
90
- type UploadsCacheKeyOptions = {
93
+ interface UploadsCacheKeyOptions {
91
94
  size: number;
92
95
  contentType?: string;
93
96
  bucket: string;
94
97
  accessLevel: StorageAccessLevel;
95
98
  key: string;
96
99
  file?: File;
97
- };
100
+ }
98
101
 
99
102
  /**
100
103
  * Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,
@@ -122,7 +125,7 @@ export const getUploadsCacheKey = ({
122
125
 
123
126
  export const cacheMultipartUpload = async (
124
127
  cacheKey: string,
125
- fileMetadata: Omit<FileMetadata, 'lastTouched'>
128
+ fileMetadata: Omit<FileMetadata, 'lastTouched'>,
126
129
  ): Promise<void> => {
127
130
  const cachedUploads = await listCachedUploadTasks(defaultStorage);
128
131
  cachedUploads[cacheKey] = {
@@ -131,7 +134,7 @@ export const cacheMultipartUpload = async (
131
134
  };
132
135
  await defaultStorage.setItem(
133
136
  UPLOADS_STORAGE_KEY,
134
- JSON.stringify(cachedUploads)
137
+ JSON.stringify(cachedUploads),
135
138
  );
136
139
  };
137
140
 
@@ -140,6 +143,6 @@ export const removeCachedUpload = async (cacheKey: string): Promise<void> => {
140
143
  delete cachedUploads[cacheKey];
141
144
  await defaultStorage.setItem(
142
145
  UPLOADS_STORAGE_KEY,
143
- JSON.stringify(cachedUploads)
146
+ JSON.stringify(cachedUploads),
144
147
  );
145
148
  };
@@ -4,7 +4,6 @@
4
4
  import { Amplify, StorageAccessLevel } from '@aws-amplify/core';
5
5
  import { StorageAction } from '@aws-amplify/core/internals/utils';
6
6
 
7
- import { getDataChunker } from './getDataChunker';
8
7
  import { UploadDataInput } from '../../../types';
9
8
  import { resolveS3ConfigAndInput } from '../../../utils';
10
9
  import { Item as S3Item } from '../../../types/outputs';
@@ -12,11 +11,7 @@ import {
12
11
  DEFAULT_ACCESS_LEVEL,
13
12
  DEFAULT_QUEUE_SIZE,
14
13
  } from '../../../utils/constants';
15
- import { loadOrCreateMultipartUpload } from './initialUpload';
16
14
  import { ResolvedS3Config } from '../../../types/options';
17
- import { getConcurrentUploadsProgressTracker } from './progressTracker';
18
- import { getUploadsCacheKey, removeCachedUpload } from './uploadCache';
19
- import { uploadPartExecutor } from './uploadPartExecutor';
20
15
  import { StorageError } from '../../../../../errors/StorageError';
21
16
  import { CanceledError } from '../../../../../errors/CanceledError';
22
17
  import {
@@ -28,6 +23,12 @@ import {
28
23
  import { getStorageUserAgentValue } from '../../../utils/userAgent';
29
24
  import { logger } from '../../../../../utils';
30
25
 
26
+ import { uploadPartExecutor } from './uploadPartExecutor';
27
+ import { getUploadsCacheKey, removeCachedUpload } from './uploadCache';
28
+ import { getConcurrentUploadsProgressTracker } from './progressTracker';
29
+ import { loadOrCreateMultipartUpload } from './initialUpload';
30
+ import { getDataChunker } from './getDataChunker';
31
+
31
32
  /**
32
33
  * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(
33
34
  * onPause, onResume, onCancel).
@@ -36,7 +37,7 @@ import { logger } from '../../../../../utils';
36
37
  */
37
38
  export const getMultipartUploadHandlers = (
38
39
  { options: uploadDataOptions, key, data }: UploadDataInput,
39
- size?: number
40
+ size?: number,
40
41
  ) => {
41
42
  let resolveCallback: ((value: S3Item) => void) | undefined;
42
43
  let rejectCallback: ((reason?: any) => void) | undefined;
@@ -46,24 +47,25 @@ export const getMultipartUploadHandlers = (
46
47
  completedParts: Part[];
47
48
  }
48
49
  | undefined;
49
- let s3Config: ResolvedS3Config | undefined;
50
+ let resolvedS3Config: ResolvedS3Config | undefined;
50
51
  let abortController: AbortController | undefined;
51
- let bucket: string | undefined;
52
- let keyPrefix: string | undefined;
52
+ let resolvedBucket: string | undefined;
53
+ let resolvedKeyPrefix: string | undefined;
53
54
  let uploadCacheKey: string | undefined;
54
55
  // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().
55
56
  // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.
56
57
  // This should be replaced by a special abort reason. However,the support of this API is lagged behind.
57
- let isAbortSignalFromPause: boolean = false;
58
+ let isAbortSignalFromPause = false;
58
59
 
59
60
  const startUpload = async (): Promise<S3Item> => {
60
61
  const resolvedS3Options = await resolveS3ConfigAndInput(
61
62
  Amplify,
62
- uploadDataOptions
63
+ uploadDataOptions,
63
64
  );
64
- s3Config = resolvedS3Options.s3Config;
65
- bucket = resolvedS3Options.bucket;
66
- keyPrefix = resolvedS3Options.keyPrefix;
65
+
66
+ resolvedS3Config = resolvedS3Options.s3Config;
67
+ resolvedBucket = resolvedS3Options.bucket;
68
+ resolvedKeyPrefix = resolvedS3Options.keyPrefix;
67
69
 
68
70
  abortController = new AbortController();
69
71
  isAbortSignalFromPause = false;
@@ -79,10 +81,10 @@ export const getMultipartUploadHandlers = (
79
81
 
80
82
  if (!inProgressUpload) {
81
83
  const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
82
- s3Config,
84
+ s3Config: resolvedS3Config,
83
85
  accessLevel: resolveAccessLevel(accessLevel),
84
- bucket,
85
- keyPrefix,
86
+ bucket: resolvedBucket,
87
+ keyPrefix: resolvedKeyPrefix,
86
88
  key,
87
89
  contentType,
88
90
  contentDisposition,
@@ -98,21 +100,21 @@ export const getMultipartUploadHandlers = (
98
100
  };
99
101
  }
100
102
 
101
- const finalKey = keyPrefix + key;
103
+ const finalKey = resolvedKeyPrefix + key;
102
104
  uploadCacheKey = size
103
105
  ? getUploadsCacheKey({
104
106
  file: data instanceof File ? data : undefined,
105
107
  accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),
106
108
  contentType: uploadDataOptions?.contentType,
107
- bucket: bucket!,
109
+ bucket: resolvedBucket!,
108
110
  size,
109
111
  key,
110
- })
112
+ })
111
113
  : undefined;
112
114
 
113
115
  const dataChunker = getDataChunker(data, size);
114
116
  const completedPartNumberSet = new Set<number>(
115
- inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber!)
117
+ inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber!),
116
118
  );
117
119
  const onPartUploadCompletion = (partNumber: number, eTag: string) => {
118
120
  inProgressUpload?.completedParts.push({
@@ -132,15 +134,15 @@ export const getMultipartUploadHandlers = (
132
134
  uploadPartExecutor({
133
135
  dataChunkerGenerator: dataChunker,
134
136
  completedPartNumberSet,
135
- s3Config,
137
+ s3Config: resolvedS3Config,
136
138
  abortSignal: abortController.signal,
137
- bucket,
139
+ bucket: resolvedBucket,
138
140
  finalKey,
139
141
  uploadId: inProgressUpload.uploadId,
140
142
  onPartUploadCompletion,
141
143
  onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),
142
144
  isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,
143
- })
145
+ }),
144
146
  );
145
147
  }
146
148
 
@@ -148,27 +150,30 @@ export const getMultipartUploadHandlers = (
148
150
 
149
151
  const { ETag: eTag } = await completeMultipartUpload(
150
152
  {
151
- ...s3Config,
153
+ ...resolvedS3Config,
152
154
  abortSignal: abortController.signal,
153
155
  userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),
154
156
  },
155
157
  {
156
- Bucket: bucket,
158
+ Bucket: resolvedBucket,
157
159
  Key: finalKey,
158
160
  UploadId: inProgressUpload.uploadId,
159
161
  MultipartUpload: {
160
162
  Parts: inProgressUpload.completedParts.sort(
161
- (partA, partB) => partA.PartNumber! - partB.PartNumber!
163
+ (partA, partB) => partA.PartNumber! - partB.PartNumber!,
162
164
  ),
163
165
  },
164
- }
166
+ },
165
167
  );
166
168
 
167
169
  if (size) {
168
- const { ContentLength: uploadedObjectSize } = await headObject(s3Config, {
169
- Bucket: bucket,
170
- Key: finalKey,
171
- });
170
+ const { ContentLength: uploadedObjectSize } = await headObject(
171
+ resolvedS3Config,
172
+ {
173
+ Bucket: resolvedBucket,
174
+ Key: finalKey,
175
+ },
176
+ );
172
177
  if (uploadedObjectSize && uploadedObjectSize !== size) {
173
178
  throw new StorageError({
174
179
  name: 'Error',
@@ -225,9 +230,9 @@ export const getMultipartUploadHandlers = (
225
230
  await removeCachedUpload(uploadCacheKey);
226
231
  }
227
232
  // 3. clear multipart upload on server side.
228
- await abortMultipartUpload(s3Config!, {
229
- Bucket: bucket,
230
- Key: keyPrefix! + key,
233
+ await abortMultipartUpload(resolvedS3Config!, {
234
+ Bucket: resolvedBucket,
235
+ Key: resolvedKeyPrefix! + key,
231
236
  UploadId: inProgressUpload?.uploadId,
232
237
  });
233
238
  };
@@ -238,9 +243,10 @@ export const getMultipartUploadHandlers = (
238
243
  rejectCallback!(
239
244
  // Internal error that should not be exposed to the users. They should use isCancelError() to check if
240
245
  // the error is caused by cancel().
241
- new CanceledError(message ? { message } : undefined)
246
+ new CanceledError(message ? { message } : undefined),
242
247
  );
243
248
  };
249
+
244
250
  return {
245
251
  multipartUploadJob,
246
252
  onPause,
@@ -1,14 +1,15 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { PartToUpload } from './getDataChunker';
5
4
  import { TransferProgressEvent } from '../../../../../types';
6
5
  import { ResolvedS3Config } from '../../../types/options';
7
6
  import { calculateContentMd5 } from '../../../utils';
8
7
  import { uploadPart } from '../../../utils/client';
9
8
  import { logger } from '../../../../../utils';
10
9
 
11
- type UploadPartExecutorOptions = {
10
+ import { PartToUpload } from './getDataChunker';
11
+
12
+ interface UploadPartExecutorOptions {
12
13
  dataChunkerGenerator: Generator<PartToUpload, void, undefined>;
13
14
  completedPartNumberSet: Set<number>;
14
15
  s3Config: ResolvedS3Config;
@@ -17,9 +18,9 @@ type UploadPartExecutorOptions = {
17
18
  finalKey: string;
18
19
  uploadId: string;
19
20
  isObjectLockEnabled?: boolean;
20
- onPartUploadCompletion: (partNumber: number, eTag: string) => void;
21
- onProgress?: (event: TransferProgressEvent) => void;
22
- };
21
+ onPartUploadCompletion(partNumber: number, eTag: string): void;
22
+ onProgress?(event: TransferProgressEvent): void;
23
+ }
23
24
 
24
25
  export const uploadPartExecutor = async ({
25
26
  dataChunkerGenerator,
@@ -68,7 +69,7 @@ export const uploadPartExecutor = async ({
68
69
  ContentMD5: isObjectLockEnabled
69
70
  ? await calculateContentMd5(data)
70
71
  : undefined,
71
- }
72
+ },
72
73
  );
73
74
  transferredBytes += size;
74
75
  // eTag will always be set even the S3 model interface marks it as optional.
@@ -19,7 +19,7 @@ export const putObjectJob =
19
19
  (
20
20
  { options: uploadDataOptions, key, data }: UploadDataInput,
21
21
  abortSignal: AbortSignal,
22
- totalLength?: number
22
+ totalLength?: number,
23
23
  ) =>
24
24
  async (): Promise<S3Item> => {
25
25
  const { bucket, keyPrefix, s3Config, isObjectLockEnabled } =
@@ -52,7 +52,7 @@ export const putObjectJob =
52
52
  ContentMD5: isObjectLockEnabled
53
53
  ? await calculateContentMd5(data)
54
54
  : undefined,
55
- }
55
+ },
56
56
  );
57
57
 
58
58
  return {
@@ -3,23 +3,23 @@
3
3
 
4
4
  import {
5
5
  StorageCopyInput,
6
+ StorageDownloadDataInput,
6
7
  StorageGetPropertiesInput,
7
8
  StorageGetUrlInput,
8
9
  StorageListInput,
9
10
  StorageRemoveInput,
10
- StorageDownloadDataInput,
11
11
  StorageUploadDataInput,
12
12
  } from '../../../types';
13
13
  import {
14
+ CopyDestinationOptions,
15
+ CopySourceOptions,
16
+ DownloadDataOptions,
14
17
  GetPropertiesOptions,
15
18
  GetUrlOptions,
16
19
  ListAllOptions,
17
20
  ListPaginateOptions,
18
21
  RemoveOptions,
19
- DownloadDataOptions,
20
22
  UploadDataOptions,
21
- CopyDestinationOptions,
22
- CopySourceOptions,
23
23
  } from '../types';
24
24
 
25
25
  // TODO: support use accelerate endpoint option