@whatwg-node/node-fetch 0.7.19-alpha-20250507123452-fcbe4f1b230a420fdf82832fcaba10f27b872611 → 0.7.19-alpha-20250507125010-3b86c4db8ccd42c15b53329aee3bd22d2bef1e32
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/TransformStream.js +2 -1
- package/cjs/WritableStream.js +12 -41
- package/cjs/fetchNodeHttp.js +4 -6
- package/cjs/utils.js +12 -0
- package/esm/TransformStream.js +2 -1
- package/esm/WritableStream.js +13 -42
- package/esm/fetchNodeHttp.js +5 -7
- package/esm/utils.js +10 -0
- package/package.json +1 -1
- package/typings/utils.d.cts +7 -0
- package/typings/utils.d.ts +7 -0
package/cjs/TransformStream.js
CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PonyfillTransformStream = void 0;
|
4
4
|
const node_stream_1 = require("node:stream");
|
5
5
|
const ReadableStream_js_1 = require("./ReadableStream.js");
|
6
|
+
const utils_js_1 = require("./utils.js");
|
6
7
|
const WritableStream_js_1 = require("./WritableStream.js");
|
7
8
|
class PonyfillTransformStream {
|
8
9
|
transform;
|
@@ -21,7 +22,7 @@ class PonyfillTransformStream {
|
|
21
22
|
transform.destroy(reason);
|
22
23
|
},
|
23
24
|
terminate() {
|
24
|
-
|
25
|
+
(0, utils_js_1.endStream)(transform);
|
25
26
|
},
|
26
27
|
get desiredSize() {
|
27
28
|
return transform.writableLength;
|
package/cjs/WritableStream.js
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.PonyfillWritableStream = void 0;
|
4
4
|
const node_stream_1 = require("node:stream");
|
5
|
+
const promise_helpers_1 = require("@whatwg-node/promise-helpers");
|
5
6
|
const utils_js_1 = require("./utils.js");
|
6
7
|
class PonyfillWritableStream {
|
7
8
|
writable;
|
@@ -78,39 +79,20 @@ class PonyfillWritableStream {
|
|
78
79
|
// no-op
|
79
80
|
},
|
80
81
|
write(chunk) {
|
82
|
+
const promise = (0, utils_js_1.fakePromise)();
|
81
83
|
if (chunk == null) {
|
82
|
-
return
|
84
|
+
return promise;
|
83
85
|
}
|
84
|
-
return
|
85
|
-
writable.write(chunk, (err) => {
|
86
|
-
if (err) {
|
87
|
-
reject(err);
|
88
|
-
}
|
89
|
-
else {
|
90
|
-
resolve();
|
91
|
-
}
|
92
|
-
});
|
93
|
-
});
|
86
|
+
return promise.then(() => (0, utils_js_1.safeWrite)(chunk, writable));
|
94
87
|
},
|
95
88
|
close() {
|
96
89
|
if (!writable.errored && writable.closed) {
|
97
90
|
return (0, utils_js_1.fakePromise)();
|
98
91
|
}
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
else {
|
104
|
-
writable.end((err) => {
|
105
|
-
if (err) {
|
106
|
-
reject(err);
|
107
|
-
}
|
108
|
-
else {
|
109
|
-
resolve();
|
110
|
-
}
|
111
|
-
});
|
112
|
-
}
|
113
|
-
});
|
92
|
+
if (writable.errored) {
|
93
|
+
return (0, promise_helpers_1.fakeRejectPromise)(writable.errored);
|
94
|
+
}
|
95
|
+
return (0, utils_js_1.fakePromise)().then(() => (0, utils_js_1.endStream)(writable));
|
114
96
|
},
|
115
97
|
abort(reason) {
|
116
98
|
return new Promise(resolve => {
|
@@ -124,21 +106,10 @@ class PonyfillWritableStream {
|
|
124
106
|
if (!this.writable.errored && this.writable.closed) {
|
125
107
|
return (0, utils_js_1.fakePromise)();
|
126
108
|
}
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
else {
|
132
|
-
this.writable.end((err) => {
|
133
|
-
if (err) {
|
134
|
-
reject(err);
|
135
|
-
}
|
136
|
-
else {
|
137
|
-
resolve();
|
138
|
-
}
|
139
|
-
});
|
140
|
-
}
|
141
|
-
});
|
109
|
+
if (this.writable.errored) {
|
110
|
+
return (0, promise_helpers_1.fakeRejectPromise)(this.writable.errored);
|
111
|
+
}
|
112
|
+
return (0, utils_js_1.fakePromise)().then(() => (0, utils_js_1.endStream)(this.writable));
|
142
113
|
}
|
143
114
|
abort(reason) {
|
144
115
|
return new Promise(resolve => {
|
package/cjs/fetchNodeHttp.js
CHANGED
@@ -5,6 +5,7 @@ const node_http_1 = require("node:http");
|
|
5
5
|
const node_https_1 = require("node:https");
|
6
6
|
const node_stream_1 = require("node:stream");
|
7
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");
|
@@ -45,6 +46,7 @@ function fetchNodeHttp(fetchRequest) {
|
|
45
46
|
agent: fetchRequest.agent,
|
46
47
|
});
|
47
48
|
}
|
49
|
+
nodeRequest.once('error', reject);
|
48
50
|
nodeRequest.once('response', nodeResponse => {
|
49
51
|
let outputStream;
|
50
52
|
const contentEncoding = nodeResponse.headers['content-encoding'];
|
@@ -105,11 +107,8 @@ function fetchNodeHttp(fetchRequest) {
|
|
105
107
|
});
|
106
108
|
resolve(ponyfillResponse);
|
107
109
|
});
|
108
|
-
nodeRequest.once('error', reject);
|
109
110
|
if (fetchRequest['_buffer'] != null) {
|
110
|
-
|
111
|
-
// @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
|
112
|
-
nodeRequest.end(null, null, null);
|
111
|
+
(0, promise_helpers_1.handleMaybePromise)(() => (0, utils_js_1.safeWrite)(fetchRequest['_buffer'], nodeRequest), () => (0, utils_js_1.endStream)(nodeRequest), reject);
|
113
112
|
}
|
114
113
|
else {
|
115
114
|
const nodeReadable = (fetchRequest.body != null
|
@@ -121,8 +120,7 @@ function fetchNodeHttp(fetchRequest) {
|
|
121
120
|
nodeReadable.pipe(nodeRequest);
|
122
121
|
}
|
123
122
|
else {
|
124
|
-
|
125
|
-
nodeRequest.end(null, null, null);
|
123
|
+
(0, utils_js_1.endStream)(nodeRequest);
|
126
124
|
}
|
127
125
|
}
|
128
126
|
}
|
package/cjs/utils.js
CHANGED
@@ -8,6 +8,8 @@ exports.isNodeReadable = isNodeReadable;
|
|
8
8
|
exports.isIterable = isIterable;
|
9
9
|
exports.shouldRedirect = shouldRedirect;
|
10
10
|
exports.wrapIncomingMessageWithPassthrough = wrapIncomingMessageWithPassthrough;
|
11
|
+
exports.endStream = endStream;
|
12
|
+
exports.safeWrite = safeWrite;
|
11
13
|
const node_stream_1 = require("node:stream");
|
12
14
|
const promises_1 = require("node:stream/promises");
|
13
15
|
function isHeadersInstance(obj) {
|
@@ -58,3 +60,13 @@ function wrapIncomingMessageWithPassthrough({ incomingMessage, signal, passThrou
|
|
58
60
|
.catch(onError);
|
59
61
|
return passThrough;
|
60
62
|
}
|
63
|
+
function endStream(stream) {
|
64
|
+
// @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
|
65
|
+
return stream.end(null, null, null);
|
66
|
+
}
|
67
|
+
function safeWrite(chunk, stream) {
|
68
|
+
const result = stream.write(chunk);
|
69
|
+
if (!result) {
|
70
|
+
return new Promise(resolve => stream.once('drain', resolve));
|
71
|
+
}
|
72
|
+
}
|
package/esm/TransformStream.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { Transform } from 'node:stream';
|
2
2
|
import { PonyfillReadableStream } from './ReadableStream.js';
|
3
|
+
import { endStream } from './utils.js';
|
3
4
|
import { PonyfillWritableStream } from './WritableStream.js';
|
4
5
|
export class PonyfillTransformStream {
|
5
6
|
transform;
|
@@ -18,7 +19,7 @@ export class PonyfillTransformStream {
|
|
18
19
|
transform.destroy(reason);
|
19
20
|
},
|
20
21
|
terminate() {
|
21
|
-
transform
|
22
|
+
endStream(transform);
|
22
23
|
},
|
23
24
|
get desiredSize() {
|
24
25
|
return transform.writableLength;
|
package/esm/WritableStream.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { Writable } from 'node:stream';
|
2
|
-
import {
|
2
|
+
import { fakeRejectPromise } from '@whatwg-node/promise-helpers';
|
3
|
+
import { endStream, fakePromise, safeWrite } from './utils.js';
|
3
4
|
export class PonyfillWritableStream {
|
4
5
|
writable;
|
5
6
|
constructor(underlyingSink) {
|
@@ -75,39 +76,20 @@ export class PonyfillWritableStream {
|
|
75
76
|
// no-op
|
76
77
|
},
|
77
78
|
write(chunk) {
|
79
|
+
const promise = fakePromise();
|
78
80
|
if (chunk == null) {
|
79
|
-
return
|
81
|
+
return promise;
|
80
82
|
}
|
81
|
-
return
|
82
|
-
writable.write(chunk, (err) => {
|
83
|
-
if (err) {
|
84
|
-
reject(err);
|
85
|
-
}
|
86
|
-
else {
|
87
|
-
resolve();
|
88
|
-
}
|
89
|
-
});
|
90
|
-
});
|
83
|
+
return promise.then(() => safeWrite(chunk, writable));
|
91
84
|
},
|
92
85
|
close() {
|
93
86
|
if (!writable.errored && writable.closed) {
|
94
87
|
return fakePromise();
|
95
88
|
}
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
else {
|
101
|
-
writable.end((err) => {
|
102
|
-
if (err) {
|
103
|
-
reject(err);
|
104
|
-
}
|
105
|
-
else {
|
106
|
-
resolve();
|
107
|
-
}
|
108
|
-
});
|
109
|
-
}
|
110
|
-
});
|
89
|
+
if (writable.errored) {
|
90
|
+
return fakeRejectPromise(writable.errored);
|
91
|
+
}
|
92
|
+
return fakePromise().then(() => endStream(writable));
|
111
93
|
},
|
112
94
|
abort(reason) {
|
113
95
|
return new Promise(resolve => {
|
@@ -121,21 +103,10 @@ export class PonyfillWritableStream {
|
|
121
103
|
if (!this.writable.errored && this.writable.closed) {
|
122
104
|
return fakePromise();
|
123
105
|
}
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
else {
|
129
|
-
this.writable.end((err) => {
|
130
|
-
if (err) {
|
131
|
-
reject(err);
|
132
|
-
}
|
133
|
-
else {
|
134
|
-
resolve();
|
135
|
-
}
|
136
|
-
});
|
137
|
-
}
|
138
|
-
});
|
106
|
+
if (this.writable.errored) {
|
107
|
+
return fakeRejectPromise(this.writable.errored);
|
108
|
+
}
|
109
|
+
return fakePromise().then(() => endStream(this.writable));
|
139
110
|
}
|
140
111
|
abort(reason) {
|
141
112
|
return new Promise(resolve => {
|
package/esm/fetchNodeHttp.js
CHANGED
@@ -2,10 +2,11 @@ import { request as httpRequest, STATUS_CODES } from 'node:http';
|
|
2
2
|
import { request as httpsRequest } from 'node:https';
|
3
3
|
import { Readable } from 'node:stream';
|
4
4
|
import { createBrotliDecompress, createGunzip, createInflate, createInflateRaw } from 'node:zlib';
|
5
|
+
import { handleMaybePromise } from '@whatwg-node/promise-helpers';
|
5
6
|
import { PonyfillRequest } from './Request.js';
|
6
7
|
import { PonyfillResponse } from './Response.js';
|
7
8
|
import { PonyfillURL } from './URL.js';
|
8
|
-
import { getHeadersObj, isNodeReadable, shouldRedirect, wrapIncomingMessageWithPassthrough, } from './utils.js';
|
9
|
+
import { endStream, getHeadersObj, isNodeReadable, safeWrite, shouldRedirect, wrapIncomingMessageWithPassthrough, } from './utils.js';
|
9
10
|
function getRequestFnForProtocol(url) {
|
10
11
|
if (url.startsWith('http:')) {
|
11
12
|
return httpRequest;
|
@@ -42,6 +43,7 @@ export function fetchNodeHttp(fetchRequest) {
|
|
42
43
|
agent: fetchRequest.agent,
|
43
44
|
});
|
44
45
|
}
|
46
|
+
nodeRequest.once('error', reject);
|
45
47
|
nodeRequest.once('response', nodeResponse => {
|
46
48
|
let outputStream;
|
47
49
|
const contentEncoding = nodeResponse.headers['content-encoding'];
|
@@ -102,11 +104,8 @@ export function fetchNodeHttp(fetchRequest) {
|
|
102
104
|
});
|
103
105
|
resolve(ponyfillResponse);
|
104
106
|
});
|
105
|
-
nodeRequest.once('error', reject);
|
106
107
|
if (fetchRequest['_buffer'] != null) {
|
107
|
-
|
108
|
-
// @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
|
109
|
-
nodeRequest.end(null, null, null);
|
108
|
+
handleMaybePromise(() => safeWrite(fetchRequest['_buffer'], nodeRequest), () => endStream(nodeRequest), reject);
|
110
109
|
}
|
111
110
|
else {
|
112
111
|
const nodeReadable = (fetchRequest.body != null
|
@@ -118,8 +117,7 @@ export function fetchNodeHttp(fetchRequest) {
|
|
118
117
|
nodeReadable.pipe(nodeRequest);
|
119
118
|
}
|
120
119
|
else {
|
121
|
-
|
122
|
-
nodeRequest.end(null, null, null);
|
120
|
+
endStream(nodeRequest);
|
123
121
|
}
|
124
122
|
}
|
125
123
|
}
|
package/esm/utils.js
CHANGED
@@ -47,3 +47,13 @@ export function wrapIncomingMessageWithPassthrough({ incomingMessage, signal, pa
|
|
47
47
|
.catch(onError);
|
48
48
|
return passThrough;
|
49
49
|
}
|
50
|
+
export function endStream(stream) {
|
51
|
+
// @ts-expect-error Avoid arguments adaptor trampoline https://v8.dev/blog/adaptor-frame
|
52
|
+
return stream.end(null, null, null);
|
53
|
+
}
|
54
|
+
export function safeWrite(chunk, stream) {
|
55
|
+
const result = stream.write(chunk);
|
56
|
+
if (!result) {
|
57
|
+
return new Promise(resolve => stream.once('drain', resolve));
|
58
|
+
}
|
59
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@whatwg-node/node-fetch",
|
3
|
-
"version": "0.7.19-alpha-
|
3
|
+
"version": "0.7.19-alpha-20250507125010-3b86c4db8ccd42c15b53329aee3bd22d2bef1e32",
|
4
4
|
"description": "Fetch API implementation for Node",
|
5
5
|
"sideEffects": false,
|
6
6
|
"dependencies": {
|
package/typings/utils.d.cts
CHANGED
@@ -13,3 +13,10 @@ export declare function wrapIncomingMessageWithPassthrough({ incomingMessage, si
|
|
13
13
|
signal?: AbortSignal | undefined;
|
14
14
|
onError?: (e: Error) => void;
|
15
15
|
}): PassThrough;
|
16
|
+
export declare function endStream(stream: {
|
17
|
+
end: () => void;
|
18
|
+
}): void;
|
19
|
+
export declare function safeWrite(chunk: any, stream: {
|
20
|
+
write: (chunk: any) => boolean;
|
21
|
+
once: (event: string, listener: () => void) => void;
|
22
|
+
}): Promise<void> | undefined;
|
package/typings/utils.d.ts
CHANGED
@@ -13,3 +13,10 @@ export declare function wrapIncomingMessageWithPassthrough({ incomingMessage, si
|
|
13
13
|
signal?: AbortSignal | undefined;
|
14
14
|
onError?: (e: Error) => void;
|
15
15
|
}): PassThrough;
|
16
|
+
export declare function endStream(stream: {
|
17
|
+
end: () => void;
|
18
|
+
}): void;
|
19
|
+
export declare function safeWrite(chunk: any, stream: {
|
20
|
+
write: (chunk: any) => boolean;
|
21
|
+
once: (event: string, listener: () => void) => void;
|
22
|
+
}): Promise<void> | undefined;
|