@whatwg-node/node-fetch 0.5.3 → 0.5.4

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/fetchCurl.js CHANGED
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetchCurl = void 0;
4
4
  const node_stream_1 = require("node:stream");
5
- const AbortError_js_1 = require("./AbortError.js");
6
5
  const Response_js_1 = require("./Response.js");
7
6
  const utils_js_1 = require("./utils.js");
8
7
  function fetchCurl(fetchRequest) {
9
- const { Curl, CurlCode, CurlFeature, CurlPause, CurlProgressFunc } = globalThis['libcurl'];
8
+ const { Curl, CurlFeature, CurlPause, CurlProgressFunc } = globalThis['libcurl'];
10
9
  const curlHandle = new Curl();
11
10
  curlHandle.enable(CurlFeature.NoDataParsing);
12
11
  curlHandle.setOpt('URL', fetchRequest.url);
@@ -53,17 +52,11 @@ function fetchCurl(fetchRequest) {
53
52
  curlHandle.setOpt('HTTPHEADER', curlHeaders);
54
53
  curlHandle.enable(CurlFeature.NoHeaderParsing);
55
54
  return new Promise(function promiseResolver(resolve, reject) {
56
- let streamResolved = false;
55
+ let streamResolved;
57
56
  if (fetchRequest['_signal']) {
58
57
  fetchRequest['_signal'].onabort = () => {
59
- if (streamResolved) {
60
- if (curlHandle.isOpen) {
61
- curlHandle.pause(CurlPause.Recv);
62
- }
63
- }
64
- else {
65
- reject(new AbortError_js_1.PonyfillAbortError());
66
- curlHandle.close();
58
+ if (curlHandle.isOpen) {
59
+ curlHandle.pause(CurlPause.Recv);
67
60
  }
68
61
  };
69
62
  }
@@ -71,11 +64,10 @@ function fetchCurl(fetchRequest) {
71
64
  curlHandle.close();
72
65
  });
73
66
  curlHandle.once('error', function errorListener(error) {
74
- if (error.isCurlError && error.code === CurlCode.CURLE_ABORTED_BY_CALLBACK) {
75
- // this is expected
67
+ if (streamResolved && !streamResolved.closed && !streamResolved.destroyed) {
68
+ streamResolved.destroy(error);
76
69
  }
77
70
  else {
78
- // this is unexpected
79
71
  reject(error);
80
72
  }
81
73
  curlHandle.close();
@@ -88,6 +80,7 @@ function fetchCurl(fetchRequest) {
88
80
  if (headerFilter && !headerFilter.startsWith('HTTP/')) {
89
81
  if (fetchRequest.redirect === 'error' &&
90
82
  (headerFilter.includes('location') || headerFilter.includes('Location'))) {
83
+ stream.destroy();
91
84
  reject(new Error('redirect is not allowed'));
92
85
  }
93
86
  return true;
@@ -100,7 +93,7 @@ function fetchCurl(fetchRequest) {
100
93
  headers: headersInit,
101
94
  url: fetchRequest.url,
102
95
  }));
103
- streamResolved = true;
96
+ streamResolved = stream;
104
97
  });
105
98
  curlHandle.perform();
106
99
  });
package/esm/fetchCurl.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { Readable } from 'node:stream';
2
- import { PonyfillAbortError } from './AbortError.js';
3
2
  import { PonyfillResponse } from './Response.js';
4
3
  import { defaultHeadersSerializer, isNodeReadable } from './utils.js';
5
4
  export function fetchCurl(fetchRequest) {
6
- const { Curl, CurlCode, CurlFeature, CurlPause, CurlProgressFunc } = globalThis['libcurl'];
5
+ const { Curl, CurlFeature, CurlPause, CurlProgressFunc } = globalThis['libcurl'];
7
6
  const curlHandle = new Curl();
8
7
  curlHandle.enable(CurlFeature.NoDataParsing);
9
8
  curlHandle.setOpt('URL', fetchRequest.url);
@@ -50,17 +49,11 @@ export function fetchCurl(fetchRequest) {
50
49
  curlHandle.setOpt('HTTPHEADER', curlHeaders);
51
50
  curlHandle.enable(CurlFeature.NoHeaderParsing);
52
51
  return new Promise(function promiseResolver(resolve, reject) {
53
- let streamResolved = false;
52
+ let streamResolved;
54
53
  if (fetchRequest['_signal']) {
55
54
  fetchRequest['_signal'].onabort = () => {
56
- if (streamResolved) {
57
- if (curlHandle.isOpen) {
58
- curlHandle.pause(CurlPause.Recv);
59
- }
60
- }
61
- else {
62
- reject(new PonyfillAbortError());
63
- curlHandle.close();
55
+ if (curlHandle.isOpen) {
56
+ curlHandle.pause(CurlPause.Recv);
64
57
  }
65
58
  };
66
59
  }
@@ -68,11 +61,10 @@ export function fetchCurl(fetchRequest) {
68
61
  curlHandle.close();
69
62
  });
70
63
  curlHandle.once('error', function errorListener(error) {
71
- if (error.isCurlError && error.code === CurlCode.CURLE_ABORTED_BY_CALLBACK) {
72
- // this is expected
64
+ if (streamResolved && !streamResolved.closed && !streamResolved.destroyed) {
65
+ streamResolved.destroy(error);
73
66
  }
74
67
  else {
75
- // this is unexpected
76
68
  reject(error);
77
69
  }
78
70
  curlHandle.close();
@@ -85,6 +77,7 @@ export function fetchCurl(fetchRequest) {
85
77
  if (headerFilter && !headerFilter.startsWith('HTTP/')) {
86
78
  if (fetchRequest.redirect === 'error' &&
87
79
  (headerFilter.includes('location') || headerFilter.includes('Location'))) {
80
+ stream.destroy();
88
81
  reject(new Error('redirect is not allowed'));
89
82
  }
90
83
  return true;
@@ -97,7 +90,7 @@ export function fetchCurl(fetchRequest) {
97
90
  headers: headersInit,
98
91
  url: fetchRequest.url,
99
92
  }));
100
- streamResolved = true;
93
+ streamResolved = stream;
101
94
  });
102
95
  curlHandle.perform();
103
96
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whatwg-node/node-fetch",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "Fetch API implementation for Node",
5
5
  "sideEffects": false,
6
6
  "dependencies": {