@whatwg-node/node-fetch 0.8.0-alpha-20241212160430-140b66f028923f44368e67598b6b66f47f690454 → 0.8.0-alpha-20250917053118-2dc604e028627df01a83e41a3dd6dd3f89ca0b40
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/cjs/AbortError.js +10 -3
- package/cjs/Blob.js +21 -19
- package/cjs/Body.js +146 -76
- package/cjs/FormData.js +54 -41
- package/cjs/Headers.js +54 -15
- package/cjs/ReadableStream.js +62 -26
- package/cjs/Request.js +9 -16
- package/cjs/Response.js +56 -10
- package/cjs/TextEncoderDecoder.js +6 -5
- package/cjs/TextEncoderDecoderStream.js +2 -6
- package/cjs/TransformStream.js +2 -1
- package/cjs/URL.js +10 -66
- package/cjs/URLSearchParams.js +1 -117
- package/cjs/WritableStream.js +35 -111
- package/cjs/fetch.js +37 -8
- package/cjs/fetchCurl.js +30 -61
- package/cjs/fetchNodeHttp.js +60 -64
- package/cjs/index.js +1 -7
- package/cjs/utils.js +76 -55
- package/esm/AbortError.js +10 -3
- package/esm/Blob.js +6 -4
- package/esm/Body.js +134 -63
- package/esm/FormData.js +54 -41
- package/esm/Headers.js +54 -15
- package/esm/ReadableStream.js +57 -21
- package/esm/Request.js +7 -14
- package/esm/Response.js +55 -9
- package/esm/TextEncoderDecoder.js +1 -0
- package/esm/TextEncoderDecoderStream.js +2 -6
- package/esm/TransformStream.js +2 -1
- package/esm/URL.js +9 -64
- package/esm/URLSearchParams.js +1 -115
- package/esm/WritableStream.js +33 -109
- package/esm/fetch.js +35 -6
- package/esm/fetchCurl.js +28 -59
- package/esm/fetchNodeHttp.js +55 -59
- package/esm/index.js +0 -3
- package/esm/utils.js +70 -53
- package/package.json +4 -5
- package/typings/AbortError.d.cts +2 -2
- package/typings/AbortError.d.ts +2 -2
- package/typings/Blob.d.cts +5 -4
- package/typings/Blob.d.ts +5 -4
- package/typings/Body.d.cts +11 -6
- package/typings/Body.d.ts +11 -6
- package/typings/Headers.d.cts +1 -1
- package/typings/Headers.d.ts +1 -1
- package/typings/ReadableStream.d.cts +8 -2
- package/typings/ReadableStream.d.ts +8 -2
- package/typings/Request.d.cts +9 -10
- package/typings/Request.d.ts +9 -10
- package/typings/Response.d.cts +6 -5
- package/typings/Response.d.ts +6 -5
- package/typings/TextEncoderDecoder.d.cts +2 -1
- package/typings/TextEncoderDecoder.d.ts +2 -1
- package/typings/URL.d.cts +12 -16
- package/typings/URL.d.ts +12 -16
- package/typings/URLSearchParams.d.cts +4 -21
- package/typings/URLSearchParams.d.ts +4 -21
- package/typings/WritableStream.d.cts +1 -1
- package/typings/WritableStream.d.ts +1 -1
- package/typings/index.d.cts +0 -3
- package/typings/index.d.ts +0 -3
- package/typings/utils.d.cts +13 -8
- package/typings/utils.d.ts +13 -8
- package/cjs/AbortController.js +0 -18
- package/cjs/AbortSignal.js +0 -92
- package/esm/AbortController.js +0 -14
- package/esm/AbortSignal.js +0 -88
- package/typings/AbortController.d.cts +0 -8
- package/typings/AbortController.d.ts +0 -8
- package/typings/AbortSignal.d.cts +0 -15
- package/typings/AbortSignal.d.ts +0 -15
package/cjs/fetchNodeHttp.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fetchNodeHttp = fetchNodeHttp;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
const node_http_1 = require("node:http");
|
|
5
|
+
const node_https_1 = require("node:https");
|
|
6
|
+
const node_stream_1 = require("node:stream");
|
|
7
|
+
const node_zlib_1 = require("node:zlib");
|
|
8
|
+
const promise_helpers_1 = require("@whatwg-node/promise-helpers");
|
|
8
9
|
const Request_js_1 = require("./Request.js");
|
|
9
10
|
const Response_js_1 = require("./Response.js");
|
|
10
11
|
const URL_js_1 = require("./URL.js");
|
|
11
12
|
const utils_js_1 = require("./utils.js");
|
|
12
13
|
function getRequestFnForProtocol(url) {
|
|
13
14
|
if (url.startsWith('http:')) {
|
|
14
|
-
return
|
|
15
|
+
return node_http_1.request;
|
|
15
16
|
}
|
|
16
17
|
else if (url.startsWith('https:')) {
|
|
17
|
-
return
|
|
18
|
+
return node_https_1.request;
|
|
18
19
|
}
|
|
19
20
|
throw new Error(`Unsupported protocol: ${url.split(':')[0] || url}`);
|
|
20
21
|
}
|
|
@@ -22,30 +23,24 @@ function fetchNodeHttp(fetchRequest) {
|
|
|
22
23
|
return new Promise((resolve, reject) => {
|
|
23
24
|
try {
|
|
24
25
|
const requestFn = getRequestFnForProtocol(fetchRequest.parsedUrl?.protocol || fetchRequest.url);
|
|
25
|
-
const nodeReadable = (fetchRequest.body != null
|
|
26
|
-
? (0, utils_js_1.isNodeReadable)(fetchRequest.body)
|
|
27
|
-
? fetchRequest.body
|
|
28
|
-
: stream_1.Readable.from(fetchRequest.body)
|
|
29
|
-
: null);
|
|
30
26
|
const headersSerializer = fetchRequest.headersSerializer || utils_js_1.getHeadersObj;
|
|
31
27
|
const nodeHeaders = headersSerializer(fetchRequest.headers);
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
nodeHeaders['accept-encoding'] ||= 'gzip, deflate, br';
|
|
29
|
+
nodeHeaders['user-agent'] ||= 'node';
|
|
30
|
+
let signal;
|
|
31
|
+
if (fetchRequest._signal == null) {
|
|
32
|
+
signal = undefined;
|
|
33
|
+
}
|
|
34
|
+
else if (fetchRequest._signal) {
|
|
35
|
+
signal = fetchRequest._signal;
|
|
34
36
|
}
|
|
35
37
|
let nodeRequest;
|
|
36
|
-
//
|
|
37
|
-
if (fetchRequest.parsedUrl
|
|
38
|
-
nodeRequest = requestFn({
|
|
39
|
-
auth: fetchRequest.parsedUrl.username
|
|
40
|
-
? `${fetchRequest.parsedUrl.username}:${fetchRequest.parsedUrl.password}`
|
|
41
|
-
: undefined,
|
|
42
|
-
hostname: fetchRequest.parsedUrl.hostname,
|
|
38
|
+
// If it is our ponyfilled Request, it should have `parsedUrl` which is a `URL` object
|
|
39
|
+
if (fetchRequest.parsedUrl) {
|
|
40
|
+
nodeRequest = requestFn(fetchRequest.parsedUrl, {
|
|
43
41
|
method: fetchRequest.method,
|
|
44
|
-
path: fetchRequest.parsedUrl.pathname + (fetchRequest.parsedUrl.search || ''),
|
|
45
|
-
port: fetchRequest.parsedUrl.port,
|
|
46
|
-
protocol: fetchRequest.parsedUrl.protocol,
|
|
47
42
|
headers: nodeHeaders,
|
|
48
|
-
signal
|
|
43
|
+
signal,
|
|
49
44
|
agent: fetchRequest.agent,
|
|
50
45
|
});
|
|
51
46
|
}
|
|
@@ -53,33 +48,32 @@ function fetchNodeHttp(fetchRequest) {
|
|
|
53
48
|
nodeRequest = requestFn(fetchRequest.url, {
|
|
54
49
|
method: fetchRequest.method,
|
|
55
50
|
headers: nodeHeaders,
|
|
56
|
-
signal
|
|
51
|
+
signal,
|
|
57
52
|
agent: fetchRequest.agent,
|
|
58
53
|
});
|
|
59
54
|
}
|
|
55
|
+
nodeRequest.once('error', reject);
|
|
60
56
|
nodeRequest.once('response', nodeResponse => {
|
|
61
57
|
let outputStream;
|
|
62
58
|
const contentEncoding = nodeResponse.headers['content-encoding'];
|
|
63
59
|
switch (contentEncoding) {
|
|
64
60
|
case 'x-gzip':
|
|
65
61
|
case 'gzip':
|
|
66
|
-
outputStream = (0,
|
|
62
|
+
outputStream = (0, node_zlib_1.createGunzip)();
|
|
67
63
|
break;
|
|
68
64
|
case 'x-deflate':
|
|
69
65
|
case 'deflate':
|
|
70
|
-
outputStream = (0,
|
|
66
|
+
outputStream = (0, node_zlib_1.createInflate)();
|
|
71
67
|
break;
|
|
72
68
|
case 'x-deflate-raw':
|
|
73
69
|
case 'deflate-raw':
|
|
74
|
-
outputStream = (0,
|
|
70
|
+
outputStream = (0, node_zlib_1.createInflateRaw)();
|
|
75
71
|
break;
|
|
76
72
|
case 'br':
|
|
77
|
-
outputStream = (0,
|
|
73
|
+
outputStream = (0, node_zlib_1.createBrotliDecompress)();
|
|
78
74
|
break;
|
|
79
|
-
default:
|
|
80
|
-
outputStream = new stream_1.PassThrough();
|
|
81
75
|
}
|
|
82
|
-
if (nodeResponse.headers.location) {
|
|
76
|
+
if (nodeResponse.headers.location && (0, utils_js_1.shouldRedirect)(nodeResponse.statusCode)) {
|
|
83
77
|
if (fetchRequest.redirect === 'error') {
|
|
84
78
|
const redirectError = new Error('Redirects are not allowed');
|
|
85
79
|
reject(redirectError);
|
|
@@ -97,48 +91,50 @@ function fetchNodeHttp(fetchRequest) {
|
|
|
97
91
|
return;
|
|
98
92
|
}
|
|
99
93
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
.catch(reject);
|
|
111
|
-
if (fetchRequest['_signal']) {
|
|
112
|
-
outputStream.once('error', () => {
|
|
113
|
-
if (!fetchRequest['_signal']?.aborted) {
|
|
114
|
-
fetchRequest['_signal']?.sendAbort?.();
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
outputStream.once('close', () => {
|
|
118
|
-
if (!fetchRequest['_signal']?.aborted) {
|
|
119
|
-
fetchRequest['_signal']?.sendAbort?.();
|
|
94
|
+
outputStream ||= new node_stream_1.PassThrough();
|
|
95
|
+
(0, utils_js_1.pipeThrough)({
|
|
96
|
+
src: nodeResponse,
|
|
97
|
+
dest: outputStream,
|
|
98
|
+
signal,
|
|
99
|
+
onError: e => {
|
|
100
|
+
if (!nodeResponse.destroyed) {
|
|
101
|
+
nodeResponse.destroy(e);
|
|
120
102
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (!fetchRequest['_signal']?.aborted) {
|
|
124
|
-
fetchRequest['_signal']?.sendAbort?.();
|
|
103
|
+
if (!outputStream.destroyed) {
|
|
104
|
+
outputStream.destroy(e);
|
|
125
105
|
}
|
|
126
|
-
|
|
106
|
+
reject(e);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const statusCode = nodeResponse.statusCode || 200;
|
|
110
|
+
let statusText = nodeResponse.statusMessage || node_http_1.STATUS_CODES[statusCode];
|
|
111
|
+
if (statusText == null) {
|
|
112
|
+
statusText = '';
|
|
127
113
|
}
|
|
128
|
-
const ponyfillResponse = new Response_js_1.PonyfillResponse(outputStream, {
|
|
129
|
-
status:
|
|
130
|
-
statusText
|
|
114
|
+
const ponyfillResponse = new Response_js_1.PonyfillResponse(outputStream || nodeResponse, {
|
|
115
|
+
status: statusCode,
|
|
116
|
+
statusText,
|
|
131
117
|
headers: nodeResponse.headers,
|
|
132
118
|
url: fetchRequest.url,
|
|
119
|
+
signal,
|
|
133
120
|
});
|
|
134
121
|
resolve(ponyfillResponse);
|
|
135
122
|
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
nodeReadable.pipe(nodeRequest);
|
|
123
|
+
if (fetchRequest['_buffer'] != null) {
|
|
124
|
+
(0, promise_helpers_1.handleMaybePromise)(() => (0, utils_js_1.safeWrite)(fetchRequest['_buffer'], nodeRequest), () => (0, utils_js_1.endStream)(nodeRequest), reject);
|
|
139
125
|
}
|
|
140
126
|
else {
|
|
141
|
-
|
|
127
|
+
const nodeReadable = (fetchRequest.body != null
|
|
128
|
+
? (0, utils_js_1.isNodeReadable)(fetchRequest.body)
|
|
129
|
+
? fetchRequest.body
|
|
130
|
+
: node_stream_1.Readable.from(fetchRequest.body)
|
|
131
|
+
: null);
|
|
132
|
+
if (nodeReadable) {
|
|
133
|
+
nodeReadable.pipe(nodeRequest);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
(0, utils_js_1.endStream)(nodeRequest);
|
|
137
|
+
}
|
|
142
138
|
}
|
|
143
139
|
}
|
|
144
140
|
catch (e) {
|
package/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.TextEncoderStream = exports.TextDecoderStream = exports.IteratorObject = exports.DecompressionStream = exports.CompressionStream = exports.TransformStream = exports.WritableStream = exports.URLSearchParams = exports.URL = exports.btoa = exports.TextDecoder = exports.TextEncoder = exports.Blob = exports.FormData = exports.File = exports.ReadableStream = exports.Response = exports.Request = exports.Body = exports.Headers = exports.fetch = void 0;
|
|
4
4
|
var fetch_js_1 = require("./fetch.js");
|
|
5
5
|
Object.defineProperty(exports, "fetch", { enumerable: true, get: function () { return fetch_js_1.fetchPonyfill; } });
|
|
6
6
|
var Headers_js_1 = require("./Headers.js");
|
|
@@ -40,9 +40,3 @@ Object.defineProperty(exports, "IteratorObject", { enumerable: true, get: functi
|
|
|
40
40
|
var TextEncoderDecoderStream_js_1 = require("./TextEncoderDecoderStream.js");
|
|
41
41
|
Object.defineProperty(exports, "TextDecoderStream", { enumerable: true, get: function () { return TextEncoderDecoderStream_js_1.PonyfillTextDecoderStream; } });
|
|
42
42
|
Object.defineProperty(exports, "TextEncoderStream", { enumerable: true, get: function () { return TextEncoderDecoderStream_js_1.PonyfillTextEncoderStream; } });
|
|
43
|
-
var AbortController_js_1 = require("./AbortController.js");
|
|
44
|
-
Object.defineProperty(exports, "AbortController", { enumerable: true, get: function () { return AbortController_js_1.PonyfillAbortController; } });
|
|
45
|
-
var AbortSignal_js_1 = require("./AbortSignal.js");
|
|
46
|
-
Object.defineProperty(exports, "AbortSignal", { enumerable: true, get: function () { return AbortSignal_js_1.PonyfillAbortSignal; } });
|
|
47
|
-
var AbortError_js_1 = require("./AbortError.js");
|
|
48
|
-
Object.defineProperty(exports, "AbortError", { enumerable: true, get: function () { return AbortError_js_1.PonyfillAbortError; } });
|
package/cjs/utils.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fakePromise = void 0;
|
|
3
4
|
exports.getHeadersObj = getHeadersObj;
|
|
4
5
|
exports.defaultHeadersSerializer = defaultHeadersSerializer;
|
|
5
|
-
exports.fakePromise = fakePromise;
|
|
6
6
|
exports.isArrayBufferView = isArrayBufferView;
|
|
7
7
|
exports.isNodeReadable = isNodeReadable;
|
|
8
|
-
exports.createDeferredPromise = createDeferredPromise;
|
|
9
8
|
exports.isIterable = isIterable;
|
|
9
|
+
exports.shouldRedirect = shouldRedirect;
|
|
10
|
+
exports.pipeThrough = pipeThrough;
|
|
11
|
+
exports.endStream = endStream;
|
|
12
|
+
exports.safeWrite = safeWrite;
|
|
13
|
+
const node_events_1 = require("node:events");
|
|
10
14
|
function isHeadersInstance(obj) {
|
|
11
15
|
return obj?.forEach != null;
|
|
12
16
|
}
|
|
@@ -14,6 +18,11 @@ function getHeadersObj(headers) {
|
|
|
14
18
|
if (headers == null || !isHeadersInstance(headers)) {
|
|
15
19
|
return headers;
|
|
16
20
|
}
|
|
21
|
+
// @ts-expect-error - `headersInit` is not a public property
|
|
22
|
+
if (headers.headersInit && !headers._map && !isHeadersInstance(headers.headersInit)) {
|
|
23
|
+
// @ts-expect-error - `headersInit` is not a public property
|
|
24
|
+
return headers.headersInit;
|
|
25
|
+
}
|
|
17
26
|
return Object.fromEntries(headers.entries());
|
|
18
27
|
}
|
|
19
28
|
function defaultHeadersSerializer(headers, onContentLength) {
|
|
@@ -26,65 +35,77 @@ function defaultHeadersSerializer(headers, onContentLength) {
|
|
|
26
35
|
});
|
|
27
36
|
return headerArray;
|
|
28
37
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
function fakePromise(value) {
|
|
33
|
-
if (isPromise(value)) {
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
// Write a fake promise to avoid the promise constructor
|
|
37
|
-
// being called with `new Promise` in the browser.
|
|
38
|
-
return {
|
|
39
|
-
then(resolve) {
|
|
40
|
-
if (resolve) {
|
|
41
|
-
const callbackResult = resolve(value);
|
|
42
|
-
if (isPromise(callbackResult)) {
|
|
43
|
-
return callbackResult;
|
|
44
|
-
}
|
|
45
|
-
return fakePromise(callbackResult);
|
|
46
|
-
}
|
|
47
|
-
return this;
|
|
48
|
-
},
|
|
49
|
-
catch() {
|
|
50
|
-
return this;
|
|
51
|
-
},
|
|
52
|
-
finally(cb) {
|
|
53
|
-
if (cb) {
|
|
54
|
-
const callbackResult = cb();
|
|
55
|
-
if (isPromise(callbackResult)) {
|
|
56
|
-
return callbackResult.then(() => value);
|
|
57
|
-
}
|
|
58
|
-
return fakePromise(value);
|
|
59
|
-
}
|
|
60
|
-
return this;
|
|
61
|
-
},
|
|
62
|
-
[Symbol.toStringTag]: 'Promise',
|
|
63
|
-
};
|
|
64
|
-
}
|
|
38
|
+
var promise_helpers_1 = require("@whatwg-node/promise-helpers");
|
|
39
|
+
Object.defineProperty(exports, "fakePromise", { enumerable: true, get: function () { return promise_helpers_1.fakePromise; } });
|
|
65
40
|
function isArrayBufferView(obj) {
|
|
66
41
|
return obj != null && obj.buffer != null && obj.byteLength != null && obj.byteOffset != null;
|
|
67
42
|
}
|
|
68
43
|
function isNodeReadable(obj) {
|
|
69
44
|
return obj != null && obj.pipe != null;
|
|
70
45
|
}
|
|
71
|
-
function createDeferredPromise() {
|
|
72
|
-
let resolveFn;
|
|
73
|
-
let rejectFn;
|
|
74
|
-
const promise = new Promise(function deferredPromiseExecutor(resolve, reject) {
|
|
75
|
-
resolveFn = resolve;
|
|
76
|
-
rejectFn = reject;
|
|
77
|
-
});
|
|
78
|
-
return {
|
|
79
|
-
promise,
|
|
80
|
-
get resolve() {
|
|
81
|
-
return resolveFn;
|
|
82
|
-
},
|
|
83
|
-
get reject() {
|
|
84
|
-
return rejectFn;
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
46
|
function isIterable(value) {
|
|
89
47
|
return value?.[Symbol.iterator] != null;
|
|
90
48
|
}
|
|
49
|
+
function shouldRedirect(status) {
|
|
50
|
+
return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
|
|
51
|
+
}
|
|
52
|
+
function pipeThrough({ src, dest, signal, onError, }) {
|
|
53
|
+
if (onError) {
|
|
54
|
+
// listen for errors on the destination stream if necessary. if the readable
|
|
55
|
+
// stream (src) emits an error, the writable destination (dest) will be
|
|
56
|
+
// destroyed with that error (see below)
|
|
57
|
+
dest.once('error', onError);
|
|
58
|
+
}
|
|
59
|
+
src.once('error', (e) => {
|
|
60
|
+
// if the readable stream (src) emits an error during pipe, the writable
|
|
61
|
+
// destination (dest) is not closed automatically. that needs to be
|
|
62
|
+
// done manually. the readable stream is closed when error is emitted,
|
|
63
|
+
// so only the writable destination needs to be destroyed
|
|
64
|
+
dest.destroy(e);
|
|
65
|
+
});
|
|
66
|
+
dest.once('close', () => {
|
|
67
|
+
// if the writable destination (dest) is closed, the readable stream (src)
|
|
68
|
+
// is not closed automatically. that needs to be done manually
|
|
69
|
+
if (!src.destroyed) {
|
|
70
|
+
src.destroy();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
if (signal) {
|
|
74
|
+
// this is faster than `import('node:signal').addAbortSignal(signal, src)`
|
|
75
|
+
const srcRef = new WeakRef(src);
|
|
76
|
+
const signalRef = new WeakRef(signal);
|
|
77
|
+
function cleanup() {
|
|
78
|
+
signalRef.deref()?.removeEventListener('abort', onAbort);
|
|
79
|
+
srcRef.deref()?.removeListener('end', cleanup);
|
|
80
|
+
srcRef.deref()?.removeListener('error', cleanup);
|
|
81
|
+
srcRef.deref()?.removeListener('close', cleanup);
|
|
82
|
+
}
|
|
83
|
+
function onAbort() {
|
|
84
|
+
srcRef.deref()?.destroy(new AbortError());
|
|
85
|
+
cleanup();
|
|
86
|
+
}
|
|
87
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
88
|
+
// this is faster than `import('node:signal').finished(src, cleanup)`
|
|
89
|
+
src.once('end', cleanup);
|
|
90
|
+
src.once('error', cleanup);
|
|
91
|
+
src.once('close', cleanup);
|
|
92
|
+
}
|
|
93
|
+
src.pipe(dest, { end: true /* already default */ });
|
|
94
|
+
}
|
|
95
|
+
function endStream(stream) {
|
|
96
|
+
// @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
|
|
97
|
+
return stream.end(null, null, null);
|
|
98
|
+
}
|
|
99
|
+
function safeWrite(chunk, stream) {
|
|
100
|
+
const result = stream.write(chunk);
|
|
101
|
+
if (!result) {
|
|
102
|
+
return (0, node_events_1.once)(stream, 'drain');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// https://github.com/nodejs/node/blob/f692878dec6354c0a82241f224906981861bc840/lib/internal/errors.js#L961-L973
|
|
106
|
+
class AbortError extends Error {
|
|
107
|
+
constructor(message = 'The operation was aborted', options = undefined) {
|
|
108
|
+
super(message, options);
|
|
109
|
+
this.name = 'AbortError';
|
|
110
|
+
}
|
|
111
|
+
}
|
package/esm/AbortError.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
export class PonyfillAbortError extends
|
|
2
|
-
constructor() {
|
|
3
|
-
|
|
1
|
+
export class PonyfillAbortError extends Error {
|
|
2
|
+
constructor(reason) {
|
|
3
|
+
let message = 'The operation was aborted';
|
|
4
|
+
if (reason) {
|
|
5
|
+
message += ` reason: ${reason}`;
|
|
6
|
+
}
|
|
7
|
+
super(message, {
|
|
8
|
+
cause: reason,
|
|
9
|
+
});
|
|
10
|
+
this.name = 'AbortError';
|
|
4
11
|
}
|
|
5
12
|
get reason() {
|
|
6
13
|
return this.cause;
|
package/esm/Blob.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */
|
|
2
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
3
|
+
import { Buffer } from 'node:buffer';
|
|
2
4
|
import { PonyfillReadableStream } from './ReadableStream.js';
|
|
3
5
|
import { fakePromise, isArrayBufferView } from './utils.js';
|
|
4
6
|
function getBlobPartAsBuffer(blobPart) {
|
|
@@ -114,7 +116,7 @@ export class PonyfillBlob {
|
|
|
114
116
|
}
|
|
115
117
|
arrayBuffer() {
|
|
116
118
|
if (this._buffer) {
|
|
117
|
-
// @ts-
|
|
119
|
+
// @ts-ignore - Mismatch between Buffer and ArrayBuffer
|
|
118
120
|
return fakePromise(this._buffer);
|
|
119
121
|
}
|
|
120
122
|
if (this.blobParts.length === 1) {
|
|
@@ -125,7 +127,7 @@ export class PonyfillBlob {
|
|
|
125
127
|
return this.blobParts[0].arrayBuffer();
|
|
126
128
|
}
|
|
127
129
|
}
|
|
128
|
-
// @ts-
|
|
130
|
+
// @ts-ignore - Mismatch between Buffer and ArrayBuffer
|
|
129
131
|
return this.buffer();
|
|
130
132
|
}
|
|
131
133
|
bytes() {
|
|
@@ -135,11 +137,11 @@ export class PonyfillBlob {
|
|
|
135
137
|
if (this.blobParts.length === 1) {
|
|
136
138
|
if (Buffer.isBuffer(this.blobParts[0])) {
|
|
137
139
|
this._buffer = this.blobParts[0];
|
|
138
|
-
return fakePromise(this.
|
|
140
|
+
return fakePromise(this._buffer);
|
|
139
141
|
}
|
|
140
142
|
if (this.blobParts[0] instanceof Uint8Array) {
|
|
141
143
|
this._buffer = Buffer.from(this.blobParts[0]);
|
|
142
|
-
return fakePromise(this.
|
|
144
|
+
return fakePromise(this._buffer);
|
|
143
145
|
}
|
|
144
146
|
if (hasBytesMethod(this.blobParts[0])) {
|
|
145
147
|
return this.blobParts[0].bytes();
|