Skip to content

Commit 8f1cafc

Browse files
committed
lib: validate signals with interface converter
1 parent ea1249c commit 8f1cafc

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

lib/internal/abort_controller.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,11 @@ const {
4141
} = require('internal/errors');
4242
const {
4343
converters,
44+
createInterfaceConverter,
4445
createSequenceConverter,
4546
} = require('internal/webidl');
4647

4748
const {
48-
validateAbortSignal,
49-
validateAbortSignalArray,
5049
validateObject,
5150
validateUint32,
5251
kValidateObjectAllowObjects,
@@ -229,11 +228,11 @@ class AbortSignal extends EventTarget {
229228
* @returns {AbortSignal}
230229
*/
231230
static any(signals) {
232-
const signalsArray = createSequenceConverter(
233-
converters.any,
234-
)(signals);
231+
const signalsArray = converters['sequence<AbortSignal>'](
232+
signals,
233+
{ __proto__: null, context: 'signals' },
234+
);
235235

236-
validateAbortSignalArray(signalsArray, 'signals');
237236
const resultSignal = new AbortSignal(kDontThrowSymbol, { composite: true });
238237
if (!signalsArray.length) {
239238
return resultSignal;
@@ -353,6 +352,9 @@ class AbortSignal extends EventTarget {
353352
}
354353
}
355354

355+
converters.AbortSignal = createInterfaceConverter('AbortSignal', AbortSignal.prototype);
356+
converters['sequence<AbortSignal>'] = createSequenceConverter(converters.AbortSignal);
357+
356358
function ClonedAbortSignal() {
357359
return new AbortSignal(kDontThrowSymbol, { transferable: true });
358360
}
@@ -442,10 +444,7 @@ function transferableAbortController() {
442444
* @returns {Promise<void>}
443445
*/
444446
async function aborted(signal, resource) {
445-
if (signal === undefined) {
446-
throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal);
447-
}
448-
validateAbortSignal(signal, 'signal');
447+
converters.AbortSignal(signal, { __proto__: null, context: 'signal' });
449448
validateObject(resource, 'resource', kValidateObjectAllowObjects);
450449
if (signal.aborted)
451450
return PromiseResolve();

test/parallel/test-abortsignal-any.mjs

+13
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,17 @@ describe('AbortSignal.any()', { concurrency: !process.env.TEST_PARALLEL }, () =>
118118
controller.abort();
119119
assert.strictEqual(result, 1);
120120
});
121+
122+
it('throws TypeError if any value does not implement AbortSignal', () => {
123+
const expectedError = { code: 'ERR_INVALID_ARG_TYPE' };
124+
assert.throws(() => AbortSignal.any([ null ]), expectedError);
125+
assert.throws(() => AbortSignal.any([ undefined ]), expectedError);
126+
assert.throws(() => AbortSignal.any([ '123' ]), expectedError);
127+
assert.throws(() => AbortSignal.any([ 123 ]), expectedError);
128+
assert.throws(() => AbortSignal.any([{}]), expectedError);
129+
assert.throws(() => AbortSignal.any([{ aborted: true }]), expectedError);
130+
assert.throws(() => AbortSignal.any([{
131+
aborted: true, reason: '', throwIfAborted: null,
132+
}]), expectedError);
133+
});
121134
});

0 commit comments

Comments
 (0)