diff --git a/lib/fetch/request.js b/lib/fetch/request.js index 7fda8d90b28..06c2374135d 100644 --- a/lib/fetch/request.js +++ b/lib/fetch/request.js @@ -835,10 +835,6 @@ webidl.converters.RequestInfo = function (V) { return webidl.converters.USVString(V) } -webidl.converters.AbortSignal = webidl.interfaceConverter( - AbortSignal -) - // https://fetch.spec.whatwg.org/#requestinit webidl.converters.RequestInit = webidl.dictionaryConverter([ { @@ -913,9 +909,7 @@ webidl.converters.RequestInit = webidl.dictionaryConverter([ }, { key: 'signal', - converter: webidl.nullableConverter( - webidl.converters.AbortSignal - ) + converter: webidl.converters.any }, { key: 'window', diff --git a/test/fetch/abort.js b/test/fetch/abort.js index 66a2036e14e..bf2188612b2 100644 --- a/test/fetch/abort.js +++ b/test/fetch/abort.js @@ -7,6 +7,8 @@ const { once } = require('events') const { ReadableStream } = require('stream/web') const { DOMException } = require('../../lib/fetch/constants') +const { AbortController: NPMAbortController } = require('abort-controller') + /* global AbortController */ test('parallel fetch with the same AbortController works as expected', async (t) => { @@ -106,3 +108,31 @@ test('Readable stream synchronously cancels with AbortError if aborted before re t.end() }) + +test('Allow the usage of custom implementation of AbortController', async (t) => { + const body = { + fixes: 1605 + } + + const server = createServer((req, res) => { + res.statusCode = 200 + res.end(JSON.stringify(body)) + }) + + t.teardown(server.close.bind(server)) + + server.listen(0) + await once(server, 'listening') + + const controller = new NPMAbortController() + const signal = controller.signal + controller.abort() + + try { + await fetch(`http://localhost:${server.address().port}`, { + signal + }) + } catch (e) { + t.equal(e.code, DOMException.ABORT_ERR) + } +})