@json-schema-engine/formats 0.0.1
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.
- package/LICENSE +21 -0
- package/README.md +45 -0
- package/dist/idn.d.ts +4 -0
- package/dist/idn.d.ts.map +1 -0
- package/dist/idn.js +304 -0
- package/dist/idn.js.map +1 -0
- package/dist/idna.d.ts +50 -0
- package/dist/idna.d.ts.map +1 -0
- package/dist/idna.js +350 -0
- package/dist/idna.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +799 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
- package/src/idn.ts +309 -0
- package/src/idna.ts +366 -0
- package/src/index.ts +876 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@json-schema-engine/formats",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Format implementations for @json-schema-engine/core's format-assertion vocabulary and assertFormats configuration (DESIGN.md M7)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"jse-source": "./src/index.ts",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=22"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@json-schema-engine/core": "^0.0.1"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@json-schema-engine/compiler": "^0.0.1"
|
|
26
|
+
},
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"src"
|
|
31
|
+
],
|
|
32
|
+
"sideEffects": false,
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/handrews/json-schema-engine.git",
|
|
36
|
+
"directory": "packages/formats"
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/idn.ts
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
// idn-hostname / idn-email (RFC 5890/5891/5892/5893, RFC 6531) — the
|
|
2
|
+
// U-label side of the IDNA2008 machinery in idna.ts. Implemented from the
|
|
3
|
+
// RFCs with Unicode data through ECMA-262's native \p{...} property
|
|
4
|
+
// escapes plus small cited tables (DESIGN.md D15).
|
|
5
|
+
|
|
6
|
+
import type { FormatDefinition } from "@json-schema-engine/core";
|
|
7
|
+
import {
|
|
8
|
+
decodePunycode,
|
|
9
|
+
encodePunycode,
|
|
10
|
+
isValidALabel,
|
|
11
|
+
isValidIdnaLabel,
|
|
12
|
+
} from "./idna.js";
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// RFC 5892 derived-property approximation for U-label code points. PVALID's
|
|
16
|
+
// backbone is letters/digits/marks in lowercase or caseless form; uppercase
|
|
17
|
+
// (and anything case-unstable), symbols, punctuation, spaces, and controls
|
|
18
|
+
// are DISALLOWED. Context characters (Appendix A) are admitted here and
|
|
19
|
+
// judged by their rules in isValidIdnaLabel.
|
|
20
|
+
const LETTER_DIGIT_MARK = /^[\p{Ll}\p{Lo}\p{Lm}\p{Mn}\p{Mc}\p{Nd}]$/u;
|
|
21
|
+
const CONTEXT_CPS = new Set([
|
|
22
|
+
0x200c, // ZWNJ (CONTEXTJ, A.1)
|
|
23
|
+
0x200d, // ZWJ (CONTEXTJ, A.2)
|
|
24
|
+
0x00b7, // MIDDLE DOT (A.3)
|
|
25
|
+
0x0375, // GREEK KERAIA (A.4)
|
|
26
|
+
0x05f3, // HEBREW GERESH (A.5)
|
|
27
|
+
0x05f4, // HEBREW GERSHAYIM (A.6)
|
|
28
|
+
0x30fb, // KATAKANA MIDDLE DOT (A.7)
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
// RFC 5892 §2.6 exceptions carrying PVALID despite their general
|
|
32
|
+
// category (punctuation/symbol/number-letter): TIBETAN TSHEG, IDEOGRAPHIC
|
|
33
|
+
// ZERO, the Sindhi Arabic signs. (ß/ς are Ll and need no exception here.)
|
|
34
|
+
const PVALID_EXCEPTIONS = new Set([0x0f0b, 0x3007, 0x06fd, 0x06fe]);
|
|
35
|
+
|
|
36
|
+
const allowedUnicodeCp = (cp: number): boolean => {
|
|
37
|
+
if (PVALID_EXCEPTIONS.has(cp)) return true;
|
|
38
|
+
if (cp === 0x2d) return true; // hyphen (LDH; placement rules elsewhere)
|
|
39
|
+
if (cp >= 0x30 && cp <= 0x39) return true;
|
|
40
|
+
if (cp >= 0x61 && cp <= 0x7a) return true;
|
|
41
|
+
if (cp < 0x80) return false; // other ASCII: uppercase, symbols, dots…
|
|
42
|
+
if (CONTEXT_CPS.has(cp)) return true;
|
|
43
|
+
return LETTER_DIGIT_MARK.test(String.fromCodePoint(cp));
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// RFC 5893 (bidi) character classes, approximated from the Unicode
|
|
48
|
+
// Bidi_Class assignments the RFC cites. ECMA regex has no \p{Bidi_Class=},
|
|
49
|
+
// so the RTL classes are explicit block ranges (Hebrew, Arabic, Syriac,
|
|
50
|
+
// Thaana, NKo + presentation forms); EN/AN/NSM/ES/CS/ET/ON cover the
|
|
51
|
+
// digit/mark/neutral classes the rule distinguishes.
|
|
52
|
+
type BidiClass = "R" | "AL" | "AN" | "EN" | "NSM" | "L" | "N";
|
|
53
|
+
|
|
54
|
+
const R_RANGES: readonly [number, number][] = [
|
|
55
|
+
[0x05be, 0x05be],
|
|
56
|
+
[0x05c0, 0x05c0],
|
|
57
|
+
[0x05c3, 0x05c3],
|
|
58
|
+
[0x05c6, 0x05c6],
|
|
59
|
+
[0x05d0, 0x05f4],
|
|
60
|
+
[0x0608, 0x0608],
|
|
61
|
+
[0x200f, 0x200f],
|
|
62
|
+
[0xfb1d, 0xfb1d],
|
|
63
|
+
[0xfb1f, 0xfb28],
|
|
64
|
+
[0xfb2a, 0xfb4f],
|
|
65
|
+
];
|
|
66
|
+
const AL_RANGES: readonly [number, number][] = [
|
|
67
|
+
[0x0600, 0x0605],
|
|
68
|
+
[0x060b, 0x060b],
|
|
69
|
+
[0x060d, 0x060d],
|
|
70
|
+
[0x061b, 0x064a],
|
|
71
|
+
[0x066d, 0x066f],
|
|
72
|
+
[0x0671, 0x06d5],
|
|
73
|
+
[0x06e5, 0x06e6],
|
|
74
|
+
[0x06ee, 0x06ef],
|
|
75
|
+
[0x06fa, 0x0710],
|
|
76
|
+
[0x0712, 0x072f],
|
|
77
|
+
[0x074d, 0x07a5],
|
|
78
|
+
[0x07b1, 0x07b1],
|
|
79
|
+
[0x0780, 0x07a5],
|
|
80
|
+
[0xfb50, 0xfdfd],
|
|
81
|
+
[0xfe70, 0xfefc],
|
|
82
|
+
];
|
|
83
|
+
const AN_RANGES: readonly [number, number][] = [
|
|
84
|
+
[0x0660, 0x0669],
|
|
85
|
+
[0x066b, 0x066c],
|
|
86
|
+
[0x06dd, 0x06dd],
|
|
87
|
+
];
|
|
88
|
+
const inRanges = (cp: number, ranges: readonly [number, number][]): boolean =>
|
|
89
|
+
ranges.some(([lo, hi]) => cp >= lo && cp <= hi);
|
|
90
|
+
|
|
91
|
+
const NSM_RE = /^\p{Mn}$/u;
|
|
92
|
+
const L_RE = /^[\p{L}\p{Nl}]$/u;
|
|
93
|
+
|
|
94
|
+
function bidiClass(cp: number): BidiClass {
|
|
95
|
+
if (inRanges(cp, AN_RANGES)) return "AN";
|
|
96
|
+
if (inRanges(cp, R_RANGES)) return "R";
|
|
97
|
+
if (inRanges(cp, AL_RANGES)) return "AL";
|
|
98
|
+
if (cp >= 0x30 && cp <= 0x39) return "EN";
|
|
99
|
+
if (cp >= 0x06f0 && cp <= 0x06f9) return "EN"; // extended Arabic-Indic: EN
|
|
100
|
+
const ch = String.fromCodePoint(cp);
|
|
101
|
+
if (NSM_RE.test(ch)) return "NSM";
|
|
102
|
+
if (L_RE.test(ch)) return "L";
|
|
103
|
+
return "N"; // ES/CS/ET/ON/BN for the rule's purposes
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The RFC 5893 §2 Bidi rule for one label. Applied only when the whole
|
|
108
|
+
* domain name is a "Bidi domain name" (some label contains R/AL/AN).
|
|
109
|
+
*/
|
|
110
|
+
function satisfiesBidiRule(codepoints: readonly number[]): boolean {
|
|
111
|
+
const classes = codepoints.map(bidiClass);
|
|
112
|
+
const first = classes[0]!;
|
|
113
|
+
// Trailing NSMs attach to the preceding character (rules 3 and 6).
|
|
114
|
+
let lastIdx = classes.length - 1;
|
|
115
|
+
while (lastIdx > 0 && classes[lastIdx] === "NSM") lastIdx--;
|
|
116
|
+
const last = classes[lastIdx]!;
|
|
117
|
+
|
|
118
|
+
if (first === "R" || first === "AL") {
|
|
119
|
+
// RTL label: rules 2-4.
|
|
120
|
+
const allowed = new Set(["R", "AL", "AN", "EN", "NSM", "N"]);
|
|
121
|
+
if (!classes.every((c) => allowed.has(c))) return false;
|
|
122
|
+
if (!(last === "R" || last === "AL" || last === "AN" || last === "EN")) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
const hasEN = classes.includes("EN");
|
|
126
|
+
const hasAN = classes.includes("AN");
|
|
127
|
+
return !(hasEN && hasAN);
|
|
128
|
+
}
|
|
129
|
+
if (first === "L") {
|
|
130
|
+
// LTR label: rules 5-6.
|
|
131
|
+
const allowed = new Set(["L", "EN", "NSM", "N"]);
|
|
132
|
+
if (!classes.every((c) => allowed.has(c))) return false;
|
|
133
|
+
return last === "L" || last === "EN";
|
|
134
|
+
}
|
|
135
|
+
return false; // rule 1: first character must be L, R, or AL
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
|
|
140
|
+
const LDH_ASCII = /^[a-z0-9-]+$/i;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Validate one label; returns its A-label (ACE) octet length, or null when
|
|
144
|
+
* invalid. RFC 5891 §4.2.3.1 hyphen restrictions apply to both forms.
|
|
145
|
+
*/
|
|
146
|
+
function labelAceLength(label: string): number | null {
|
|
147
|
+
if (label.length === 0) return null;
|
|
148
|
+
if (label.startsWith("-") || label.endsWith("-")) return null;
|
|
149
|
+
|
|
150
|
+
// ASCII labels: plain LDH, or a full A-label when ACE-prefixed.
|
|
151
|
+
// eslint-disable-next-line no-control-regex -- explicit ASCII-range test
|
|
152
|
+
if (/^[\x00-\x7f]*$/u.test(label)) {
|
|
153
|
+
if (!LDH_ASCII.test(label)) return null;
|
|
154
|
+
if (label.length > 63) return null;
|
|
155
|
+
if (/^..--/.test(label)) {
|
|
156
|
+
if (!/^xn--/i.test(label)) return null; // reserved LDH label
|
|
157
|
+
if (!isValidALabel(label)) return null;
|
|
158
|
+
// idn-hostname additionally screens the DECODED content's code
|
|
159
|
+
// points (an A-label hiding a DISALLOWED code point is invalid).
|
|
160
|
+
const decoded = decodePunycode(label.slice(4).toLowerCase());
|
|
161
|
+
if (!decoded?.every(allowedUnicodeCp)) return null;
|
|
162
|
+
return label.length;
|
|
163
|
+
}
|
|
164
|
+
return label.length;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// U-label. RFC 5891 §4.2.3: NFC form required.
|
|
168
|
+
if (label.normalize("NFC") !== label) return null;
|
|
169
|
+
if (/^..--/u.test(label)) return null; // hyphens in positions 3-4
|
|
170
|
+
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-spread -- code-point iteration is the IDNA unit
|
|
172
|
+
const codepoints = [...label].map((ch) => ch.codePointAt(0)!);
|
|
173
|
+
if (!codepoints.every(allowedUnicodeCp)) return null;
|
|
174
|
+
// Context rules + leading-mark + exceptions (RFC 5892; shared with the
|
|
175
|
+
// A-label path).
|
|
176
|
+
if (!isValidIdnaLabel(label, codepoints)) return null;
|
|
177
|
+
|
|
178
|
+
const ace = encodePunycode(codepoints);
|
|
179
|
+
const aceLength = ace.length + 4; // "xn--" prefix
|
|
180
|
+
if (aceLength > 63) return null;
|
|
181
|
+
// The canonical ACE must decode back (guards encoder edge cases).
|
|
182
|
+
if (decodePunycode(ace) === undefined) return null;
|
|
183
|
+
return aceLength;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function isIdnHostname(value: string): boolean {
|
|
187
|
+
if (value.length === 0) return false;
|
|
188
|
+
// IDNA label separators: the ideographic/fullwidth/halfwidth full stops
|
|
189
|
+
// separate labels exactly like ".".
|
|
190
|
+
const labels = value.split(/[.\u3002\uff0e\uff61]/u);
|
|
191
|
+
const decodedLabels: number[][] = [];
|
|
192
|
+
let total = 0;
|
|
193
|
+
for (const label of labels) {
|
|
194
|
+
const aceLength = labelAceLength(label);
|
|
195
|
+
if (aceLength === null) return false;
|
|
196
|
+
total += aceLength;
|
|
197
|
+
// Bidi checking needs the Unicode form: decode A-labels.
|
|
198
|
+
if (/^xn--/i.test(label)) {
|
|
199
|
+
decodedLabels.push(decodePunycode(label.slice(4).toLowerCase()) ?? []);
|
|
200
|
+
} else {
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-spread -- code-point iteration is the IDNA unit
|
|
202
|
+
decodedLabels.push([...label].map((ch) => ch.codePointAt(0)!));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (total + labels.length - 1 > 253) return false;
|
|
206
|
+
|
|
207
|
+
// RFC 5893 §1.4: a Bidi domain name (any RTL character anywhere) must
|
|
208
|
+
// satisfy the Bidi rule in EVERY label.
|
|
209
|
+
const isBidiName = decodedLabels.some((cps) =>
|
|
210
|
+
cps.some((cp) => {
|
|
211
|
+
const c = bidiClass(cp);
|
|
212
|
+
return c === "R" || c === "AL" || c === "AN";
|
|
213
|
+
}),
|
|
214
|
+
);
|
|
215
|
+
if (isBidiName) {
|
|
216
|
+
return decodedLabels.every(
|
|
217
|
+
(cps) => cps.length === 0 || satisfiesBidiRule(cps),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export const idnHostname: FormatDefinition = {
|
|
224
|
+
test: (value) => typeof value === "string" && isIdnHostname(value),
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
// idn-email (RFC 6531): RFC 5321's mailbox grammar with `atext`/`qtextSMTP`
|
|
229
|
+
// extended by UTF8-non-ascii — any non-ASCII code point is admitted in the
|
|
230
|
+
// local part; the domain side is an idn-hostname (U- or A-labels) or an
|
|
231
|
+
// address literal.
|
|
232
|
+
|
|
233
|
+
const ATEXT_ASCII = /^[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~]$/;
|
|
234
|
+
|
|
235
|
+
const isExtendedAtext = (ch: string): boolean => {
|
|
236
|
+
const cp = ch.codePointAt(0)!;
|
|
237
|
+
// A lone surrogate is not a Unicode scalar value — UTF8-non-ascii can
|
|
238
|
+
// never encode it (RFC 3629 forbids surrogate code points in UTF-8).
|
|
239
|
+
if (cp >= 0xd800 && cp <= 0xdfff && ch.length === 1) return false;
|
|
240
|
+
return ATEXT_ASCII.test(ch) || cp >= 0x80;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
function isIdnDotString(local: string): boolean {
|
|
244
|
+
if (local.length === 0) return false;
|
|
245
|
+
const atoms = local.split(".");
|
|
246
|
+
return atoms.every(
|
|
247
|
+
(atom) =>
|
|
248
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-spread -- code-point iteration
|
|
249
|
+
atom.length > 0 && [...atom].every(isExtendedAtext),
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function isIdnQuotedString(local: string): boolean {
|
|
254
|
+
if (local.length < 2 || !local.startsWith('"') || !local.endsWith('"'))
|
|
255
|
+
return false;
|
|
256
|
+
const body = local.slice(1, -1);
|
|
257
|
+
for (let i = 0; i < body.length; i++) {
|
|
258
|
+
const ch = body[i]!;
|
|
259
|
+
if (ch === "\\") {
|
|
260
|
+
// quoted-pairSMTP: "\" + printable ASCII (RFC 6531 leaves this rule).
|
|
261
|
+
const next = body.charCodeAt(i + 1);
|
|
262
|
+
if (Number.isNaN(next) || next < 32 || next > 126) return false;
|
|
263
|
+
i++;
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const cp = ch.codePointAt(0)!;
|
|
267
|
+
// qtextSMTP (32-126 minus '"' and "\") or UTF8-non-ascii.
|
|
268
|
+
if (cp >= 0x80) continue;
|
|
269
|
+
if (cp < 32 || cp > 126 || ch === '"') return false;
|
|
270
|
+
}
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Address literals ([IPv4] / [IPv6:...]) are pure ASCII plumbing shared
|
|
275
|
+
// with `email`; the idn-email suite exercises hostname domains, and a
|
|
276
|
+
// literal domain simply defers to the same bracket grammar via the plain
|
|
277
|
+
// email rules embedded here.
|
|
278
|
+
const IPV4_LITERAL =
|
|
279
|
+
/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/;
|
|
280
|
+
|
|
281
|
+
function isIdnEmail(value: string): boolean {
|
|
282
|
+
let local: string;
|
|
283
|
+
let domain: string;
|
|
284
|
+
if (value.startsWith('"')) {
|
|
285
|
+
let i = 1;
|
|
286
|
+
while (i < value.length && value[i] !== '"') {
|
|
287
|
+
i += value[i] === "\\" ? 2 : 1;
|
|
288
|
+
}
|
|
289
|
+
if (i >= value.length || value[i + 1] !== "@") return false;
|
|
290
|
+
local = value.slice(0, i + 1);
|
|
291
|
+
domain = value.slice(i + 2);
|
|
292
|
+
if (!isIdnQuotedString(local)) return false;
|
|
293
|
+
} else {
|
|
294
|
+
const at = value.lastIndexOf("@");
|
|
295
|
+
if (at === -1) return false;
|
|
296
|
+
local = value.slice(0, at);
|
|
297
|
+
domain = value.slice(at + 1);
|
|
298
|
+
if (!isIdnDotString(local)) return false;
|
|
299
|
+
}
|
|
300
|
+
if (domain.startsWith("[") && domain.endsWith("]")) {
|
|
301
|
+
const inner = domain.slice(1, -1);
|
|
302
|
+
return IPV4_LITERAL.test(inner);
|
|
303
|
+
}
|
|
304
|
+
return isIdnHostname(domain);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export const idnEmail: FormatDefinition = {
|
|
308
|
+
test: (value) => typeof value === "string" && isIdnEmail(value),
|
|
309
|
+
};
|