happy-dom 13.7.0 → 13.7.1
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.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/cjs/PropertySymbol.cjs +2 -1
- package/cjs/PropertySymbol.cjs.map +1 -1
- package/cjs/PropertySymbol.d.ts +1 -0
- package/cjs/PropertySymbol.d.ts.map +1 -1
- package/cjs/config/IHTMLElementTagNameMap.d.ts.map +1 -1
- package/cjs/fetch/Fetch.cjs +7 -31
- package/cjs/fetch/Fetch.cjs.map +1 -1
- package/cjs/fetch/Fetch.d.ts +0 -10
- package/cjs/fetch/Fetch.d.ts.map +1 -1
- package/cjs/fetch/Response.cjs +2 -6
- package/cjs/fetch/Response.cjs.map +1 -1
- package/cjs/fetch/Response.d.ts.map +1 -1
- package/cjs/fetch/utilities/FetchBodyUtility.cjs +62 -19
- package/cjs/fetch/utilities/FetchBodyUtility.cjs.map +1 -1
- package/cjs/fetch/utilities/FetchBodyUtility.d.ts +24 -12
- package/cjs/fetch/utilities/FetchBodyUtility.d.ts.map +1 -1
- package/cjs/location/Location.cjs.map +1 -1
- package/cjs/location/Location.d.ts.map +1 -1
- package/cjs/version.cjs +1 -1
- package/lib/PropertySymbol.d.ts +1 -0
- package/lib/PropertySymbol.d.ts.map +1 -1
- package/lib/PropertySymbol.js +1 -0
- package/lib/PropertySymbol.js.map +1 -1
- package/lib/config/IHTMLElementTagNameMap.d.ts.map +1 -1
- package/lib/fetch/Fetch.d.ts +0 -10
- package/lib/fetch/Fetch.d.ts.map +1 -1
- package/lib/fetch/Fetch.js +7 -31
- package/lib/fetch/Fetch.js.map +1 -1
- package/lib/fetch/Response.d.ts.map +1 -1
- package/lib/fetch/Response.js +2 -6
- package/lib/fetch/Response.js.map +1 -1
- package/lib/fetch/utilities/FetchBodyUtility.d.ts +24 -12
- package/lib/fetch/utilities/FetchBodyUtility.d.ts.map +1 -1
- package/lib/fetch/utilities/FetchBodyUtility.js +62 -19
- package/lib/fetch/utilities/FetchBodyUtility.js.map +1 -1
- package/lib/location/Location.d.ts.map +1 -1
- package/lib/location/Location.js.map +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/PropertySymbol.ts +1 -0
- package/src/config/IHTMLElementTagNameMap.ts +4 -1
- package/src/fetch/Fetch.ts +25 -34
- package/src/fetch/Response.ts +3 -6
- package/src/fetch/utilities/FetchBodyUtility.ts +67 -20
- package/src/location/Location.ts +1 -1
@@ -7,27 +7,11 @@ import Blob from '../../file/Blob.js';
|
|
7
7
|
import DOMException from '../../exception/DOMException.js';
|
8
8
|
import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
|
9
9
|
import { Buffer } from 'buffer';
|
10
|
+
import Stream from 'stream';
|
10
11
|
/**
|
11
12
|
* Fetch body utility.
|
12
13
|
*/
|
13
14
|
export default class FetchBodyUtility {
|
14
|
-
/**
|
15
|
-
* Wraps a given value in a browser ReadableStream.
|
16
|
-
*
|
17
|
-
* This method creates a ReadableStream and immediately enqueues and closes it
|
18
|
-
* with the provided value, useful for stream API compatibility.
|
19
|
-
*
|
20
|
-
* @param value The value to be wrapped in a ReadableStream.
|
21
|
-
* @returns ReadableStream
|
22
|
-
*/
|
23
|
-
static toReadableStream(value) {
|
24
|
-
return new ReadableStream({
|
25
|
-
start(controller) {
|
26
|
-
controller.enqueue(value);
|
27
|
-
controller.close();
|
28
|
-
}
|
29
|
-
});
|
30
|
-
}
|
31
15
|
/**
|
32
16
|
* Parses body and returns stream and type.
|
33
17
|
*
|
@@ -111,15 +95,31 @@ export default class FetchBodyUtility {
|
|
111
95
|
* It creates a pass through stream and pipes the original stream to it.
|
112
96
|
*
|
113
97
|
* @param requestOrResponse Request or Response.
|
114
|
-
* @param requestOrResponse.body
|
115
|
-
* @param requestOrResponse.bodyUsed
|
98
|
+
* @param requestOrResponse.body Body.
|
99
|
+
* @param requestOrResponse.bodyUsed Body used.
|
116
100
|
* @returns New stream.
|
117
101
|
*/
|
118
102
|
static cloneBodyStream(requestOrResponse) {
|
119
103
|
if (requestOrResponse.bodyUsed) {
|
120
104
|
throw new DOMException(`Failed to clone body stream of request: Request body is already used.`, DOMExceptionNameEnum.invalidStateError);
|
121
105
|
}
|
106
|
+
// If a buffer is set, use it to create a new stream.
|
107
|
+
if (requestOrResponse[PropertySymbol.buffer]) {
|
108
|
+
return this.toReadableStream(requestOrResponse[PropertySymbol.buffer]);
|
109
|
+
}
|
110
|
+
// Pipe underlying node stream if it exists.
|
111
|
+
if (requestOrResponse.body[PropertySymbol.nodeStream]) {
|
112
|
+
const stream1 = new Stream.PassThrough();
|
113
|
+
const stream2 = new Stream.PassThrough();
|
114
|
+
requestOrResponse.body[PropertySymbol.nodeStream].pipe(stream1);
|
115
|
+
requestOrResponse.body[PropertySymbol.nodeStream].pipe(stream2);
|
116
|
+
// Sets the body of the cloned request/response to the first pass through stream.
|
117
|
+
requestOrResponse.body = this.nodeToWebStream(stream1);
|
118
|
+
// Returns the clone.
|
119
|
+
return this.nodeToWebStream(stream2);
|
120
|
+
}
|
122
121
|
// Uses the tee() method to clone the ReadableStream
|
122
|
+
// This requires the stream to be consumed in parallel which is not the case for the fetch API
|
123
123
|
const [stream1, stream2] = requestOrResponse.body.tee();
|
124
124
|
// Sets the body of the cloned request to the first pass through stream.
|
125
125
|
// TODO: check id this is required as request should be read only object
|
@@ -175,5 +175,48 @@ export default class FetchBodyUtility {
|
|
175
175
|
throw new DOMException(`Could not create Buffer from response body. Error: ${error.message}.`, DOMExceptionNameEnum.invalidStateError);
|
176
176
|
}
|
177
177
|
}
|
178
|
+
/**
|
179
|
+
* Wraps a given value in a browser ReadableStream.
|
180
|
+
*
|
181
|
+
* This method creates a ReadableStream and immediately enqueues and closes it
|
182
|
+
* with the provided value, useful for stream API compatibility.
|
183
|
+
*
|
184
|
+
* @param value The value to be wrapped in a ReadableStream.
|
185
|
+
* @returns ReadableStream
|
186
|
+
*/
|
187
|
+
static toReadableStream(value) {
|
188
|
+
return new ReadableStream({
|
189
|
+
start(controller) {
|
190
|
+
controller.enqueue(value);
|
191
|
+
controller.close();
|
192
|
+
}
|
193
|
+
});
|
194
|
+
}
|
195
|
+
/**
|
196
|
+
* Wraps a Node.js stream into a browser-compatible ReadableStream.
|
197
|
+
*
|
198
|
+
* Enables the use of Node.js streams where browser ReadableStreams are required.
|
199
|
+
* Handles 'data', 'end', and 'error' events from the Node.js stream.
|
200
|
+
*
|
201
|
+
* @param nodeStream The Node.js stream to be converted.
|
202
|
+
* @returns ReadableStream
|
203
|
+
*/
|
204
|
+
static nodeToWebStream(nodeStream) {
|
205
|
+
const readableStream = new ReadableStream({
|
206
|
+
start(controller) {
|
207
|
+
nodeStream.on('data', (chunk) => {
|
208
|
+
controller.enqueue(chunk);
|
209
|
+
});
|
210
|
+
nodeStream.on('end', () => {
|
211
|
+
controller.close();
|
212
|
+
});
|
213
|
+
nodeStream.on('error', (err) => {
|
214
|
+
controller.error(err);
|
215
|
+
});
|
216
|
+
}
|
217
|
+
});
|
218
|
+
readableStream[PropertySymbol.nodeStream] = nodeStream;
|
219
|
+
return readableStream;
|
220
|
+
}
|
178
221
|
}
|
179
222
|
//# sourceMappingURL=FetchBodyUtility.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FetchBodyUtility.js","sourceRoot":"","sources":["../../../src/fetch/utilities/FetchBodyUtility.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,QAAQ,MAAM,6BAA6B,CAAC;AACnD,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,oBAAoB,MAAM,yCAAyC,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"FetchBodyUtility.js","sourceRoot":"","sources":["../../../src/fetch/utilities/FetchBodyUtility.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,QAAQ,MAAM,6BAA6B,CAAC;AACnD,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,oBAAoB,MAAM,yCAAyC,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC;;;;;;;;OAQG;IACI,MAAM,CAAC,aAAa,CAAC,IAAkC;QAM7D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;aAAM,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5C,OAAO;gBACN,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBACrC,WAAW,EAAE,iDAAiD;gBAC9D,aAAa,EAAE,MAAM,CAAC,MAAM;aAC5B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAU,IAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnD,OAAO;gBACN,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBACrC,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,aAAa,EAAE,IAAI,CAAC,IAAI;aACxB,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO;gBACN,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACnC,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI,CAAC,MAAM;aAC1B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO;gBACN,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBACrC,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI,CAAC,UAAU;aAC9B,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO;gBACN,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBACrC,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI,CAAC,UAAU;aAC9B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;YAC3C,OAAO;gBACN,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI;aACnB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YACrC,OAAO,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,OAAO;YACN,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACrC,WAAW,EAAE,0BAA0B;YACvC,aAAa,EAAE,MAAM,CAAC,MAAM;SAC5B,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,eAAe,CAAC,iBAG7B;QACA,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CACrB,uEAAuE,EACvE,oBAAoB,CAAC,iBAAiB,CACtC,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,4CAA4C;QAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChE,iFAAiF;YACjF,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACvD,qBAAqB;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,oDAAoD;QACpD,8FAA8F;QAC9F,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAExD,wEAAwE;QACxE,wEAAwE;QACxD,iBAAiB,CAAC,IAAI,IAAI,OAAO,CAAC;QAElD,wCAAwC;QACxC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAA2B;QAChE,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,YAAY,cAAc,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC;YACJ,IAAI,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;gBAC/B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACnC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,YAAY,CACrB,wCAAwC,KAAK,CAAC,OAAO,GAAG,EACxD,oBAAoB,CAAC,aAAa,CAClC,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CACrB,sDAAsD,KAAK,CAAC,OAAO,GAAG,EACtE,oBAAoB,CAAC,iBAAiB,CACtC,CAAC;QACH,CAAC;IACF,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,gBAAgB,CAAC,KAAK;QACnC,OAAO,IAAI,cAAc,CAAC;YACzB,KAAK,CAAC,UAAU;gBACf,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,eAAe,CAAC,UAAkB;QAC/C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;YACzC,KAAK,CAAC,UAAU;gBACf,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC/B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBAEH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACzB,UAAU,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC9B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACJ,CAAC;SACD,CAAC,CAAC;QACH,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;QACvD,OAAO,cAAc,CAAC;IACvB,CAAC;CACD"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Location.d.ts","sourceRoot":"","sources":["../../src/location/Location.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAE9D,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAErB,CAAC,MAAM,CAAC,WAAW,CAAC,
|
1
|
+
{"version":3,"file":"Location.d.ts","sourceRoot":"","sources":["../../src/location/Location.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAE9D,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAErB,CAAC,MAAM,CAAC,WAAW,CAAC,SAAc;IAMzC;;;;;OAKG;gBACS,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;IAKpD;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAS3B;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAM3B;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAMnC;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAW,IAAI,CAAC,GAAG,EAAE,MAAM,EAE1B;IAED;;;;OAIG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAMnC;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAM3B;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAMnC;IAED;;;;OAIG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;;;OAIG;IACH,IAAW,MAAM,CAAC,MAAM,EAAE,MAAM,EAM/B;IAED;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACI,MAAM,IAAI,IAAI;IAMrB;;;;;OAKG;IACI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ9E;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Location.js","sourceRoot":"","sources":["../../src/location/Location.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAQ5B;;;;;OAKG;IACH,YAAY,YAA2B,EAAE,GAAW;QAbpD,oBAAoB;QACb,QAAoB,
|
1
|
+
{"version":3,"file":"Location.js","sourceRoot":"","sources":["../../src/location/Location.ts"],"names":[],"mappings":"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"}
|
package/lib/version.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export default { version: '13.7.
|
1
|
+
export default { version: '13.7.1' };
|
package/package.json
CHANGED
package/src/PropertySymbol.ts
CHANGED
@@ -23,8 +23,11 @@ import IHTMLVideoElement from '../nodes/html-video-element/IHTMLVideoElement.js'
|
|
23
23
|
|
24
24
|
// Makes it work with custom elements when they declare their own interface.
|
25
25
|
declare global {
|
26
|
-
/* eslint-disable
|
26
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
27
|
+
/* eslint-disable @typescript-eslint/no-empty-interface */
|
27
28
|
interface HTMLElementTagNameMap {}
|
29
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
30
|
+
/* eslint-enable @typescript-eslint/no-empty-interface */
|
28
31
|
}
|
29
32
|
|
30
33
|
export default interface IHTMLElementTagNameMap extends HTMLElementTagNameMap {
|
package/src/fetch/Fetch.ts
CHANGED
@@ -14,7 +14,6 @@ import { Socket } from 'net';
|
|
14
14
|
import Stream from 'stream';
|
15
15
|
import DataURIParser from './data-uri/DataURIParser.js';
|
16
16
|
import FetchCORSUtility from './utilities/FetchCORSUtility.js';
|
17
|
-
import { ReadableStream } from 'stream/web';
|
18
17
|
import Request from './Request.js';
|
19
18
|
import Response from './Response.js';
|
20
19
|
import Event from '../event/Event.js';
|
@@ -28,6 +27,7 @@ import FetchResponseRedirectUtility from './utilities/FetchResponseRedirectUtili
|
|
28
27
|
import FetchResponseHeaderUtility from './utilities/FetchResponseHeaderUtility.js';
|
29
28
|
import FetchHTTPSCertificate from './certificate/FetchHTTPSCertificate.js';
|
30
29
|
import { Buffer } from 'buffer';
|
30
|
+
import FetchBodyUtility from './utilities/FetchBodyUtility.js';
|
31
31
|
|
32
32
|
const LAST_CHUNK = Buffer.from('0\r\n\r\n');
|
33
33
|
|
@@ -545,7 +545,10 @@ export default class Fetch {
|
|
545
545
|
nodeResponse.statusCode === 204 ||
|
546
546
|
nodeResponse.statusCode === 304
|
547
547
|
) {
|
548
|
-
this.response = new this.#window.Response(
|
548
|
+
this.response = new this.#window.Response(
|
549
|
+
FetchBodyUtility.nodeToWebStream(body),
|
550
|
+
responseOptions
|
551
|
+
);
|
549
552
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
550
553
|
(<string>this.response.url) = this.request.url;
|
551
554
|
this.resolve(this.response);
|
@@ -567,7 +570,10 @@ export default class Fetch {
|
|
567
570
|
// Ignore error as it is forwarded to the response body.
|
568
571
|
}
|
569
572
|
});
|
570
|
-
this.response = new this.#window.Response(
|
573
|
+
this.response = new this.#window.Response(
|
574
|
+
FetchBodyUtility.nodeToWebStream(body),
|
575
|
+
responseOptions
|
576
|
+
);
|
571
577
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
572
578
|
(<string>this.response.url) = this.request.url;
|
573
579
|
this.resolve(this.response);
|
@@ -599,7 +605,10 @@ export default class Fetch {
|
|
599
605
|
});
|
600
606
|
}
|
601
607
|
|
602
|
-
this.response = new this.#window.Response(
|
608
|
+
this.response = new this.#window.Response(
|
609
|
+
FetchBodyUtility.nodeToWebStream(body),
|
610
|
+
responseOptions
|
611
|
+
);
|
603
612
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
604
613
|
(<string>this.response.url) = this.request.url;
|
605
614
|
this.resolve(this.response);
|
@@ -607,7 +616,10 @@ export default class Fetch {
|
|
607
616
|
raw.on('end', () => {
|
608
617
|
// Some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
|
609
618
|
if (!this.response) {
|
610
|
-
this.response = new this.#window.Response(
|
619
|
+
this.response = new this.#window.Response(
|
620
|
+
FetchBodyUtility.nodeToWebStream(body),
|
621
|
+
responseOptions
|
622
|
+
);
|
611
623
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
612
624
|
(<string>this.response.url) = this.request.url;
|
613
625
|
this.resolve(this.response);
|
@@ -623,7 +635,10 @@ export default class Fetch {
|
|
623
635
|
// Ignore error as it is forwarded to the response body.
|
624
636
|
}
|
625
637
|
});
|
626
|
-
this.response = new this.#window.Response(
|
638
|
+
this.response = new this.#window.Response(
|
639
|
+
FetchBodyUtility.nodeToWebStream(body),
|
640
|
+
responseOptions
|
641
|
+
);
|
627
642
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
628
643
|
(<string>this.response.url) = this.request.url;
|
629
644
|
this.resolve(this.response);
|
@@ -631,7 +646,10 @@ export default class Fetch {
|
|
631
646
|
}
|
632
647
|
|
633
648
|
// Otherwise, use response as is
|
634
|
-
this.response = new this.#window.Response(
|
649
|
+
this.response = new this.#window.Response(
|
650
|
+
FetchBodyUtility.nodeToWebStream(body),
|
651
|
+
responseOptions
|
652
|
+
);
|
635
653
|
(<boolean>this.response.redirected) = this.redirectCount > 0;
|
636
654
|
(<string>this.response.url) = this.request.url;
|
637
655
|
this.resolve(this.response);
|
@@ -806,31 +824,4 @@ export default class Fetch {
|
|
806
824
|
this.reject(error);
|
807
825
|
}
|
808
826
|
}
|
809
|
-
|
810
|
-
/**
|
811
|
-
* Wraps a Node.js stream into a browser-compatible ReadableStream.
|
812
|
-
*
|
813
|
-
* Enables the use of Node.js streams where browser ReadableStreams are required.
|
814
|
-
* Handles 'data', 'end', and 'error' events from the Node.js stream.
|
815
|
-
*
|
816
|
-
* @param nodeStream The Node.js stream to be converted.
|
817
|
-
* @returns ReadableStream
|
818
|
-
*/
|
819
|
-
private nodeToWebStream(nodeStream: Stream): ReadableStream {
|
820
|
-
return new ReadableStream({
|
821
|
-
start(controller) {
|
822
|
-
nodeStream.on('data', (chunk) => {
|
823
|
-
controller.enqueue(chunk);
|
824
|
-
});
|
825
|
-
|
826
|
-
nodeStream.on('end', () => {
|
827
|
-
controller.close();
|
828
|
-
});
|
829
|
-
|
830
|
-
nodeStream.on('error', (err) => {
|
831
|
-
controller.error(err);
|
832
|
-
});
|
833
|
-
}
|
834
|
-
});
|
835
|
-
}
|
836
827
|
}
|
package/src/fetch/Response.ts
CHANGED
@@ -267,18 +267,15 @@ export default class Response implements IResponse {
|
|
267
267
|
* @returns Clone.
|
268
268
|
*/
|
269
269
|
public clone(): Response {
|
270
|
-
const
|
270
|
+
const body = FetchBodyUtility.cloneBodyStream(this);
|
271
|
+
|
272
|
+
const response = new this.#window.Response(body, {
|
271
273
|
status: this.status,
|
272
274
|
statusText: this.statusText,
|
273
275
|
headers: this.headers
|
274
276
|
});
|
275
277
|
|
276
|
-
(<number>response.status) = this.status;
|
277
|
-
(<string>response.statusText) = this.statusText;
|
278
278
|
(<boolean>response.ok) = this.ok;
|
279
|
-
(<Headers>response.headers) = new Headers(this.headers);
|
280
|
-
(<ReadableStream>response.body) = this.body;
|
281
|
-
(<boolean>response.bodyUsed) = this.bodyUsed;
|
282
279
|
(<boolean>response.redirected) = this.redirected;
|
283
280
|
(<string>response.type) = this.type;
|
284
281
|
(<string>response.url) = this.url;
|
@@ -9,29 +9,12 @@ import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
|
|
9
9
|
import IRequestBody from '../types/IRequestBody.js';
|
10
10
|
import IResponseBody from '../types/IResponseBody.js';
|
11
11
|
import { Buffer } from 'buffer';
|
12
|
+
import Stream from 'stream';
|
12
13
|
|
13
14
|
/**
|
14
15
|
* Fetch body utility.
|
15
16
|
*/
|
16
17
|
export default class FetchBodyUtility {
|
17
|
-
/**
|
18
|
-
* Wraps a given value in a browser ReadableStream.
|
19
|
-
*
|
20
|
-
* This method creates a ReadableStream and immediately enqueues and closes it
|
21
|
-
* with the provided value, useful for stream API compatibility.
|
22
|
-
*
|
23
|
-
* @param value The value to be wrapped in a ReadableStream.
|
24
|
-
* @returns ReadableStream
|
25
|
-
*/
|
26
|
-
public static toReadableStream(value): ReadableStream {
|
27
|
-
return new ReadableStream({
|
28
|
-
start(controller) {
|
29
|
-
controller.enqueue(value);
|
30
|
-
controller.close();
|
31
|
-
}
|
32
|
-
});
|
33
|
-
}
|
34
|
-
|
35
18
|
/**
|
36
19
|
* Parses body and returns stream and type.
|
37
20
|
*
|
@@ -115,8 +98,8 @@ export default class FetchBodyUtility {
|
|
115
98
|
* It creates a pass through stream and pipes the original stream to it.
|
116
99
|
*
|
117
100
|
* @param requestOrResponse Request or Response.
|
118
|
-
* @param requestOrResponse.body
|
119
|
-
* @param requestOrResponse.bodyUsed
|
101
|
+
* @param requestOrResponse.body Body.
|
102
|
+
* @param requestOrResponse.bodyUsed Body used.
|
120
103
|
* @returns New stream.
|
121
104
|
*/
|
122
105
|
public static cloneBodyStream(requestOrResponse: {
|
@@ -130,7 +113,25 @@ export default class FetchBodyUtility {
|
|
130
113
|
);
|
131
114
|
}
|
132
115
|
|
116
|
+
// If a buffer is set, use it to create a new stream.
|
117
|
+
if (requestOrResponse[PropertySymbol.buffer]) {
|
118
|
+
return this.toReadableStream(requestOrResponse[PropertySymbol.buffer]);
|
119
|
+
}
|
120
|
+
|
121
|
+
// Pipe underlying node stream if it exists.
|
122
|
+
if (requestOrResponse.body[PropertySymbol.nodeStream]) {
|
123
|
+
const stream1 = new Stream.PassThrough();
|
124
|
+
const stream2 = new Stream.PassThrough();
|
125
|
+
requestOrResponse.body[PropertySymbol.nodeStream].pipe(stream1);
|
126
|
+
requestOrResponse.body[PropertySymbol.nodeStream].pipe(stream2);
|
127
|
+
// Sets the body of the cloned request/response to the first pass through stream.
|
128
|
+
requestOrResponse.body = this.nodeToWebStream(stream1);
|
129
|
+
// Returns the clone.
|
130
|
+
return this.nodeToWebStream(stream2);
|
131
|
+
}
|
132
|
+
|
133
133
|
// Uses the tee() method to clone the ReadableStream
|
134
|
+
// This requires the stream to be consumed in parallel which is not the case for the fetch API
|
134
135
|
const [stream1, stream2] = requestOrResponse.body.tee();
|
135
136
|
|
136
137
|
// Sets the body of the cloned request to the first pass through stream.
|
@@ -198,4 +199,50 @@ export default class FetchBodyUtility {
|
|
198
199
|
);
|
199
200
|
}
|
200
201
|
}
|
202
|
+
/**
|
203
|
+
* Wraps a given value in a browser ReadableStream.
|
204
|
+
*
|
205
|
+
* This method creates a ReadableStream and immediately enqueues and closes it
|
206
|
+
* with the provided value, useful for stream API compatibility.
|
207
|
+
*
|
208
|
+
* @param value The value to be wrapped in a ReadableStream.
|
209
|
+
* @returns ReadableStream
|
210
|
+
*/
|
211
|
+
public static toReadableStream(value): ReadableStream {
|
212
|
+
return new ReadableStream({
|
213
|
+
start(controller) {
|
214
|
+
controller.enqueue(value);
|
215
|
+
controller.close();
|
216
|
+
}
|
217
|
+
});
|
218
|
+
}
|
219
|
+
|
220
|
+
/**
|
221
|
+
* Wraps a Node.js stream into a browser-compatible ReadableStream.
|
222
|
+
*
|
223
|
+
* Enables the use of Node.js streams where browser ReadableStreams are required.
|
224
|
+
* Handles 'data', 'end', and 'error' events from the Node.js stream.
|
225
|
+
*
|
226
|
+
* @param nodeStream The Node.js stream to be converted.
|
227
|
+
* @returns ReadableStream
|
228
|
+
*/
|
229
|
+
public static nodeToWebStream(nodeStream: Stream): ReadableStream {
|
230
|
+
const readableStream = new ReadableStream({
|
231
|
+
start(controller) {
|
232
|
+
nodeStream.on('data', (chunk) => {
|
233
|
+
controller.enqueue(chunk);
|
234
|
+
});
|
235
|
+
|
236
|
+
nodeStream.on('end', () => {
|
237
|
+
controller.close();
|
238
|
+
});
|
239
|
+
|
240
|
+
nodeStream.on('error', (err) => {
|
241
|
+
controller.error(err);
|
242
|
+
});
|
243
|
+
}
|
244
|
+
});
|
245
|
+
readableStream[PropertySymbol.nodeStream] = nodeStream;
|
246
|
+
return readableStream;
|
247
|
+
}
|
201
248
|
}
|
package/src/location/Location.ts
CHANGED