Skip to content

Commit eb54144

Browse files
authored
1 parent a9203c7 commit eb54144

File tree

5 files changed

+20
-4
lines changed

5 files changed

+20
-4
lines changed

.changeset/gentle-fans-invent.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@remix-run/web-fetch": patch
3+
---
4+
5+
Make Request signal handling follow spec: https://fetch.spec.whatwg.org/#ref-for-map-exists%E2%91%A0%E2%91%A3

packages/fetch/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@
7777
"@types/chai-as-promised": "^7.1.5",
7878
"@types/chai-string": "^1.4.2",
7979
"@types/mocha": "^9.1.0",
80-
"abort-controller": "^3.0.0",
8180
"abortcontroller-polyfill": "^1.7.1",
8281
"busboy": "^0.3.1",
8382
"c8": "^7.3.0",
@@ -101,6 +100,7 @@
101100
"@remix-run/web-form-data": "^3.0.3",
102101
"@remix-run/web-stream": "^1.0.3",
103102
"@web3-storage/multipart-parser": "^1.0.0",
103+
"abort-controller": "^3.0.0",
104104
"data-uri-to-buffer": "^3.0.1",
105105
"mrmime": "^1.0.0"
106106
},

packages/fetch/src/fetch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ async function fetch(url, options_ = {}) {
191191
// Note: We can not use `request.body` because send would have
192192
// consumed it already.
193193
body: options_.body,
194-
signal: request.signal,
194+
signal: signal,
195195
size: request.size
196196
};
197197

packages/fetch/src/request.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99

1010
import {format as formatUrl} from 'url';
11+
import {AbortController as AbortControllerPolyfill} from 'abort-controller';
1112
import Headers from './headers.js';
1213
import Body, {clone, extractContentType, getTotalBytes} from './body.js';
1314
import {isAbortSignal} from './utils/is.js';
@@ -119,6 +120,15 @@ export default class Request extends Body {
119120
if (signal != null && !isAbortSignal(signal)) {
120121
throw new TypeError('Expected signal to be an instanceof AbortSignal or EventTarget');
121122
}
123+
124+
if (!signal) {
125+
let AbortControllerConstructor = typeof AbortController != "undefined"
126+
? AbortController
127+
: AbortControllerPolyfill;
128+
/** @type {any} */
129+
let newSignal = new AbortControllerConstructor().signal;
130+
signal = newSignal;
131+
}
122132

123133
/** @type {RequestState} */
124134
this[INTERNALS] = {

packages/fetch/test/request.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ describe('Request', () => {
101101
expect(derivedRequest.signal).to.equal(derivedAbortController.signal);
102102
});
103103

104-
it('should allow removing signal on derived Request instances', () => {
104+
it('should allow overriding signal on derived Request instances', () => {
105105
const parentAbortController = new AbortController();
106106
const parentRequest = new Request(`${base}hello`, {
107107
signal: parentAbortController.signal
@@ -110,7 +110,8 @@ describe('Request', () => {
110110
signal: null
111111
});
112112
expect(parentRequest.signal).to.equal(parentAbortController.signal);
113-
expect(derivedRequest.signal).to.equal(null);
113+
expect(derivedRequest.signal).to.not.equal(null);
114+
expect(derivedRequest.signal).to.not.equal(parentAbortController.signal);
114115
});
115116

116117
it('should abort signal', () => {

0 commit comments

Comments
 (0)