@c9up/rune 0.1.6 → 0.1.8

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 (46) hide show
  1. package/dist/MessagesProvider.d.ts +45 -0
  2. package/dist/MessagesProvider.d.ts.map +1 -0
  3. package/dist/MessagesProvider.js +77 -0
  4. package/dist/MessagesProvider.js.map +1 -0
  5. package/dist/Schema.d.ts +912 -38
  6. package/dist/Schema.d.ts.map +1 -1
  7. package/dist/Schema.js +2841 -219
  8. package/dist/Schema.js.map +1 -1
  9. package/dist/date.d.ts +36 -0
  10. package/dist/date.d.ts.map +1 -0
  11. package/dist/date.js +275 -0
  12. package/dist/date.js.map +1 -0
  13. package/dist/errors.d.ts +42 -0
  14. package/dist/errors.d.ts.map +1 -1
  15. package/dist/errors.js +37 -0
  16. package/dist/errors.js.map +1 -1
  17. package/dist/formats.d.ts +149 -0
  18. package/dist/formats.d.ts.map +1 -0
  19. package/dist/formats.js +612 -0
  20. package/dist/formats.js.map +1 -0
  21. package/dist/index.d.ts +152 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +181 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/magic.d.ts +30 -0
  26. package/dist/magic.d.ts.map +1 -0
  27. package/dist/magic.js +154 -0
  28. package/dist/magic.js.map +1 -0
  29. package/dist/types.d.ts +15 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/dist/types.js +12 -0
  32. package/dist/types.js.map +1 -0
  33. package/index.darwin-arm64.node +0 -0
  34. package/index.darwin-x64.node +0 -0
  35. package/index.linux-arm64-gnu.node +0 -0
  36. package/index.linux-x64-gnu.node +0 -0
  37. package/index.win32-x64-msvc.node +0 -0
  38. package/package.json +11 -1
  39. package/src/MessagesProvider.ts +115 -0
  40. package/src/Schema.ts +3970 -215
  41. package/src/date.ts +320 -0
  42. package/src/errors.ts +59 -0
  43. package/src/formats.ts +721 -0
  44. package/src/index.ts +266 -1
  45. package/src/magic.ts +181 -0
  46. package/src/types.ts +55 -0
