json-schema-library 11.3.1 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/README.md +44 -35
  3. package/dist/chunk-350yNsax.cjs +1 -0
  4. package/dist/formats.cjs +2 -0
  5. package/dist/formats.cjs.map +1 -0
  6. package/dist/formats.d.cts +8 -0
  7. package/dist/formats.d.mts +8 -0
  8. package/dist/formats.mjs +2 -0
  9. package/dist/formats.mjs.map +1 -0
  10. package/dist/index.cjs +2 -1
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.cts +4 -4
  13. package/dist/index.d.mts +4 -4
  14. package/dist/index.mjs +2 -1
  15. package/dist/index.mjs.map +1 -0
  16. package/dist/jlib.js +2 -2
  17. package/dist/jlibFormats.iife.js +1 -0
  18. package/dist/jlibRemote.iife.js +1 -0
  19. package/dist/{remotes/index.cjs → remotes.cjs} +2 -1
  20. package/dist/remotes.cjs.map +1 -0
  21. package/dist/remotes.d.cts +8 -0
  22. package/dist/remotes.d.mts +8 -0
  23. package/dist/{remotes/index.mjs → remotes.mjs} +2 -1
  24. package/dist/remotes.mjs.map +1 -0
  25. package/dist/{types-DVyFDxCv.d.mts → types-BDjKcTVR.d.cts} +4 -2
  26. package/dist/{types-ZgoQMSny.d.cts → types-CqkCJmt8.d.mts} +4 -2
  27. package/package.json +21 -15
  28. package/src/SchemaNode.ts +12 -18
  29. package/src/compileSchema.ts +0 -3
  30. package/src/errors/errors.ts +3 -2
  31. package/src/formats/additionalFormats.ts +118 -0
  32. package/src/formats/formats.ts +3 -111
  33. package/src/keywords/$defs.ts +3 -0
  34. package/src/keywords/additionalProperties.ts +1 -0
  35. package/src/keywords/allOf.ts +2 -5
  36. package/src/keywords/anyOf.ts +2 -4
  37. package/src/keywords/dependencies.ts +2 -0
  38. package/src/keywords/dependentSchemas.ts +2 -3
  39. package/src/keywords/format.ts +8 -0
  40. package/src/keywords/ifthenelse.ts +4 -9
  41. package/src/keywords/oneOf.ts +2 -5
  42. package/src/keywords/patternProperties.ts +5 -1
  43. package/src/keywords/prefixItems.ts +14 -9
  44. package/src/keywords/properties.ts +2 -3
  45. package/src/keywords/propertyDependencies.ts +2 -3
  46. package/src/keywords/propertyNames.ts +1 -1
  47. package/src/utils/collectValidationErrors.ts +9 -0
  48. package/src/validateSchema.test.ts +29 -30
  49. package/tsconfig.json +1 -0
  50. package/tsconfig.test.json +1 -0
  51. package/tsdown.config.ts +5 -2
  52. package/tsdown.iife.config.ts +29 -8
  53. package/dist/remotes/index.d.cts +0 -7
  54. package/dist/remotes/index.d.mts +0 -7
