@@ -83,6 +83,22 @@ function deepClone(obj) {
8383 return JSON . parse ( JSON . stringify ( obj ) ) ;
8484}
8585
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+
86102function generateTypeConversion ( ctx , name , idlType , argAttrs = [ ] , parentName , errPrefix = '"The provided value"' ) {
87103 const requires = new utils . RequiresMap ( ctx ) ;
88104 let str = "" ;
@@ -131,7 +147,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
131147 // We do not save the callback context yet.
132148 str += `
133149 if (!utils.isObject(${ name } )) {
134- throw new TypeError(${ errPrefix } + " is not an object");
150+ throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not an object" ) } );
135151 }
136152 ` ;
137153 } else {
@@ -218,25 +234,25 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
218234 if ( union . sequenceLike ) {
219235 code += `if (${ name } [Symbol.iterator] !== undefined) {` ;
220236 const conv = generateTypeConversion ( ctx , name , union . sequenceLike , [ ] , parentName ,
221- ` ${ errPrefix } + " sequence"` ) ;
237+ appendToErrorPrefix ( errPrefix , " sequence" ) ) ;
222238 requires . merge ( conv . requires ) ;
223239 code += conv . body ;
224240 code += `} else {` ;
225241 }
226242
227243 if ( union . dictionary ) {
228244 const conv = generateTypeConversion ( ctx , name , union . dictionary , [ ] , parentName ,
229- ` ${ errPrefix } + " dictionary"` ) ;
245+ appendToErrorPrefix ( errPrefix , " dictionary" ) ) ;
230246 requires . merge ( conv . requires ) ;
231247 code += conv . body ;
232248 } else if ( union . record ) {
233249 const conv = generateTypeConversion ( ctx , name , union . record , [ ] , parentName ,
234- ` ${ errPrefix } + " record"` ) ;
250+ appendToErrorPrefix ( errPrefix , " record" ) ) ;
235251 requires . merge ( conv . requires ) ;
236252 code += conv . body ;
237253 } else if ( union . callbackInterface ) {
238254 const conv = generateTypeConversion ( ctx , name , union . callbackInterface , [ ] , parentName ,
239- ` ${ errPrefix } + " callback interface"` ) ;
255+ appendToErrorPrefix ( errPrefix , " callback interface" ) ) ;
240256 requires . merge ( conv . requires ) ;
241257 code += conv . body ;
242258 } else if ( union . object ) {
@@ -276,7 +292,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
276292 code += conv . body ;
277293 requires . merge ( conv . requires ) ;
278294 } 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." ) } )` ;
280296 }
281297 code += "}" ;
282298 output . push ( code ) ;
@@ -287,12 +303,12 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
287303
288304 function generateSequence ( ) {
289305 const conv = generateTypeConversion ( ctx , "nextItem" , idlType . idlType [ 0 ] , [ ] , parentName ,
290- ` ${ errPrefix } + "'s element"` ) ;
306+ appendToErrorPrefix ( errPrefix , "'s element" ) ) ;
291307 requires . merge ( conv . requires ) ;
292308
293309 str += `
294310 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." ) } );
296312 } else {
297313 const V = [];
298314 const tmp = ${ name } ;
@@ -307,15 +323,15 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
307323
308324 function generateRecord ( ) {
309325 const keyConv = generateTypeConversion ( ctx , "typedKey" , idlType . idlType [ 0 ] , [ ] , parentName ,
310- ` ${ errPrefix } + "'s key"` ) ;
326+ appendToErrorPrefix ( errPrefix , "'s key" ) ) ;
311327 requires . merge ( keyConv . requires ) ;
312328 const valConv = generateTypeConversion ( ctx , "typedValue" , idlType . idlType [ 1 ] , [ ] , parentName ,
313- ` ${ errPrefix } + "'s value"` ) ;
329+ appendToErrorPrefix ( errPrefix , "'s value" ) ) ;
314330 requires . merge ( valConv . requires ) ;
315331
316332 str += `
317333 if (!utils.isObject(${ name } )) {
318- throw new TypeError(${ errPrefix } + " is not an object.");
334+ throw new TypeError(${ appendToErrorPrefix ( errPrefix , " is not an object." ) } );
319335 } else {
320336 const result = Object.create(null);
321337 for (const key of Reflect.ownKeys(${ name } )) {
@@ -341,7 +357,7 @@ function generateTypeConversion(ctx, name, idlType, argAttrs = [], parentName, e
341357 handler = "" ;
342358 } else {
343359 const conv = generateTypeConversion ( ctx , "value" , idlType . idlType [ 0 ] , [ ] , parentName ,
344- ` ${ errPrefix } + " promise value"` ) ;
360+ appendToErrorPrefix ( errPrefix , " promise value" ) ) ;
345361 requires . merge ( conv . requires ) ;
346362 handler = `
347363 ${ conv . body }
0 commit comments