@@ -0,0 +1,612 @@
1
+ /**
2
+ * Format validators backing the VineJS string/number/array rules.
3
+ *
4
+ * VineJS delegates these to `validator.js`. rune has zero runtime dependencies,
5
+ * so each check is implemented here. Where VineJS ships a per-locale table we
6
+ * cannot reasonably reproduce in full (mobile numbers, postal codes, passports),
7
+ * rune supports a named subset and **fails closed** on an unknown locale rather
8
+ * than waving the value through — an unchecked value that reports "valid" is the
9
+ * failure mode this package exists to prevent.
10
+ */
11
+ const HEX_RE = /^#?(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
12
+ const ULID_RE = /^[0-7][0-9ABCDEFGHJKMNPQRSTVWXYZ]{25}$/i;
13
+ const JWT_RE = /^[\w-]+\.[\w-]+\.[\w-]*$/;
14
+ const IPV4_RE = /^(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}$/;
15
+ const E164_RE = /^\+?[1-9]\d{6,14}$/;
16
+ /** Code-point scan rather than a control-character regex, which lints as suspicious. */
17
+ export const isAscii = (v) => [...v].every((c) => (c.codePointAt(0) ?? 0) <= 0x7f);
18
+ export const isHexCode = (v) => HEX_RE.test(v);
19
+ export const isUlid = (v) => ULID_RE.test(v);
20
+ export const isJwt = (v) => JWT_RE.test(v);
21
+ /** IPv6, including the `::` compressed form and IPv4-mapped tails. */
22
+ function isIpV6(v) {
23
+ if (!v.includes(":"))
24
+ return false;
25
+ const halves = v.split("::");
26
+ if (halves.length > 2)
27
+ return false;
28
+ const expand = (part) => part === "" ? [] : part.split(":");
29
+ const head = expand(halves[0]);
30
+ const tail = halves.length === 2 ? expand(halves[1]) : [];
31
+ const groups = [...head, ...tail];
32
+ // A trailing IPv4 literal occupies two groups.
33
+ const last = groups.at(-1);
34
+ const ipv4Tail = last?.includes(".") ?? false;
35
+ if (ipv4Tail && last !== undefined && !IPV4_RE.test(last))
36
+ return false;
37
+ const count = groups.length + (ipv4Tail ? 1 : 0);
38
+ if (halves.length === 1 ? count !== 8 : count >= 8)
39
+ return false;
40
+ return groups
41
+ .slice(0, ipv4Tail ? -1 : undefined)
42
+ .every((g) => /^[0-9a-f]{1,4}$/i.test(g));
43
+ }
44
+ export function isIpAddress(v, version) {
45
+ if (version === 4)
46
+ return IPV4_RE.test(v);
47
+ if (version === 6)
48
+ return isIpV6(v);
49
+ return IPV4_RE.test(v) || isIpV6(v);
50
+ }
51
+ /** Luhn checksum — the digits-only part of card validation. */
52
+ export function isCreditCard(v) {
53
+ const digits = v.replace(/[ -]/g, "");
54
+ if (!/^\d{12,19}$/.test(digits))
55
+ return false;
56
+ let sum = 0;
57
+ let double = false;
58
+ for (let i = digits.length - 1; i >= 0; i--) {
59
+ let d = digits.charCodeAt(i) - 48;
60
+ if (double) {
61
+ d *= 2;
62
+ if (d > 9)
63
+ d -= 9;
64
+ }
65
+ sum += d;
66
+ double = !double;
67
+ }
68
+ return sum % 10 === 0;
69
+ }
70
+ /** IBAN mod-97 check (ISO 13616), computed digit by digit to avoid BigInt. */
71
+ export function isIban(v) {
72
+ const s = v.replace(/\s/g, "").toUpperCase();
73
+ if (!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(s))
74
+ return false;
75
+ const rearranged = s.slice(4) + s.slice(0, 4);
76
+ let remainder = 0;
77
+ for (const ch of rearranged) {
78
+ const chunk = /\d/.test(ch) ? ch : String(ch.charCodeAt(0) - 55); // A→10 … Z→35
79
+ for (const digit of chunk) {
80
+ remainder = (remainder * 10 + (digit.charCodeAt(0) - 48)) % 97;
81
+ }
82
+ }
83
+ return remainder === 1;
84
+ }
85
+ /** `"lat,lng"` within the valid ranges. */
86
+ export function isCoordinates(v) {
87
+ const parts = v.split(",");
88
+ if (parts.length !== 2)
89
+ return false;
90
+ const lat = Number(parts[0].trim());
91
+ const lng = Number(parts[1].trim());
92
+ if (!Number.isFinite(lat) || !Number.isFinite(lng))
93
+ return false;
94
+ return lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180;
95
+ }
96
+ /**
97
+ * Postal-code patterns. A named subset of VineJS's table — extend it here rather
98
+ * than at the call site, and see the module note on unknown locales.
99
+ */
100
+ const POSTAL_CODES = {
101
+ AD: /^AD\d{3}$/i,
102
+ AT: /^\d{4}$/,
103
+ AU: /^\d{4}$/,
104
+ BE: /^\d{4}$/,
105
+ BG: /^\d{4}$/,
106
+ BR: /^\d{5}-?\d{3}$/,
107
+ CA: /^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
108
+ CH: /^\d{4}$/,
109
+ CN: /^\d{6}$/,
110
+ CZ: /^\d{3} ?\d{2}$/,
111
+ DE: /^\d{5}$/,
112
+ DK: /^\d{4}$/,
113
+ EE: /^\d{5}$/,
114
+ ES: /^\d{5}$/,
115
+ FI: /^\d{5}$/,
116
+ FR: /^\d{5}$/,
117
+ GB: /^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$/i,
118
+ GR: /^\d{3} ?\d{2}$/,
119
+ HR: /^\d{5}$/,
120
+ HU: /^\d{4}$/,
121
+ IE: /^[A-Z]\d[\dW] ?[A-Z\d]{4}$/i,
122
+ IL: /^\d{5}(?:\d{2})?$/,
123
+ IN: /^\d{6}$/,
124
+ IS: /^\d{3}$/,
125
+ IT: /^\d{5}$/,
126
+ JP: /^\d{3}-?\d{4}$/,
127
+ KR: /^\d{5}$/,
128
+ LI: /^\d{4}$/,
129
+ LT: /^(?:LT-)?\d{5}$/i,
130
+ LU: /^\d{4}$/,
131
+ LV: /^(?:LV-)?\d{4}$/i,
132
+ MC: /^980\d{2}$/,
133
+ MT: /^[A-Z]{3} ?\d{4}$/i,
134
+ MX: /^\d{5}$/,
135
+ NL: /^\d{4} ?[A-Z]{2}$/i,
136
+ NO: /^\d{4}$/,
137
+ NZ: /^\d{4}$/,
138
+ PL: /^\d{2}-?\d{3}$/,
139
+ PT: /^\d{4}-?\d{3}$/,
140
+ RO: /^\d{6}$/,
141
+ RU: /^\d{6}$/,
142
+ SE: /^\d{3} ?\d{2}$/,
143
+ SI: /^(?:SI-)?\d{4}$/i,
144
+ SK: /^\d{3} ?\d{2}$/,
145
+ TR: /^\d{5}$/,
146
+ UA: /^\d{5}$/,
147
+ US: /^\d{5}(?:-\d{4})?$/,
148
+ ZA: /^\d{4}$/,
149
+ };
150
+ /** Country codes rune can check postal codes for. */
151
+ export const SUPPORTED_POSTAL_CODES = Object.keys(POSTAL_CODES);
152
+ export function isPostalCode(v, countryCode) {
153
+ const re = POSTAL_CODES[countryCode.toUpperCase()];
154
+ return re === undefined ? null : re.test(v.trim());
155
+ }
156
+ /**
157
+ * Mobile numbers in E.164 form. Named deviation from VineJS: rune does NOT
158
+ * carry per-locale numbering plans, so `locale` is not accepted — a caller that
159
+ * needs one writes a `.regex()` or a custom rule.
160
+ */
161
+ export const isMobile = (v) => E164_RE.test(v.replace(/[ .-]/g, ""));
162
+ /** HTML-escape the five characters that break out of markup (VineJS `escape`). */
163
+ export function escapeHtml(v) {
164
+ return v
165
+ .replace(/&/g, "&amp;")
166
+ .replace(/</g, "&lt;")
167
+ .replace(/>/g, "&gt;")
168
+ .replace(/"/g, "&quot;")
169
+ .replace(/'/g, "&#x27;");
170
+ }
171
+ const GMAIL_DOMAINS = new Set(["gmail.com", "googlemail.com"]);
172
+ export function normalizeEmail(value, options = {}) {
173
+ const at = value.lastIndexOf("@");
174
+ if (at < 1)
175
+ return value;
176
+ let local = value.slice(0, at);
177
+ let domain = value.slice(at + 1);
178
+ // The domain is case-insensitive per RFC 1035, so it is always lowercased.
179
+ domain = domain.toLowerCase();
180
+ const allLowercase = options.all_lowercase ?? options.allLowercase;
181
+ const removeSubaddress = options.gmail_remove_subaddress ?? options.gmailRemoveSubaddress;
182
+ const removeDots = options.gmail_remove_dots ?? options.gmailRemoveDots;
183
+ if (allLowercase !== false)
184
+ local = local.toLowerCase();
185
+ if (GMAIL_DOMAINS.has(domain)) {
186
+ if (removeSubaddress)
187
+ local = local.split("+")[0];
188
+ if (removeDots)
189
+ local = local.replace(/\./g, "");
190
+ }
191
+ else if (removeSubaddress) {
192
+ local = local.split("+")[0];
193
+ }
194
+ return `${local}@${domain}`;
195
+ }
196
+ export function normalizeUrl(value, options = {}) {
197
+ let url;
198
+ try {
199
+ url = new URL(value);
200
+ }
201
+ catch {
202
+ // Not parseable: hand it back untouched and let `url()` report the failure.
203
+ return value;
204
+ }
205
+ if (options.forceProtocol)
206
+ url.protocol = `${options.forceProtocol}:`;
207
+ if (options.forceHttps && url.protocol === "http:")
208
+ url.protocol = "https:";
209
+ if (options.stripWWW)
210
+ url.hostname = url.hostname.replace(/^www\./, "");
211
+ if (options.stripHash)
212
+ url.hash = "";
213
+ if (options.stripAuthentication) {
214
+ url.username = "";
215
+ url.password = "";
216
+ }
217
+ if (options.removeExplicitPort &&
218
+ ((url.protocol === "http:" && url.port === "80") ||
219
+ (url.protocol === "https:" && url.port === "443"))) {
220
+ url.port = "";
221
+ }
222
+ if (options.removeDirectoryIndex) {
223
+ url.pathname = url.pathname.replace(/\/index\.(?:html?|php|asp)$/i, "/");
224
+ }
225
+ for (const parameter of options.removeQueryParameters ?? []) {
226
+ for (const name of [...url.searchParams.keys()]) {
227
+ const matches = typeof parameter === "string"
228
+ ? name === parameter
229
+ : parameter.test(name);
230
+ if (matches)
231
+ url.searchParams.delete(name);
232
+ }
233
+ }
234
+ if (options.sortQueryParameters)
235
+ url.searchParams.sort();
236
+ let out = url.toString();
237
+ if (options.removeTrailingSlash) {
238
+ // Any path, not just the root one.
239
+ out = out.replace(/\/(?=(?:\?|#|$))/, "");
240
+ }
241
+ else if (options.stripTrailingSlash && url.pathname === "/") {
242
+ out = out.replace(/\/(?=(?:\?|#|$))/, "");
243
+ }
244
+ if (options.stripProtocol)
245
+ out = out.replace(/^[a-z][a-z0-9+.-]*:\/\//i, "");
246
+ return out;
247
+ }
248
+ /** `dash-case`, `snake_case` and spaced words to `camelCase`. */
249
+ export function toCamelCase(v) {
250
+ return v
251
+ .trim()
252
+ .replace(/[-_\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : "")
253
+ .replace(/^(.)/, (c) => c.toLowerCase());
254
+ }
255
+ /**
256
+ * Passport numbers. Named subset, same fail-closed contract as
257
+ * {@link isPostalCode}: an unknown country returns `null`.
258
+ */
259
+ const PASSPORTS = {
260
+ AT: /^[A-Z]\d{7}$/i,
261
+ AU: /^[A-Z]\d{7}$/i,
262
+ BE: /^[A-Z]{2}\d{6}$/i,
263
+ CA: /^[A-Z]{2}\d{6}$/i,
264
+ CH: /^[A-Z]\d{7}$/i,
265
+ CZ: /^\d{8}$/,
266
+ DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/i,
267
+ DK: /^\d{9}$/,
268
+ ES: /^[A-Z]{3}\d{6}$/i,
269
+ FI: /^[A-Z]{2}\d{7}$/i,
270
+ FR: /^\d{2}[A-Z]{2}\d{5}$/i,
271
+ GB: /^\d{9}$/,
272
+ GR: /^[A-Z]{2}\d{7}$/i,
273
+ HU: /^[A-Z]{2}\d{6}$/i,
274
+ IE: /^[A-Z0-9]{2}\d{7}$/i,
275
+ IN: /^[A-Z]\d{7}$/i,
276
+ IT: /^[A-Z0-9]{2}\d{7}$/i,
277
+ JP: /^[A-Z]{2}\d{7}$/i,
278
+ KR: /^[MS]\d{8}$/i,
279
+ NL: /^[A-Z]{2}\d{6}[A-Z0-9]$/i,
280
+ NO: /^\d{8}$/,
281
+ PL: /^[A-Z]{2}\d{7}$/i,
282
+ PT: /^[A-Z]\d{6}$/i,
283
+ RO: /^\d{8,9}$/,
284
+ RU: /^\d{9}$/,
285
+ SE: /^\d{8}$/,
286
+ TR: /^[A-Z]\d{8}$/i,
287
+ UA: /^[A-Z]{2}\d{6}$/i,
288
+ US: /^\d{9}$/,
289
+ ZA: /^[TAMD]\d{8}$/i,
290
+ };
291
+ export const SUPPORTED_PASSPORTS = Object.keys(PASSPORTS);
292
+ export function isPassport(v, countryCode) {
293
+ const re = PASSPORTS[countryCode.toUpperCase()];
294
+ return re === undefined ? null : re.test(v.trim());
295
+ }
296
+ /** Build the character class for `alpha`/`alphaNumeric` from its options. */
297
+ export function alphaPattern(base, options = {}) {
298
+ let extra = "";
299
+ if (options.allowSpaces)
300
+ extra += " ";
301
+ if (options.allowUnderscores)
302
+ extra += "_";
303
+ if (options.allowDashes)
304
+ extra += "\\-";
305
+ return new RegExp(`^[${base}${extra}]+$`);
306
+ }
307
+ export function isUrlWithOptions(value, options = {}) {
308
+ // VineJS forwards validator.js options verbatim, so a transcribed Adonis
309
+ // validator arrives in snake_case. Both spellings are honoured, snake_case
310
+ // first, so neither form is silently ignored.
311
+ const requireProtocol = (options.require_protocol ?? options.requireProtocol) !== false;
312
+ const protocols = options.protocols ?? ["http", "https"];
313
+ const candidate = requireProtocol || /^[a-z][a-z0-9+.-]*:\/\//i.test(value)
314
+ ? value
315
+ : `https://${value}`;
316
+ let url;
317
+ try {
318
+ url = new URL(candidate);
319
+ }
320
+ catch {
321
+ return false;
322
+ }
323
+ if (requireProtocol && !/^[a-z][a-z0-9+.-]*:\/\//i.test(value))
324
+ return false;
325
+ if (!protocols.includes(url.protocol.replace(/:$/, "")))
326
+ return false;
327
+ if (url.hostname.length === 0)
328
+ return false;
329
+ const allowUnderscores = options.allow_underscores ?? options.allowUnderscores ?? false;
330
+ if (!allowUnderscores && url.hostname.includes("_"))
331
+ return false;
332
+ const requireTld = (options.require_tld ?? options.requireTld) !== false;
333
+ if (requireTld && !url.hostname.includes("."))
334
+ return false;
335
+ return true;
336
+ }
337
+ /**
338
+ * Mobile numbering plans. Named subset of VineJS's `locale` table, same
339
+ * fail-closed contract as the postal codes: an unknown locale returns `null`.
340
+ */
341
+ const MOBILE_LOCALES = {
342
+ "fr-CH": /^(?:\+41|0)7[5-9]\d{7}$/,
343
+ "de-CH": /^(?:\+41|0)7[5-9]\d{7}$/,
344
+ "it-CH": /^(?:\+41|0)7[5-9]\d{7}$/,
345
+ "fr-FR": /^(?:\+33|0)[67]\d{8}$/,
346
+ "fr-BE": /^(?:\+32|0)4[5-9]\d{7}$/,
347
+ "nl-BE": /^(?:\+32|0)4[5-9]\d{7}$/,
348
+ "en-US": /^(?:\+1)?[2-9]\d{9}$/,
349
+ "en-CA": /^(?:\+1)?[2-9]\d{9}$/,
350
+ "en-GB": /^(?:\+44|0)7\d{9}$/,
351
+ "en-IE": /^(?:\+353|0)8[35-9]\d{7}$/,
352
+ "en-AU": /^(?:\+61|0)4\d{8}$/,
353
+ "en-NZ": /^(?:\+64|0)2\d{7,9}$/,
354
+ "en-IN": /^(?:\+91|0)?[6-9]\d{9}$/,
355
+ "de-DE": /^(?:\+49|0)1[5-7]\d{8,9}$/,
356
+ "de-AT": /^(?:\+43|0)6[4-9]\d{7,10}$/,
357
+ "it-IT": /^(?:\+39)?3\d{8,9}$/,
358
+ "es-ES": /^(?:\+34)?[679]\d{8}$/,
359
+ "pt-PT": /^(?:\+351)?9[1236]\d{7}$/,
360
+ "pt-BR": /^(?:\+55)?(?:\d{2})?9?\d{8}$/,
361
+ "nl-NL": /^(?:\+31|0)6\d{8}$/,
362
+ "da-DK": /^(?:\+45)?\d{8}$/,
363
+ "sv-SE": /^(?:\+46|0)7[02369]\d{7}$/,
364
+ "nb-NO": /^(?:\+47)?[49]\d{7}$/,
365
+ "fi-FI": /^(?:\+358|0)4\d{5,10}$/,
366
+ "pl-PL": /^(?:\+48)?\d{9}$/,
367
+ "cs-CZ": /^(?:\+420)?[6-7]\d{8}$/,
368
+ "sk-SK": /^(?:\+421)?9\d{8}$/,
369
+ "hu-HU": /^(?:\+36|06)(?:20|30|31|50|70)\d{7}$/,
370
+ "ro-RO": /^(?:\+40|0)7\d{8}$/,
371
+ "el-GR": /^(?:\+30|0)6[89]\d{8}$/,
372
+ "tr-TR": /^(?:\+90|0)5\d{9}$/,
373
+ "ru-RU": /^(?:\+7|8)9\d{9}$/,
374
+ "uk-UA": /^(?:\+380|0)\d{9}$/,
375
+ "ja-JP": /^(?:\+81|0)[7-9]0\d{8}$/,
376
+ "ko-KR": /^(?:\+82|0)1[0-9]\d{7,8}$/,
377
+ "zh-CN": /^(?:\+86|0)?1[3-9]\d{9}$/,
378
+ "zh-TW": /^(?:\+886|0)9\d{8}$/,
379
+ "ar-AE": /^(?:\+971|0)5[0245678]\d{7}$/,
380
+ "ar-SA": /^(?:\+966|0)5\d{8}$/,
381
+ "he-IL": /^(?:\+972|0)5[0-9]\d{7}$/,
382
+ "en-ZA": /^(?:\+27|0)[6-8]\d{8}$/,
383
+ };
384
+ export const SUPPORTED_MOBILE_LOCALES = Object.keys(MOBILE_LOCALES);
385
+ export function isMobileForLocale(v, locale) {
386
+ const re = MOBILE_LOCALES[locale];
387
+ if (re === undefined)
388
+ return null;
389
+ return re.test(v.replace(/[ .-]/g, ""));
390
+ }
391
+ /** Unquoted local part: dot-separated atoms of RFC 5322 atext. */
392
+ const ATEXT = "[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+";
393
+ const DOT_ATOM_RE = new RegExp(`^${ATEXT}(?:\\.${ATEXT})*$`);
394
+ /** Quoted local part: `"anything but bare quote/backslash, or escaped"`. */
395
+ const QUOTED_LOCAL_RE = /^"(?:[^"\\]|\\.)*"$/;
396
+ const DISPLAY_NAME_RE = /^\s*(?:"(?:[^"\\]|\\.)*"|[^<>@]*?)\s*<(.+)>\s*$/;
397
+ /** A single DNS label: alphanumerics and inner hyphens, 1..63 chars. */
398
+ function isDnsLabel(label) {
399
+ if (label.length === 0 || label.length > 63)
400
+ return false;
401
+ if (label.startsWith("-") || label.endsWith("-"))
402
+ return false;
403
+ return /^[a-zA-Z0-9-]+$/.test(label);
404
+ }
405
+ /** Bracketed IP domain literal — `[192.168.0.1]` or `[IPv6:::1]`. */
406
+ function isIpDomainLiteral(domain) {
407
+ if (!domain.startsWith("[") || !domain.endsWith("]"))
408
+ return false;
409
+ const inner = domain.slice(1, -1);
410
+ if (inner.toLowerCase().startsWith("ipv6:")) {
411
+ return isIpAddress(inner.slice(5), 6);
412
+ }
413
+ return isIpAddress(inner, 4);
414
+ }
415
+ /**
416
+ * Validate an email address.
417
+ *
418
+ * Deliberately structural rather than one giant regex: the length caps, the
419
+ * quoted local part and the IP-literal domain are separate rules in RFC 5321,
420
+ * and a single pattern that tries to express all of them is the classic source
421
+ * of both false accepts and false rejects.
422
+ */
423
+ export function isEmail(value, options = {}) {
424
+ let candidate = value;
425
+ if (options.allow_display_name) {
426
+ const match = DISPLAY_NAME_RE.exec(candidate);
427
+ if (match)
428
+ candidate = match[1];
429
+ }
430
+ else if (/[<>]/.test(candidate)) {
431
+ return false;
432
+ }
433
+ if (!options.ignore_max_length && candidate.length > 254)
434
+ return false;
435
+ const at = candidate.lastIndexOf("@");
436
+ if (at < 1 || at === candidate.length - 1)
437
+ return false;
438
+ const local = candidate.slice(0, at);
439
+ const domain = candidate.slice(at + 1);
440
+ if (options.blacklisted_chars) {
441
+ for (const char of options.blacklisted_chars) {
442
+ if (local.includes(char))
443
+ return false;
444
+ }
445
+ }
446
+ const quoted = QUOTED_LOCAL_RE.test(local);
447
+ if (!quoted && !DOT_ATOM_RE.test(local))
448
+ return false;
449
+ if (!options.ignore_max_length && local.length > 64)
450
+ return false;
451
+ if (domain.startsWith("[")) {
452
+ return options.allow_ip_domain === true && isIpDomainLiteral(domain);
453
+ }
454
+ const labels = domain.split(".");
455
+ if (options.require_tld !== false) {
456
+ if (labels.length < 2)
457
+ return false;
458
+ // A TLD is alphabetic and at least two characters.
459
+ const tld = labels[labels.length - 1];
460
+ if (tld.length < 2 || !/^[a-zA-Z]+$/.test(tld))
461
+ return false;
462
+ }
463
+ if (!labels.every(isDnsLabel))
464
+ return false;
465
+ if (options.domain_specific_validation &&
466
+ GMAIL_DOMAINS.has(domain.toLowerCase())) {
467
+ // Gmail: 6..30 chars, letters/digits/dots only, no leading/trailing dot,
468
+ // no doubled dot — and dots are ignored for the length check.
469
+ const username = local.split("+")[0];
470
+ if (!/^[a-zA-Z0-9.]+$/.test(username))
471
+ return false;
472
+ if (username.startsWith(".") || username.endsWith("."))
473
+ return false;
474
+ if (username.includes(".."))
475
+ return false;
476
+ const bare = username.replace(/\./g, "");
477
+ if (bare.length < 6 || bare.length > 30)
478
+ return false;
479
+ }
480
+ return true;
481
+ }
482
+ /**
483
+ * VAT number patterns, per country. `check` runs the country's own checksum
484
+ * when there is a short, well-defined one; countries without a `check` are
485
+ * validated on FORMAT only, and that is stated rather than implied.
486
+ */
487
+ const VAT_RULES = {
488
+ // mod-97 on the 9 leading digits (the two check digits are the last two).
489
+ BE: {
490
+ pattern: /^BE0?\d{9}$/i,
491
+ check: (d) => mod97(d.slice(0, 8)) === Number(d.slice(8, 10)),
492
+ },
493
+ FR: { pattern: /^FR[0-9A-Z]{2}\d{9}$/i },
494
+ DE: { pattern: /^DE\d{9}$/i, check: (d) => germanChecksum(d) },
495
+ NL: { pattern: /^NL\d{9}B\d{2}$/i, check: (d) => dutchChecksum(d) },
496
+ IT: { pattern: /^IT\d{11}$/i, check: (d) => luhnLike(d) },
497
+ ES: { pattern: /^ES[0-9A-Z]\d{7}[0-9A-Z]$/i },
498
+ PT: { pattern: /^PT\d{9}$/i, check: (d) => mod11(d) },
499
+ LU: {
500
+ pattern: /^LU\d{8}$/i,
501
+ check: (d) => Number(d.slice(0, 6)) % 89 === Number(d.slice(6, 8)),
502
+ },
503
+ AT: { pattern: /^ATU\d{8}$/i },
504
+ DK: { pattern: /^DK\d{8}$/i },
505
+ FI: { pattern: /^FI\d{8}$/i },
506
+ SE: { pattern: /^SE\d{12}$/i },
507
+ IE: { pattern: /^IE(?:\d{7}[A-W]{1,2}|\d[A-Z+*]\d{5}[A-W])$/i },
508
+ PL: { pattern: /^PL\d{10}$/i },
509
+ CZ: { pattern: /^CZ\d{8,10}$/i },
510
+ SK: { pattern: /^SK\d{10}$/i },
511
+ GR: { pattern: /^(?:EL|GR)\d{9}$/i },
512
+ HU: { pattern: /^HU\d{8}$/i },
513
+ RO: { pattern: /^RO\d{2,10}$/i },
514
+ BG: { pattern: /^BG\d{9,10}$/i },
515
+ HR: { pattern: /^HR\d{11}$/i },
516
+ SI: { pattern: /^SI\d{8}$/i },
517
+ EE: { pattern: /^EE\d{9}$/i },
518
+ LV: { pattern: /^LV\d{11}$/i },
519
+ LT: { pattern: /^LT(?:\d{9}|\d{12})$/i },
520
+ MT: { pattern: /^MT\d{8}$/i },
521
+ CY: { pattern: /^CY\d{8}[A-Z]$/i },
522
+ GB: { pattern: /^GB(?:\d{9}|\d{12}|GD\d{3}|HA\d{3})$/i },
523
+ CH: {
524
+ pattern: /^CHE\d{9}(?:TVA|MWST|IVA)?$/i,
525
+ check: (d) => swissUidChecksum(d),
526
+ },
527
+ };
528
+ /** Countries `vat()` can check. */
529
+ export const SUPPORTED_VAT_COUNTRIES = Object.keys(VAT_RULES);
530
+ /** Plain mod-97 over a digit string. */
531
+ function mod97(digits) {
532
+ let remainder = 0;
533
+ for (const digit of digits) {
534
+ remainder = (remainder * 10 + (digit.charCodeAt(0) - 48)) % 97;
535
+ }
536
+ return 97 - remainder;
537
+ }
538
+ /** ISO 7064 mod-11 used by the Portuguese NIF. */
539
+ function mod11(digits) {
540
+ let sum = 0;
541
+ for (let i = 0; i < 8; i++) {
542
+ sum += (digits.charCodeAt(i) - 48) * (9 - i);
543
+ }
544
+ const check = 11 - (sum % 11);
545
+ const expected = check >= 10 ? 0 : check;
546
+ return expected === digits.charCodeAt(8) - 48;
547
+ }
548
+ /** German USt-IdNr. checksum (the "11-test" defined by the Bundeszentralamt). */
549
+ function germanChecksum(digits) {
550
+ let product = 10;
551
+ for (let i = 0; i < 8; i++) {
552
+ const digit = digits.charCodeAt(i) - 48;
553
+ let sum = (digit + product) % 10;
554
+ if (sum === 0)
555
+ sum = 10;
556
+ product = (2 * sum) % 11;
557
+ }
558
+ const check = 11 - product;
559
+ return (check === 10 ? 0 : check) === digits.charCodeAt(8) - 48;
560
+ }
561
+ /** Dutch BTW checksum: weighted 9..2 mod 11 over the first 8 digits. */
562
+ function dutchChecksum(digits) {
563
+ let sum = 0;
564
+ for (let i = 0; i < 8; i++) {
565
+ sum += (digits.charCodeAt(i) - 48) * (9 - i);
566
+ }
567
+ return sum % 11 === digits.charCodeAt(8) - 48;
568
+ }
569
+ /** Italian partita IVA: Luhn over 11 digits. */
570
+ function luhnLike(digits) {
571
+ let sum = 0;
572
+ for (let i = 0; i < 11; i++) {
573
+ let digit = digits.charCodeAt(i) - 48;
574
+ if (i % 2 === 1) {
575
+ digit *= 2;
576
+ if (digit > 9)
577
+ digit -= 9;
578
+ }
579
+ sum += digit;
580
+ }
581
+ return sum % 10 === 0;
582
+ }
583
+ /** Swiss UID (CHE): weights 5,4,3,2,7,6,5,4 mod 11. */
584
+ function swissUidChecksum(digits) {
585
+ const weights = [5, 4, 3, 2, 7, 6, 5, 4];
586
+ let sum = 0;
587
+ for (let i = 0; i < 8; i++) {
588
+ sum += (digits.charCodeAt(i) - 48) * weights[i];
589
+ }
590
+ const remainder = sum % 11;
591
+ if (remainder === 10)
592
+ return false;
593
+ const check = remainder === 0 ? 0 : 11 - remainder;
594
+ return check === digits.charCodeAt(8) - 48;
595
+ }
596
+ /**
597
+ * Validate a VAT number for one country. Returns `null` when the country has no
598
+ * rule, so the caller can fail LOUDLY instead of accepting the value.
599
+ */
600
+ export function isVat(value, countryCode) {
601
+ const rule = VAT_RULES[countryCode.toUpperCase()];
602
+ if (rule === undefined)
603
+ return null;
604
+ const normalized = value.replace(/[\s.-]/g, "").toUpperCase();
605
+ if (!rule.pattern.test(normalized))
606
+ return false;
607
+ if (!rule.check)
608
+ return true;
609
+ const digits = normalized.replace(/[^0-9]/g, "");
610
+ return rule.check(digits);
611
+ }
612
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"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"}