@@ -402,7 +402,49 @@ function buildArray (schema, code, name, externalSchema, fullSchema) {
402
402
schema . items = refFinder ( schema . items [ '$ref' ] , fullSchema , externalSchema )
403
403
}
404
404
405
- var result = nested ( laterCode , name , '[i]' , schema . items , externalSchema , fullSchema )
405
+ var result = { code : '' , laterCode : '' }
406
+ if ( Array . isArray ( schema . items ) ) {
407
+ result = schema . items . reduce ( ( res , item , i ) => {
408
+ var accessor = '[i]'
409
+ const tmpRes = nested ( laterCode , name , accessor , item , externalSchema , fullSchema , i )
410
+ var condition
411
+ switch ( item . type ) {
412
+ case 'null' :
413
+ condition = `obj${ accessor } === null`
414
+ break
415
+ case 'string' :
416
+ condition = `typeof obj${ accessor } === 'string'`
417
+ break
418
+ case 'integer' :
419
+ condition = `Number.isInteger(obj${ accessor } )`
420
+ break
421
+ case 'number' :
422
+ condition = `!Number.isInteger(obj${ accessor } ) && Number.isFinite(obj${ accessor } )`
423
+ break
424
+ case 'boolean' :
425
+ condition = `typeof obj${ accessor } === 'boolean'`
426
+ break
427
+ case 'object' :
428
+ condition = `obj${ accessor } && typeof obj${ accessor } === 'object' && obj${ accessor } .constructor === Object`
429
+ break
430
+ case 'array' :
431
+ condition = `Array.isArray(obj${ accessor } )`
432
+ break
433
+ default :
434
+ throw new Error ( `${ item . type } unsupported` )
435
+ }
436
+ return {
437
+ code : `${ res . code }
438
+ if (${ condition } ) {
439
+ ${ tmpRes . code }
440
+ }` ,
441
+ laterCode : `${ res . laterCode }
442
+ ${ tmpRes . laterCode } `
443
+ }
444
+ } , result )
445
+ } else {
446
+ result = nested ( laterCode , name , '[i]' , schema . items , externalSchema , fullSchema )
447
+ }
406
448
407
449
code += `
408
450
var l = obj.length
@@ -428,7 +470,7 @@ function buildArray (schema, code, name, externalSchema, fullSchema) {
428
470
return code
429
471
}
430
472
431
- function nested ( laterCode , name , key , schema , externalSchema , fullSchema ) {
473
+ function nested ( laterCode , name , key , schema , externalSchema , fullSchema , subKey ) {
432
474
var code = ''
433
475
var funcName
434
476
var type = schema . type
@@ -460,14 +502,14 @@ function nested (laterCode, name, key, schema, externalSchema, fullSchema) {
460
502
`
461
503
break
462
504
case 'object' :
463
- funcName = ( name + key ) . replace ( / [ - . \[ \] ] / g, '' ) // eslint-disable-line
505
+ funcName = ( name + key + subKey ) . replace ( / [ - . \[ \] ] / g, '' ) // eslint-disable-line
464
506
laterCode = buildObject ( schema , laterCode , funcName , externalSchema , fullSchema )
465
507
code += `
466
508
json += ${ funcName } (obj${ accessor } )
467
509
`
468
510
break
469
511
case 'array' :
470
- funcName = ( name + key ) . replace ( / [ - . \[ \] ] / g, '' ) // eslint-disable-line
512
+ funcName = ( name + key + subKey ) . replace ( / [ - . \[ \] ] / g, '' ) // eslint-disable-line
471
513
laterCode = buildArray ( schema , laterCode , funcName , externalSchema , fullSchema )
472
514
code += `
473
515
json += ${ funcName } (obj${ accessor } )
0 commit comments