@@ -12,12 +12,7 @@ import {
12
12
} from "./jsonast-util.js" ;
13
13
14
14
/**
15
- * @import {
16
- * Json,
17
- * JsonNode,
18
- * JsonObjectNode,
19
- * JsonStringNode
20
- * } from "./jsonast.d.ts"
15
+ * @import { Json, JsonNode, JsonObjectNode, JsonStringNode } from "./jsonast.d.ts"
21
16
*/
22
17
23
18
@@ -139,10 +134,8 @@ keywordHandlers.set("additionalProperties", (additionalPropertiesNode, instanceN
139
134
let isValid = true ;
140
135
for ( const propertyNode of instanceNode . children ) {
141
136
const [ propertyNameNode , instancePropertyNode ] = propertyNode . children ;
142
- if ( ! isDefinedProperty . test ( propertyNameNode . value ) ) {
143
- if ( ! validateSchema ( additionalPropertiesNode , instancePropertyNode ) ) {
144
- isValid = false ;
145
- }
137
+ if ( ! isDefinedProperty . test ( propertyNameNode . value ) && ! validateSchema ( additionalPropertiesNode , instancePropertyNode ) ) {
138
+ isValid = false ;
146
139
}
147
140
}
148
141
@@ -384,35 +377,25 @@ keywordHandlers.set("dependentRequired", (dependentRequiredNode, instanceNode) =
384
377
385
378
assertNodeType ( dependentRequiredNode , "object" ) ;
386
379
387
- let isValid = true ;
388
- for ( const propertyNode of dependentRequiredNode . children ) {
380
+ return dependentRequiredNode . children . every ( ( propertyNode ) => {
389
381
const [ keyNode , requiredPropertiesNode ] = propertyNode . children ;
390
- if ( jsonObjectHas ( keyNode . value , instanceNode ) ) {
391
- assertNodeType ( requiredPropertiesNode , "array" ) ;
392
- const isConditionValid = requiredPropertiesNode . children . every ( ( requiredPropertyNode ) => {
393
- assertNodeType ( requiredPropertyNode , "string" ) ;
394
- return jsonObjectHas ( requiredPropertyNode . value , instanceNode ) ;
395
- } ) ;
396
-
397
- if ( ! isConditionValid ) {
398
- isValid = false ;
399
- }
382
+ if ( ! jsonObjectHas ( keyNode . value , instanceNode ) ) {
383
+ return true ;
400
384
}
401
- }
402
385
403
- return isValid ;
386
+ assertNodeType ( requiredPropertiesNode , "array" ) ;
387
+ return requiredPropertiesNode . children . every ( ( requiredPropertyNode ) => {
388
+ assertNodeType ( requiredPropertyNode , "string" ) ;
389
+ return jsonObjectHas ( requiredPropertyNode . value , instanceNode ) ;
390
+ } ) ;
391
+ } ) ;
404
392
} ) ;
405
393
406
394
keywordHandlers . set ( "enum" , ( enumNode , instanceNode ) => {
407
395
assertNodeType ( enumNode , "array" ) ;
408
396
409
397
const instanceValue = jsonStringify ( jsonValue ( instanceNode ) ) ;
410
- for ( const enumItemNode of enumNode . children ) {
411
- if ( jsonStringify ( jsonValue ( enumItemNode ) ) === instanceValue ) {
412
- return true ;
413
- }
414
- }
415
- return false ;
398
+ return enumNode . children . some ( ( enumItemNode ) => jsonStringify ( jsonValue ( enumItemNode ) ) === instanceValue ) ;
416
399
} ) ;
417
400
418
401
keywordHandlers . set ( "exclusiveMaximum" , ( exclusiveMaximumNode , instanceNode ) => {
@@ -422,8 +405,7 @@ keywordHandlers.set("exclusiveMaximum", (exclusiveMaximumNode, instanceNode) =>
422
405
423
406
assertNodeType ( exclusiveMaximumNode , "number" ) ;
424
407
425
- const isValid = instanceNode . value < exclusiveMaximumNode . value ;
426
- return isValid ;
408
+ return instanceNode . value < exclusiveMaximumNode . value ;
427
409
} ) ;
428
410
429
411
keywordHandlers . set ( "exclusiveMinimum" , ( exclusiveMinimumNode , instanceNode ) => {
@@ -443,8 +425,7 @@ keywordHandlers.set("maxItems", (maxItemsNode, instanceNode) => {
443
425
444
426
assertNodeType ( maxItemsNode , "number" ) ;
445
427
446
- const isValid = instanceNode . children . length <= maxItemsNode . value ;
447
- return isValid ;
428
+ return instanceNode . children . length <= maxItemsNode . value ;
448
429
} ) ;
449
430
450
431
keywordHandlers . set ( "minItems" , ( minItemsNode , instanceNode ) => {
@@ -484,8 +465,7 @@ keywordHandlers.set("maxProperties", (maxPropertiesNode, instanceNode) => {
484
465
485
466
assertNodeType ( maxPropertiesNode , "number" ) ;
486
467
487
- const isValid = instanceNode . children . length <= maxPropertiesNode . value ;
488
- return isValid ;
468
+ return instanceNode . children . length <= maxPropertiesNode . value ;
489
469
} ) ;
490
470
491
471
keywordHandlers . set ( "minProperties" , ( minPropertiesNode , instanceNode ) => {
@@ -495,8 +475,7 @@ keywordHandlers.set("minProperties", (minPropertiesNode, instanceNode) => {
495
475
496
476
assertNodeType ( minPropertiesNode , "number" ) ;
497
477
498
- const isValid = instanceNode . children . length >= minPropertiesNode . value ;
499
- return isValid ;
478
+ return instanceNode . children . length >= minPropertiesNode . value ;
500
479
} ) ;
501
480
502
481
keywordHandlers . set ( "maximum" , ( maximumNode , instanceNode ) => {
@@ -506,8 +485,7 @@ keywordHandlers.set("maximum", (maximumNode, instanceNode) => {
506
485
507
486
assertNodeType ( maximumNode , "number" ) ;
508
487
509
- const isValid = instanceNode . value <= maximumNode . value ;
510
- return isValid ;
488
+ return instanceNode . value <= maximumNode . value ;
511
489
} ) ;
512
490
513
491
keywordHandlers . set ( "minimum" , ( minimumNode , instanceNode ) => {
@@ -550,6 +528,7 @@ keywordHandlers.set("required", (requiredNode, instanceNode) => {
550
528
}
551
529
552
530
assertNodeType ( requiredNode , "array" ) ;
531
+
553
532
for ( const requiredPropertyNode of requiredNode . children ) {
554
533
assertNodeType ( requiredPropertyNode , "string" ) ;
555
534
if ( ! jsonObjectHas ( requiredPropertyNode . value , instanceNode ) ) {
@@ -560,27 +539,19 @@ keywordHandlers.set("required", (requiredNode, instanceNode) => {
560
539
} ) ;
561
540
562
541
keywordHandlers . set ( "type" , ( typeNode , instanceNode ) => {
563
- if ( typeNode . type === "json" ) {
564
- if ( typeNode . jsonType === "string" ) {
542
+ switch ( typeNode . jsonType ) {
543
+ case "string" :
565
544
return isTypeOf ( instanceNode , typeNode . value ) ;
566
- }
567
-
568
- if ( typeNode . jsonType === "array" ) {
569
- for ( const itemNode of typeNode . children ) {
570
- if ( itemNode . type !== "json" || itemNode . jsonType != "string" ) {
571
- throw Error ( "Invalid Schema" ) ;
572
- }
573
545
574
- if ( isTypeOf ( instanceNode , itemNode . value ) ) {
575
- return true ;
576
- }
577
- }
546
+ case "array" :
547
+ return typeNode . children . some ( ( itemNode ) => {
548
+ assertNodeType ( itemNode , "string" ) ;
549
+ return isTypeOf ( instanceNode , itemNode . value ) ;
550
+ } ) ;
578
551
579
- return false ;
580
- }
552
+ default :
553
+ throw Error ( "Invalid Schema" ) ;
581
554
}
582
-
583
- throw Error ( "Invalid Schema" ) ;
584
555
} ) ;
585
556
586
557
/** @type (instanceNode: JsonNode, type: string) => boolean */
@@ -603,7 +574,7 @@ keywordHandlers.set("uniqueItems", (uniqueItemsNode, instanceNode) => {
603
574
return new Set ( normalizedItems ) . size === normalizedItems . length ;
604
575
} ) ;
605
576
606
- keywordHandlers . set ( "$id" , ( idNode , instanceNode , schemaNode ) => {
577
+ keywordHandlers . set ( "$id" , ( idNode , _instanceNode , schemaNode ) => {
607
578
if ( ! idNode . location . endsWith ( "#/$id" ) ) {
608
579
throw Error ( `Embedded schemas are not supported. Found at ${ schemaNode . location } ` ) ;
609
580
}
0 commit comments