@@ -47,10 +47,12 @@ function mergeLocation (source, dest) {
47
47
}
48
48
}
49
49
50
- const referenceSerializersMap = new Map ( )
50
+ const arrayItemsReferenceSerializersMap = new Map ( )
51
+ const objectReferenceSerializersMap = new Map ( )
51
52
52
53
function build ( schema , options ) {
53
- referenceSerializersMap . clear ( )
54
+ arrayItemsReferenceSerializersMap . clear ( )
55
+ objectReferenceSerializersMap . clear ( )
54
56
options = options || { }
55
57
isValidSchema ( schema )
56
58
if ( options . schema ) {
@@ -147,7 +149,8 @@ function build (schema, options) {
147
149
return dependenciesName
148
150
}
149
151
150
- referenceSerializersMap . clear ( )
152
+ arrayItemsReferenceSerializersMap . clear ( )
153
+ objectReferenceSerializersMap . clear ( )
151
154
152
155
return ( Function . apply ( null , dependenciesName ) . apply ( null , dependencies ) )
153
156
}
@@ -399,51 +402,60 @@ function addPatternProperties (location) {
399
402
} catch ( err ) {
400
403
throw new Error ( `${ err . message } . Found at ${ regex } matching ${ JSON . stringify ( pp [ regex ] ) } ` )
401
404
}
402
- code += `
403
- if (/${ regex . replace ( / \\ * \/ / g, '\\/' ) } /.test(keys[i])) {
404
- `
405
+
406
+ const ifPpKeyExists = ` if (/${ regex . replace ( / \\ * \/ / g, '\\/' ) } /.test(keys[i])) {`
407
+
405
408
if ( type === 'object' ) {
406
409
code += `${ buildObject ( ppLocation , '' , 'buildObjectPP' + index ) }
410
+ ${ ifPpKeyExists }
407
411
${ addComma }
408
412
json += $asString(keys[i]) + ':' + buildObjectPP${ index } (obj[keys[i]])
409
413
`
410
414
} else if ( type === 'array' ) {
411
415
code += `${ buildArray ( ppLocation , '' , 'buildArrayPP' + index ) }
416
+ ${ ifPpKeyExists }
412
417
${ addComma }
413
418
json += $asString(keys[i]) + ':' + buildArrayPP${ index } (obj[keys[i]])
414
419
`
415
420
} else if ( type === 'null' ) {
416
421
code += `
422
+ ${ ifPpKeyExists }
417
423
${ addComma }
418
424
json += $asString(keys[i]) +':null'
419
425
`
420
426
} else if ( type === 'string' ) {
421
427
code += `
428
+ ${ ifPpKeyExists }
422
429
${ addComma }
423
430
json += $asString(keys[i]) + ':' + ${ stringSerializer } (obj[keys[i]])
424
431
`
425
432
} else if ( type === 'integer' ) {
426
433
code += `
434
+ ${ ifPpKeyExists }
427
435
${ addComma }
428
436
json += $asString(keys[i]) + ':' + $asInteger(obj[keys[i]])
429
437
`
430
438
} else if ( type === 'number' ) {
431
439
code += `
440
+ ${ ifPpKeyExists }
432
441
${ addComma }
433
442
json += $asString(keys[i]) + ':' + $asNumber(obj[keys[i]])
434
443
`
435
444
} else if ( type === 'boolean' ) {
436
445
code += `
446
+ ${ ifPpKeyExists }
437
447
${ addComma }
438
448
json += $asString(keys[i]) + ':' + $asBoolean(obj[keys[i]])
439
449
`
440
450
} else if ( type === undefined ) {
441
451
code += `
452
+ ${ ifPpKeyExists }
442
453
${ addComma }
443
454
json += $asString(keys[i]) + ':' + $asAny(obj[keys[i]])
444
455
`
445
456
} else {
446
457
code += `
458
+ ${ ifPpKeyExists }
447
459
throw new Error('Cannot coerce ' + obj[keys[i]] + ' to ' + ${ JSON . stringify ( type ) } )
448
460
`
449
461
}
@@ -922,6 +934,16 @@ function buildObject (location, code, name) {
922
934
}
923
935
`
924
936
}
937
+
938
+ if ( objectReferenceSerializersMap . has ( schema ) ) {
939
+ code += `
940
+ return ${ objectReferenceSerializersMap . get ( schema ) } (input)
941
+ }
942
+ `
943
+ return code
944
+ }
945
+ objectReferenceSerializersMap . set ( schema , name )
946
+
925
947
code += `
926
948
var obj = ${ toJSON ( 'input' ) }
927
949
var json = '{'
@@ -978,14 +1000,14 @@ function buildArray (location, code, name, key = null) {
978
1000
location = refFinder ( schema . items . $ref , location )
979
1001
schema . items = location . schema
980
1002
981
- if ( referenceSerializersMap . has ( schema . items ) ) {
1003
+ if ( arrayItemsReferenceSerializersMap . has ( schema . items ) ) {
982
1004
code += `
983
- return ${ referenceSerializersMap . get ( schema . items ) } (obj)
1005
+ return ${ arrayItemsReferenceSerializersMap . get ( schema . items ) } (obj)
984
1006
}
985
1007
`
986
1008
return code
987
1009
}
988
- referenceSerializersMap . set ( schema . items , name )
1010
+ arrayItemsReferenceSerializersMap . set ( schema . items , name )
989
1011
}
990
1012
991
1013
let result = { code : '' , laterCode : '' }
0 commit comments