@aws-sdk/lib-storage 3.128.0 → 3.131.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/CHANGELOG.md CHANGED
@@ -3,6 +3,33 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.131.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.130.0...v3.131.0) (2022-07-15)
7
+
8
+
9
+ ### Features
10
+
11
+ * **xhr-http-handler:** add XMLHttpRequest http handler to use with lib-storage Upload ([#3798](https://github.com/aws/aws-sdk-js-v3/issues/3798)) ([7462b07](https://github.com/aws/aws-sdk-js-v3/commit/7462b0731e54a29290b9b4c359a7f5581a3c78f9))
12
+
13
+
14
+
15
+
16
+
17
+ # [3.130.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.129.0...v3.130.0) (2022-07-14)
18
+
19
+ **Note:** Version bump only for package @aws-sdk/lib-storage
20
+
21
+
22
+
23
+
24
+
25
+ # [3.129.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.128.0...v3.129.0) (2022-07-13)
26
+
27
+ **Note:** Version bump only for package @aws-sdk/lib-storage
28
+
29
+
30
+
31
+
32
+
6
33
  # [3.128.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.127.0...v3.128.0) (2022-07-12)
7
34
 
8
35
  **Note:** Version bump only for package @aws-sdk/lib-storage
@@ -43,10 +43,29 @@ class Upload extends events_1.EventEmitter {
43
43
  async __uploadUsingPut(dataPart) {
44
44
  this.isMultiPart = false;
45
45
  const params = { ...this.params, Body: dataPart.data };
46
+ const requestHandler = this.client.config.requestHandler;
47
+ const eventEmitter = requestHandler instanceof events_1.EventEmitter ? requestHandler : null;
48
+ const uploadEventListener = (event) => {
49
+ this.bytesUploadedSoFar = event.loaded;
50
+ this.totalBytes = event.total;
51
+ this.__notifyProgress({
52
+ loaded: this.bytesUploadedSoFar,
53
+ total: this.totalBytes,
54
+ part: dataPart.partNumber,
55
+ Key: this.params.Key,
56
+ Bucket: this.params.Bucket,
57
+ });
58
+ };
59
+ if (eventEmitter !== null) {
60
+ eventEmitter.on("xhr.upload.progress", uploadEventListener);
61
+ }
46
62
  const [putResult, endpoint] = await Promise.all([
47
63
  this.client.send(new client_s3_1.PutObjectCommand(params)),
48
64
  this.client.config.endpoint(),
49
65
  ]);
66
+ if (eventEmitter !== null) {
67
+ eventEmitter.off("xhr.upload.progress", uploadEventListener);
68
+ }
50
69
  const locationKey = this.params
51
70
  .Key.split("/")
52
71
  .map((segment) => (0, smithy_client_1.extendedEncodeURIComponent)(segment))
@@ -96,15 +115,45 @@ class Upload extends events_1.EventEmitter {
96
115
  return;
97
116
  }
98
117
  }
118
+ const partSize = (0, bytelength_1.byteLength)(dataPart.data) || 0;
119
+ const requestHandler = this.client.config.requestHandler;
120
+ const eventEmitter = requestHandler instanceof events_1.EventEmitter ? requestHandler : null;
121
+ let lastSeenBytes = 0;
122
+ const uploadEventListener = (event, request) => {
123
+ const requestPartSize = Number(request.query["partNumber"]) || -1;
124
+ if (requestPartSize !== dataPart.partNumber) {
125
+ return;
126
+ }
127
+ if (event.total && partSize) {
128
+ this.bytesUploadedSoFar += event.loaded - lastSeenBytes;
129
+ lastSeenBytes = event.loaded;
130
+ }
131
+ this.__notifyProgress({
132
+ loaded: this.bytesUploadedSoFar,
133
+ total: this.totalBytes,
134
+ part: dataPart.partNumber,
135
+ Key: this.params.Key,
136
+ Bucket: this.params.Bucket,
137
+ });
138
+ };
139
+ if (eventEmitter !== null) {
140
+ eventEmitter.on("xhr.upload.progress", uploadEventListener);
141
+ }
99
142
  const partResult = await this.client.send(new client_s3_1.UploadPartCommand({
100
143
  ...this.params,
101
144
  UploadId: this.uploadId,
102
145
  Body: dataPart.data,
103
146
  PartNumber: dataPart.partNumber,
104
147
  }));
148
+ if (eventEmitter !== null) {
149
+ eventEmitter.off("xhr.upload.progress", uploadEventListener);
150
+ }
105
151
  if (this.abortController.signal.aborted) {
106
152
  return;
107
153
  }
154
+ if (!partResult.ETag) {
155
+ throw new Error(`Part ${dataPart.partNumber} is missing ETag in UploadPart response. Missing Bucket CORS configuration for ETag header?`);
156
+ }
108
157
  this.uploadedParts.push({
109
158
  PartNumber: dataPart.partNumber,
110
159
  ETag: partResult.ETag,
@@ -113,7 +162,9 @@ class Upload extends events_1.EventEmitter {
113
162
  ...(partResult.ChecksumSHA1 && { ChecksumSHA1: partResult.ChecksumSHA1 }),
114
163
  ...(partResult.ChecksumSHA256 && { ChecksumSHA256: partResult.ChecksumSHA256 }),
115
164
  });
116
- this.bytesUploadedSoFar += (0, bytelength_1.byteLength)(dataPart.data);
165
+ if (eventEmitter === null) {
166
+ this.bytesUploadedSoFar += partSize;
167
+ }
117
168
  this.__notifyProgress({
118
169
  loaded: this.bytesUploadedSoFar,
119
170
  total: this.totalBytes,
package/dist-es/Upload.js CHANGED
@@ -54,18 +54,38 @@ var Upload = (function (_super) {
54
54
  };
55
55
  Upload.prototype.__uploadUsingPut = function (dataPart) {
56
56
  return __awaiter(this, void 0, void 0, function () {
57
- var params, _a, putResult, endpoint, locationKey, locationBucket, Location, totalSize;
57
+ var params, requestHandler, eventEmitter, uploadEventListener, _a, putResult, endpoint, locationKey, locationBucket, Location, totalSize;
58
+ var _this = this;
58
59
  return __generator(this, function (_b) {
59
60
  switch (_b.label) {
60
61
  case 0:
61
62
  this.isMultiPart = false;
62
63
  params = __assign(__assign({}, this.params), { Body: dataPart.data });
64
+ requestHandler = this.client.config.requestHandler;
65
+ eventEmitter = requestHandler instanceof EventEmitter ? requestHandler : null;
66
+ uploadEventListener = function (event) {
67
+ _this.bytesUploadedSoFar = event.loaded;
68
+ _this.totalBytes = event.total;
69
+ _this.__notifyProgress({
70
+ loaded: _this.bytesUploadedSoFar,
71
+ total: _this.totalBytes,
72
+ part: dataPart.partNumber,
73
+ Key: _this.params.Key,
74
+ Bucket: _this.params.Bucket,
75
+ });
76
+ };
77
+ if (eventEmitter !== null) {
78
+ eventEmitter.on("xhr.upload.progress", uploadEventListener);
79
+ }
63
80
  return [4, Promise.all([
64
81
  this.client.send(new PutObjectCommand(params)),
65
82
  this.client.config.endpoint(),
66
83
  ])];
67
84
  case 1:
68
85
  _a = __read.apply(void 0, [_b.sent(), 2]), putResult = _a[0], endpoint = _a[1];
86
+ if (eventEmitter !== null) {
87
+ eventEmitter.off("xhr.upload.progress", uploadEventListener);
88
+ }
69
89
  locationKey = this.params
70
90
  .Key.split("/")
71
91
  .map(function (segment) { return extendedEncodeURIComponent(segment); })
@@ -111,82 +131,133 @@ var Upload = (function (_super) {
111
131
  var dataFeeder_1, dataFeeder_1_1;
112
132
  var e_1, _a;
113
133
  return __awaiter(this, void 0, void 0, function () {
114
- var dataPart, partResult, e_2, e_1_1;
134
+ var _loop_1, this_1, state_1, e_1_1;
135
+ var _this = this;
115
136
  return __generator(this, function (_b) {
116
137
  switch (_b.label) {
117
138
  case 0:
118
- _b.trys.push([0, 12, 13, 18]);
139
+ _b.trys.push([0, 6, 7, 12]);
140
+ _loop_1 = function () {
141
+ var dataPart, _c, partSize_1, requestHandler, eventEmitter, lastSeenBytes_1, uploadEventListener, partResult, e_2;
142
+ return __generator(this, function (_d) {
143
+ switch (_d.label) {
144
+ case 0:
145
+ dataPart = dataFeeder_1_1.value;
146
+ if (this_1.uploadedParts.length > this_1.MAX_PARTS) {
147
+ throw new Error("Exceeded ".concat(this_1.MAX_PARTS, " as part of the upload to ").concat(this_1.params.Key, " and ").concat(this_1.params.Bucket, "."));
148
+ }
149
+ _d.label = 1;
150
+ case 1:
151
+ _d.trys.push([1, 7, , 8]);
152
+ if (this_1.abortController.signal.aborted) {
153
+ return [2, { value: void 0 }];
154
+ }
155
+ if (!(dataPart.partNumber === 1 && dataPart.lastPart)) return [3, 3];
156
+ _c = {};
157
+ return [4, this_1.__uploadUsingPut(dataPart)];
158
+ case 2: return [2, (_c.value = _d.sent(), _c)];
159
+ case 3:
160
+ if (!!this_1.uploadId) return [3, 5];
161
+ return [4, this_1.__createMultipartUpload()];
162
+ case 4:
163
+ _d.sent();
164
+ if (this_1.abortController.signal.aborted) {
165
+ return [2, { value: void 0 }];
166
+ }
167
+ _d.label = 5;
168
+ case 5:
169
+ partSize_1 = byteLength(dataPart.data) || 0;
170
+ requestHandler = this_1.client.config.requestHandler;
171
+ eventEmitter = requestHandler instanceof EventEmitter ? requestHandler : null;
172
+ lastSeenBytes_1 = 0;
173
+ uploadEventListener = function (event, request) {
174
+ var requestPartSize = Number(request.query["partNumber"]) || -1;
175
+ if (requestPartSize !== dataPart.partNumber) {
176
+ return;
177
+ }
178
+ if (event.total && partSize_1) {
179
+ _this.bytesUploadedSoFar += event.loaded - lastSeenBytes_1;
180
+ lastSeenBytes_1 = event.loaded;
181
+ }
182
+ _this.__notifyProgress({
183
+ loaded: _this.bytesUploadedSoFar,
184
+ total: _this.totalBytes,
185
+ part: dataPart.partNumber,
186
+ Key: _this.params.Key,
187
+ Bucket: _this.params.Bucket,
188
+ });
189
+ };
190
+ if (eventEmitter !== null) {
191
+ eventEmitter.on("xhr.upload.progress", uploadEventListener);
192
+ }
193
+ return [4, this_1.client.send(new UploadPartCommand(__assign(__assign({}, this_1.params), { UploadId: this_1.uploadId, Body: dataPart.data, PartNumber: dataPart.partNumber })))];
194
+ case 6:
195
+ partResult = _d.sent();
196
+ if (eventEmitter !== null) {
197
+ eventEmitter.off("xhr.upload.progress", uploadEventListener);
198
+ }
199
+ if (this_1.abortController.signal.aborted) {
200
+ return [2, { value: void 0 }];
201
+ }
202
+ if (!partResult.ETag) {
203
+ throw new Error("Part ".concat(dataPart.partNumber, " is missing ETag in UploadPart response. Missing Bucket CORS configuration for ETag header?"));
204
+ }
205
+ this_1.uploadedParts.push(__assign(__assign(__assign(__assign({ PartNumber: dataPart.partNumber, ETag: partResult.ETag }, (partResult.ChecksumCRC32 && { ChecksumCRC32: partResult.ChecksumCRC32 })), (partResult.ChecksumCRC32C && { ChecksumCRC32C: partResult.ChecksumCRC32C })), (partResult.ChecksumSHA1 && { ChecksumSHA1: partResult.ChecksumSHA1 })), (partResult.ChecksumSHA256 && { ChecksumSHA256: partResult.ChecksumSHA256 })));
206
+ if (eventEmitter === null) {
207
+ this_1.bytesUploadedSoFar += partSize_1;
208
+ }
209
+ this_1.__notifyProgress({
210
+ loaded: this_1.bytesUploadedSoFar,
211
+ total: this_1.totalBytes,
212
+ part: dataPart.partNumber,
213
+ Key: this_1.params.Key,
214
+ Bucket: this_1.params.Bucket,
215
+ });
216
+ return [3, 8];
217
+ case 7:
218
+ e_2 = _d.sent();
219
+ if (!this_1.uploadId) {
220
+ throw e_2;
221
+ }
222
+ if (this_1.leavePartsOnError) {
223
+ throw e_2;
224
+ }
225
+ return [3, 8];
226
+ case 8: return [2];
227
+ }
228
+ });
229
+ };
230
+ this_1 = this;
119
231
  dataFeeder_1 = __asyncValues(dataFeeder);
120
232
  _b.label = 1;
121
233
  case 1: return [4, dataFeeder_1.next()];
122
234
  case 2:
123
- if (!(dataFeeder_1_1 = _b.sent(), !dataFeeder_1_1.done)) return [3, 11];
124
- dataPart = dataFeeder_1_1.value;
125
- if (this.uploadedParts.length > this.MAX_PARTS) {
126
- throw new Error("Exceeded ".concat(this.MAX_PARTS, " as part of the upload to ").concat(this.params.Key, " and ").concat(this.params.Bucket, "."));
127
- }
128
- _b.label = 3;
235
+ if (!(dataFeeder_1_1 = _b.sent(), !dataFeeder_1_1.done)) return [3, 5];
236
+ return [5, _loop_1()];
129
237
  case 3:
130
- _b.trys.push([3, 9, , 10]);
131
- if (this.abortController.signal.aborted) {
132
- return [2];
133
- }
134
- if (!(dataPart.partNumber === 1 && dataPart.lastPart)) return [3, 5];
135
- return [4, this.__uploadUsingPut(dataPart)];
136
- case 4: return [2, _b.sent()];
137
- case 5:
138
- if (!!this.uploadId) return [3, 7];
139
- return [4, this.__createMultipartUpload()];
238
+ state_1 = _b.sent();
239
+ if (typeof state_1 === "object")
240
+ return [2, state_1.value];
241
+ _b.label = 4;
242
+ case 4: return [3, 1];
243
+ case 5: return [3, 12];
140
244
  case 6:
141
- _b.sent();
142
- if (this.abortController.signal.aborted) {
143
- return [2];
144
- }
145
- _b.label = 7;
146
- case 7: return [4, this.client.send(new UploadPartCommand(__assign(__assign({}, this.params), { UploadId: this.uploadId, Body: dataPart.data, PartNumber: dataPart.partNumber })))];
147
- case 8:
148
- partResult = _b.sent();
149
- if (this.abortController.signal.aborted) {
150
- return [2];
151
- }
152
- this.uploadedParts.push(__assign(__assign(__assign(__assign({ PartNumber: dataPart.partNumber, ETag: partResult.ETag }, (partResult.ChecksumCRC32 && { ChecksumCRC32: partResult.ChecksumCRC32 })), (partResult.ChecksumCRC32C && { ChecksumCRC32C: partResult.ChecksumCRC32C })), (partResult.ChecksumSHA1 && { ChecksumSHA1: partResult.ChecksumSHA1 })), (partResult.ChecksumSHA256 && { ChecksumSHA256: partResult.ChecksumSHA256 })));
153
- this.bytesUploadedSoFar += byteLength(dataPart.data);
154
- this.__notifyProgress({
155
- loaded: this.bytesUploadedSoFar,
156
- total: this.totalBytes,
157
- part: dataPart.partNumber,
158
- Key: this.params.Key,
159
- Bucket: this.params.Bucket,
160
- });
161
- return [3, 10];
162
- case 9:
163
- e_2 = _b.sent();
164
- if (!this.uploadId) {
165
- throw e_2;
166
- }
167
- if (this.leavePartsOnError) {
168
- throw e_2;
169
- }
170
- return [3, 10];
171
- case 10: return [3, 1];
172
- case 11: return [3, 18];
173
- case 12:
174
245
  e_1_1 = _b.sent();
175
246
  e_1 = { error: e_1_1 };
176
- return [3, 18];
177
- case 13:
178
- _b.trys.push([13, , 16, 17]);
179
- if (!(dataFeeder_1_1 && !dataFeeder_1_1.done && (_a = dataFeeder_1.return))) return [3, 15];
247
+ return [3, 12];
248
+ case 7:
249
+ _b.trys.push([7, , 10, 11]);
250
+ if (!(dataFeeder_1_1 && !dataFeeder_1_1.done && (_a = dataFeeder_1.return))) return [3, 9];
180
251
  return [4, _a.call(dataFeeder_1)];
181
- case 14:
252
+ case 8:
182
253
  _b.sent();
183
- _b.label = 15;
184
- case 15: return [3, 17];
185
- case 16:
254
+ _b.label = 9;
255
+ case 9: return [3, 11];
256
+ case 10:
186
257
  if (e_1) throw e_1.error;
187
258
  return [7];
188
- case 17: return [7];
189
- case 18: return [2];
259
+ case 11: return [7];
260
+ case 12: return [2];
190
261
  }
191
262
  });
192
263
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/lib-storage",
3
- "version": "3.128.0",
3
+ "version": "3.131.0",
4
4
  "description": "Storage higher order operation",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@aws-sdk/abort-controller": "3.127.0",
38
- "@aws-sdk/client-s3": "3.128.0",
38
+ "@aws-sdk/client-s3": "3.131.0",
39
39
  "@tsconfig/recommended": "1.0.1",
40
40
  "@types/node": "^14.11.2",
41
41
  "concurrently": "7.0.0",