@aws-sdk/client-s3 3.6.1 → 3.6.2
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/S3.spec.ts +0 -1
- package/dist/cjs/S3.spec.js.map +1 -1
- package/dist/cjs/package.json +2 -2
- package/dist/cjs/protocols/Aws_restXml.js +2 -2
- package/dist/cjs/protocols/Aws_restXml.js.map +1 -1
- package/dist/cjs/xml-parser.js +22 -0
- package/dist/cjs/xml-parser.js.map +1 -0
- package/dist/es/S3.spec.js.map +1 -1
- package/dist/es/package.json +2 -2
- package/dist/es/protocols/Aws_restXml.js +1 -1
- package/dist/es/protocols/Aws_restXml.js.map +1 -1
- package/dist/es/xml-parser.js +19 -0
- package/dist/es/xml-parser.js.map +1 -0
- package/package.json +3 -3
- package/protocols/Aws_restXml.ts +2 -2
- package/types/ts3.4/xml-parser.d.ts +4 -0
- package/types/xml-parser.d.ts +4 -0
- package/xml-parser.ts +21 -0
- package/dist/cjs/e2e/S3.ispec.js +0 -237
- package/dist/cjs/e2e/S3.ispec.js.map +0 -1
- package/dist/es/e2e/S3.ispec.js +0 -352
- package/dist/es/e2e/S3.ispec.js.map +0 -1
- package/types/e2e/S3.ispec.d.ts +0 -1
- package/types/ts3.4/e2e/S3.ispec.d.ts +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { XMLParser } from "fast-xml-parser";
|
|
2
|
+
var parser = new XMLParser({
|
|
3
|
+
attributeNamePrefix: "",
|
|
4
|
+
htmlEntities: true,
|
|
5
|
+
ignoreAttributes: false,
|
|
6
|
+
ignoreDeclaration: true,
|
|
7
|
+
parseTagValue: false,
|
|
8
|
+
trimValues: false,
|
|
9
|
+
tagValueProcessor: function (_, val) { return (val.trim() === "" && val.includes("\n") ? "" : undefined); },
|
|
10
|
+
});
|
|
11
|
+
parser.addEntity("#xD", "\r");
|
|
12
|
+
parser.addEntity("#10", "\n");
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export var parse = (function (encoded, ignored) {
|
|
17
|
+
return parser.parse(encoded);
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=xml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-parser.js","sourceRoot":"","sources":["../../xml-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,IAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,mBAAmB,EAAE,EAAE;IACvB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAA1D,CAA0D;CAC1F,CAAC,CAAC;AAEH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,IAAM,KAAK,GAAG,CAAC,UAAC,OAAY,EAAE,OAAa;IAChD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-sdk/client-s3",
|
|
3
3
|
"description": "AWS SDK for JavaScript S3 Client for Node.js, Browser and React Native",
|
|
4
|
-
"version": "3.6.
|
|
4
|
+
"version": "3.6.2",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "yarn remove-definitions && yarn remove-dist && yarn remove-documentation",
|
|
7
7
|
"build-documentation": "yarn remove-documentation && typedoc ./",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@aws-sdk/util-utf8-node": "3.6.1",
|
|
74
74
|
"@aws-sdk/util-waiter": "3.6.1",
|
|
75
75
|
"@aws-sdk/xml-builder": "3.6.1",
|
|
76
|
-
"fast-xml-parser": "
|
|
76
|
+
"fast-xml-parser": "4.1.3",
|
|
77
77
|
"tslib": "^2.0.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
@@ -108,4 +108,4 @@
|
|
|
108
108
|
"url": "https://github.com/aws/aws-sdk-js-v3.git",
|
|
109
109
|
"directory": "clients/client-s3"
|
|
110
110
|
}
|
|
111
|
-
}
|
|
111
|
+
}
|
package/protocols/Aws_restXml.ts
CHANGED
|
@@ -394,7 +394,7 @@ import {
|
|
|
394
394
|
SerdeContext as __SerdeContext,
|
|
395
395
|
} from "@aws-sdk/types";
|
|
396
396
|
import { XmlNode as __XmlNode, XmlText as __XmlText } from "@aws-sdk/xml-builder";
|
|
397
|
-
import { parse as xmlParse } from "
|
|
397
|
+
import { parse as xmlParse } from "../xml-parser";
|
|
398
398
|
|
|
399
399
|
export const serializeAws_restXmlAbortMultipartUploadCommand = async (
|
|
400
400
|
input: AbortMultipartUploadCommandInput,
|
|
@@ -14317,7 +14317,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any =>
|
|
|
14317
14317
|
attributeNamePrefix: "",
|
|
14318
14318
|
ignoreAttributes: false,
|
|
14319
14319
|
parseNodeValue: false,
|
|
14320
|
-
tagValueProcessor: (val, tagName) => decodeEscapedXML(val),
|
|
14320
|
+
tagValueProcessor: (val: any, tagName: any) => decodeEscapedXML(val),
|
|
14321
14321
|
});
|
|
14322
14322
|
const textNodeName = "#text";
|
|
14323
14323
|
const key = Object.keys(parsedObj)[0];
|
package/xml-parser.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { XMLParser } from "fast-xml-parser";
|
|
2
|
+
|
|
3
|
+
const parser = new XMLParser({
|
|
4
|
+
attributeNamePrefix: "",
|
|
5
|
+
htmlEntities: true,
|
|
6
|
+
ignoreAttributes: false,
|
|
7
|
+
ignoreDeclaration: true,
|
|
8
|
+
parseTagValue: false,
|
|
9
|
+
trimValues: false,
|
|
10
|
+
tagValueProcessor: (_, val) => (val.trim() === "" && val.includes("\n") ? "" : undefined),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
parser.addEntity("#xD", "\r");
|
|
14
|
+
parser.addEntity("#10", "\n");
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export const parse = ((encoded: any, ignored?: any) => {
|
|
20
|
+
return parser.parse(encoded);
|
|
21
|
+
}) as any;
|
package/dist/cjs/e2e/S3.ispec.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a, _b, _c, _d, _e;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
/// <reference types="mocha" />
|
|
6
|
-
/**
|
|
7
|
-
* This is the integration test that make sure the client can make request cross-platform-ly
|
|
8
|
-
* in NodeJS, Chromium and Firefox. This test is written in mocha.
|
|
9
|
-
*/
|
|
10
|
-
const chai_1 = tslib_1.__importDefault(require("chai"));
|
|
11
|
-
const chai_as_promised_1 = tslib_1.__importDefault(require("chai-as-promised"));
|
|
12
|
-
const index_1 = require("../index");
|
|
13
|
-
const helpers_1 = require("./helpers");
|
|
14
|
-
chai_1.default.use(chai_as_promised_1.default);
|
|
15
|
-
const { expect } = chai_1.default;
|
|
16
|
-
// There will be default values of defaultRegion, credentials, and isBrowser variable in browser tests.
|
|
17
|
-
// Define the values for Node.js tests
|
|
18
|
-
const region = globalThis.defaultRegion || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.AWS_SMOKE_TEST_REGION);
|
|
19
|
-
const credentials = globalThis.credentials || undefined;
|
|
20
|
-
const isBrowser = globalThis.isBrowser || false;
|
|
21
|
-
const Bucket = ((_d = (_c = (_b = globalThis) === null || _b === void 0 ? void 0 : _b.window) === null || _c === void 0 ? void 0 : _c.__env__) === null || _d === void 0 ? void 0 : _d.AWS_SMOKE_TEST_BUCKET) || ((_e = process === null || process === void 0 ? void 0 : process.env) === null || _e === void 0 ? void 0 : _e.AWS_SMOKE_TEST_BUCKET);
|
|
22
|
-
let Key = `${Date.now()}`;
|
|
23
|
-
describe("@aws-sdk/client-s3", () => {
|
|
24
|
-
const client = new index_1.S3({
|
|
25
|
-
region: region,
|
|
26
|
-
credentials,
|
|
27
|
-
});
|
|
28
|
-
describe("PutObject", () => {
|
|
29
|
-
before(() => {
|
|
30
|
-
Key = `${Date.now()}`;
|
|
31
|
-
});
|
|
32
|
-
after(async () => {
|
|
33
|
-
await client.deleteObject({ Bucket, Key });
|
|
34
|
-
});
|
|
35
|
-
if (isBrowser) {
|
|
36
|
-
const buf = helpers_1.createBuffer("1KB");
|
|
37
|
-
it("should succeed with blob body", async () => {
|
|
38
|
-
const result = await client.putObject({
|
|
39
|
-
Bucket,
|
|
40
|
-
Key,
|
|
41
|
-
Body: new Blob([buf]),
|
|
42
|
-
});
|
|
43
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
44
|
-
});
|
|
45
|
-
it("should succeed with TypedArray body", async () => {
|
|
46
|
-
const result = await client.putObject({
|
|
47
|
-
Bucket,
|
|
48
|
-
Key,
|
|
49
|
-
Body: buf,
|
|
50
|
-
});
|
|
51
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
52
|
-
});
|
|
53
|
-
it("should succeed with ReadableStream body", async () => {
|
|
54
|
-
const length = 10 * 1000; // 10KB
|
|
55
|
-
const chunkSize = 10;
|
|
56
|
-
const readableStream = new ReadableStream({
|
|
57
|
-
start(controller) {
|
|
58
|
-
let sizeLeft = length;
|
|
59
|
-
while (sizeLeft > 0) {
|
|
60
|
-
let chunk = "";
|
|
61
|
-
for (let i = 0; i < Math.min(sizeLeft, chunkSize); i++) {
|
|
62
|
-
chunk += "x";
|
|
63
|
-
}
|
|
64
|
-
controller.enqueue(chunk);
|
|
65
|
-
sizeLeft -= chunk.length;
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
const result = await client.putObject({
|
|
70
|
-
Bucket,
|
|
71
|
-
Key,
|
|
72
|
-
Body: readableStream,
|
|
73
|
-
});
|
|
74
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
it("should succeed with Node.js readable stream body", async () => {
|
|
79
|
-
const length = 10 * 1000; // 10KB
|
|
80
|
-
const chunkSize = 10;
|
|
81
|
-
const { Readable } = require("stream");
|
|
82
|
-
let sizeLeft = length;
|
|
83
|
-
const inputStream = new Readable({
|
|
84
|
-
read() {
|
|
85
|
-
if (sizeLeft <= 0) {
|
|
86
|
-
this.push(null); //end stream;
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
let chunk = "";
|
|
90
|
-
for (let i = 0; i < Math.min(sizeLeft, chunkSize); i++) {
|
|
91
|
-
chunk += "x";
|
|
92
|
-
}
|
|
93
|
-
this.push(chunk);
|
|
94
|
-
sizeLeft -= chunk.length;
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
inputStream.size = length; // This is required
|
|
98
|
-
const result = await client.putObject({
|
|
99
|
-
Bucket,
|
|
100
|
-
Key,
|
|
101
|
-
Body: inputStream,
|
|
102
|
-
});
|
|
103
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
describe("GetObject", function () {
|
|
108
|
-
this.timeout(10 * 1000);
|
|
109
|
-
before(async () => {
|
|
110
|
-
Key = `${Date.now()}`;
|
|
111
|
-
});
|
|
112
|
-
after(async () => {
|
|
113
|
-
await client.deleteObject({ Bucket, Key });
|
|
114
|
-
});
|
|
115
|
-
it("should succeed with valid body payload", async () => {
|
|
116
|
-
// prepare the object.
|
|
117
|
-
const body = helpers_1.createBuffer("1MB");
|
|
118
|
-
await client.putObject({ Bucket, Key, Body: body });
|
|
119
|
-
const result = await client.getObject({ Bucket, Key });
|
|
120
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
121
|
-
if (isBrowser) {
|
|
122
|
-
expect(result.Body).to.be.instanceOf(ReadableStream);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
const { Readable } = require("stream");
|
|
126
|
-
expect(result.Body).to.be.instanceOf(Readable);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
describe("ListObjects", () => {
|
|
131
|
-
before(async () => {
|
|
132
|
-
Key = `${Date.now()}`;
|
|
133
|
-
await client.putObject({ Bucket, Key, Body: "foo" });
|
|
134
|
-
});
|
|
135
|
-
after(async () => {
|
|
136
|
-
await client.deleteObject({ Bucket, Key });
|
|
137
|
-
});
|
|
138
|
-
it("should succeed with valid bucket", async () => {
|
|
139
|
-
const result = await client.listObjects({
|
|
140
|
-
Bucket,
|
|
141
|
-
});
|
|
142
|
-
expect(result.$metadata.httpStatusCode).to.equal(200);
|
|
143
|
-
expect(result.Contents).to.be.instanceOf(Array);
|
|
144
|
-
});
|
|
145
|
-
it("should throw with invalid bucket", () => expect(client.listObjects({ Bucket: "invalid-bucket" })).to.eventually.be.rejected.and.be.an.instanceOf(Error));
|
|
146
|
-
});
|
|
147
|
-
describe("MultipartUpload", () => {
|
|
148
|
-
let UploadId;
|
|
149
|
-
let Etag;
|
|
150
|
-
const multipartObjectKey = `${Key}-multipart`;
|
|
151
|
-
before(() => {
|
|
152
|
-
Key = `${Date.now()}`;
|
|
153
|
-
});
|
|
154
|
-
afterEach(async () => {
|
|
155
|
-
if (UploadId) {
|
|
156
|
-
await client.abortMultipartUpload({
|
|
157
|
-
Bucket,
|
|
158
|
-
Key: multipartObjectKey,
|
|
159
|
-
UploadId,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
await client.deleteObject({
|
|
163
|
-
Bucket,
|
|
164
|
-
Key: multipartObjectKey,
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
it("should successfully create, upload list and complete", async () => {
|
|
168
|
-
var _a, _b;
|
|
169
|
-
//create multipart upload
|
|
170
|
-
const createResult = await client.createMultipartUpload({
|
|
171
|
-
Bucket,
|
|
172
|
-
Key: multipartObjectKey,
|
|
173
|
-
});
|
|
174
|
-
expect(createResult.$metadata.httpStatusCode).to.equal(200);
|
|
175
|
-
expect(typeof createResult.UploadId).to.equal("string");
|
|
176
|
-
UploadId = createResult.UploadId;
|
|
177
|
-
//upload part
|
|
178
|
-
const uploadResult = await client.uploadPart({
|
|
179
|
-
Bucket,
|
|
180
|
-
Key: multipartObjectKey,
|
|
181
|
-
UploadId,
|
|
182
|
-
PartNumber: 1,
|
|
183
|
-
Body: helpers_1.createBuffer("1KB"),
|
|
184
|
-
});
|
|
185
|
-
expect(uploadResult.$metadata.httpStatusCode).to.equal(200);
|
|
186
|
-
expect(typeof uploadResult.ETag).to.equal("string");
|
|
187
|
-
Etag = uploadResult.ETag;
|
|
188
|
-
//list parts
|
|
189
|
-
const listPartsResult = await client.listParts({
|
|
190
|
-
Bucket,
|
|
191
|
-
Key: multipartObjectKey,
|
|
192
|
-
UploadId,
|
|
193
|
-
});
|
|
194
|
-
expect(listPartsResult.$metadata.httpStatusCode).to.equal(200);
|
|
195
|
-
expect((_a = listPartsResult.Parts) === null || _a === void 0 ? void 0 : _a.length).to.equal(1);
|
|
196
|
-
expect((_b = listPartsResult.Parts) === null || _b === void 0 ? void 0 : _b[0].ETag).to.equal(Etag);
|
|
197
|
-
//complete multipart upload
|
|
198
|
-
const completeResult = await client.completeMultipartUpload({
|
|
199
|
-
Bucket,
|
|
200
|
-
Key: multipartObjectKey,
|
|
201
|
-
UploadId,
|
|
202
|
-
MultipartUpload: { Parts: [{ ETag: Etag, PartNumber: 1 }] },
|
|
203
|
-
});
|
|
204
|
-
expect(completeResult.$metadata.httpStatusCode).to.equal(200);
|
|
205
|
-
//validate the object is uploaded
|
|
206
|
-
const headResult = await client.headObject({
|
|
207
|
-
Bucket,
|
|
208
|
-
Key: multipartObjectKey,
|
|
209
|
-
});
|
|
210
|
-
expect(headResult.$metadata.httpStatusCode).to.equal(200);
|
|
211
|
-
});
|
|
212
|
-
it("should successfully create, abort, and list upload", async () => {
|
|
213
|
-
//create multipart upload
|
|
214
|
-
const createResult = await client.createMultipartUpload({
|
|
215
|
-
Bucket,
|
|
216
|
-
Key: multipartObjectKey,
|
|
217
|
-
});
|
|
218
|
-
expect(createResult.$metadata.httpStatusCode).to.equal(200);
|
|
219
|
-
const toAbort = createResult.UploadId;
|
|
220
|
-
expect(typeof toAbort).to.equal("string");
|
|
221
|
-
//abort multipart upload
|
|
222
|
-
const abortResult = await client.abortMultipartUpload({
|
|
223
|
-
Bucket,
|
|
224
|
-
Key: multipartObjectKey,
|
|
225
|
-
UploadId: toAbort,
|
|
226
|
-
});
|
|
227
|
-
expect(abortResult.$metadata.httpStatusCode).to.equal(204);
|
|
228
|
-
//validate multipart upload is aborted
|
|
229
|
-
const listUploadsResult = await client.listMultipartUploads({
|
|
230
|
-
Bucket,
|
|
231
|
-
});
|
|
232
|
-
expect(listUploadsResult.$metadata.httpStatusCode).to.equal(200);
|
|
233
|
-
expect((listUploadsResult.Uploads || []).map((upload) => upload.UploadId)).not.to.contain(toAbort);
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
//# sourceMappingURL=S3.ispec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"S3.ispec.js","sourceRoot":"","sources":["../../../e2e/S3.ispec.ts"],"names":[],"mappings":"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"}
|