@hyperjump/json-schema 0.18.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dist/json-schema-amd.js +4710 -0
  4. package/dist/json-schema-amd.js.map +1 -0
  5. package/dist/json-schema-amd.min.js +2 -0
  6. package/dist/json-schema-amd.min.js.map +1 -0
  7. package/dist/json-schema-cjs.js +4708 -0
  8. package/dist/json-schema-cjs.js.map +1 -0
  9. package/dist/json-schema-cjs.min.js +2 -0
  10. package/dist/json-schema-cjs.min.js.map +1 -0
  11. package/dist/json-schema-esm.js +4691 -0
  12. package/dist/json-schema-esm.js.map +1 -0
  13. package/dist/json-schema-esm.min.js +2 -0
  14. package/dist/json-schema-esm.min.js.map +1 -0
  15. package/dist/json-schema-iife.js +4713 -0
  16. package/dist/json-schema-iife.js.map +1 -0
  17. package/dist/json-schema-iife.min.js +2 -0
  18. package/dist/json-schema-iife.min.js.map +1 -0
  19. package/dist/json-schema-system.js +4698 -0
  20. package/dist/json-schema-system.js.map +1 -0
  21. package/dist/json-schema-system.min.js +2 -0
  22. package/dist/json-schema-system.min.js.map +1 -0
  23. package/dist/json-schema-umd.js +4714 -0
  24. package/dist/json-schema-umd.js.map +1 -0
  25. package/dist/json-schema-umd.min.js +2 -0
  26. package/dist/json-schema-umd.min.js.map +1 -0
  27. package/lib/common.js +13 -0
  28. package/lib/draft-04.d.ts +40 -0
  29. package/lib/draft-04.js +94 -0
  30. package/lib/draft-06.d.ts +44 -0
  31. package/lib/draft-06.js +51 -0
  32. package/lib/draft-07.d.ts +52 -0
  33. package/lib/draft-07.js +55 -0
  34. package/lib/draft-2019-09.d.ts +62 -0
  35. package/lib/draft-2019-09.js +92 -0
  36. package/lib/draft-2020-12.d.ts +62 -0
  37. package/lib/draft-2020-12.js +103 -0
  38. package/lib/index.d.ts +28 -0
  39. package/lib/index.js +26 -0
  40. package/lib/index.mjs +18 -0
  41. package/lib/keywords/additionalItems.js +27 -0
  42. package/lib/keywords/additionalItems6.js +23 -0
  43. package/lib/keywords/additionalProperties.js +33 -0
  44. package/lib/keywords/additionalProperties6.js +28 -0
  45. package/lib/keywords/allOf.js +28 -0
  46. package/lib/keywords/anyOf.js +29 -0
  47. package/lib/keywords/const.js +8 -0
  48. package/lib/keywords/contains-minContains-maxContains.js +33 -0
  49. package/lib/keywords/contains.js +10 -0
  50. package/lib/keywords/definitions.js +15 -0
  51. package/lib/keywords/dependencies.js +29 -0
  52. package/lib/keywords/dependentRequired.js +19 -0
  53. package/lib/keywords/dependentSchemas.js +30 -0
  54. package/lib/keywords/dynamicRef.js +24 -0
  55. package/lib/keywords/else.js +43 -0
  56. package/lib/keywords/enum.js +8 -0
  57. package/lib/keywords/exclusiveMaximum.js +7 -0
  58. package/lib/keywords/exclusiveMinimum.js +7 -0
  59. package/lib/keywords/if.js +19 -0
  60. package/lib/keywords/index.js +55 -0
  61. package/lib/keywords/items.js +31 -0
  62. package/lib/keywords/items202012.js +23 -0
  63. package/lib/keywords/maxItems.js +7 -0
  64. package/lib/keywords/maxLength.js +7 -0
  65. package/lib/keywords/maxLength6.js +7 -0
  66. package/lib/keywords/maxProperties.js +7 -0
  67. package/lib/keywords/maximum-exclusiveMaximum.js +20 -0
  68. package/lib/keywords/maximum.js +7 -0
  69. package/lib/keywords/minItems.js +7 -0
  70. package/lib/keywords/minLength.js +7 -0
  71. package/lib/keywords/minLength6.js +7 -0
  72. package/lib/keywords/minProperties.js +7 -0
  73. package/lib/keywords/minimum-exclusiveMinimum.js +20 -0
  74. package/lib/keywords/minimum.js +7 -0
  75. package/lib/keywords/multipleOf.js +17 -0
  76. package/lib/keywords/not.js +7 -0
  77. package/lib/keywords/oneOf.js +48 -0
  78. package/lib/keywords/pattern.js +7 -0
  79. package/lib/keywords/patternProperties.js +23 -0
  80. package/lib/keywords/properties.js +25 -0
  81. package/lib/keywords/propertyNames.js +11 -0
  82. package/lib/keywords/ref.js +13 -0
  83. package/lib/keywords/required.js +10 -0
  84. package/lib/keywords/then.js +43 -0
  85. package/lib/keywords/tupleItems.js +24 -0
  86. package/lib/keywords/type.js +7 -0
  87. package/lib/keywords/unevaluatedItems.js +23 -0
  88. package/lib/keywords/unevaluatedProperties.js +24 -0
  89. package/lib/keywords/uniqueItems.js +16 -0
  90. package/meta/draft/2019-09/meta/applicator.js +55 -0
  91. package/meta/draft/2019-09/meta/content.js +17 -0
  92. package/meta/draft/2019-09/meta/core.js +57 -0
  93. package/meta/draft/2019-09/meta/format.js +14 -0
  94. package/meta/draft/2019-09/meta/meta-data.js +37 -0
  95. package/meta/draft/2019-09/meta/validation.js +98 -0
  96. package/meta/draft/2019-09/schema.js +42 -0
  97. package/meta/draft/2020-12/meta/applicator.js +49 -0
  98. package/meta/draft/2020-12/meta/content.js +17 -0
  99. package/meta/draft/2020-12/meta/core.js +57 -0
  100. package/meta/draft/2020-12/meta/format-annotation.js +14 -0
  101. package/meta/draft/2020-12/meta/format-assertion.js +14 -0
  102. package/meta/draft/2020-12/meta/meta-data.js +37 -0
  103. package/meta/draft/2020-12/meta/unevaluated.js +15 -0
  104. package/meta/draft/2020-12/meta/validation.js +98 -0
  105. package/meta/draft/2020-12/schema.js +44 -0
  106. package/meta/draft-04/hyper-schema.js +136 -0
  107. package/meta/draft-04/schema.js +149 -0
  108. package/meta/draft-06/schema.js +154 -0
  109. package/meta/draft-07/schema.js +172 -0
  110. package/package.json +57 -0
