From 4d8f72d9337f65aa9e5e04b3070254932681dc93 Mon Sep 17 00:00:00 2001 From: Khafra Date: Mon, 29 Apr 2024 01:23:14 -0400 Subject: [PATCH 1/2] preserve dictionary key name in webidl errors --- lib/web/fetch/webidl.js | 2 +- test/types/dispatcher.test-d.ts | 2 +- test/webidl/errors.js | 13 +++++++++++-- test/websocket/messageevent.js | 10 +++++----- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/web/fetch/webidl.js b/lib/web/fetch/webidl.js index c90e411afca..b59cbd69731 100644 --- a/lib/web/fetch/webidl.js +++ b/lib/web/fetch/webidl.js @@ -390,7 +390,7 @@ webidl.dictionaryConverter = function (converters) { // When this happens, do not perform a conversion, // and do not assign the key a value. if (required || hasDefault || value !== undefined) { - value = converter(value, prefix, argument) + value = converter(value, prefix, `${argument}.${key}`) if ( options.allowedValues && diff --git a/test/types/dispatcher.test-d.ts b/test/types/dispatcher.test-d.ts index 4e9aabc93bc..3185726bbb7 100644 --- a/test/types/dispatcher.test-d.ts +++ b/test/types/dispatcher.test-d.ts @@ -1,7 +1,7 @@ import { IncomingHttpHeaders } from 'http' import { Duplex, Readable, Writable } from 'stream' import { expectAssignable, expectType } from 'tsd' -import { Dispatcher } from '../..' +import { Dispatcher, Headers } from '../..' import { URL } from 'url' import { Blob } from 'buffer' diff --git a/test/webidl/errors.js b/test/webidl/errors.js index 11449fbfd60..20a73a765a3 100644 --- a/test/webidl/errors.js +++ b/test/webidl/errors.js @@ -1,8 +1,8 @@ 'use strict' -const { test } = require('node:test') +const { test, describe } = require('node:test') const assert = require('node:assert') -const { Headers } = require('../..') +const { Headers, MessageEvent } = require('../..') test('ByteString', (t) => { const name = Symbol('') @@ -21,3 +21,12 @@ test('ByteString', (t) => { ) } }) + +describe('dictionary converters', () => { + test('error message retains property name', () => { + assert.throws( + () => new MessageEvent('message', { source: 1 }), + new TypeError('MessageEvent constructor: Expected eventInitDict.source ("1") to be an instance of MessagePort.') + ) + }) +}) diff --git a/test/websocket/messageevent.js b/test/websocket/messageevent.js index b1381019c27..1a59a7cd858 100644 --- a/test/websocket/messageevent.js +++ b/test/websocket/messageevent.js @@ -99,25 +99,25 @@ test('test/parallel/test-worker-message-port.js', () => { assert.throws(() => new MessageEvent('message', { source: 1 }), { constructor: TypeError, - message: 'MessageEvent constructor: Expected eventInitDict ("1") to be an instance of MessagePort.' + message: 'MessageEvent constructor: Expected eventInitDict.source ("1") to be an instance of MessagePort.' }) assert.throws(() => new MessageEvent('message', { source: {} }), { constructor: TypeError, - message: 'MessageEvent constructor: Expected eventInitDict ("{}") to be an instance of MessagePort.' + message: 'MessageEvent constructor: Expected eventInitDict.source ("{}") to be an instance of MessagePort.' }) assert.throws(() => new MessageEvent('message', { ports: 0 }), { constructor: TypeError, - message: 'MessageEvent constructor: eventInitDict (0) is not an Object.' + message: 'MessageEvent constructor: eventInitDict.ports (0) is not an Object.' }) assert.throws(() => new MessageEvent('message', { ports: [null] }), { constructor: TypeError, - message: 'MessageEvent constructor: Expected eventInitDict ("null") to be an instance of MessagePort.' + message: 'MessageEvent constructor: Expected eventInitDict.ports ("null") to be an instance of MessagePort.' }) assert.throws(() => new MessageEvent('message', { ports: [{}] }) , { constructor: TypeError, - message: 'MessageEvent constructor: Expected eventInitDict ("{}") to be an instance of MessagePort.' + message: 'MessageEvent constructor: Expected eventInitDict.ports ("{}") to be an instance of MessagePort.' }) assert(new MessageEvent('message') instanceof Event) From 6ba6d579698bd358443762e89ddc62cf0ba44ba9 Mon Sep 17 00:00:00 2001 From: Khafra Date: Mon, 29 Apr 2024 01:29:24 -0400 Subject: [PATCH 2/2] a sequence is not *iterable* --- lib/web/fetch/webidl.js | 2 +- test/fetch/headers.js | 4 ++-- test/websocket/messageevent.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/web/fetch/webidl.js b/lib/web/fetch/webidl.js index b59cbd69731..96ec7767a1a 100644 --- a/lib/web/fetch/webidl.js +++ b/lib/web/fetch/webidl.js @@ -242,7 +242,7 @@ webidl.sequenceConverter = function (converter) { if (webidl.util.Type(V) !== 'Object') { throw webidl.errors.exception({ header: prefix, - message: `${argument} (${webidl.util.Stringify(V)}) is not an Object.` + message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` }) } diff --git a/test/fetch/headers.js b/test/fetch/headers.js index 91ba61f6e23..b5574ac03df 100644 --- a/test/fetch/headers.js +++ b/test/fetch/headers.js @@ -27,7 +27,7 @@ test('Headers initialization', async (t) => { throws(() => new Headers(['undici', 'fetch', 'fetch']), TypeError) throws( () => new Headers([0, 1, 2]), - TypeError('Headers contructor: init (0) is not an Object.') + TypeError('Headers contructor: init (0) is not iterable.') ) }) @@ -42,7 +42,7 @@ test('Headers initialization', async (t) => { const init = ['undici', 'fetch', 'fetch', 'undici'] throws( () => new Headers(init), - TypeError('Headers contructor: init ("undici") is not an Object.') + TypeError('Headers contructor: init ("undici") is not iterable.') ) }) }) diff --git a/test/websocket/messageevent.js b/test/websocket/messageevent.js index 1a59a7cd858..ae8c2227336 100644 --- a/test/websocket/messageevent.js +++ b/test/websocket/messageevent.js @@ -107,7 +107,7 @@ test('test/parallel/test-worker-message-port.js', () => { }) assert.throws(() => new MessageEvent('message', { ports: 0 }), { constructor: TypeError, - message: 'MessageEvent constructor: eventInitDict.ports (0) is not an Object.' + message: 'MessageEvent constructor: eventInitDict.ports (0) is not iterable.' }) assert.throws(() => new MessageEvent('message', { ports: [null] }), { constructor: TypeError,