@@ -51,6 +51,8 @@ function build (schema, options) {
51
51
`
52
52
}
53
53
54
+ var hasShemaSomeIf = hasIf ( schema )
55
+
54
56
var main
55
57
56
58
switch ( schema . type ) {
@@ -92,7 +94,7 @@ function build (schema, options) {
92
94
93
95
var dependencies = [ ]
94
96
var dependenciesName = [ ]
95
- if ( hasAnyOf ( schema ) || hasArrayOfTypes ( schema ) || hasIf ( schema ) ) {
97
+ if ( hasAnyOf ( schema ) || hasArrayOfTypes ( schema ) || hasShemaSomeIf ) {
96
98
dependencies . push ( new Ajv ( ) )
97
99
dependenciesName . push ( 'ajv' )
98
100
}
@@ -512,57 +514,83 @@ function buildInnerObject (schema, name, externalSchema, fullSchema) {
512
514
return { code : code , laterCode : laterCode }
513
515
}
514
516
515
- function buildObject ( schema , code , name , externalSchema , fullSchema ) {
517
+ function addIfThenElse ( schema , name , externalSchema , fullSchema ) {
518
+ var code = ''
519
+ var r
520
+ var laterCode = ''
521
+ var innerR
522
+
523
+ const copy = merge ( { } , schema )
524
+ const i = copy . if
525
+ const then = copy . then
526
+ const e = copy . else
527
+ delete copy . if
528
+ delete copy . then
529
+ delete copy . else
530
+ var merged = merge ( copy , then )
531
+
516
532
code += `
517
- function ${ name } (obj) {
518
- var json = '{'
519
- var addComma = false
533
+ valid = ajv.validate(${ require ( 'util' ) . inspect ( i , { depth : null } ) } , obj)
534
+ if (valid) {
520
535
`
536
+ if ( merged . if && merged . then ) {
537
+ innerR = addIfThenElse ( merged , name , externalSchema , fullSchema )
538
+ code += innerR . code
539
+ laterCode = innerR . laterCode
540
+ }
521
541
522
- var laterCode = ''
523
- var r , merged
524
- if ( schema . if && schema . then ) {
525
- merged = merge ( schema , schema . then )
526
- delete merged . if
527
- delete merged . then
528
- delete merged . else
542
+ r = buildInnerObject ( merged , name , externalSchema , fullSchema )
543
+ code += r . code
544
+ laterCode = r . laterCode
545
+
546
+ code += `
547
+ }
548
+ `
549
+ if ( e ) {
550
+ merged = merge ( copy , e )
529
551
530
552
code += `
531
- var valid = ajv.validate(${ require ( 'util' ) . inspect ( schema . if , { depth : null } ) } , obj)
532
- if (valid) {
553
+ else {
533
554
`
534
555
556
+ if ( merged . if && merged . then ) {
557
+ innerR = addIfThenElse ( merged , name , externalSchema , fullSchema )
558
+ code += innerR . code
559
+ laterCode = innerR . laterCode
560
+ }
561
+
535
562
r = buildInnerObject ( merged , name , externalSchema , fullSchema )
536
563
code += r . code
537
564
laterCode = r . laterCode
538
565
539
566
code += `
540
567
}
541
568
`
542
- if ( schema . else ) {
543
- merged = merge ( schema , schema . else )
544
- delete merged . if
545
- delete merged . then
546
- delete merged . else
547
-
548
- code += `
549
- else {
550
- `
569
+ }
570
+ return { code : code , laterCode : laterCode }
571
+ }
551
572
552
- r = buildInnerObject ( merged , name , externalSchema , fullSchema )
553
- code += r . code
554
- laterCode = r . laterCode
573
+ function buildObject ( schema , code , name , externalSchema , fullSchema ) {
574
+ code += `
575
+ function ${ name } (obj) {
576
+ var json = '{'
577
+ var addComma = false
578
+ `
555
579
556
- code += `
557
- }
558
- `
559
- }
580
+ var laterCode = ''
581
+ var r
582
+ if ( schema . if && schema . then ) {
583
+ code += `
584
+ var valid
585
+ `
586
+ r = addIfThenElse ( schema , name , externalSchema , fullSchema )
560
587
} else {
561
588
r = buildInnerObject ( schema , name , externalSchema , fullSchema )
562
- code += r . code
563
- laterCode = r . laterCode
564
589
}
565
590
591
+ code += r . code
592
+ laterCode = r . laterCode
593
+
566
594
// Removes the comma if is the last element of the string (in case there are not properties)
567
595
code += `
568
596
json += '}'
0 commit comments