@@ -83,6 +83,22 @@ function deepClone(obj) {
83
83
return JSON . parse ( JSON . stringify ( obj ) ) ;
84
84
}
85
85
86
+ /**
87
+ * @param {string } errPrefix
88
+ * @param {string } appended
89
+ */
90
+ function appendToErrorPrefix ( errPrefix , appended ) {
91
+ if ( errPrefix . endsWith ( '"' ) ) {
92
+ return errPrefix . slice ( 0 , - 1 ) + appended + '"' ;
93
+ } else if ( errPrefix . endsWith ( "'" ) ) {
94
+ return errPrefix . slice ( 0 , - 1 ) + appended + "'" ;
95
+ } else if ( errPrefix . endsWith ( "`" ) ) {
96
+ return errPrefix . slice ( 0 , - 1 ) + appended + "`" ;
97
+ }
98
+
99
+ return `\`\${${ errPrefix } }${ appended } \`` ;
100
+ }
101
+
86
102
function generateTypeConversion ( ctx , name , idlType , argAttrs = [ ] , parentName , errPrefix = '"The provided value"' ) {
87
103
const requires = new utils . RequiresMap ( ctx ) ;
88
104
let str = "" ;
@@ -131,7 +147,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
131
147
// We do not save the callback context yet.
132
148
str += `
133
149
if (!utils.isObject(${ name } )) {
134
- throw new TypeError(${ errPrefix } + " is not an object");
150
+ throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not an object" ) } );
135
151
}
136
152
` ;
137
153
} else {
@@ -218,25 +234,25 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
218
234
if ( union . sequenceLike ) {
219
235
code += `if (${ name } [Symbol.iterator] !== undefined) {` ;
220
236
const conv = generateTypeConversion ( ctx , name , union . sequenceLike , [ ] , parentName ,
221
- ` ${ errPrefix } + " sequence"` ) ;
237
+ appendToErrorPrefix ( errPrefix , " sequence" ) ) ;
222
238
requires . merge ( conv . requires ) ;
223
239
code += conv . body ;
224
240
code += `} else {` ;
225
241
}
226
242
227
243
if ( union . dictionary ) {
228
244
const conv = generateTypeConversion ( ctx , name , union . dictionary , [ ] , parentName ,
229
- ` ${ errPrefix } + " dictionary"` ) ;
245
+ appendToErrorPrefix ( errPrefix , " dictionary" ) ) ;
230
246
requires . merge ( conv . requires ) ;
231
247
code += conv . body ;
232
248
} else if ( union . record ) {
233
249
const conv = generateTypeConversion ( ctx , name , union . record , [ ] , parentName ,
234
- ` ${ errPrefix } + " record"` ) ;
250
+ appendToErrorPrefix ( errPrefix , " record" ) ) ;
235
251
requires . merge ( conv . requires ) ;
236
252
code += conv . body ;
237
253
} else if ( union . callbackInterface ) {
238
254
const conv = generateTypeConversion ( ctx , name , union . callbackInterface , [ ] , parentName ,
239
- ` ${ errPrefix } + " callback interface"` ) ;
255
+ appendToErrorPrefix ( errPrefix , " callback interface" ) ) ;
240
256
requires . merge ( conv . requires ) ;
241
257
code += conv . body ;
242
258
} else if ( union . object ) {
@@ -276,7 +292,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
276
292
code += conv . body ;
277
293
requires . merge ( conv . requires ) ;
278
294
} else {
279
- code += `throw new TypeError(${ errPrefix } + " is not of any supported type.")` ;
295
+ code += `throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not of any supported type." ) } )` ;
280
296
}
281
297
code += "}" ;
282
298
output . push ( code ) ;
@@ -287,12 +303,12 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
287
303
288
304
function generateSequence ( ) {
289
305
const conv = generateTypeConversion ( ctx , "nextItem" , idlType . idlType [ 0 ] , [ ] , parentName ,
290
- ` ${ errPrefix } + "'s element"` ) ;
306
+ appendToErrorPrefix ( errPrefix , "'s element" ) ) ;
291
307
requires . merge ( conv . requires ) ;
292
308
293
309
str += `
294
310
if (!utils.isObject(${ name } )) {
295
- throw new TypeError(${ errPrefix } + " is not an iterable object.");
311
+ throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not an iterable object." ) } );
296
312
} else {
297
313
const V = [];
298
314
const tmp = ${ name } ;
@@ -307,15 +323,15 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
307
323
308
324
function generateRecord ( ) {
309
325
const keyConv = generateTypeConversion ( ctx , "typedKey" , idlType . idlType [ 0 ] , [ ] , parentName ,
310
- ` ${ errPrefix } + "'s key"` ) ;
326
+ appendToErrorPrefix ( errPrefix , "'s key" ) ) ;
311
327
requires . merge ( keyConv . requires ) ;
312
328
const valConv = generateTypeConversion ( ctx , "typedValue" , idlType . idlType [ 1 ] , [ ] , parentName ,
313
- ` ${ errPrefix } + "'s value"` ) ;
329
+ appendToErrorPrefix ( errPrefix , "'s value" ) ) ;
314
330
requires . merge ( valConv . requires ) ;
315
331
316
332
str += `
317
333
if (!utils.isObject(${ name } )) {
318
- throw new TypeError(${ errPrefix } + " is not an object.");
334
+ throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not an object." ) } );
319
335
} else {
320
336
const result = Object.create(null);
321
337
for (const key of Reflect.ownKeys(${ name } )) {
@@ -341,7 +357,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
341
357
handler = "" ;
342
358
} else {
343
359
const conv = generateTypeConversion ( ctx , "value" , idlType . idlType [ 0 ] , [ ] , parentName ,
344
- ` ${ errPrefix } + " promise value"` ) ;
360
+ appendToErrorPrefix ( errPrefix , " promise value" ) ) ;
345
361
requires . merge ( conv . requires ) ;
346
362
handler = `
347
363
${ conv . body }
0 commit comments