Skip to content

Commit 9e73bcf

Browse files
committed
Add support for the json-pointer format
1 parent 8d2989b commit 9e73bcf

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

formats/formats-test-suite.spec.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,6 @@ const skip = new Set<string>([
4949
"|draft2019-09|idn-hostname.json",
5050
"|draft7|idn-hostname.json",
5151

52-
// Not supported
53-
"|draft2020-12|json-pointer.json",
54-
"|draft2019-09|json-pointer.json",
55-
"|draft7|json-pointer.json",
56-
"|draft6|json-pointer.json",
57-
5852
// Not supported
5953
"|draft2020-12|relative-json-pointer.json",
6054
"|draft2019-09|relative-json-pointer.json",

formats/handlers/json-pointer.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const unescaped = `[\\u{00}-\\u{2E}\\u{30}-\\u{7D}\\u{7F}-\\u{10FFFF}]`; // %x2F ('/') and %x7E ('~') are excluded from 'unescaped'
2+
const escaped = `~[01]`; // representing '~' and '/', respectively
3+
const referenceToken = `(?:${unescaped}|${escaped})*`;
4+
const jsonPointer = `(?:/${referenceToken})*`;
5+
6+
export const isJsonPointer = RegExp.prototype.test.bind(new RegExp(`^${jsonPointer}$`, "u"));
7+
8+
export default {
9+
id: "https://json-schema.org/format/json-pointer",
10+
handler: (pointer) => typeof pointer !== "string" || isJsonPointer(pointer)
11+
};

formats/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import iri from "./handlers/iri.js";
1212
import iriReference from "./handlers/iri-reference.js";
1313
import uuid from "./handlers/uuid.js";
1414
import uriTemplate from "./handlers/uri-template.js";
15+
import jsonPointer from "./handlers/json-pointer.js";
1516
import regex from "./handlers/regex.js";
1617

1718

@@ -27,6 +28,7 @@ addFormat(iri);
2728
addFormat(iriReference);
2829
addFormat(uuid);
2930
addFormat(uriTemplate);
31+
addFormat(jsonPointer);
3032
addFormat(regex);
3133

3234
export {

0 commit comments

Comments
 (0)