Skip to content

Commit 73822d8

Browse files
authored
preserve dictionary key name in webidl errors (#3176)
* preserve dictionary key name in webidl errors * a sequence is not *iterable*
1 parent 57e75d3 commit 73822d8

5 files changed

Lines changed: 21 additions & 12 deletions

File tree

lib/web/fetch/webidl.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ webidl.sequenceConverter = function (converter) {
242242
if (webidl.util.Type(V) !== 'Object') {
243243
throw webidl.errors.exception({
244244
header: prefix,
245-
message: `${argument} (${webidl.util.Stringify(V)}) is not an Object.`
245+
message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`
246246
})
247247
}
248248

@@ -390,7 +390,7 @@ webidl.dictionaryConverter = function (converters) {
390390
// When this happens, do not perform a conversion,
391391
// and do not assign the key a value.
392392
if (required || hasDefault || value !== undefined) {
393-
value = converter(value, prefix, argument)
393+
value = converter(value, prefix, `${argument}.${key}`)
394394

395395
if (
396396
options.allowedValues &&

test/fetch/headers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test('Headers initialization', async (t) => {
2727
throws(() => new Headers(['undici', 'fetch', 'fetch']), TypeError)
2828
throws(
2929
() => new Headers([0, 1, 2]),
30-
TypeError('Headers contructor: init (0) is not an Object.')
30+
TypeError('Headers contructor: init (0) is not iterable.')
3131
)
3232
})
3333

@@ -42,7 +42,7 @@ test('Headers initialization', async (t) => {
4242
const init = ['undici', 'fetch', 'fetch', 'undici']
4343
throws(
4444
() => new Headers(init),
45-
TypeError('Headers contructor: init ("undici") is not an Object.')
45+
TypeError('Headers contructor: init ("undici") is not iterable.')
4646
)
4747
})
4848
})

test/types/dispatcher.test-d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { IncomingHttpHeaders } from 'http'
22
import { Duplex, Readable, Writable } from 'stream'
33
import { expectAssignable, expectType } from 'tsd'
4-
import { Dispatcher } from '../..'
4+
import { Dispatcher, Headers } from '../..'
55
import { URL } from 'url'
66
import { Blob } from 'buffer'
77

test/webidl/errors.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict'
22

3-
const { test } = require('node:test')
3+
const { test, describe } = require('node:test')
44
const assert = require('node:assert')
5-
const { Headers } = require('../..')
5+
const { Headers, MessageEvent } = require('../..')
66

77
test('ByteString', (t) => {
88
const name = Symbol('')
@@ -21,3 +21,12 @@ test('ByteString', (t) => {
2121
)
2222
}
2323
})
24+
25+
describe('dictionary converters', () => {
26+
test('error message retains property name', () => {
27+
assert.throws(
28+
() => new MessageEvent('message', { source: 1 }),
29+
new TypeError('MessageEvent constructor: Expected eventInitDict.source ("1") to be an instance of MessagePort.')
30+
)
31+
})
32+
})

test/websocket/messageevent.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,25 @@ test('test/parallel/test-worker-message-port.js', () => {
9999

100100
assert.throws(() => new MessageEvent('message', { source: 1 }), {
101101
constructor: TypeError,
102-
message: 'MessageEvent constructor: Expected eventInitDict ("1") to be an instance of MessagePort.'
102+
message: 'MessageEvent constructor: Expected eventInitDict.source ("1") to be an instance of MessagePort.'
103103
})
104104
assert.throws(() => new MessageEvent('message', { source: {} }), {
105105
constructor: TypeError,
106-
message: 'MessageEvent constructor: Expected eventInitDict ("{}") to be an instance of MessagePort.'
106+
message: 'MessageEvent constructor: Expected eventInitDict.source ("{}") to be an instance of MessagePort.'
107107
})
108108
assert.throws(() => new MessageEvent('message', { ports: 0 }), {
109109
constructor: TypeError,
110-
message: 'MessageEvent constructor: eventInitDict (0) is not an Object.'
110+
message: 'MessageEvent constructor: eventInitDict.ports (0) is not iterable.'
111111
})
112112
assert.throws(() => new MessageEvent('message', { ports: [null] }), {
113113
constructor: TypeError,
114-
message: 'MessageEvent constructor: Expected eventInitDict ("null") to be an instance of MessagePort.'
114+
message: 'MessageEvent constructor: Expected eventInitDict.ports ("null") to be an instance of MessagePort.'
115115
})
116116
assert.throws(() =>
117117
new MessageEvent('message', { ports: [{}] })
118118
, {
119119
constructor: TypeError,
120-
message: 'MessageEvent constructor: Expected eventInitDict ("{}") to be an instance of MessagePort.'
120+
message: 'MessageEvent constructor: Expected eventInitDict.ports ("{}") to be an instance of MessagePort.'
121121
})
122122

123123
assert(new MessageEvent('message') instanceof Event)

0 commit comments

Comments
 (0)