package/lib/common.js ADDED
@@ -0,0 +1,13 @@
1
+ const isObject = (value) => typeof value === "object" && !Array.isArray(value) && value !== null;
2
+ const escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
3
+
4
+ const splitUrl = (url) => {
5
+ const indexOfHash = url.indexOf("#");
6
+ const ndx = indexOfHash === -1 ? url.length : indexOfHash;
7
+ const urlReference = url.slice(0, ndx);
8
+ const urlFragment = url.slice(ndx + 1);
9
+
10
+ return [decodeURI(urlReference), decodeURI(urlFragment)];
11
+ };
12
+
13
+ module.exports = { isObject, escapeRegExp, splitUrl };
@@ -0,0 +1,40 @@
1
+ import type { Json, JsonType } from "@hyperjump/json-schema-core";
2
+
3
+
4
+ export type Draft04Schema = {
5
+ $ref: string;
6
+ } | {
7
+ $schema?: "http://json-schema.org/draft-04/schema#";
8
+ id?: string;
9
+ title?: string;
10
+ description?: string;
11
+ default?: Json;
12
+ multipleOf?: number;
13
+ maximum?: number;
14
+ exclusiveMaximum?: boolean;
15
+ minimum?: number;
16
+ exclusiveMinimum?: boolean;
17
+ maxLength?: number;
18
+ minLength?: number;
19
+ pattern?: string;
20
+ additionalItems?: boolean | Draft04Schema;
21
+ items?: Draft04Schema | Draft04Schema[];
22
+ maxItems?: number;
23
+ minItems?: number;
24
+ uniqueItems?: boolean;
25
+ maxProperties?: number;
26
+ minProperties?: number;
27
+ required?: string[];
28
+ additionalProperties?: boolean | Draft04Schema;
29
+ definitions?: Record<string, Draft04Schema>;
30
+ properties?: Record<string, Draft04Schema>;
31
+ patternProperties?: Record<string, Draft04Schema>;
32
+ dependencies?: Record<string, Draft04Schema | string[]>;
33
+ enum?: Json[];
34
+ type?: JsonType | JsonType[];
35
+ format?: "date-time" | "email" | "hostname" | "ipv4" | "ipv6" | "uri";
36
+ allOf?: Draft04Schema[];
37
+ anyOf?: Draft04Schema[];
38
+ oneOf?: Draft04Schema[];
39
+ not?: Draft04Schema;
40
+ };
@@ -0,0 +1,94 @@
1
+ const { Core, Schema } = require("@hyperjump/json-schema-core");
2
+ const keywords = require("./keywords");
3
+ const metaSchema = require("../meta/draft-04/schema");
4
+ const metaHyperSchema = require("../meta/draft-04/hyper-schema");
5
+
6
+
7
+ // JSON Schema Draft-04
8
+ const schemaVersion = "http://json-schema.org/draft-04/schema";
9
+
10
+ Schema.setConfig(schemaVersion, "baseToken", "id");
11
+ Schema.setConfig(schemaVersion, "embeddedToken", "id");
12
+ Schema.setConfig(schemaVersion, "anchorToken", "id");
13
+ Schema.setConfig(schemaVersion, "jrefToken", "$ref");
14
+
15
+ Schema.add(JSON.parse(metaSchema));
16
+ Core.defineVocabulary(schemaVersion, {
17
+ "validate": keywords.validate,
18
+ "additionalItems": keywords.additionalItems,
19
+ "additionalProperties": keywords.additionalProperties,
20
+ "allOf": keywords.allOf,
21
+ "anyOf": keywords.anyOf,
22
+ "default": keywords.metaData,
23
+ "definitions": keywords.definitions,
24
+ "dependencies": keywords.dependencies,
25
+ "description": keywords.metaData,
26
+ "enum": keywords.enum,
27
+ "format": keywords.metaData,
28
+ "items": keywords.items,
29
+ "maxItems": keywords.maxItems,
30
+ "maxLength": keywords.maxLength,
31
+ "maxProperties": keywords.maxProperties,
32
+ "maximum": keywords.maximumExclusiveMaximum,
33
+ "minItems": keywords.minItems,
34
+ "minLength": keywords.minLength,
35
+ "minProperties": keywords.minProperties,
36
+ "minimum": keywords.minimumExclusiveMinimum,
37
+ "multipleOf": keywords.multipleOf,
38
+ "not": keywords.not,
39
+ "oneOf": keywords.oneOf,
40
+ "pattern": keywords.pattern,
41
+ "patternProperties": keywords.patternProperties,
42
+ "properties": keywords.properties,
43
+ "required": keywords.required,
44
+ "title": keywords.metaData,
45
+ "type": keywords.type,
46
+ "uniqueItems": keywords.uniqueItems
47
+ });
48
+
49
+ // JSON Hyper-Schema Draft-04
50
+ const hyperSchemaVersion = "http://json-schema.org/draft-04/hyper-schema";
51
+
52
+ Schema.setConfig(hyperSchemaVersion, "baseToken", "id");
53
+ Schema.setConfig(hyperSchemaVersion, "embeddedToken", "id");
54
+ Schema.setConfig(hyperSchemaVersion, "anchorToken", "id");
55
+ Schema.setConfig(hyperSchemaVersion, "jrefToken", "$ref");
56
+
57
+ Schema.add(JSON.parse(metaHyperSchema));
58
+ Core.defineVocabulary(hyperSchemaVersion, {
59
+ "validate": keywords.validate,
60
+ "additionalItems": keywords.additionalItems,
61
+ "additionalProperties": keywords.additionalProperties,
62
+ "allOf": keywords.allOf,
63
+ "anyOf": keywords.anyOf,
64
+ "default": keywords.metaData,
65
+ "definitions": keywords.definitions,
66
+ "dependencies": keywords.dependencies,
67
+ "description": keywords.metaData,
68
+ "enum": keywords.enum,
69
+ "format": keywords.metaData,
70
+ "fragmentResolution": keywords.metaData,
71
+ "items": keywords.items,
72
+ "maxItems": keywords.maxItems,
73
+ "minProperties": keywords.minProperties,
74
+ "maxProperties": keywords.maxProperties,
75
+ "maximum": keywords.maximumExclusiveMaximum,
76
+ "media": keywords.metaData,
77
+ "minItems": keywords.minItems,
78
+ "minLength": keywords.minLength,
79
+ "maxLength": keywords.maxLength,
80
+ "minimum": keywords.minimumExclusiveMinimum,
81
+ "multipleOf": keywords.multipleOf,
82
+ "links": keywords.metaData,
83
+ "not": keywords.not,
84
+ "oneOf": keywords.oneOf,
85
+ "pathStart": keywords.metaData,
86
+ "pattern": keywords.pattern,
87
+ "patternProperties": keywords.patternProperties,
88
+ "properties": keywords.properties,
89
+ "readOnly": keywords.metaData,
90
+ "required": keywords.required,
91
+ "title": keywords.metaData,
92
+ "type": keywords.type,
93
+ "uniqueItems": keywords.uniqueItems
94
+ });
@@ -0,0 +1,44 @@
1
+ import type { Json, JsonType } from "@hyperjump/json-schema-core";
2
+
3
+
4
+ export type Draft06Schema = boolean | {
5
+ $ref: string;
6
+ } | {
7
+ $schema?: "http://json-schema.org/draft-06/schema#";
8
+ $id?: string;
9
+ title?: string;
10
+ description?: string;
11
+ default?: Json;
12
+ examples?: Json[];
13
+ multipleOf?: number;
14
+ maximum?: number;
15
+ exclusiveMaximum?: number;
16
+ minimum?: number;
17
+ exclusiveMinimum?: number;
18
+ maxLength?: number;
19
+ minLength?: number;
20
+ pattern?: string;
21
+ additionalItems?: Draft06Schema;
22
+ items?: Draft06Schema | Draft06Schema[];
23
+ maxItems?: number;
24
+ minItems?: number;
25
+ uniqueItems?: boolean;
26
+ contains?: Draft06Schema;
27
+ maxProperties?: number;
28
+ minProperties?: number;
29
+ required?: string[];
30
+ additionalProperties?: Draft06Schema;
31
+ definitions?: Record<string, Draft06Schema>;
32
+ properties?: Record<string, Draft06Schema>;
33
+ patternProperties?: Record<string, Draft06Schema>;
34
+ dependencies?: Record<string, Draft06Schema | string[]>;
35
+ propertyNames?: Draft06Schema;
36
+ const?: Json;
37
+ enum?: Json[];
38
+ type?: JsonType | JsonType[];
39
+ format?: "date-time" | "email" | "hostname" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "uri-template" | "json-pointer";
40
+ allOf?: Draft06Schema[];
41
+ anyOf?: Draft06Schema[];
42
+ oneOf?: Draft06Schema[];
43
+ not?: Draft06Schema;
44
+ };
@@ -0,0 +1,51 @@
1
+ const { Core, Schema } = require("@hyperjump/json-schema-core");
2
+ const keywords = require("./keywords");
3
+ const metaSchema = require("../meta/draft-06/schema");
4
+
5
+
6
+ const schemaVersion = "http://json-schema.org/draft-06/schema";
7
+
8
+ Schema.setConfig(schemaVersion, "baseToken", "$id");
9
+ Schema.setConfig(schemaVersion, "embeddedToken", "$id");
10
+ Schema.setConfig(schemaVersion, "anchorToken", "$id");
11
+ Schema.setConfig(schemaVersion, "jrefToken", "$ref");
12
+
13
+ Schema.add(JSON.parse(metaSchema));
14
+ Core.defineVocabulary(schemaVersion, {
15
+ "validate": keywords.validate,
16
+ "additionalItems": keywords.additionalItems6,
17
+ "additionalProperties": keywords.additionalProperties6,
18
+ "allOf": keywords.allOf,
19
+ "anyOf": keywords.anyOf,
20
+ "const": keywords.const,
21
+ "contains": keywords.contains,
22
+ "default": keywords.metaData,
23
+ "definitions": keywords.definitions,
24
+ "dependencies": keywords.dependencies,
25
+ "description": keywords.metaData,
26
+ "enum": keywords.enum,
27
+ "examples": keywords.metaData,
28
+ "exclusiveMaximum": keywords.exclusiveMaximum,
29
+ "exclusiveMinimum": keywords.exclusiveMinimum,
30
+ "format": keywords.metaData,
31
+ "items": keywords.items,
32
+ "maxItems": keywords.maxItems,
33
+ "maxLength": keywords.maxLength6,
34
+ "maxProperties": keywords.maxProperties,
35
+ "maximum": keywords.maximum,
36
+ "minItems": keywords.minItems,
37
+ "minLength": keywords.minLength6,
38
+ "minProperties": keywords.minProperties,
39
+ "minimum": keywords.minimum,
40
+ "multipleOf": keywords.multipleOf,
41
+ "not": keywords.not,
42
+ "oneOf": keywords.oneOf,
43
+ "pattern": keywords.pattern,
44
+ "patternProperties": keywords.patternProperties,
45
+ "properties": keywords.properties,
46
+ "propertyNames": keywords.propertyNames,
47
+ "required": keywords.required,
48
+ "title": keywords.metaData,
49
+ "type": keywords.type,
50
+ "uniqueItems": keywords.uniqueItems
51
+ });
@@ -0,0 +1,52 @@
1
+ import type { Json, JsonType } from "@hyperjump/json-schema-core";
2
+
3
+
4
+ export type Draft07Schema = boolean | {
5
+ $ref: string;
6
+ } | {
7
+ $schema?: "http://json-schema.org/draft-07/schema#";
8
+ $id?: string;
9
+ $comment?: string;
10
+ title?: string;
11
+ description?: string;
12
+ default?: Json;
13
+ readOnly?: boolean;
14
+ writeOnly?: boolean;
15
+ examples?: Json[];
16
+ multipleOf?: number;
17
+ maximum?: number;
18
+ exclusiveMaximum?: number;
19
+ minimum?: number;
20
+ exclusiveMinimum?: number;
21
+ maxLength?: number;
22
+ minLength?: number;
23
+ pattern?: string;
24
+ additionalItems?: Draft07Schema;
25
+ items?: Draft07Schema | Draft07Schema[];
26
+ maxItems?: number;
27
+ minItems?: number;
28
+ uniqueItems?: boolean;
29
+ contains?: Draft07Schema;
30
+ maxProperties?: number;
31
+ minProperties?: number;
32
+ required?: string[];
33
+ additionalProperties?: Draft07Schema;
34
+ definitions?: Record<string, Draft07Schema>;
35
+ properties?: Record<string, Draft07Schema>;
36
+ patternProperties?: Record<string, Draft07Schema>;
37
+ dependencies?: Record<string, Draft07Schema | string[]>;
38
+ propertyNames?: Draft07Schema;
39
+ const?: Draft07Schema;
40
+ enum?: Json[];
41
+ type?: JsonType | JsonType[];
42
+ format?: "date-time" | "date" | "time" | "email" | "idn-email" | "hostname" | "idn-hostname" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "iri" | "iri-reference" | "uri-template" | "json-pointer" | "relative-json-pointer" | "regex";
43
+ contentMediaType?: string;
44
+ contentEncoding?: string;
45
+ if?: Draft07Schema;
46
+ then?: Draft07Schema;
47
+ else?: Draft07Schema;
48
+ allOf?: Draft07Schema[];
49
+ anyOf?: Draft07Schema[];
50
+ oneOf?: Draft07Schema[];
51
+ not?: Draft07Schema;
52
+ };
@@ -0,0 +1,55 @@
1
+ const { Core, Schema } = require("@hyperjump/json-schema-core");
2
+ const keywords = require("./keywords");
3
+ const metaSchema = require("../meta/draft-07/schema");
4
+
5
+
6
+ const schemaVersion = "http://json-schema.org/draft-07/schema";
7
+
8
+ Schema.setConfig(schemaVersion, "baseToken", "$id");
9
+ Schema.setConfig(schemaVersion, "embeddedToken", "$id");
10
+ Schema.setConfig(schemaVersion, "anchorToken", "$id");
11
+ Schema.setConfig(schemaVersion, "jrefToken", "$ref");
12
+
13
+ Schema.add(JSON.parse(metaSchema));
14
+ Core.defineVocabulary(schemaVersion, {
15
+ "validate": keywords.validate,
16
+ "additionalItems": keywords.additionalItems6,
17
+ "additionalProperties": keywords.additionalProperties6,
18
+ "allOf": keywords.allOf,
19
+ "anyOf": keywords.anyOf,
20
+ "const": keywords.const,
21
+ "contains": keywords.contains,
22
+ "default": keywords.metaData,
23
+ "definitions": keywords.definitions,
24
+ "dependencies": keywords.dependencies,
25
+ "description": keywords.metaData,
26
+ "enum": keywords.enum,
27
+ "exclusiveMaximum": keywords.exclusiveMaximum,
28
+ "exclusiveMinimum": keywords.exclusiveMinimum,
29
+ "format": keywords.metaData,
30
+ "if": keywords.if,
31
+ "then": keywords.then,
32
+ "else": keywords.else,
33
+ "items": keywords.items,
34
+ "maxItems": keywords.maxItems,
35
+ "maxLength": keywords.maxLength6,
36
+ "maxProperties": keywords.maxProperties,
37
+ "maximum": keywords.maximum,
38
+ "minItems": keywords.minItems,
39
+ "minLength": keywords.minLength6,
40
+ "minProperties": keywords.minProperties,
41
+ "minimum": keywords.minimum,
42
+ "multipleOf": keywords.multipleOf,
43
+ "not": keywords.not,
44
+ "oneOf": keywords.oneOf,
45
+ "pattern": keywords.pattern,
46
+ "patternProperties": keywords.patternProperties,
47
+ "properties": keywords.properties,
48
+ "propertyNames": keywords.propertyNames,
49
+ "readOnly": keywords.metaData,
50
+ "required": keywords.required,
51
+ "title": keywords.metaData,
52
+ "type": keywords.type,
53
+ "uniqueItems": keywords.uniqueItems,
54
+ "writeOnly": keywords.metaData
55
+ });
@@ -0,0 +1,62 @@
1
+ import type { Json, JsonType } from "@hyperjump/json-schema-core";
2
+
3
+
4
+ export type Draft201909Schema = boolean | {
5
+ $schema?: "https://json-schema.org/draft/2019-09/schema";
6
+ $id?: string;
7
+ $anchor?: string;
8
+ $ref?: string;
9
+ $recursiveRef?: "#";
10
+ $recursiveAnchor?: boolean;
11
+ $vocabulary?: Record<string, boolean>;
12
+ $comment?: string;
13
+ $defs?: Record<string, Draft201909Schema>;
14
+ additionalItems?: Draft201909Schema;
15
+ unevaluatedItems?: Draft201909Schema;
16
+ items?: Draft201909Schema | Draft201909Schema[];
17
+ contains?: Draft201909Schema;
18
+ additionalProperties?: Draft201909Schema;
19
+ unevaluatedProperties?: Draft201909Schema;
20
+ properties?: Record<string, Draft201909Schema>;
21
+ patternProperties?: Record<string, Draft201909Schema>;
22
+ dependentSchema?: Record<string, Draft201909Schema>;
23
+ propertyNames?: Draft201909Schema;
24
+ if?: Draft201909Schema;
25
+ then?: Draft201909Schema;
26
+ else?: Draft201909Schema;
27
+ allOf?: Draft201909Schema[];
28
+ anyOf?: Draft201909Schema[];
29
+ oneOf?: Draft201909Schema[];
30
+ not?: Draft201909Schema;
31
+ multipleOf?: number;
32
+ maximum?: number;
33
+ exclusiveMaximum?: number;
34
+ minimum?: number;
35
+ exclusiveMinimum?: number;
36
+ maxLength?: number;
37
+ minLength?: number;
38
+ pattern?: string;
39
+ maxItems?: number;
40
+ minItems?: number;
41
+ uniqueItems?: boolean;
42
+ maxContains?: number;
43
+ minContains?: number;
44
+ maxProperties?: number;
45
+ minProperties?: number;
46
+ required?: string[];
47
+ dependentRequired?: Record<string, string[]>;
48
+ const?: Draft201909Schema;
49
+ enum?: Json[];
50
+ type?: JsonType | JsonType[];
51
+ title?: string;
52
+ description?: string;
53
+ default?: Json;
54
+ deprecated?: boolean;
55
+ readOnly?: boolean;
56
+ writeOnly?: boolean;
57
+ examples?: Json[];
58
+ format?: "date-time" | "date" | "time" | "duration" | "email" | "idn-email" | "hostname" | "idn-hostname" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "iri" | "iri-reference" | "uuid" | "uri-template" | "json-pointer" | "relative-json-pointer" | "regex";
59
+ contentMediaType?: string;
60
+ contentEncoding?: string;
61
+ contentSchema?: Draft201909Schema;
62
+ };
@@ -0,0 +1,92 @@
1
+ const { Core, Schema } = require("@hyperjump/json-schema-core");
2
+ const keywords = require("./keywords");
3
+ const metaSchema = require("../meta/draft/2019-09/schema");
4
+ const coreMetaSchema = require("../meta/draft/2019-09/meta/core");
5
+ const applicatorMetaSchema = require("../meta/draft/2019-09/meta/applicator");
6
+ const validationMetaSchema = require("../meta/draft/2019-09/meta/validation");
7
+ const metaDataMetaSchema = require("../meta/draft/2019-09/meta/meta-data");
8
+ const formatMetaSchema = require("../meta/draft/2019-09/meta/format");
9
+ const contentMetaSchema = require("../meta/draft/2019-09/meta/content");
10
+
11
+
12
+ const schemaVersion = "https://json-schema.org/draft/2019-09/schema";
13
+
14
+ Schema.setConfig(schemaVersion, "baseToken", "$id");
15
+ Schema.setConfig(schemaVersion, "embeddedToken", "$id");
16
+ Schema.setConfig(schemaVersion, "anchorToken", "$anchor");
17
+ Schema.setConfig(schemaVersion, "recursiveAnchorToken", "$recursiveAnchor");
18
+ Schema.setConfig(schemaVersion, "vocabularyToken", "$vocabulary");
19
+ Schema.setConfig(schemaVersion, "mandatoryVocabularies", ["https://json-schema.org/draft/2019-09/vocab/core"]);
20
+
21
+ Schema.add(JSON.parse(metaSchema));
22
+
23
+ Schema.add(JSON.parse(coreMetaSchema));
24
+ Core.defineVocabulary("https://json-schema.org/draft/2019-09/vocab/core", {
25
+ "validate": keywords.validate,
26
+ "$defs": keywords.definitions,
27
+ "$recursiveRef": keywords.dynamicRef,
28
+ "$ref": keywords.ref
29
+ });
30
+
31
+ Schema.add(JSON.parse(applicatorMetaSchema));
32
+ Core.defineVocabulary("https://json-schema.org/draft/2019-09/vocab/applicator", {
33
+ "additionalItems": keywords.additionalItems6,
34
+ "additionalProperties": keywords.additionalProperties6,
35
+ "allOf": keywords.allOf,
36
+ "anyOf": keywords.anyOf,
37
+ "contains": keywords.containsMinContainsMaxContains,
38
+ "dependentSchemas": keywords.dependentSchemas,
39
+ "if": keywords.if,
40
+ "then": keywords.then,
41
+ "else": keywords.else,
42
+ "items": keywords.items,
43
+ "not": keywords.not,
44
+ "oneOf": keywords.oneOf,
45
+ "patternProperties": keywords.patternProperties,
46
+ "properties": keywords.properties,
47
+ "propertyNames": keywords.propertyNames,
48
+ "unevaluatedItems": keywords.unevaluatedItems,
49
+ "unevaluatedProperties": keywords.unevaluatedProperties
50
+ });
51
+
52
+ Schema.add(JSON.parse(validationMetaSchema));
53
+ Core.defineVocabulary("https://json-schema.org/draft/2019-09/vocab/validation", {
54
+ "const": keywords.const,
55
+ "dependentRequired": keywords.dependentRequired,
56
+ "enum": keywords.enum,
57
+ "exclusiveMaximum": keywords.exclusiveMaximum,
58
+ "exclusiveMinimum": keywords.exclusiveMinimum,
59
+ "maxItems": keywords.maxItems,
60
+ "maxLength": keywords.maxLength6,
61
+ "maxProperties": keywords.maxProperties,
62
+ "maximum": keywords.maximum,
63
+ "minItems": keywords.minItems,
64
+ "minLength": keywords.minLength6,
65
+ "minProperties": keywords.minProperties,
66
+ "minimum": keywords.minimum,
67
+ "multipleOf": keywords.multipleOf,
68
+ "pattern": keywords.pattern,
69
+ "required": keywords.required,
70
+ "type": keywords.type,
71
+ "uniqueItems": keywords.uniqueItems
72
+ });
73
+
74
+ Schema.add(JSON.parse(metaDataMetaSchema));
75
+ Core.defineVocabulary("https://json-schema.org/draft/2019-09/vocab/meta-data", {
76
+ "default": keywords.metaData,
77
+ "deprecated": keywords.metaData,
78
+ "description": keywords.metaData,
79
+ "examples": keywords.metaData,
80
+ "readOnly": keywords.metaData,
81
+ "title": keywords.metaData,
82
+ "writeOnly": keywords.metaData
83
+ });
84
+
85
+ Schema.add(JSON.parse(formatMetaSchema));
86
+
87
+ Schema.add(JSON.parse(contentMetaSchema));
88
+ Core.defineVocabulary("https://json-schema.org/draft/2019-09/vocab/content", {
89
+ "contentEncoding": keywords.metaData,
90
+ "contentMediaType": keywords.metaData,
91
+ "contentSchema": keywords.metaData
92
+ });
@@ -0,0 +1,62 @@
1
+ import type { Json, JsonType } from "@hyperjump/json-schema-core";
2
+
3
+
4
+ export type Draft202012Schema = boolean | {
5
+ $schema?: "https://json-schema.org/draft/2020-12/schema";
6
+ $id?: string;
7
+ $anchor?: string;
8
+ $ref?: string;
9
+ $dynamicRef?: string;
10
+ $dynamicAnchor?: string;
11
+ $vocabulary?: Record<string, boolean>;
12
+ $comment?: string;
13
+ $defs?: Record<string, Draft202012Schema>;
14
+ additionalItems?: Draft202012Schema;
15
+ unevaluatedItems?: Draft202012Schema;
16
+ items?: Draft202012Schema | Draft202012Schema[];
17
+ contains?: Draft202012Schema;
18
+ additionalProperties?: Draft202012Schema;
19
+ unevaluatedProperties?: Draft202012Schema;
20
+ properties?: Record<string, Draft202012Schema>;
21
+ patternProperties?: Record<string, Draft202012Schema>;
22
+ dependentSchema?: Record<string, Draft202012Schema>;
23
+ propertyNames?: Draft202012Schema;
24
+ if?: Draft202012Schema;
25
+ then?: Draft202012Schema;
26
+ else?: Draft202012Schema;
27
+ allOf?: Draft202012Schema[];
28
+ anyOf?: Draft202012Schema[];
29
+ oneOf?: Draft202012Schema[];
30
+ not?: Draft202012Schema;
31
+ multipleOf?: number;
32
+ maximum?: number;
33
+ exclusiveMaximum?: number;
34
+ minimum?: number;
35
+ exclusiveMinimum?: number;
36
+ maxLength?: number;
37
+ minLength?: number;
38
+ pattern?: string;
39
+ maxItems?: number;
40
+ minItems?: number;
41
+ uniqueItems?: boolean;
42
+ maxContains?: number;
43
+ minContains?: number;
44
+ maxProperties?: number;
45
+ minProperties?: number;
46
+ required?: string[];
47
+ dependentRequired?: Record<string, string[]>;
48
+ const?: Draft202012Schema;
49
+ enum?: Json[];
50
+ type?: JsonType | JsonType[];
51
+ title?: string;
52
+ description?: string;
53
+ default?: Json;
54
+ deprecated?: boolean;
55
+ readOnly?: boolean;
56
+ writeOnly?: boolean;
57
+ examples?: Json[];
58
+ format?: "date-time" | "date" | "time" | "duration" | "email" | "idn-email" | "hostname" | "idn-hostname" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "iri" | "iri-reference" | "uuid" | "uri-template" | "json-pointer" | "relative-json-pointer" | "regex";
59
+ contentMediaType?: string;
60
+ contentEncoding?: string;
61
+ contentSchema?: Draft202012Schema;
62
+ };
@@ -0,0 +1,103 @@
1
+ const { Core, Schema } = require("@hyperjump/json-schema-core");
2
+ const keywords = require("./keywords");
3
+ const metaSchema = require("../meta/draft/2020-12/schema");
4
+ const coreMetaSchema = require("../meta/draft/2020-12/meta/core");
5
+ const applicatorMetaSchema = require("../meta/draft/2020-12/meta/applicator");
6
+ const validationMetaSchema = require("../meta/draft/2020-12/meta/validation");
7
+ const metaDataMetaSchema = require("../meta/draft/2020-12/meta/meta-data");
8
+ const formatAnnotationMetaSchema = require("../meta/draft/2020-12/meta/format-annotation");
9
+ const formatAssertionMetaSchema = require("../meta/draft/2020-12/meta/format-assertion");
10
+ const contentMetaSchema = require("../meta/draft/2020-12/meta/content");
11
+ const unevaluatedMetaSchema = require("../meta/draft/2020-12/meta/unevaluated");
12
+
13
+
14
+ const schemaVersion = "https://json-schema.org/draft/2020-12/schema";
15
+
16
+ Schema.setConfig(schemaVersion, "baseToken", "$id");
17
+ Schema.setConfig(schemaVersion, "embeddedToken", "$id");
18
+ Schema.setConfig(schemaVersion, "anchorToken", "$anchor");
19
+ Schema.setConfig(schemaVersion, "dynamicAnchorToken", "$dynamicAnchor");
20
+ Schema.setConfig(schemaVersion, "vocabularyToken", "$vocabulary");
21
+ Schema.setConfig(schemaVersion, "mandatoryVocabularies", ["https://json-schema.org/draft/2020-12/vocab/core"]);
22
+
23
+ Schema.add(JSON.parse(metaSchema));
24
+
25
+ Schema.add(JSON.parse(coreMetaSchema));
26
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/core", {
27
+ "validate": keywords.validate,
28
+ "$defs": keywords.definitions,
29
+ "$dynamicRef": keywords.dynamicRef,
30
+ "$ref": keywords.ref
31
+ });
32
+
33
+ Schema.add(JSON.parse(applicatorMetaSchema));
34
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/applicator", {
35
+ "additionalProperties": keywords.additionalProperties6,
36
+ "allOf": keywords.allOf,
37
+ "anyOf": keywords.anyOf,
38
+ "contains": keywords.containsMinContainsMaxContains,
39
+ "dependentSchemas": keywords.dependentSchemas,
40
+ "if": keywords.if,
41
+ "then": keywords.then,
42
+ "else": keywords.else,
43
+ "items": keywords.items202012,
44
+ "not": keywords.not,
45
+ "oneOf": keywords.oneOf,
46
+ "patternProperties": keywords.patternProperties,
47
+ "prefixItems": keywords.tupleItems,
48
+ "properties": keywords.properties,
49
+ "propertyNames": keywords.propertyNames
50
+ });
51
+
52
+ Schema.add(JSON.parse(validationMetaSchema));
53
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/validation", {
54
+ "const": keywords.const,
55
+ "dependentRequired": keywords.dependentRequired,
56
+ "enum": keywords.enum,
57
+ "exclusiveMaximum": keywords.exclusiveMaximum,
58
+ "exclusiveMinimum": keywords.exclusiveMinimum,
59
+ "maxItems": keywords.maxItems,
60
+ "maxLength": keywords.maxLength6,
61
+ "maxProperties": keywords.maxProperties,
62
+ "maximum": keywords.maximum,
63
+ "minItems": keywords.minItems,
64
+ "minLength": keywords.minLength6,
65
+ "minProperties": keywords.minProperties,
66
+ "minimum": keywords.minimum,
67
+ "multipleOf": keywords.multipleOf,
68
+ "pattern": keywords.pattern,
69
+ "required": keywords.required,
70
+ "type": keywords.type,
71
+ "uniqueItems": keywords.uniqueItems
72
+ });
73
+
74
+ Schema.add(JSON.parse(metaDataMetaSchema));
75
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/meta-data", {
76
+ "default": keywords.metaData,
77
+ "deprecated": keywords.metaData,
78
+ "description": keywords.metaData,
79
+ "examples": keywords.metaData,
80
+ "readOnly": keywords.metaData,
81
+ "title": keywords.metaData,
82
+ "writeOnly": keywords.metaData
83
+ });
84
+
85
+ Schema.add(JSON.parse(formatAnnotationMetaSchema));
86
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/format-annotation", {
87
+ "format": keywords.metaData
88
+ });
89
+
90
+ Schema.add(JSON.parse(formatAssertionMetaSchema));
91
+
92
+ Schema.add(JSON.parse(contentMetaSchema));
93
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/content", {
94
+ "contentEncoding": keywords.metaData,
95
+ "contentMediaType": keywords.metaData,
96
+ "contentSchema": keywords.metaData
97
+ });
98
+
99
+ Schema.add(JSON.parse(unevaluatedMetaSchema));
100
+ Core.defineVocabulary("https://json-schema.org/draft/2020-12/vocab/unevaluated", {
101
+ "unevaluatedItems": keywords.unevaluatedItems,
102
+ "unevaluatedProperties": keywords.unevaluatedProperties
103
+ });