@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 +27 -0
- package/dist-cjs/Upload.js +52 -1
- package/dist-es/Upload.js +133 -62
- package/package.json +2 -2
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
|
package/dist-cjs/Upload.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
124
|
-
|
|
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.
|
|
131
|
-
if (
|
|
132
|
-
return [2];
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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,
|
|
177
|
-
case
|
|
178
|
-
_b.trys.push([
|
|
179
|
-
if (!(dataFeeder_1_1 && !dataFeeder_1_1.done && (_a = dataFeeder_1.return))) return [3,
|
|
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
|
|
252
|
+
case 8:
|
|
182
253
|
_b.sent();
|
|
183
|
-
_b.label =
|
|
184
|
-
case
|
|
185
|
-
case
|
|
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
|
|
189
|
-
case
|
|
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.
|
|
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.
|
|
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",
|