Skip to content

Commit 1b75287

Browse files
committed
Refactor and cleanup for formats
1 parent b2806a9 commit 1b75287

File tree

24 files changed

+119
-185
lines changed

24 files changed

+119
-185
lines changed

draft-04/format.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const id = "https://json-schema.org/keyword/draft-04/format";
99
const compile = (schema) => Browser.value(schema);
1010

1111
const interpret = (format, instance) => {
12-
if (!getShouldValidateFormat()) {
12+
if (getShouldValidateFormat() === false) {
1313
return true;
1414
}
1515

@@ -22,7 +22,7 @@ const annotation = (format) => format;
2222
const formats = {
2323
"date-time": "https://json-schema.org/format/date-time",
2424
"email": "https://json-schema.org/format/email",
25-
"hostname": "https://json-schema.org/format/draft-04/hostname",
25+
"hostname": "https://json-schema.org/format/hostname",
2626
"ipv4": "https://json-schema.org/format/ipv4",
2727
"ipv6": "https://json-schema.org/format/ipv6",
2828
"uri": "https://json-schema.org/format/uri"

draft-04/hostname.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

draft-04/index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { addFormat, addKeyword, defineVocabulary, loadDialect } from "../lib/keywords.js";
1+
import { addKeyword, defineVocabulary, loadDialect } from "../lib/keywords.js";
22
import { registerSchema } from "../lib/index.js";
33
import metaSchema from "./schema.js";
44
import additionalItems from "./additionalItems.js";
@@ -11,7 +11,6 @@ import format from "./format.js";
1111
import maximum from "./maximum.js";
1212
import minimum from "./minimum.js";
1313
import ref from "./ref.js";
14-
import hostname from "./hostname.js";
1514

1615

1716
addKeyword(additionalItems);
@@ -25,8 +24,6 @@ addKeyword(items);
2524
addKeyword(format);
2625
addKeyword(ref);
2726

28-
addFormat(hostname);
29-
3027
const jsonSchemaVersion = "http://json-schema.org/draft-04/schema";
3128

3229
defineVocabulary(jsonSchemaVersion, {

draft-06/format.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const id = "https://json-schema.org/keyword/draft-06/format";
99
const compile = (schema) => Browser.value(schema);
1010

1111
const interpret = (format, instance) => {
12-
if (!getShouldValidateFormat()) {
12+
if (getShouldValidateFormat() === false) {
1313
return true;
1414
}
1515

draft-07/format.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const id = "https://json-schema.org/keyword/draft-07/format";
99
const compile = (schema) => Browser.value(schema);
1010

1111
const interpret = (format, instance) => {
12-
if (!getShouldValidateFormat()) {
12+
if (getShouldValidateFormat() === false) {
1313
return true;
1414
}
1515

@@ -24,9 +24,9 @@ const formats = {
2424
"date": "https://json-schema.org/format/date",
2525
"time": "https://json-schema.org/format/time",
2626
"email": "https://json-schema.org/format/email",
27-
"idn-email": "https://json-schema.org/format/idn-email",
28-
"hostname": "https://json-schema.org/format/hostname",
29-
"idn-hostname": "https://json-schema.org/format/idn-hostname",
27+
"idn-email": "https://json-schema.org/format/idn-email(partial)",
28+
"hostname": "https://json-schema.org/format/a-label(partial)",
29+
"idn-hostname": "https://json-schema.org/format/idn-hostname(partial)",
3030
"ipv4": "https://json-schema.org/format/ipv4",
3131
"ipv6": "https://json-schema.org/format/ipv6",
3232
"uri": "https://json-schema.org/format/uri",

draft-2019-09/format-assertion.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ const id = "https://json-schema.org/keyword/draft-2019-09/format-assertion";
99
const compile = (schema) => Browser.value(schema);
1010

1111
const interpret = (format, instance) => {
12-
if (!getShouldValidateFormat()) {
12+
if (getShouldValidateFormat() === false) {
1313
return true;
1414
}
1515

1616
const handler = getFormatHandler(formats[format]);
17-
if (!handler) {
18-
throw Error(`The '${format}' format is not supported.`);
19-
}
20-
21-
return handler(Instance.value(instance));
17+
return handler?.(Instance.value(instance)) ?? true;
2218
};
2319

2420
const annotation = (format) => format;
@@ -29,9 +25,9 @@ const formats = {
2925
"time": "https://json-schema.org/format/time",
3026
"duration": "https://json-schema.org/format/duration",
3127
"email": "https://json-schema.org/format/email",
32-
"idn-email": "https://json-schema.org/format/idn-email",
33-
"hostname": "https://json-schema.org/format/hostname",
34-
"idn-hostname": "https://json-schema.org/format/idn-hostname",
28+
"idn-email": "https://json-schema.org/format/idn-email(partial)",
29+
"hostname": "https://json-schema.org/format/a-label(partial)",
30+
"idn-hostname": "https://json-schema.org/format/idn-hostname(partial)",
3531
"ipv4": "https://json-schema.org/format/ipv4",
3632
"ipv6": "https://json-schema.org/format/ipv6",
3733
"uri": "https://json-schema.org/format/uri",

draft-2019-09/format.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import * as Browser from "@hyperjump/browser";
2+
import * as Instance from "../lib/instance.js";
3+
import { getShouldValidateFormat } from "../lib/configuration.js";
4+
import { getFormatHandler } from "../lib/keywords.js";
5+
6+
7+
const id = "https://json-schema.org/keyword/draft-2019-09/format";
8+
9+
const compile = (schema) => Browser.value(schema);
10+
11+
const interpret = (format, instance) => {
12+
if (!getShouldValidateFormat()) {
13+
return true;
14+
}
15+
16+
const handler = getFormatHandler(formats[format]);
17+
return handler?.(Instance.value(instance)) ?? true;
18+
};
19+
20+
const annotation = (format) => format;
21+
22+
const formats = {
23+
"date-time": "https://json-schema.org/format/date-time",
24+
"date": "https://json-schema.org/format/date",
25+
"time": "https://json-schema.org/format/time",
26+
"duration": "https://json-schema.org/format/duration",
27+
"email": "https://json-schema.org/format/email",
28+
"idn-email": "https://json-schema.org/format/idn-email(partial)",
29+
"hostname": "https://json-schema.org/format/a-label(partial)",
30+
"idn-hostname": "https://json-schema.org/format/idn-hostname(partial)",
31+
"ipv4": "https://json-schema.org/format/ipv4",
32+
"ipv6": "https://json-schema.org/format/ipv6",
33+
"uri": "https://json-schema.org/format/uri",
34+
"uri-reference": "https://json-schema.org/format/uri-reference",
35+
"iri": "https://json-schema.org/format/iri",
36+
"iri-reference": "https://json-schema.org/format/iri-reference",
37+
"uuid": "https://json-schema.org/format/uuid",
38+
"uri-template": "https://json-schema.org/format/uri-template",
39+
"json-pointer": "https://json-schema.org/format/json-pointer",
40+
"relative-json-pointer": "https://json-schema.org/format/relative-json-pointer",
41+
"regex": "https://json-schema.org/format/regex"
42+
};
43+
44+
export default { id, compile, interpret, annotation, formats };

draft-2019-09/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ import contentMetaSchema from "./meta/content.js";
1212
import additionalItems from "../draft-04/additionalItems.js";
1313
import items from "../draft-04/items.js";
1414
import formatAssertion from "./format-assertion.js";
15+
import format from "./format.js";
1516
import recursiveAnchor from "./recursiveAnchor.js";
1617
import recursiveRef from "../draft-2020-12/dynamicRef.js";
1718

1819

1920
addKeyword(additionalItems);
2021
addKeyword(items);
2122
addKeyword(formatAssertion);
23+
addKeyword(format);
2224
addKeyword(recursiveAnchor);
2325
addKeyword(recursiveRef);
2426

lib/keywords/format-assertion.js renamed to draft-2020-12/format-assertion.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import * as Browser from "@hyperjump/browser";
2-
import * as Instance from "../instance.js";
3-
import { getFormatHandler } from "../keywords.js";
2+
import * as Instance from "../lib/instance.js";
3+
import { getFormatHandler } from "../lib/keywords.js";
44

55

6-
const id = "https://json-schema.org/keyword/format-assertion";
6+
const id = "https://json-schema.org/keyword/draft-2020-12/format-assertion";
77

88
const compile = (schema) => Browser.value(schema);
99

@@ -25,7 +25,7 @@ const formats = {
2525
"duration": "https://json-schema.org/format/duration",
2626
"email": "https://json-schema.org/format/email",
2727
"idn-email": "https://json-schema.org/format/idn-email",
28-
"hostname": "https://json-schema.org/format/hostname",
28+
"hostname": "https://json-schema.org/format/a-label",
2929
"idn-hostname": "https://json-schema.org/format/idn-hostname",
3030
"ipv4": "https://json-schema.org/format/ipv4",
3131
"ipv6": "https://json-schema.org/format/ipv6",

draft-2020-12/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ import unevaluatedMetaSchema from "./meta/unevaluated.js";
1313

1414
import dynamicAnchor from "./dynamicAnchor.js";
1515
import dynamicRef from "./dynamicRef.js";
16+
import format from "../draft-2019-09/format.js";
17+
import formatAssertion from "./format-assertion.js";
1618

1719

1820
addKeyword(dynamicRef);
1921
addKeyword(dynamicAnchor);
22+
addKeyword(format);
23+
addKeyword(formatAssertion);
2024

2125
defineVocabulary("https://json-schema.org/draft/2020-12/vocab/core", {
2226
"$anchor": "https://json-schema.org/keyword/anchor",
@@ -81,11 +85,11 @@ defineVocabulary("https://json-schema.org/draft/2020-12/vocab/meta-data", {
8185
});
8286

8387
defineVocabulary("https://json-schema.org/draft/2020-12/vocab/format-annotation", {
84-
"format": "https://json-schema.org/keyword/format"
88+
"format": "https://json-schema.org/keyword/draft-2019-09/format"
8589
});
8690

8791
defineVocabulary("https://json-schema.org/draft/2020-12/vocab/format-assertion", {
88-
"format": "https://json-schema.org/keyword/format-assertion"
92+
"format": "https://json-schema.org/keyword/draft-2020-12/format-assertion"
8993
});
9094

9195
defineVocabulary("https://json-schema.org/draft/2020-12/vocab/content", {

0 commit comments

Comments
 (0)