@@ -0,0 +1,8 @@
1
+ import { c as JsonSchema } from "./types-CqkCJmt8.mjs";
2
+
3
+ //#region remotes/index.d.ts
4
+ /** JSON Schema meta-schemata */
5
+ declare const remotes: JsonSchema[];
6
+ //#endregion
7
+ export { remotes };
8
+ //# sourceMappingURL=remotes.d.mts.map
@@ -1 +1,2 @@
1
- const e=[{id:`http://json-schema.org/draft-04/schema#`,$schema:`http://json-schema.org/draft-04/schema#`,description:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},positiveInteger:{type:`integer`,minimum:0},positiveIntegerDefault0:{allOf:[{$ref:`#/definitions/positiveInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},minItems:1,uniqueItems:!0}},type:`object`,properties:{id:{type:`string`,format:`uri`},$schema:{type:`string`,format:`uri`},title:{type:`string`},description:{type:`string`},default:{},multipleOf:{type:`number`,minimum:0,exclusiveMinimum:!0},maximum:{type:`number`},exclusiveMaximum:{type:`boolean`,default:!1},minimum:{type:`number`},exclusiveMinimum:{type:`boolean`,default:!1},maxLength:{$ref:`#/definitions/positiveInteger`},minLength:{$ref:`#/definitions/positiveIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{anyOf:[{type:`boolean`},{$ref:`#`}],default:{}},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:{}},maxItems:{$ref:`#/definitions/positiveInteger`},minItems:{$ref:`#/definitions/positiveIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxProperties:{$ref:`#/definitions/positiveInteger`},minProperties:{$ref:`#/definitions/positiveIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{anyOf:[{type:`boolean`},{$ref:`#`}],default:{}},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},enum:{type:`array`,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},dependencies:{exclusiveMaximum:[`maximum`],exclusiveMinimum:[`minimum`]},default:{}},{$schema:`http://json-schema.org/draft-06/schema#`,$id:`http://json-schema.org/draft-06/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},title:{type:`string`},description:{type:`string`},default:{},examples:{type:`array`,items:{}},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:{}},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:{},enum:{type:`array`,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:{}},{$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/schema`,$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0,"https://json-schema.org/draft/2019-09/vocab/applicator":!0,"https://json-schema.org/draft/2019-09/vocab/validation":!0,"https://json-schema.org/draft/2019-09/vocab/meta-data":!0,"https://json-schema.org/draft/2019-09/vocab/format":!1,"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:`Core and Validation specifications meta-schema`,allOf:[{$ref:`meta/core`},{$ref:`meta/applicator`},{$ref:`meta/validation`},{$ref:`meta/meta-data`},{$ref:`meta/format`},{$ref:`meta/content`}],type:[`object`,`boolean`],properties:{definitions:{$comment:`While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.`,type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}},dependencies:{$comment:`"dependencies" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to "dependentSchemas" and "dependentRequired"`,type:`object`,additionalProperties:{anyOf:[{$recursiveRef:`#`},{$ref:`meta/validation#/$defs/stringArray`}]}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/applicator`,$recursiveAnchor:!0,title:`Applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{additionalItems:{$recursiveRef:`#`},unevaluatedItems:{$recursiveRef:`#`},items:{anyOf:[{$recursiveRef:`#`},{$ref:`#/$defs/schemaArray`}]},contains:{$recursiveRef:`#`},additionalProperties:{$recursiveRef:`#`},unevaluatedProperties:{$recursiveRef:`#`},properties:{type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$recursiveRef:`#`},propertyNames:{format:`regex`},default:{}},dependentSchemas:{type:`object`,additionalProperties:{$recursiveRef:`#`}},propertyNames:{$recursiveRef:`#`},if:{$recursiveRef:`#`},then:{$recursiveRef:`#`},else:{$recursiveRef:`#`},allOf:{$ref:`#/$defs/schemaArray`},anyOf:{$ref:`#/$defs/schemaArray`},oneOf:{$ref:`#/$defs/schemaArray`},not:{$recursiveRef:`#`}},$defs:{schemaArray:{type:`array`,minItems:1,items:{$recursiveRef:`#`}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/content`,$recursiveAnchor:!0,title:`Content vocabulary meta-schema`,type:[`object`,`boolean`],properties:{contentMediaType:{type:`string`},contentEncoding:{type:`string`},contentSchema:{$recursiveRef:`#`}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/core`,$recursiveAnchor:!0,title:`Core vocabulary meta-schema`,type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`,$comment:`Non-empty fragments not allowed.`,pattern:`^[^#]*#?$`},$schema:{type:`string`,format:`uri`},$anchor:{type:`string`,pattern:`^[A-Za-z][-A-Za-z0-9.:_]*$`},$ref:{type:`string`,format:`uri-reference`},$recursiveRef:{type:`string`,format:`uri-reference`},$recursiveAnchor:{type:`boolean`,default:!1},$vocabulary:{type:`object`,propertyNames:{type:`string`,format:`uri`},additionalProperties:{type:`boolean`}},$comment:{type:`string`},$defs:{type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/format`,$recursiveAnchor:!0,title:`Format vocabulary meta-schema`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/meta-data`,$recursiveAnchor:!0,title:`Meta-data vocabulary meta-schema`,type:[`object`,`boolean`],properties:{title:{type:`string`},description:{type:`string`},default:!0,deprecated:{type:`boolean`,default:!1},readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/validation`,$recursiveAnchor:!0,title:`Validation vocabulary meta-schema`,type:[`object`,`boolean`],properties:{multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/$defs/nonNegativeInteger`},minLength:{$ref:`#/$defs/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},maxItems:{$ref:`#/$defs/nonNegativeInteger`},minItems:{$ref:`#/$defs/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxContains:{$ref:`#/$defs/nonNegativeInteger`},minContains:{$ref:`#/$defs/nonNegativeInteger`,default:1},maxProperties:{$ref:`#/$defs/nonNegativeInteger`},minProperties:{$ref:`#/$defs/nonNegativeIntegerDefault0`},required:{$ref:`#/$defs/stringArray`},dependentRequired:{type:`object`,additionalProperties:{$ref:`#/$defs/stringArray`}},const:!0,enum:{type:`array`,items:!0},type:{anyOf:[{$ref:`#/$defs/simpleTypes`},{type:`array`,items:{$ref:`#/$defs/simpleTypes`},minItems:1,uniqueItems:!0}]}},$defs:{nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{$ref:`#/$defs/nonNegativeInteger`,default:0},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/schema`,$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:`meta`,title:`Core and Validation specifications meta-schema`,allOf:[{$ref:`meta/core`},{$ref:`meta/applicator`},{$ref:`meta/unevaluated`},{$ref:`meta/validation`},{$ref:`meta/meta-data`},{$ref:`meta/format-annotation`},{$ref:`meta/content`}],type:[`object`,`boolean`],$comment:`This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.`,properties:{definitions:{$comment:`"definitions" has been replaced by "$defs".`,type:`object`,additionalProperties:{$dynamicRef:`#meta`},deprecated:!0,default:{}},dependencies:{$comment:`"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.`,type:`object`,additionalProperties:{anyOf:[{$dynamicRef:`#meta`},{$ref:`meta/validation#/$defs/stringArray`}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:`"$recursiveAnchor" has been replaced by "$dynamicAnchor".`,$ref:`meta/core#/$defs/anchorString`,deprecated:!0},$recursiveRef:{$comment:`"$recursiveRef" has been replaced by "$dynamicRef".`,$ref:`meta/core#/$defs/uriReferenceString`,deprecated:!0}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/applicator`,$dynamicAnchor:`meta`,title:`Applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{prefixItems:{$ref:`#/$defs/schemaArray`},items:{$dynamicRef:`#meta`},contains:{$dynamicRef:`#meta`},additionalProperties:{$dynamicRef:`#meta`},properties:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},default:{}},patternProperties:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},propertyNames:{format:`regex`},default:{}},dependentSchemas:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},default:{}},propertyNames:{$dynamicRef:`#meta`},if:{$dynamicRef:`#meta`},then:{$dynamicRef:`#meta`},else:{$dynamicRef:`#meta`},allOf:{$ref:`#/$defs/schemaArray`},anyOf:{$ref:`#/$defs/schemaArray`},oneOf:{$ref:`#/$defs/schemaArray`},not:{$dynamicRef:`#meta`}},$defs:{schemaArray:{type:`array`,minItems:1,items:{$dynamicRef:`#meta`}}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/content`,$dynamicAnchor:`meta`,title:`Content vocabulary meta-schema`,type:[`object`,`boolean`],properties:{contentEncoding:{type:`string`},contentMediaType:{type:`string`},contentSchema:{$dynamicRef:`#meta`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/core`,$dynamicAnchor:`meta`,title:`Core vocabulary meta-schema`,type:[`object`,`boolean`],properties:{$id:{$ref:`#/$defs/uriReferenceString`,$comment:`Non-empty fragments not allowed.`,pattern:`^[^#]*#?$`},$schema:{$ref:`#/$defs/uriString`},$ref:{$ref:`#/$defs/uriReferenceString`},$anchor:{$ref:`#/$defs/anchorString`},$dynamicRef:{$ref:`#/$defs/uriReferenceString`},$dynamicAnchor:{$ref:`#/$defs/anchorString`},$vocabulary:{type:`object`,propertyNames:{$ref:`#/$defs/uriString`},additionalProperties:{type:`boolean`}},$comment:{type:`string`},$defs:{type:`object`,additionalProperties:{$dynamicRef:`#meta`}}},$defs:{anchorString:{type:`string`,pattern:`^[A-Za-z_][-A-Za-z0-9._]*$`},uriString:{type:`string`,format:`uri`},uriReferenceString:{type:`string`,format:`uri-reference`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/format-annotation`,$dynamicAnchor:`meta`,title:`Format vocabulary meta-schema for annotation results`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/format-assertion`,$dynamicAnchor:`meta`,title:`Format vocabulary meta-schema for assertion results`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/meta-data`,$dynamicAnchor:`meta`,title:`Meta-data vocabulary meta-schema`,type:[`object`,`boolean`],properties:{title:{type:`string`},description:{type:`string`},default:!0,deprecated:{type:`boolean`,default:!1},readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/unevaluated`,$dynamicAnchor:`meta`,title:`Unevaluated applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{unevaluatedItems:{$dynamicRef:`#meta`},unevaluatedProperties:{$dynamicRef:`#meta`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/validation`,$dynamicAnchor:`meta`,title:`Validation vocabulary meta-schema`,type:[`object`,`boolean`],properties:{type:{anyOf:[{$ref:`#/$defs/simpleTypes`},{type:`array`,items:{$ref:`#/$defs/simpleTypes`},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/$defs/nonNegativeInteger`},minLength:{$ref:`#/$defs/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},maxItems:{$ref:`#/$defs/nonNegativeInteger`},minItems:{$ref:`#/$defs/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxContains:{$ref:`#/$defs/nonNegativeInteger`},minContains:{$ref:`#/$defs/nonNegativeInteger`,default:1},maxProperties:{$ref:`#/$defs/nonNegativeInteger`},minProperties:{$ref:`#/$defs/nonNegativeIntegerDefault0`},required:{$ref:`#/$defs/stringArray`},dependentRequired:{type:`object`,additionalProperties:{$ref:`#/$defs/stringArray`}}},$defs:{nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{$ref:`#/$defs/nonNegativeInteger`,default:0},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}}}];export{e as remotes};
1
+ const e=[{id:`http://json-schema.org/draft-04/schema#`,$schema:`http://json-schema.org/draft-04/schema#`,description:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},positiveInteger:{type:`integer`,minimum:0},positiveIntegerDefault0:{allOf:[{$ref:`#/definitions/positiveInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},minItems:1,uniqueItems:!0}},type:`object`,properties:{id:{type:`string`,format:`uri`},$schema:{type:`string`,format:`uri`},title:{type:`string`},description:{type:`string`},default:{},multipleOf:{type:`number`,minimum:0,exclusiveMinimum:!0},maximum:{type:`number`},exclusiveMaximum:{type:`boolean`,default:!1},minimum:{type:`number`},exclusiveMinimum:{type:`boolean`,default:!1},maxLength:{$ref:`#/definitions/positiveInteger`},minLength:{$ref:`#/definitions/positiveIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{anyOf:[{type:`boolean`},{$ref:`#`}],default:{}},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:{}},maxItems:{$ref:`#/definitions/positiveInteger`},minItems:{$ref:`#/definitions/positiveIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxProperties:{$ref:`#/definitions/positiveInteger`},minProperties:{$ref:`#/definitions/positiveIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{anyOf:[{type:`boolean`},{$ref:`#`}],default:{}},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},enum:{type:`array`,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},dependencies:{exclusiveMaximum:[`maximum`],exclusiveMinimum:[`minimum`]},default:{}},{$schema:`http://json-schema.org/draft-06/schema#`,$id:`http://json-schema.org/draft-06/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},title:{type:`string`},description:{type:`string`},default:{},examples:{type:`array`,items:{}},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:{}},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:{},enum:{type:`array`,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:{}},{$schema:`http://json-schema.org/draft-07/schema#`,$id:`http://json-schema.org/draft-07/schema#`,title:`Core schema meta-schema`,definitions:{schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},default:!0},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/schema`,$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0,"https://json-schema.org/draft/2019-09/vocab/applicator":!0,"https://json-schema.org/draft/2019-09/vocab/validation":!0,"https://json-schema.org/draft/2019-09/vocab/meta-data":!0,"https://json-schema.org/draft/2019-09/vocab/format":!1,"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:`Core and Validation specifications meta-schema`,allOf:[{$ref:`meta/core`},{$ref:`meta/applicator`},{$ref:`meta/validation`},{$ref:`meta/meta-data`},{$ref:`meta/format`},{$ref:`meta/content`}],type:[`object`,`boolean`],properties:{definitions:{$comment:`While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.`,type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}},dependencies:{$comment:`"dependencies" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to "dependentSchemas" and "dependentRequired"`,type:`object`,additionalProperties:{anyOf:[{$recursiveRef:`#`},{$ref:`meta/validation#/$defs/stringArray`}]}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/applicator`,$recursiveAnchor:!0,title:`Applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{additionalItems:{$recursiveRef:`#`},unevaluatedItems:{$recursiveRef:`#`},items:{anyOf:[{$recursiveRef:`#`},{$ref:`#/$defs/schemaArray`}]},contains:{$recursiveRef:`#`},additionalProperties:{$recursiveRef:`#`},unevaluatedProperties:{$recursiveRef:`#`},properties:{type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$recursiveRef:`#`},propertyNames:{format:`regex`},default:{}},dependentSchemas:{type:`object`,additionalProperties:{$recursiveRef:`#`}},propertyNames:{$recursiveRef:`#`},if:{$recursiveRef:`#`},then:{$recursiveRef:`#`},else:{$recursiveRef:`#`},allOf:{$ref:`#/$defs/schemaArray`},anyOf:{$ref:`#/$defs/schemaArray`},oneOf:{$ref:`#/$defs/schemaArray`},not:{$recursiveRef:`#`}},$defs:{schemaArray:{type:`array`,minItems:1,items:{$recursiveRef:`#`}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/content`,$recursiveAnchor:!0,title:`Content vocabulary meta-schema`,type:[`object`,`boolean`],properties:{contentMediaType:{type:`string`},contentEncoding:{type:`string`},contentSchema:{$recursiveRef:`#`}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/core`,$recursiveAnchor:!0,title:`Core vocabulary meta-schema`,type:[`object`,`boolean`],properties:{$id:{type:`string`,format:`uri-reference`,$comment:`Non-empty fragments not allowed.`,pattern:`^[^#]*#?$`},$schema:{type:`string`,format:`uri`},$anchor:{type:`string`,pattern:`^[A-Za-z][-A-Za-z0-9.:_]*$`},$ref:{type:`string`,format:`uri-reference`},$recursiveRef:{type:`string`,format:`uri-reference`},$recursiveAnchor:{type:`boolean`,default:!1},$vocabulary:{type:`object`,propertyNames:{type:`string`,format:`uri`},additionalProperties:{type:`boolean`}},$comment:{type:`string`},$defs:{type:`object`,additionalProperties:{$recursiveRef:`#`},default:{}}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/format`,$recursiveAnchor:!0,title:`Format vocabulary meta-schema`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/meta-data`,$recursiveAnchor:!0,title:`Meta-data vocabulary meta-schema`,type:[`object`,`boolean`],properties:{title:{type:`string`},description:{type:`string`},default:!0,deprecated:{type:`boolean`,default:!1},readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0}}},{$schema:`https://json-schema.org/draft/2019-09/schema`,$id:`https://json-schema.org/draft/2019-09/meta/validation`,$recursiveAnchor:!0,title:`Validation vocabulary meta-schema`,type:[`object`,`boolean`],properties:{multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/$defs/nonNegativeInteger`},minLength:{$ref:`#/$defs/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},maxItems:{$ref:`#/$defs/nonNegativeInteger`},minItems:{$ref:`#/$defs/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxContains:{$ref:`#/$defs/nonNegativeInteger`},minContains:{$ref:`#/$defs/nonNegativeInteger`,default:1},maxProperties:{$ref:`#/$defs/nonNegativeInteger`},minProperties:{$ref:`#/$defs/nonNegativeIntegerDefault0`},required:{$ref:`#/$defs/stringArray`},dependentRequired:{type:`object`,additionalProperties:{$ref:`#/$defs/stringArray`}},const:!0,enum:{type:`array`,items:!0},type:{anyOf:[{$ref:`#/$defs/simpleTypes`},{type:`array`,items:{$ref:`#/$defs/simpleTypes`},minItems:1,uniqueItems:!0}]}},$defs:{nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{$ref:`#/$defs/nonNegativeInteger`,default:0},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/schema`,$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:`meta`,title:`Core and Validation specifications meta-schema`,allOf:[{$ref:`meta/core`},{$ref:`meta/applicator`},{$ref:`meta/unevaluated`},{$ref:`meta/validation`},{$ref:`meta/meta-data`},{$ref:`meta/format-annotation`},{$ref:`meta/content`}],type:[`object`,`boolean`],$comment:`This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.`,properties:{definitions:{$comment:`"definitions" has been replaced by "$defs".`,type:`object`,additionalProperties:{$dynamicRef:`#meta`},deprecated:!0,default:{}},dependencies:{$comment:`"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.`,type:`object`,additionalProperties:{anyOf:[{$dynamicRef:`#meta`},{$ref:`meta/validation#/$defs/stringArray`}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:`"$recursiveAnchor" has been replaced by "$dynamicAnchor".`,$ref:`meta/core#/$defs/anchorString`,deprecated:!0},$recursiveRef:{$comment:`"$recursiveRef" has been replaced by "$dynamicRef".`,$ref:`meta/core#/$defs/uriReferenceString`,deprecated:!0}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/applicator`,$dynamicAnchor:`meta`,title:`Applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{prefixItems:{$ref:`#/$defs/schemaArray`},items:{$dynamicRef:`#meta`},contains:{$dynamicRef:`#meta`},additionalProperties:{$dynamicRef:`#meta`},properties:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},default:{}},patternProperties:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},propertyNames:{format:`regex`},default:{}},dependentSchemas:{type:`object`,additionalProperties:{$dynamicRef:`#meta`},default:{}},propertyNames:{$dynamicRef:`#meta`},if:{$dynamicRef:`#meta`},then:{$dynamicRef:`#meta`},else:{$dynamicRef:`#meta`},allOf:{$ref:`#/$defs/schemaArray`},anyOf:{$ref:`#/$defs/schemaArray`},oneOf:{$ref:`#/$defs/schemaArray`},not:{$dynamicRef:`#meta`}},$defs:{schemaArray:{type:`array`,minItems:1,items:{$dynamicRef:`#meta`}}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/content`,$dynamicAnchor:`meta`,title:`Content vocabulary meta-schema`,type:[`object`,`boolean`],properties:{contentEncoding:{type:`string`},contentMediaType:{type:`string`},contentSchema:{$dynamicRef:`#meta`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/core`,$dynamicAnchor:`meta`,title:`Core vocabulary meta-schema`,type:[`object`,`boolean`],properties:{$id:{$ref:`#/$defs/uriReferenceString`,$comment:`Non-empty fragments not allowed.`,pattern:`^[^#]*#?$`},$schema:{$ref:`#/$defs/uriString`},$ref:{$ref:`#/$defs/uriReferenceString`},$anchor:{$ref:`#/$defs/anchorString`},$dynamicRef:{$ref:`#/$defs/uriReferenceString`},$dynamicAnchor:{$ref:`#/$defs/anchorString`},$vocabulary:{type:`object`,propertyNames:{$ref:`#/$defs/uriString`},additionalProperties:{type:`boolean`}},$comment:{type:`string`},$defs:{type:`object`,additionalProperties:{$dynamicRef:`#meta`}}},$defs:{anchorString:{type:`string`,pattern:`^[A-Za-z_][-A-Za-z0-9._]*$`},uriString:{type:`string`,format:`uri`},uriReferenceString:{type:`string`,format:`uri-reference`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/format-annotation`,$dynamicAnchor:`meta`,title:`Format vocabulary meta-schema for annotation results`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/format-assertion`,$dynamicAnchor:`meta`,title:`Format vocabulary meta-schema for assertion results`,type:[`object`,`boolean`],properties:{format:{type:`string`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/meta-data`,$dynamicAnchor:`meta`,title:`Meta-data vocabulary meta-schema`,type:[`object`,`boolean`],properties:{title:{type:`string`},description:{type:`string`},default:!0,deprecated:{type:`boolean`,default:!1},readOnly:{type:`boolean`,default:!1},writeOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/unevaluated`,$dynamicAnchor:`meta`,title:`Unevaluated applicator vocabulary meta-schema`,type:[`object`,`boolean`],properties:{unevaluatedItems:{$dynamicRef:`#meta`},unevaluatedProperties:{$dynamicRef:`#meta`}}},{$schema:`https://json-schema.org/draft/2020-12/schema`,$id:`https://json-schema.org/draft/2020-12/meta/validation`,$dynamicAnchor:`meta`,title:`Validation vocabulary meta-schema`,type:[`object`,`boolean`],properties:{type:{anyOf:[{$ref:`#/$defs/simpleTypes`},{type:`array`,items:{$ref:`#/$defs/simpleTypes`},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/$defs/nonNegativeInteger`},minLength:{$ref:`#/$defs/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},maxItems:{$ref:`#/$defs/nonNegativeInteger`},minItems:{$ref:`#/$defs/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},maxContains:{$ref:`#/$defs/nonNegativeInteger`},minContains:{$ref:`#/$defs/nonNegativeInteger`,default:1},maxProperties:{$ref:`#/$defs/nonNegativeInteger`},minProperties:{$ref:`#/$defs/nonNegativeIntegerDefault0`},required:{$ref:`#/$defs/stringArray`},dependentRequired:{type:`object`,additionalProperties:{$ref:`#/$defs/stringArray`}}},$defs:{nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{$ref:`#/$defs/nonNegativeInteger`,default:0},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}}}];export{e as remotes};
2
+ //# sourceMappingURL=remotes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remotes.mjs","names":["draft04Meta","draft06Meta","draft07Meta","draft2019Meta","draft2019MetaApplicator","draft2019MetaContent","draft2019MetaCore","draft2019MetaFormat","draft2019MetaMetaData","draft2019MetaValidation","draft2020Meta","draft2020MetaApplicator","draft2020MetaContent","draft2020MetaCore","draft2020MetaFormatAnnotation","draft2020MetaFormatAssertion","draft2020MetaMetaData","draft2020MetaUnevaluated","draft2020MetaValidation"],"sources":["../remotes/draft04.json","../remotes/draft06.json","../remotes/draft07.json","../remotes/draft2019-09.json","../remotes/draft2019-09_meta_applicator.json","../remotes/draft2019-09_meta_content.json","../remotes/draft2019-09_meta_core.json","../remotes/draft2019-09_meta_format.json","../remotes/draft2019-09_meta_meta-data.json","../remotes/draft2019-09_meta_validation.json","../remotes/draft2020-12.json","../remotes/draft2020-12_meta_applicator.json","../remotes/draft2020-12_meta_content.json","../remotes/draft2020-12_meta_core.json","../remotes/draft2020-12_meta_format_annotation.json","../remotes/draft2020-12_meta_format_assertion.json","../remotes/draft2020-12_meta_meta_data.json","../remotes/draft2020-12_meta_unevaluated.json","../remotes/draft2020-12_meta_validation.json","../remotes/index.ts"],"sourcesContent":["","","","","","","","","","","","","","","","","","","","import { JsonSchema } from \"../src/types\";\nimport draft04Meta from \"./draft04.json\";\nimport draft06Meta from \"./draft06.json\";\nimport draft07Meta from \"./draft07.json\";\nimport draft2019Meta from \"./draft2019-09.json\";\nimport draft2019MetaApplicator from \"./draft2019-09_meta_applicator.json\";\nimport draft2019MetaContent from \"./draft2019-09_meta_content.json\";\nimport draft2019MetaCore from \"./draft2019-09_meta_core.json\";\nimport draft2019MetaFormat from \"./draft2019-09_meta_format.json\";\nimport draft2019MetaMetaData from \"./draft2019-09_meta_meta-data.json\";\nimport draft2019MetaValidation from \"./draft2019-09_meta_validation.json\";\nimport draft2020Meta from \"./draft2020-12.json\";\nimport draft2020MetaApplicator from \"./draft2020-12_meta_applicator.json\";\nimport draft2020MetaContent from \"./draft2020-12_meta_content.json\";\nimport draft2020MetaCore from \"./draft2020-12_meta_core.json\";\nimport draft2020MetaFormatAnnotation from \"./draft2020-12_meta_format_annotation.json\";\nimport draft2020MetaFormatAssertion from \"./draft2020-12_meta_format_assertion.json\";\nimport draft2020MetaMetaData from \"./draft2020-12_meta_meta_data.json\";\nimport draft2020MetaUnevaluated from \"./draft2020-12_meta_unevaluated.json\";\nimport draft2020MetaValidation from \"./draft2020-12_meta_validation.json\";\n\n/** JSON Schema meta-schemata */\nconst remotes: JsonSchema[] = [\n draft04Meta,\n draft06Meta,\n draft07Meta,\n draft2019Meta,\n draft2019MetaApplicator,\n draft2019MetaContent,\n draft2019MetaCore,\n draft2019MetaFormat,\n draft2019MetaMetaData,\n draft2019MetaValidation,\n draft2020Meta,\n draft2020MetaApplicator,\n draft2020MetaContent,\n draft2020MetaCore,\n draft2020MetaFormatAnnotation,\n draft2020MetaFormatAssertion,\n draft2020MetaMetaData,\n draft2020MetaUnevaluated,\n draft2020MetaValidation\n] as JsonSchema[];\n\nexport { remotes };\n"],"mappings":"AmBsBA,MAAM,EAAwB,yolBAoB7B"}
@@ -214,7 +214,7 @@ declare const errors: {
214
214
  "pattern-error": string;
215
215
  "pattern-properties-error": string;
216
216
  "ref-error": string;
217
- "required-property-error": string; /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
217
+ "required-property-error": string; /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
218
218
  "schema-warning": string;
219
219
  "type-error": string;
220
220
  "undefined-value-error": string;
@@ -226,6 +226,7 @@ declare const errors: {
226
226
  "deprecated-warning": string;
227
227
  "schema-error": string;
228
228
  "unknown-keyword-warning": string;
229
+ "unknown-format-warning": string;
229
230
  };
230
231
  //#endregion
231
232
  //#region src/SchemaNode.d.ts
@@ -511,4 +512,5 @@ declare function isJsonAnnotation(error: unknown): error is JsonAnnotation;
511
512
  */
512
513
  declare function isJsonError(error: unknown): error is JsonError;
513
514
  //#endregion
514
- export { JsonSchemaResolver as A, DraftVersion as C, DataNode as D, TemplateOptions as E, Maybe as F, ValidationAnnotation as I, ValidationPath as L, JsonSchemaValidator as M, JsonSchemaValidatorParams as N, JsonSchemaReducer as O, Keyword as P, ValidationReturnType as R, Draft as S, extendDraft as T, GetNodeOptions as _, JsonAnnotation as a, isReduceable as b, JsonSchema as c, isAnnotation as d, isBooleanSchema as f, Context as g, isJsonSchema as h, ErrorConfig as i, JsonSchemaResolverParams as j, JsonSchemaReducerParams as k, NodeOrError as l, isJsonError as m, AnnotationData as n, JsonError as o, isJsonAnnotation as p, BooleanSchema as r, JsonPointer as s, Annotation as t, OptionalNodeOrError as u, SchemaNode as v, addKeywords as w, isSchemaNode as x, ValidateReturnType as y };
515
+ export { JsonSchemaResolver as A, DraftVersion as C, DataNode as D, TemplateOptions as E, Maybe as F, ValidationAnnotation as I, ValidationPath as L, JsonSchemaValidator as M, JsonSchemaValidatorParams as N, JsonSchemaReducer as O, Keyword as P, ValidationReturnType as R, Draft as S, extendDraft as T, GetNodeOptions as _, JsonAnnotation as a, isReduceable as b, JsonSchema as c, isAnnotation as d, isBooleanSchema as f, Context as g, isJsonSchema as h, ErrorConfig as i, JsonSchemaResolverParams as j, JsonSchemaReducerParams as k, NodeOrError as l, isJsonError as m, AnnotationData as n, JsonError as o, isJsonAnnotation as p, BooleanSchema as r, JsonPointer as s, Annotation as t, OptionalNodeOrError as u, SchemaNode as v, addKeywords as w, isSchemaNode as x, ValidateReturnType as y };
516
+ //# sourceMappingURL=types-BDjKcTVR.d.cts.map
@@ -214,7 +214,7 @@ declare const errors: {
214
214
  "pattern-error": string;
215
215
  "pattern-properties-error": string;
216
216
  "ref-error": string;
217
- "required-property-error": string; /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
217
+ "required-property-error": string; /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
218
218
  "schema-warning": string;
219
219
  "type-error": string;
220
220
  "undefined-value-error": string;
@@ -226,6 +226,7 @@ declare const errors: {
226
226
  "deprecated-warning": string;
227
227
  "schema-error": string;
228
228
  "unknown-keyword-warning": string;
229
+ "unknown-format-warning": string;
229
230
  };
230
231
  //#endregion
231
232
  //#region src/SchemaNode.d.ts
@@ -511,4 +512,5 @@ declare function isJsonAnnotation(error: unknown): error is JsonAnnotation;
511
512
  */
512
513
  declare function isJsonError(error: unknown): error is JsonError;
513
514
  //#endregion
514
- export { JsonSchemaResolver as A, DraftVersion as C, DataNode as D, TemplateOptions as E, Maybe as F, ValidationAnnotation as I, ValidationPath as L, JsonSchemaValidator as M, JsonSchemaValidatorParams as N, JsonSchemaReducer as O, Keyword as P, ValidationReturnType as R, Draft as S, extendDraft as T, GetNodeOptions as _, JsonAnnotation as a, isReduceable as b, JsonSchema as c, isAnnotation as d, isBooleanSchema as f, Context as g, isJsonSchema as h, ErrorConfig as i, JsonSchemaResolverParams as j, JsonSchemaReducerParams as k, NodeOrError as l, isJsonError as m, AnnotationData as n, JsonError as o, isJsonAnnotation as p, BooleanSchema as r, JsonPointer as s, Annotation as t, OptionalNodeOrError as u, SchemaNode as v, addKeywords as w, isSchemaNode as x, ValidateReturnType as y };
515
+ export { JsonSchemaResolver as A, DraftVersion as C, DataNode as D, TemplateOptions as E, Maybe as F, ValidationAnnotation as I, ValidationPath as L, JsonSchemaValidator as M, JsonSchemaValidatorParams as N, JsonSchemaReducer as O, Keyword as P, ValidationReturnType as R, Draft as S, extendDraft as T, GetNodeOptions as _, JsonAnnotation as a, isReduceable as b, JsonSchema as c, isAnnotation as d, isBooleanSchema as f, Context as g, isJsonSchema as h, ErrorConfig as i, JsonSchemaResolverParams as j, JsonSchemaReducerParams as k, NodeOrError as l, isJsonError as m, AnnotationData as n, JsonError as o, isJsonAnnotation as p, BooleanSchema as r, JsonPointer as s, Annotation as t, OptionalNodeOrError as u, SchemaNode as v, addKeywords as w, isSchemaNode as x, ValidateReturnType as y };
516
+ //# sourceMappingURL=types-CqkCJmt8.d.mts.map
package/package.json CHANGED
@@ -1,30 +1,32 @@
1
1
  {
2
2
  "name": "json-schema-library",
3
- "version": "11.3.1",
3
+ "version": "11.4.0",
4
4
  "description": "Customizable and hackable json-validator and json-schema utilities for traversal, data generation and validation",
5
- "main": "./dist/index.cjs",
6
- "module": "./dist/index.mjs",
7
5
  "types": "./dist/index.d.cts",
8
6
  "exports": {
9
7
  ".": {
10
8
  "import": "./dist/index.mjs",
11
9
  "require": "./dist/index.cjs"
12
10
  },
11
+ "./formats": {
12
+ "import": "./dist/formats.mjs",
13
+ "require": "./dist/formats.cjs"
14
+ },
13
15
  "./remotes": {
14
- "import": "./dist/remotes/index.mjs",
15
- "require": "./dist/remotes/index.cjs"
16
+ "import": "./dist/remotes.mjs",
17
+ "require": "./dist/remotes.cjs"
16
18
  },
17
19
  "./package.json": "./package.json"
18
20
  },
19
21
  "scripts": {
20
22
  "coverage": "nyc npm run test --reporter=lcov",
21
- "dist": "tsdown -f esm -f cjs --minify; yarn dist:iife",
22
- "dist:iife": "tsdown --config tsdown.iife.config.ts --no-clean --minify; mv dist/index.iife.js dist/jlib.js",
23
- "lint": "yarn lint:src && yarn lint:types",
23
+ "dist": "tsdown -f esm -f cjs --minify --report --attw --unused; pnpm run dist:iife;",
24
+ "dist:iife": "tsdown --config tsdown.iife.config.ts --no-clean --minify --report; mv ./dist/jlib.iife.js ./dist/jlib.js",
25
+ "lint": "pnpm run lint:src && pnpm run lint:types",
24
26
  "lint:src": "eslint src",
25
27
  "lint:types": "tsc --noEmit",
26
28
  "lint:tests": "tsc --noEmit --project tsconfig.test.json",
27
- "prepublishOnly": "yarn dist",
29
+ "prepublishOnly": "pnpm run dist",
28
30
  "tdd": "watch \"npm run test:unit\" src/",
29
31
  "test": "mocha 'src/**/*.{test,spec}.ts'",
30
32
  "test:2019": "mocha 'src/tests/spec/draft2019-09.spec.ts'",
@@ -68,6 +70,7 @@
68
70
  },
69
71
  "homepage": "https://github.com/sagold/json-schema-library",
70
72
  "devDependencies": {
73
+ "@arethetypeswrong/cli": "^0.18.2",
71
74
  "@eslint/js": "^10.0.1",
72
75
  "@types/glob": "^ 8.1.0",
73
76
  "@types/mocha": "^10.0.6",
@@ -82,19 +85,14 @@
82
85
  "tsx": "^4.21.0",
83
86
  "typescript": "^5.9.3",
84
87
  "typescript-eslint": "^8.57.0",
88
+ "unplugin-unused": "^0.5.7",
85
89
  "watch": "^1.0.1"
86
90
  },
87
91
  "dependencies": {
88
92
  "@hyperjump/json-schema-formats": "^1.0.1",
89
93
  "@sagold/json-pointer": "^7.2.1",
90
- "deepmerge": "^4.3.1",
91
- "diff": ">=8.0.3",
92
94
  "fast-copy": "^4.0.2",
93
95
  "fast-deep-equal": "^3.1.3",
94
- "lodash": ">=4",
95
- "minimatch": ">=9.0.7",
96
- "serialize-javascript": ">=7.0.3",
97
- "string-width": ">=4.2.3",
98
96
  "uri-js": "^4.4.1",
99
97
  "valid-url": "^1.0.9"
100
98
  },
@@ -113,5 +111,13 @@
113
111
  },
114
112
  "publishConfig": {
115
113
  "registry": "https://registry.npmjs.org"
114
+ },
115
+ "main": "./dist/index.cjs",
116
+ "module": "./dist/index.mjs",
117
+ "inlinedDependencies": {
118
+ "@hyperjump/json-schema-formats": "1.0.1",
119
+ "@hyperjump/uri": "1.3.3",
120
+ "idn-hostname": "15.1.8",
121
+ "punycode": "2.3.1"
116
122
  }
117
123
  }
package/src/SchemaNode.ts CHANGED
@@ -623,24 +623,18 @@ export function addKeywords(node: SchemaNode) {
623
623
  .filter(({ keyword }) => whitelist.includes(keyword) || keys.includes(keyword))
624
624
  .map((keyword) => execKeyword(keyword, node));
625
625
 
626
- // find unused keywords
627
- if (node.context.withSchemaAnnotations) {
628
- Object.keys(node.schema)
629
- .filter(
630
- (key) =>
631
- !key.startsWith("x-") && node.context.keywords.find((keyword) => keyword.keyword === key) == null
632
- )
633
- .forEach((keyword) => {
634
- errors.push(
635
- node.createAnnotation("unknown-keyword-warning", {
636
- pointer: `${node.schemaLocation}/${keyword}`,
637
- schema: node.schema,
638
- value: keyword,
639
- draft: node.getDraftVersion()
640
- })
641
- );
642
- });
643
- }
626
+ keys.filter(
627
+ (key) => !key.startsWith("x-") && node.context.keywords.find((keyword) => keyword.keyword === key) == null
628
+ ).forEach((keyword) => {
629
+ errors.push(
630
+ node.createAnnotation("unknown-keyword-warning", {
631
+ pointer: `${node.schemaLocation}/${keyword}`,
632
+ schema: node.schema,
633
+ value: keyword,
634
+ draft: node.getDraftVersion()
635
+ })
636
+ );
637
+ });
644
638
 
645
639
  return errors;
646
640
  }
@@ -78,8 +78,6 @@ export type CompileOptions = {
78
78
  getDataDefaultOptions?: TemplateOptions;
79
79
  /** Set to true to throw an Error on errors in input schema. Defaults to false */
80
80
  throwOnInvalidSchema?: boolean;
81
- /** Set to true to collect unknown keywords of input schema in `node.schemaAnnotations`. Defaults to false */
82
- withSchemaAnnotations?: boolean;
83
81
  /** Set to true to throw an Error when encountering an unresolvable ref */
84
82
  throwOnInvalidRef?: boolean;
85
83
  };
@@ -118,7 +116,6 @@ export function compileSchema(schema: JsonSchema | BooleanSchema, options: Compi
118
116
  ...copy(pick(draft, "methods", "keywords", "version", "formats", "errors")),
119
117
  draft: options.draft,
120
118
  getDataDefaultOptions: options.getDataDefaultOptions,
121
- withSchemaAnnotations: options.withSchemaAnnotations ?? false,
122
119
  throwOnInvalidRef: options.throwOnInvalidRef ?? false,
123
120
  drafts
124
121
  },
@@ -67,7 +67,7 @@ export const errors = {
67
67
  "Property `{{key}}` does not match any patterns in `{{pointer}}`. Valid patterns are: {{patterns}}",
68
68
  "ref-error": "Could not resolve $ref '{{ref}}' from '{{pointer}}'",
69
69
  "required-property-error": "The required property `{{key}}` is missing at `{{pointer}}`",
70
- /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
70
+ /** return schema-warning with createSchemaWarning:true when a valid, but undefined property was found */
71
71
  "schema-warning": "Failed retrieving a schema from '{{pointer}}' to key '{{key}}'",
72
72
  "type-error": "Expected `{{value}}` ({{received}}) in `{{pointer}}` to be of type `{{expected}}`",
73
73
  "undefined-value-error": "Value must not be undefined in `{{pointer}}`",
@@ -81,5 +81,6 @@ export const errors = {
81
81
  "deprecated-warning": "Value at `{{pointer}}` is deprecated",
82
82
  // schema validation
83
83
  "schema-error": "Invalid schema found at {{pointer}}: {{message}}",
84
- "unknown-keyword-warning": "Keyword '{{value}}' is not a valid keyword to draft '{{draft}}'"
84
+ "unknown-keyword-warning": "Keyword '{{value}}' is not a valid keyword to draft '{{draft}}'",
85
+ "unknown-format-warning": "Format {{value}} is not a valid format"
85
86
  };
@@ -0,0 +1,118 @@
1
+ /* eslint-disable no-control-regex */
2
+ import { isAsciiIdn, isUri, isIdnEmail, isIri, isIriReference, isIdn } from "@hyperjump/json-schema-formats";
3
+ import { type Draft } from "src/Draft";
4
+ import { JsonSchemaValidatorParams, ValidationReturnType } from "src/Keyword";
5
+
6
+ const isValidIPV4 = /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/;
7
+ const isValidIPV6 =
8
+ /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i;
9
+ const isValidURIRef =
10
+ /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
11
+ // uri-template: https://tools.ietf.org/html/rfc6570
12
+ const isValidURITemplate =
13
+ /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
14
+
15
+ export function addFormats(drafts: Draft[]) {
16
+ drafts.forEach((draft) => (draft.formats = { ...formats, ...draft.formats }));
17
+ }
18
+
19
+ export const formats: Record<string, (options: JsonSchemaValidatorParams) => ValidationReturnType> = {
20
+ hostname: ({ node, pointer, data }) => {
21
+ const { schema } = node;
22
+ if (typeof data !== "string" || isAsciiIdn(data)) {
23
+ return undefined;
24
+ }
25
+ return node.createError("format-hostname-error", { value: data, pointer, schema });
26
+ },
27
+
28
+ "idn-hostname": ({ node, pointer, data }) => {
29
+ if (typeof data !== "string" || isIdn(data)) {
30
+ return undefined;
31
+ }
32
+ return node.createError("format-idn-hostname-error", { value: data, pointer, schema: node.schema });
33
+ },
34
+
35
+ /**
36
+ * @draft 7
37
+ * [RFC6531] https://json-schema.org/draft-07/json-schema-validation.html#RFC6531
38
+ */
39
+ "idn-email": ({ node, pointer, data }) => {
40
+ if (typeof data !== "string" || data === "" || isIdnEmail(data)) {
41
+ return undefined;
42
+ }
43
+ return node.createError("format-email-error", { value: data, pointer, schema: node.schema });
44
+ },
45
+
46
+ ipv4: ({ node, pointer, data }) => {
47
+ const { schema } = node;
48
+ if (typeof data !== "string" || data === "") {
49
+ return undefined;
50
+ }
51
+ if (data && data[0] === "0") {
52
+ // leading zeroes should be rejected, as they are treated as octals
53
+ return node.createError("format-ipv4-leading-zero-error", { value: data, pointer, schema });
54
+ }
55
+ if (data.length <= 15 && isValidIPV4.test(data)) {
56
+ return undefined;
57
+ }
58
+ return node.createError("format-ipv4-error", { value: data, pointer, schema });
59
+ },
60
+
61
+ ipv6: ({ node, pointer, data }) => {
62
+ const { schema } = node;
63
+ if (typeof data !== "string" || data === "") {
64
+ return undefined;
65
+ }
66
+ if (data && data[0] === "0") {
67
+ // leading zeroes should be rejected, as they are treated as octals
68
+ return node.createError("format-ipv6-leading-zero-error", { value: data, pointer, schema });
69
+ }
70
+ if (data.length <= 45 && isValidIPV6.test(data)) {
71
+ return undefined;
72
+ }
73
+ return node.createError("format-ipv6-error", { value: data, pointer, schema });
74
+ },
75
+
76
+ iri: ({ node, pointer, data }) => {
77
+ const { schema } = node;
78
+ if (typeof data !== "string" || data === "" || isIri(data)) {
79
+ return undefined;
80
+ }
81
+ return node.createError("format-iri-error", { value: data, pointer, schema });
82
+ },
83
+
84
+ "iri-reference": ({ node, pointer, data }) => {
85
+ const { schema } = node;
86
+ if (typeof data !== "string" || data === "" || isIriReference(data)) {
87
+ return undefined;
88
+ }
89
+ return node.createError("format-iri-reference-error", { value: data, pointer, schema });
90
+ },
91
+ uri: ({ node, pointer, data }) => {
92
+ if (typeof data !== "string" || data === "" || isUri(data)) {
93
+ return undefined;
94
+ }
95
+ return node.createError("format-uri-error", { value: data, pointer, schema: node.schema });
96
+ },
97
+ "uri-reference": ({ node, pointer, data }) => {
98
+ const { schema } = node;
99
+ if (typeof data !== "string" || data === "") {
100
+ return undefined;
101
+ }
102
+ if (isValidURIRef.test(data)) {
103
+ return undefined;
104
+ }
105
+ return node.createError("format-uri-reference-error", { value: data, pointer, schema });
106
+ },
107
+
108
+ "uri-template": ({ node, pointer, data }) => {
109
+ const { schema } = node;
110
+ if (typeof data !== "string" || data === "") {
111
+ return undefined;
112
+ }
113
+ if (isValidURITemplate.test(data)) {
114
+ return undefined;
115
+ }
116
+ return node.createError("format-uri-template-error", { value: data, pointer, schema });
117
+ }
118
+ };
@@ -1,6 +1,4 @@
1
- /* eslint-disable no-control-regex */
2
- import { isAsciiIdn, isUri, isIdnEmail, isIri, isIriReference, isIdn } from "@hyperjump/json-schema-formats";
3
- import validUrl from "valid-url";
1
+ import { isWebUri } from "valid-url";
4
2
  import { getTypeOf } from "../utils/getTypeOf";
5
3
  import { JsonSchemaValidatorParams, ValidationReturnType } from "../Keyword";
6
4
  import settings from "../settings";
@@ -13,14 +11,8 @@ const matchDate = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
13
11
  const matchTime =
14
12
  /^(?<time>(?:([0-1]\d|2[0-3]):[0-5]\d:(?<second>[0-5]\d|60)))(?:\.\d+)?(?<offset>(?:z|[+-]([0-1]\d|2[0-3])(?::?[0-5]\d)?))$/i;
15
13
  const DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
16
-
17
14
  const isValidJsonPointer = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
18
15
  const isValidRelativeJsonPointer = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;
19
- const isValidURIRef =
20
- /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
21
- // uri-template: https://tools.ietf.org/html/rfc6570
22
- const isValidURITemplate =
23
- /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
24
16
  const isValidDurationString = /^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?$/;
25
17
 
26
18
  // Default Json-Schema formats: date-time, email, hostname, ipv4, ipv6, uri, uriref
@@ -80,6 +72,7 @@ export const formats: Record<string, (options: JsonSchemaValidatorParams) => Val
80
72
  });
81
73
  }
82
74
  },
75
+
83
76
  email: ({ node, pointer, data }) => {
84
77
  const { schema } = node;
85
78
  if (typeof data !== "string" || data === "") {
@@ -127,78 +120,6 @@ export const formats: Record<string, (options: JsonSchemaValidatorParams) => Val
127
120
  return undefined;
128
121
  },
129
122
 
130
- hostname: ({ node, pointer, data }) => {
131
- const { schema } = node;
132
- if (typeof data !== "string" || isAsciiIdn(data)) {
133
- return undefined;
134
- }
135
- return node.createError("format-hostname-error", { value: data, pointer, schema });
136
- },
137
-
138
- "idn-hostname": ({ node, pointer, data }) => {
139
- if (typeof data !== "string" || isIdn(data)) {
140
- return undefined;
141
- }
142
- return node.createError("format-idn-hostname-error", { value: data, pointer, schema: node.schema });
143
- },
144
-
145
- /**
146
- * @draft 7
147
- * [RFC6531] https://json-schema.org/draft-07/json-schema-validation.html#RFC6531
148
- */
149
- "idn-email": ({ node, pointer, data }) => {
150
- if (typeof data !== "string" || data === "" || isIdnEmail(data)) {
151
- return undefined;
152
- }
153
- return node.createError("format-email-error", { value: data, pointer, schema: node.schema });
154
- },
155
-
156
- ipv4: ({ node, pointer, data }) => {
157
- const { schema } = node;
158
- if (typeof data !== "string" || data === "") {
159
- return undefined;
160
- }
161
- if (data && data[0] === "0") {
162
- // leading zeroes should be rejected, as they are treated as octals
163
- return node.createError("format-ipv4-leading-zero-error", { value: data, pointer, schema });
164
- }
165
- if (data.length <= 15 && isValidIPV4.test(data)) {
166
- return undefined;
167
- }
168
- return node.createError("format-ipv4-error", { value: data, pointer, schema });
169
- },
170
-
171
- ipv6: ({ node, pointer, data }) => {
172
- const { schema } = node;
173
- if (typeof data !== "string" || data === "") {
174
- return undefined;
175
- }
176
- if (data && data[0] === "0") {
177
- // leading zeroes should be rejected, as they are treated as octals
178
- return node.createError("format-ipv6-leading-zero-error", { value: data, pointer, schema });
179
- }
180
- if (data.length <= 45 && isValidIPV6.test(data)) {
181
- return undefined;
182
- }
183
- return node.createError("format-ipv6-error", { value: data, pointer, schema });
184
- },
185
-
186
- iri: ({ node, pointer, data }) => {
187
- const { schema } = node;
188
- if (typeof data !== "string" || data === "" || isIri(data)) {
189
- return undefined;
190
- }
191
- return node.createError("format-iri-error", { value: data, pointer, schema });
192
- },
193
-
194
- "iri-reference": ({ node, pointer, data }) => {
195
- const { schema } = node;
196
- if (typeof data !== "string" || data === "" || isIriReference(data)) {
197
- return undefined;
198
- }
199
- return node.createError("format-iri-reference-error", { value: data, pointer, schema });
200
- },
201
-
202
123
  "json-pointer": ({ node, pointer, data }) => {
203
124
  const { schema } = node;
204
125
  if (typeof data !== "string" || data === "") {
@@ -291,38 +212,9 @@ export const formats: Record<string, (options: JsonSchemaValidatorParams) => Val
291
212
  return undefined;
292
213
  },
293
214
 
294
- uri: ({ node, pointer, data }) => {
295
- if (typeof data !== "string" || data === "" || isUri(data)) {
296
- return undefined;
297
- }
298
- return node.createError("format-uri-error", { value: data, pointer, schema: node.schema });
299
- },
300
-
301
- "uri-reference": ({ node, pointer, data }) => {
302
- const { schema } = node;
303
- if (typeof data !== "string" || data === "") {
304
- return undefined;
305
- }
306
- if (isValidURIRef.test(data)) {
307
- return undefined;
308
- }
309
- return node.createError("format-uri-reference-error", { value: data, pointer, schema });
310
- },
311
-
312
- "uri-template": ({ node, pointer, data }) => {
313
- const { schema } = node;
314
- if (typeof data !== "string" || data === "") {
315
- return undefined;
316
- }
317
- if (isValidURITemplate.test(data)) {
318
- return undefined;
319
- }
320
- return node.createError("format-uri-template-error", { value: data, pointer, schema });
321
- },
322
-
323
215
  url: ({ node, data, pointer }) => {
324
216
  const { schema } = node;
325
- if (data === "" || validUrl.isWebUri(`${data}`)) {
217
+ if (data === "" || isWebUri(`${data}`)) {
326
218
  return undefined;
327
219
  }
328
220
  return node.createError("format-url-error", { value: data, pointer, schema });
@@ -1,3 +1,4 @@
1
+ import { collectValidationErrors } from "src/utils/collectValidationErrors";
1
2
  import { Keyword, ValidationAnnotation } from "../Keyword";
2
3
  import { SchemaNode } from "../types";
3
4
  import { isObject } from "../utils/isObject";
@@ -29,6 +30,7 @@ export function parseDefs(node: SchemaNode) {
29
30
  `${node.evaluationPath}/$defs/${urlEncodeJsonPointerProperty(property)}`,
30
31
  `${node.schemaLocation}/$defs/${property}`
31
32
  );
33
+ collectValidationErrors(errors, node.$defs![property]);
32
34
  });
33
35
  }
34
36
  }
@@ -50,6 +52,7 @@ export function parseDefs(node: SchemaNode) {
50
52
  `${node.evaluationPath}/definitions/${urlEncodeJsonPointerProperty(property)}`,
51
53
  `${node.schemaLocation}/definitions/${urlEncodeJsonPointerProperty(property)}`
52
54
  );
55
+ collectValidationErrors(errors, node.$defs![property]);
53
56
  });
54
57
  }
55
58
 
@@ -42,6 +42,7 @@ export function parseAdditionalProperties(node: SchemaNode) {
42
42
  `${evaluationPath}/additionalProperties`,
43
43
  `${schemaLocation}/additionalProperties`
44
44
  );
45
+ return node.additionalProperties.schemaValidation;
45
46
  }
46
47
 
47
48
  function additionalPropertyResolver({ node, data, key }: JsonSchemaResolverParams) {