@zipbul/baker 2.2.0 → 3.0.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 (87) hide show
  1. package/CHANGELOG.md +256 -0
  2. package/MIGRATION-3.0.md +104 -0
  3. package/README.md +109 -63
  4. package/dist/index.d.ts +7 -6
  5. package/dist/index.js +10 -321
  6. package/dist/src/collect.d.ts +13 -10
  7. package/dist/src/collect.js +26 -0
  8. package/dist/src/configure.d.ts +8 -6
  9. package/dist/src/configure.js +43 -0
  10. package/dist/src/create-rule.js +41 -0
  11. package/dist/src/decorators/field.d.ts +22 -18
  12. package/dist/src/decorators/field.js +268 -0
  13. package/dist/src/decorators/index.d.ts +1 -0
  14. package/dist/src/decorators/index.js +2 -2
  15. package/dist/src/decorators/recipe.d.ts +17 -0
  16. package/dist/src/decorators/recipe.js +23 -0
  17. package/dist/src/errors.d.ts +27 -17
  18. package/dist/src/errors.js +52 -0
  19. package/dist/src/functions/check-call-options.d.ts +8 -0
  20. package/dist/src/functions/check-call-options.js +51 -0
  21. package/dist/src/functions/deserialize.d.ts +13 -6
  22. package/dist/src/functions/deserialize.js +57 -0
  23. package/dist/src/functions/serialize.d.ts +10 -4
  24. package/dist/src/functions/serialize.js +52 -0
  25. package/dist/src/functions/validate.d.ts +13 -10
  26. package/dist/src/functions/validate.js +49 -0
  27. package/dist/src/interfaces.d.ts +1 -1
  28. package/dist/src/interfaces.js +4 -0
  29. package/dist/src/meta-access.d.ts +19 -0
  30. package/dist/src/meta-access.js +75 -0
  31. package/dist/src/registry.js +8 -0
  32. package/dist/src/rule-metadata.d.ts +11 -0
  33. package/dist/src/rule-metadata.js +17 -0
  34. package/dist/src/rule-plan.d.ts +10 -11
  35. package/dist/src/rule-plan.js +117 -0
  36. package/dist/src/rules/array.d.ts +7 -6
  37. package/dist/src/rules/array.js +96 -0
  38. package/dist/src/rules/common.js +77 -0
  39. package/dist/src/rules/date.js +35 -0
  40. package/dist/src/rules/index.d.ts +2 -4
  41. package/dist/src/rules/index.js +8 -21
  42. package/dist/src/rules/locales.d.ts +5 -4
  43. package/dist/src/rules/locales.js +249 -0
  44. package/dist/src/rules/number.js +79 -0
  45. package/dist/src/rules/object.d.ts +1 -1
  46. package/dist/src/rules/object.js +49 -0
  47. package/dist/src/rules/string.d.ts +83 -80
  48. package/dist/src/rules/string.js +1998 -0
  49. package/dist/src/rules/typechecker.js +143 -0
  50. package/dist/src/seal/circular-analyzer.js +63 -0
  51. package/dist/src/seal/codegen-utils.js +18 -0
  52. package/dist/src/seal/deserialize-builder.d.ts +8 -4
  53. package/dist/src/seal/deserialize-builder.js +1546 -0
  54. package/dist/src/seal/expose-validator.d.ts +3 -2
  55. package/dist/src/seal/expose-validator.js +65 -0
  56. package/dist/src/seal/seal-state.d.ts +10 -0
  57. package/dist/src/seal/seal-state.js +18 -0
  58. package/dist/src/seal/seal.d.ts +22 -21
  59. package/dist/src/seal/seal.js +431 -0
  60. package/dist/src/seal/serialize-builder.d.ts +3 -2
  61. package/dist/src/seal/serialize-builder.js +374 -0
  62. package/dist/src/seal/validate-meta.d.ts +13 -0
  63. package/dist/src/seal/validate-meta.js +61 -0
  64. package/dist/src/symbols.d.ts +1 -1
  65. package/dist/src/symbols.js +13 -2
  66. package/dist/src/transformers/collection.transformer.js +25 -0
  67. package/dist/src/transformers/date.transformer.js +18 -0
  68. package/dist/src/transformers/index.js +6 -2
  69. package/dist/src/transformers/luxon.transformer.d.ts +4 -2
  70. package/dist/src/transformers/luxon.transformer.js +34 -0
  71. package/dist/src/transformers/moment.transformer.d.ts +4 -2
  72. package/dist/src/transformers/moment.transformer.js +32 -0
  73. package/dist/src/transformers/number.transformer.js +8 -0
  74. package/dist/src/transformers/string.transformer.js +12 -0
  75. package/dist/src/types.d.ts +27 -25
  76. package/dist/src/types.js +1 -0
  77. package/dist/src/utils.d.ts +2 -2
  78. package/dist/src/utils.js +10 -0
  79. package/package.json +80 -67
  80. package/dist/index-03cysbck.js +0 -3
  81. package/dist/index-dcbd798a.js +0 -3
  82. package/dist/index-jp2yjd6g.js +0 -3
  83. package/dist/index-mw7met6r.js +0 -3
  84. package/dist/index-xdn55cz3.js +0 -1
  85. package/dist/src/functions/_run-sealed.d.ts +0 -7
  86. package/dist/src/functions/index.d.ts +0 -3
  87. package/dist/src/seal/index.d.ts +0 -5
@@ -0,0 +1,77 @@
1
+ import { makeRule } from '../rule-plan.js';
2
+ // ─────────────────────────────────────────────────────────────────────────────
3
+ // equals — strict equality (===). comparison value passed via refs (§4.8 C)
4
+ // ─────────────────────────────────────────────────────────────────────────────
5
+ export function equals(comparison) {
6
+ return makeRule({
7
+ name: 'equals',
8
+ constraints: { value: comparison },
9
+ validate: value => value === comparison,
10
+ emit: (varName, ctx) => {
11
+ const i = ctx.addRef(comparison);
12
+ return `if (${varName} !== refs[${i}]) ${ctx.fail('equals')};`;
13
+ },
14
+ });
15
+ }
16
+ // ─────────────────────────────────────────────────────────────────────────────
17
+ // notEquals — strict inequality (!==). comparison value passed via refs
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ export function notEquals(comparison) {
20
+ return makeRule({
21
+ name: 'notEquals',
22
+ constraints: { value: comparison },
23
+ validate: value => value !== comparison,
24
+ emit: (varName, ctx) => {
25
+ const i = ctx.addRef(comparison);
26
+ return `if (${varName} === refs[${i}]) ${ctx.fail('notEquals')};`;
27
+ },
28
+ });
29
+ }
30
+ // ─────────────────────────────────────────────────────────────────────────────
31
+ // isEmpty — only undefined | null | '' are treated as empty (§4.8 A)
32
+ // ─────────────────────────────────────────────────────────────────────────────
33
+ export const isEmpty = makeRule({
34
+ name: 'isEmpty',
35
+ constraints: {},
36
+ validate: value => value === undefined || value === null || value === '',
37
+ emit: (varName, ctx) => `if (${varName} !== undefined && ${varName} !== null && ${varName} !== '') ${ctx.fail('isEmpty')};`,
38
+ });
39
+ // ─────────────────────────────────────────────────────────────────────────────
40
+ // isNotEmpty — any value other than undefined | null | '' (§4.8 A)
41
+ // ─────────────────────────────────────────────────────────────────────────────
42
+ export const isNotEmpty = makeRule({
43
+ name: 'isNotEmpty',
44
+ constraints: {},
45
+ validate: value => value !== undefined && value !== null && value !== '',
46
+ emit: (varName, ctx) => `if (${varName} === undefined || ${varName} === null || ${varName} === '') ${ctx.fail('isNotEmpty')};`,
47
+ });
48
+ // ─────────────────────────────────────────────────────────────────────────────
49
+ // isIn — checks inclusion in array. O(1) lookup via Set (§4.8 C)
50
+ // ─────────────────────────────────────────────────────────────────────────────
51
+ export function isIn(array) {
52
+ const set = new Set(array);
53
+ return makeRule({
54
+ name: 'isIn',
55
+ constraints: { values: array },
56
+ validate: value => set.has(value),
57
+ emit: (varName, ctx) => {
58
+ const i = ctx.addRef(set);
59
+ return `if (!refs[${i}].has(${varName})) ${ctx.fail('isIn')};`;
60
+ },
61
+ });
62
+ }
63
+ // ─────────────────────────────────────────────────────────────────────────────
64
+ // isNotIn — checks exclusion from array. O(1) lookup via Set (§4.8 C)
65
+ // ─────────────────────────────────────────────────────────────────────────────
66
+ export function isNotIn(array) {
67
+ const set = new Set(array);
68
+ return makeRule({
69
+ name: 'isNotIn',
70
+ constraints: { values: array },
71
+ validate: value => !set.has(value),
72
+ emit: (varName, ctx) => {
73
+ const i = ctx.addRef(set);
74
+ return `if (refs[${i}].has(${varName})) ${ctx.fail('isNotIn')};`;
75
+ },
76
+ });
77
+ }
@@ -0,0 +1,35 @@
1
+ import { makePlannedRule, planCompare, planLiteral, planOr, planTime } from '../rule-plan.js';
2
+ // ─────────────────────────────────────────────────────────────────────────────
3
+ // minDate — v >= date (inclusive, getTime comparison). (§4.8 C — refs function call)
4
+ // ─────────────────────────────────────────────────────────────────────────────
5
+ export function minDate(date) {
6
+ const timestamp = date.getTime();
7
+ const plan = {
8
+ cacheKey: 'time',
9
+ failure: planOr(planCompare(planTime(), '!==', planTime()), planCompare(planTime(), '<', planLiteral(timestamp))),
10
+ };
11
+ return makePlannedRule({
12
+ name: 'minDate',
13
+ requiresType: 'date',
14
+ constraints: { min: date.toISOString() },
15
+ plan,
16
+ validate: value => value instanceof Date && value.getTime() >= timestamp,
17
+ });
18
+ }
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ // maxDate — v <= date (inclusive, getTime comparison). (§4.8 C — refs function call)
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ export function maxDate(date) {
23
+ const timestamp = date.getTime();
24
+ const plan = {
25
+ cacheKey: 'time',
26
+ failure: planOr(planCompare(planTime(), '!==', planTime()), planCompare(planTime(), '>', planLiteral(timestamp))),
27
+ };
28
+ return makePlannedRule({
29
+ name: 'maxDate',
30
+ requiresType: 'date',
31
+ constraints: { max: date.toISOString() },
32
+ plan,
33
+ validate: value => value instanceof Date && value.getTime() <= timestamp,
34
+ });
35
+ }
@@ -3,11 +3,9 @@ export type { IsNumberOptions } from './typechecker';
3
3
  export { min, max, isPositive, isNegative, isDivisibleBy } from './number';
4
4
  export { minDate, maxDate } from './date';
5
5
  export { equals, notEquals, isEmpty, isNotEmpty, isIn, isNotIn } from './common';
6
- export { minLength, maxLength, length, contains, notContains, matches, isLowercase, isUppercase, isAscii, isAlpha, isAlphanumeric, isBooleanString, isNumberString, isDecimal, isFullWidth, isHalfWidth, isVariableWidth, isMultibyte, isSurrogatePair, isHexadecimal, isOctal, isEmail, isURL, isUUID, isIP, isHexColor, isRgbColor, isHSL, isMACAddress, isISBN, isISIN, isISO8601, isISRC, isISSN, isJWT, isLatLong, isLocale, isDataURI, isFQDN, isPort, isEAN, isISO31661Alpha2, isISO31661Alpha3, isBIC, isFirebasePushId, isSemVer, isMongoId, isJSON, isBase32, isBase58, isBase64, isDateString, isMimeType, isCurrency, isMagnetURI, isCreditCard, isIBAN, isByteLength, isHash, isRFC3339, isMilitaryTime, isLatitude, isLongitude, isEthereumAddress, isBtcAddress, isISO4217CurrencyCode, isPhoneNumber, isStrongPassword, isTaxId, isULID, isCUID2, } from './string';
6
+ export { minLength, maxLength, length, contains, notContains, matches, isLowercase, isUppercase, isAscii, isAlpha, isAlphanumeric, isHttpToken, isBooleanString, isNumberString, isDecimal, isFullWidth, isHalfWidth, isVariableWidth, isMultibyte, isSurrogatePair, isHexadecimal, isOctal, isEmail, isURL, isUUID, isIP, isHexColor, isRgbColor, isHSL, isMACAddress, isISBN, isISIN, isISO8601, isISRC, isISSN, isJWT, isLatLong, isLocale, isDataURI, isFQDN, isPort, isEAN, isISO31661Alpha2, isISO31661Alpha3, isBIC, isFirebasePushId, isSemVer, isMongoId, isJSON, isBase32, isBase58, isBase64, isDateString, isMimeType, isCurrency, isMagnetURI, isCreditCard, isIBAN, isByteLength, isHash, isRFC3339, isMilitaryTime, isLatitude, isLongitude, isEthereumAddress, isBtcAddress, isISO4217CurrencyCode, isPhoneNumber, isStrongPassword, isTaxId, isULID, isCUID2, } from './string';
7
7
  export type { IsURLOptions, IsBase64Options, IsMACAddressOptions, IsIBANOptions, IsISSNOptions, IsFQDNOptions, IsISO8601Options, IsNumberStringOptions, IsStrongPasswordOptions, } from './string';
8
- export { arrayContains, arrayNotContains, arrayMinSize, arrayMaxSize, arrayUnique, arrayNotEmpty, } from './array';
8
+ export { arrayContains, arrayNotContains, arrayMinSize, arrayMaxSize, arrayUnique, arrayNotEmpty } from './array';
9
9
  export { isNotEmptyObject, isInstance } from './object';
10
10
  export type { IsNotEmptyObjectOptions } from './object';
11
11
  export { isMobilePhone, isPostalCode, isIdentityCard, isPassportNumber } from './locales';
12
- export { arrayOf } from '../decorators/field';
13
- export type { ArrayOfMarker } from '../decorators/field';
@@ -1,21 +1,8 @@
1
- // @bun
2
- import{a as Y,b as y,c as B,d as G,e as h,f as M,g as F,h as $}from"../../index-dcbd798a.js";import{m as Ez}from"../../index-03cysbck.js";import"../../index-jp2yjd6g.js";import"../../index-mw7met6r.js";var U6=$({name:"isString",constraints:{},validate:(j)=>typeof j==="string",emit:(j,z)=>`if (typeof ${j} !== 'string') ${z.fail("isString")};`});function D6(j){let z=j?.allowNaN??!1,Q=j?.allowInfinity??!1,b=j?.maxDecimalPlaces,f=(Z)=>{if(typeof Z!=="number")return!1;if(isNaN(Z))return z;if(!isFinite(Z))return Q;if(b!==void 0){let q=Z.toExponential().split("e"),J=(q[0].split(".")[1]||"").length,W=parseInt(q[1],10);if(Math.max(0,J-W)>b)return!1}return!0};return $({name:"isNumber",constraints:{allowNaN:j?.allowNaN,allowInfinity:j?.allowInfinity,maxDecimalPlaces:j?.maxDecimalPlaces},validate:f,emit:(Z,q)=>{if(q.insideTypeGate){let W="";if(!Q)W+=`if (${Z} === Infinity || ${Z} === -Infinity) ${q.fail("isNumber")};`;if(b!==void 0)W+=`${W?`
3
- else `:""}{ var _exp=${Z}.toExponential().split('e'); var _mant=(_exp[0].split('.')[1]||'').length; var _exp2=parseInt(_exp[1],10); if(Math.max(0,_mant-_exp2)>${b}) ${q.fail("isNumber")}; }`;return W}let J=`if (typeof ${Z} !== 'number') ${q.fail("isNumber")};`;if(!z)J+=`
4
- else if (isNaN(${Z})) ${q.fail("isNumber")};`;if(!Q)J+=`
5
- else if (${Z} === Infinity || ${Z} === -Infinity) ${q.fail("isNumber")};`;if(b!==void 0)J+=`
6
- else { var _exp=${Z}.toExponential().split('e'); var _mant=(_exp[0].split('.')[1]||'').length; var _exp2=parseInt(_exp[1],10); if(Math.max(0,_mant-_exp2)>${b}) ${q.fail("isNumber")}; }`;return J}})}var H6=$({name:"isBoolean",constraints:{},validate:(j)=>typeof j==="boolean",emit:(j,z)=>`if (typeof ${j} !== 'boolean') ${z.fail("isBoolean")};`}),O6=$({name:"isDate",constraints:{},validate:(j)=>j instanceof Date&&!isNaN(j.getTime()),emit:(j,z)=>`if (!(${j} instanceof Date) || isNaN(${j}.getTime())) ${z.fail("isDate")};`});function P6(j){let z=Object.values(j);return $({name:"isEnum",constraints:{values:z},validate:(Q)=>z.indexOf(Q)!==-1,emit:(Q,b)=>{return`if (_refs[${b.addRef(z)}].indexOf(${Q}) === -1) ${b.fail("isEnum")};`}})}var C6=$({name:"isInt",requiresType:"number",constraints:{},validate:(j)=>typeof j==="number"&&Number.isInteger(j),emit:(j,z)=>z.insideTypeGate?`if (!Number.isInteger(${j})) ${z.fail("isInt")};`:`if (typeof ${j} !== 'number' || !Number.isInteger(${j})) ${z.fail("isInt")};`}),A6=$({name:"isArray",constraints:{},validate:(j)=>Array.isArray(j),emit:(j,z)=>`if (!Array.isArray(${j})) ${z.fail("isArray")};`}),I6=$({name:"isObject",constraints:{},validate:(j)=>typeof j==="object"&&j!==null&&!Array.isArray(j),emit:(j,z)=>`if (typeof ${j} !== 'object' || ${j} === null || Array.isArray(${j})) ${z.fail("isObject")};`});function g6(j,z){if(!Number.isFinite(j))throw Error(`min: bound must be a finite number, got ${j}`);let Q=z?.exclusive??!1,b={failure:M(h(Y(),"!==",Y()),h(Y(),Q?"<=":"<",G(j)))};return F({name:"min",requiresType:"number",constraints:Q?{min:j,exclusive:!0}:{min:j},plan:b,validate:Q?(f)=>typeof f==="number"&&!isNaN(f)&&f>j:(f)=>typeof f==="number"&&!isNaN(f)&&f>=j})}function T6(j,z){if(!Number.isFinite(j))throw Error(`max: bound must be a finite number, got ${j}`);let Q=z?.exclusive??!1,b={failure:M(h(Y(),"!==",Y()),h(Y(),Q?">=":">",G(j)))};return F({name:"max",requiresType:"number",constraints:Q?{max:j,exclusive:!0}:{max:j},plan:b,validate:Q?(f)=>typeof f==="number"&&!isNaN(f)&&f<j:(f)=>typeof f==="number"&&!isNaN(f)&&f<=j})}var L6=F({name:"isPositive",requiresType:"number",constraints:{min:0,exclusive:!0},plan:{failure:M(h(Y(),"!==",Y()),h(Y(),"<=",G(0)))},validate:(j)=>typeof j==="number"&&!isNaN(j)&&j>0}),S6=F({name:"isNegative",requiresType:"number",constraints:{max:0,exclusive:!0},plan:{failure:M(h(Y(),"!==",Y()),h(Y(),">=",G(0)))},validate:(j)=>typeof j==="number"&&!isNaN(j)&&j<0});function k6(j){if(j===0)throw Error("isDivisibleBy: divisor must not be zero");return $({name:"isDivisibleBy",requiresType:"number",constraints:{divisor:j},validate:(z)=>typeof z==="number"&&!isNaN(z)&&z%j===0,emit:(z,Q)=>`if (${z} % ${j} !== 0) ${Q.fail("isDivisibleBy")};`})}function d6(j){let z=j.getTime(),Q={cacheKey:"time",failure:M(h(B(),"!==",B()),h(B(),"<",G(z)))};return F({name:"minDate",requiresType:"date",constraints:{min:j.toISOString()},plan:Q,validate:(b)=>b instanceof Date&&b.getTime()>=z})}function s6(j){let z=j.getTime(),Q={cacheKey:"time",failure:M(h(B(),"!==",B()),h(B(),">",G(z)))};return F({name:"maxDate",requiresType:"date",constraints:{max:j.toISOString()},plan:Q,validate:(b)=>b instanceof Date&&b.getTime()<=z})}function _6(j){return $({name:"equals",constraints:{value:j},validate:(z)=>z===j,emit:(z,Q)=>{let b=Q.addRef(j);return`if (${z} !== _refs[${b}]) ${Q.fail("equals")};`}})}function E6(j){return $({name:"notEquals",constraints:{value:j},validate:(z)=>z!==j,emit:(z,Q)=>{let b=Q.addRef(j);return`if (${z} === _refs[${b}]) ${Q.fail("notEquals")};`}})}var p6=$({name:"isEmpty",constraints:{},validate:(j)=>j===void 0||j===null||j==="",emit:(j,z)=>`if (${j} !== undefined && ${j} !== null && ${j} !== '') ${z.fail("isEmpty")};`}),o6=$({name:"isNotEmpty",constraints:{},validate:(j)=>j!==void 0&&j!==null&&j!=="",emit:(j,z)=>`if (${j} === undefined || ${j} === null || ${j} === '') ${z.fail("isNotEmpty")};`});function i6(j){let z=new Set(j);return $({name:"isIn",constraints:{values:j},validate:(Q)=>z.has(Q),emit:(Q,b)=>{return`if (!_refs[${b.addRef(z)}].has(${Q})) ${b.fail("isIn")};`}})}function R6(j){let z=new Set(j);return $({name:"isNotIn",constraints:{values:j},validate:(Q)=>!z.has(Q),emit:(Q,b)=>{return`if (_refs[${b.addRef(z)}].has(${Q})) ${b.fail("isNotIn")};`}})}function K(j,z,Q,b="string",f={}){return $({name:j,requiresType:b,constraints:f,validate:(Z)=>typeof Z==="string"&&z(Z),emit:Q})}function N6(j){let z={cacheKey:"length",failure:h(y(),"<",j)};return F({name:"minLength",requiresType:"string",constraints:{min:j},plan:z,validate:(Q)=>typeof Q==="string"&&Q.length>=j})}function n6(j){let z={cacheKey:"length",failure:h(y(),">",j)};return F({name:"maxLength",requiresType:"string",constraints:{max:j},plan:z,validate:(Q)=>typeof Q==="string"&&Q.length<=j})}function x6(j,z){let Q={cacheKey:"length",failure:M(h(y(),"<",j),h(y(),">",z))};return F({name:"length",requiresType:"string",constraints:{min:j,max:z},plan:Q,validate:(b)=>typeof b==="string"&&b.length>=j&&b.length<=z})}function u6(j){return $({name:"contains",requiresType:"string",constraints:{seed:j},validate:(z)=>typeof z==="string"&&z.includes(j),emit:(z,Q)=>{let b=Q.addRef(j);return`if (${z}.indexOf(_refs[${b}]) === -1) ${Q.fail("contains")};`}})}function r6(j){return $({name:"notContains",requiresType:"string",constraints:{seed:j},validate:(z)=>typeof z==="string"&&!z.includes(j),emit:(z,Q)=>{let b=Q.addRef(j);return`if (${z}.indexOf(_refs[${b}]) !== -1) ${Q.fail("notContains")};`}})}function c6(j,z){let Q=j instanceof RegExp?j:new RegExp(j,z);return $({name:"matches",requiresType:"string",constraints:{pattern:Q.source},validate:(b)=>typeof b==="string"&&Q.test(b),emit:(b,f)=>{return`if (!_re[${f.addRegex(Q)}].test(${b})) ${f.fail("matches")};`}})}var m6=$({name:"isLowercase",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&j===j.toLowerCase(),emit:(j,z)=>`if (${j} !== ${j}.toLowerCase()) ${z.fail("isLowercase")};`}),t6=$({name:"isUppercase",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&j===j.toUpperCase(),emit:(j,z)=>`if (${j} !== ${j}.toUpperCase()) ${z.fail("isUppercase")};`}),A=/^[\x00-\x7F]*$/,l6=K("isAscii",(j)=>A.test(j),(j,z)=>{return`if (!_re[${z.addRegex(A)}].test(${j})) ${z.fail("isAscii")};`}),I=/^[a-zA-Z]+$/,v6=K("isAlpha",(j)=>j.length>0&&I.test(j),(j,z)=>{return`if (!_re[${z.addRegex(I)}].test(${j})) ${z.fail("isAlpha")};`}),g=/^[a-zA-Z0-9]+$/,e6=K("isAlphanumeric",(j)=>j.length>0&&g.test(j),(j,z)=>{return`if (!_re[${z.addRegex(g)}].test(${j})) ${z.fail("isAlphanumeric")};`}),a6=$({name:"isBooleanString",requiresType:"string",constraints:{},validate:(j)=>j==="true"||j==="false"||j==="1"||j==="0",emit:(j,z)=>`if (${j} !== 'true' && ${j} !== 'false' && ${j} !== '1' && ${j} !== '0') ${z.fail("isBooleanString")};`}),T=/^[0-9]+$/;function jj(j){let z=j?.no_symbols??!1;return K("isNumberString",z?(b)=>b.length>0&&T.test(b):(b)=>{if(b.length===0)return!1;let f=Number(b);return!isNaN(f)&&isFinite(f)},(b,f)=>{if(z){let Z=f.addRegex(T);return`if (${b}.length === 0 || !_re[${Z}].test(${b})) ${f.fail("isNumberString")};`}return`if (${b}.length === 0) ${f.fail("isNumberString")};
7
- else { var _ns=Number(${b}); if (isNaN(_ns) || !isFinite(_ns)) ${f.fail("isNumberString")}; }`},"string",{no_symbols:z})}function zj(){let j=/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)$/;return K("isDecimal",(z)=>j.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(j)}].test(${z})) ${Q.fail("isDecimal")};`})}var H=/[^\u0020-\u007E\uFF61-\uFF9F]/,Qj=K("isFullWidth",(j)=>j.length>0&&H.test(j),(j,z)=>{let Q=z.addRegex(H);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isFullWidth")};`}),O=/[\u0020-\u007E\uFF61-\uFF9F]/,bj=K("isHalfWidth",(j)=>j.length>0&&O.test(j),(j,z)=>{let Q=z.addRegex(O);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isHalfWidth")};`}),fj=K("isVariableWidth",(j)=>j.length>0&&H.test(j)&&O.test(j),(j,z)=>{let Q=z.addRegex(H),b=z.addRegex(O);return`if (${j}.length === 0 || !_re[${Q}].test(${j}) || !_re[${b}].test(${j})) ${z.fail("isVariableWidth")};`}),L=/[^\x00-\xFF]/,Zj=K("isMultibyte",(j)=>j.length>0&&L.test(j),(j,z)=>{let Q=z.addRegex(L);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isMultibyte")};`}),S=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,$j=K("isSurrogatePair",(j)=>j.length>0&&S.test(j),(j,z)=>{let Q=z.addRegex(S);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isSurrogatePair")};`}),k=/^[0-9a-fA-F]+$/,Jj=K("isHexadecimal",(j)=>k.test(j),(j,z)=>{return`if (!_re[${z.addRegex(k)}].test(${j})) ${z.fail("isHexadecimal")};`}),d=/^(0[oO])?[0-7]+$/,Kj=K("isOctal",(j)=>j.length>0&&d.test(j),(j,z)=>{let Q=z.addRegex(d);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isOctal")};`}),s=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$/;function Wj(){return K("isEmail",(j)=>s.test(j),(j,z)=>{return`if (!_re[${z.addRegex(s)}].test(${j})) ${z.fail("isEmail")};`},"string",{format:"email"})}var qj=["http","https","ftp"];function hj(j){let z=j?.protocols??qj,Q=z.map((f)=>f.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),b=new RegExp(`^(?:${Q}):\\/\\/(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)(?::(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3}|0))?(?:\\/[^\\s]*)?$`);return $({name:"isURL",requiresType:"string",constraints:{format:"uri",protocols:z},validate:(f)=>typeof f==="string"&&f.length>0&&b.test(f),emit:(f,Z)=>{return`if (!_re[${Z.addRegex(b)}].test(${f})) ${Z.fail("isURL")};`}})}var C={all:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,1:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-1[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,2:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-2[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,3:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-3[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,4:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,5:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-5[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/};function Xj(j){let z=j!=null?C[j]??C.all:C.all;return K("isUUID",(Q)=>z.test(Q),(Q,b)=>{return`if (!_re[${b.addRegex(z)}].test(${Q})) ${b.fail("isUUID")};`},"string",{format:"uuid",version:j})}var V=/^(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/,U=/^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}$|^(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}$|^(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}$|^[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}$|^::$|^::1$|^::(?:ffff(?::0{1,4})?:)?(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$|^(?:[0-9a-fA-F]{1,4}:){1,4}:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/;function wj(j){return $({name:"isIP",requiresType:"string",constraints:{version:j},validate:(z)=>{if(typeof z!=="string")return!1;if(j===4)return V.test(z);if(j===6)return U.test(z);return V.test(z)||U.test(z)},emit:(z,Q)=>{if(j===4)return`if (!_re[${Q.addRegex(V)}].test(${z})) ${Q.fail("isIP")};`;if(j===6)return`if (!_re[${Q.addRegex(U)}].test(${z})) ${Q.fail("isIP")};`;let b=Q.addRegex(V),f=Q.addRegex(U);return`if (!_re[${b}].test(${z}) && !_re[${f}].test(${z})) ${Q.fail("isIP")};`}})}var _=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Fj=K("isHexColor",(j)=>_.test(j),(j,z)=>{return`if (!_re[${z.addRegex(_)}].test(${j})) ${z.fail("isHexColor")};`}),E=/^rgb\(\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*\)$/,p=/^rgba\(\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(0|0?\.\d+|1(\.0+)?)\s*\)$/,o=/^rgba?\(\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%(?:\s*,\s*(0|0?\.\d+|1(?:\.0+)?))?\s*\)$/;function Yj(j=!1){return $({name:"isRgbColor",requiresType:"string",constraints:{includePercentValues:j},validate:(z)=>{if(typeof z!=="string")return!1;if(j)return o.test(z);return E.test(z)||p.test(z)},emit:(z,Q)=>{if(j)return`if (!_re[${Q.addRegex(o)}].test(${z})) ${Q.fail("isRgbColor")};`;let b=Q.addRegex(E),f=Q.addRegex(p);return`if (!_re[${b}].test(${z}) && !_re[${f}].test(${z})) ${Q.fail("isRgbColor")};`}})}var i=/^hsla?\(\s*(360|3[0-5]\d|[12]\d{2}|[1-9]\d|\d)\s*,\s*(100|[1-9]\d|\d)%\s*,\s*(100|[1-9]\d|\d)%(?:\s*,\s*(0|0?\.\d+|1(?:\.0+)?))?\s*\)$/,Mj=K("isHSL",(j)=>i.test(j),(j,z)=>{return`if (!_re[${z.addRegex(i)}].test(${j})) ${z.fail("isHSL")};`}),R=/^[0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}$/,N=/^[0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5}$/,n=/^[0-9a-fA-F]{12}$/;function yj(j){return $({name:"isMACAddress",requiresType:"string",constraints:{no_separators:j?.no_separators},validate:(z)=>{if(typeof z!=="string")return!1;if(j?.no_separators)return n.test(z);return R.test(z)||N.test(z)},emit:(z,Q)=>{if(j?.no_separators)return`if (!_re[${Q.addRegex(n)}].test(${z})) ${Q.fail("isMACAddress")};`;let b=Q.addRegex(R),f=Q.addRegex(N);return`if (!_re[${b}].test(${z}) && !_re[${f}].test(${z})) ${Q.fail("isMACAddress")};`}})}function x(j){let z=j.replace(/[-\s]/g,"");if(!/^\d{9}[\dX]$/.test(z))return!1;let Q=0;for(let f=0;f<9;f++)Q+=(10-f)*(z.charCodeAt(f)-48);let b=z[9]==="X"?10:z.charCodeAt(9)-48;return Q+=b,Q%11===0}function u(j){let z=j.replace(/[-\s]/g,"");if(!/^\d{13}$/.test(z))return!1;let Q=0;for(let f=0;f<12;f++)Q+=(z.charCodeAt(f)-48)*(f%2===0?1:3);return(10-Q%10)%10===z.charCodeAt(12)-48}function Gj(j){let z=(f)=>{if(typeof f!=="string")return!1;if(j===10)return x(f);if(j===13)return u(f);return x(f)||u(f)},Q=(f)=>`{var _s=${f}.replace(/[-\\s]/g,'');if(!/^\\d{9}[\\dX]$/.test(_s)){%%FAIL%%}else{var _sm=0;for(var _i=0;_i<9;_i++)_sm+=(10-_i)*(_s.charCodeAt(_i)-48);var _l=_s[9]==='X'?10:(_s.charCodeAt(9)-48);_sm+=_l;if(_sm%11!==0){%%FAIL%%}}}`,b=(f)=>`{var _s=${f}.replace(/[-\\s]/g,'');if(!/^\\d{13}$/.test(_s)){%%FAIL%%}else{var _sm=0;for(var _i=0;_i<12;_i++)_sm+=(_s.charCodeAt(_i)-48)*(_i%2===0?1:3);var _ck=(10-(_sm%10))%10;if(_ck!==(_s.charCodeAt(12)-48)){%%FAIL%%}}}`;return $({name:"isISBN",requiresType:"string",constraints:{version:j},validate:z,emit:(f,Z)=>{let q=Z.fail("isISBN");if(j===10)return Q(f).replace(/%%FAIL%%/g,q);if(j===13)return b(f).replace(/%%FAIL%%/g,q);let J=Q(f).replace(/%%FAIL%%/g,"__isbn_ok=false"),W=b(f).replace(/%%FAIL%%/g,"__isbn_ok=false");return`{var __isbn_ok=true;${J} if(!__isbn_ok){__isbn_ok=true;${W}} if(!__isbn_ok)${q};}`}})}var B6=/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/;function Bj(j){if(!B6.test(j))return!1;let z=j.split("").map((f)=>{let Z=f.charCodeAt(0);return Z>=65?String(Z-55):f}).join(""),Q=0,b=!1;for(let f=z.length-1;f>=0;f--){let Z=parseInt(z[f],10);if(b){if(Z*=2,Z>9)Z-=9}Q+=Z,b=!b}return Q%10===0}var Vj=K("isISIN",Bj,(j,z)=>{return`if (!_re[${z.addRegex(B6)}].test(${j})) ${z.fail("isISIN")};
8
- else { var _isExp=${j}.split('').map(function(c){var _cd=c.charCodeAt(0);return _cd>=65?String(_cd-55):c;}).join('');
9
- var _isSum=0,_isAlt=false;for(var _isI=_isExp.length-1;_isI>=0;_isI--){var _isN=parseInt(_isExp[_isI],10);if(_isAlt){_isN*=2;if(_isN>9)_isN-=9;}_isSum+=_isN;_isAlt=!_isAlt;}
10
- if(_isSum%10!==0)${z.fail("isISIN")}; }`}),D=/^\d{4}(?:-\d{2}(?:-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?)?)?$/;function Uj(j){if(!D.test(j))return!1;let z=j.match(/^(\d{4})-(\d{2})-(\d{2})/);if(!z)return!0;let Q=Number(z[2]),b=Number(z[3]);if(Q<1||Q>12)return!1;let f=new Date(Number(z[1]),Q,0).getDate();return b>=1&&b<=f}function Dj(j){if(j?.strict)return $({name:"isISO8601",requiresType:"string",constraints:{format:"date-time",strict:!0},validate:(Q)=>typeof Q==="string"&&Uj(Q),emit:(Q,b)=>{return`if (!_re[${b.addRegex(D)}].test(${Q})) ${b.fail("isISO8601")};
11
- else { var _dm=${Q}.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);if(_dm){var _mo=Number(_dm[2]),_da=Number(_dm[3]);if(_mo<1||_mo>12){${b.fail("isISO8601")}}else{var _md=new Date(Number(_dm[1]),_mo,0).getDate();if(_da<1||_da>_md)${b.fail("isISO8601")};}} }`}});return K("isISO8601",(z)=>D.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(D)}].test(${z})) ${Q.fail("isISO8601")};`},"string",{format:"date-time",strict:!1})}var r=/^[A-Z]{2}-[A-Z0-9]{3}-\d{2}-\d{5}$|^[A-Z]{2}[A-Z0-9]{3}\d{7}$/,Hj=K("isISRC",(j)=>r.test(j),(j,z)=>{return`if (!_re[${z.addRegex(r)}].test(${j})) ${z.fail("isISRC")};`});function Oj(j,z){let Q=z?.requireHyphen!==!1,b=Q?j:j.replace(/-/g,"");if(!(Q?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/).test(b))return!1;let Z=b.replace(/-/g,""),q=0;for(let W=0;W<7;W++)q+=(8-W)*(Z.charCodeAt(W)-48);let J=Z[7]==="X"?10:Z.charCodeAt(7)-48;return q+=J,q%11===0}function Pj(j){let z=j?.requireHyphen!==!1,Q=(f)=>typeof f==="string"&&Oj(f,j),b=z?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/;return $({name:"isISSN",requiresType:"string",constraints:{requireHyphen:j?.requireHyphen},validate:Q,emit:(f,Z)=>{let q=Z.addRegex(b);return`{var _is=${z?f:`${f}.replace(/-/g,'')`};if(!_re[${q}].test(_is)){${Z.fail("isISSN")}}else{var _id=_is.replace(/-/g,''),_iss=0;for(var _ii=0;_ii<7;_ii++)_iss+=(8-_ii)*(_id.charCodeAt(_ii)-48);var _il=_id[7]==='X'?10:(_id.charCodeAt(7)-48);_iss+=_il;if(_iss%11!==0)${Z.fail("isISSN")};}}`}})}var c=/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/,Cj=K("isJWT",(j)=>c.test(j),(j,z)=>{return`if (!_re[${z.addRegex(c)}].test(${j})) ${z.fail("isJWT")};`}),m=/^[-+]?([1-8]?\d(?:\.\d+)?|90(?:\.0+)?),\s*[-+]?(180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$/;function Aj(){return K("isLatLong",(j)=>m.test(j),(j,z)=>{return`if (!_re[${z.addRegex(m)}].test(${j})) ${z.fail("isLatLong")};`})}var t=/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?(?:-[a-zA-Z\d]{5,8})*$/,Ij=K("isLocale",(j)=>t.test(j),(j,z)=>{return`if (!_re[${z.addRegex(t)}].test(${j})) ${z.fail("isLocale")};`}),l=/^data:([a-zA-Z0-9!#$&\-^_]+\/[a-zA-Z0-9!#$&\-^_]+)(?:;[a-zA-Z0-9\-]+=[a-zA-Z0-9\-]+)*(?:;base64)?,[\s\S]*$/,gj=K("isDataURI",(j)=>l.test(j),(j,z)=>{return`if (!_re[${z.addRegex(l)}].test(${j})) ${z.fail("isDataURI")};`});function Tj(j){let z=j?.require_tld!==!1,Q=j?.allow_underscores??!1,b=j?.allow_trailing_dot??!1,f=Q?/^[a-zA-Z0-9_-]+$/:/^[a-zA-Z0-9-]+$/,Z=(q)=>{if(typeof q!=="string")return!1;let J=q;if(b&&J.endsWith("."))J=J.slice(0,-1);if(J.length===0)return!1;let W=J.split(".");if(z&&W.length<2)return!1;if(z){let X=W[W.length-1];if(!X||X.length<2||!/^[a-zA-Z]{2,}$/.test(X))return!1}return W.every((X)=>{if(X.length===0||X.length>63)return!1;if(!f.test(X))return!1;if(!Q&&(X.startsWith("-")||X.endsWith("-")))return!1;return!0})};return $({name:"isFQDN",requiresType:"string",constraints:{require_tld:j?.require_tld,allow_underscores:j?.allow_underscores,allow_trailing_dot:j?.allow_trailing_dot},validate:Z,emit:(q,J)=>{let W=J.addRegex(f),X=z?J.addRegex(/^[a-zA-Z]{2,}$/):-1,w=`{var _fq=${q};`;if(b)w+="if(_fq.endsWith('.'))_fq=_fq.slice(0,-1);";if(w+=`if(_fq.length===0)${J.fail("isFQDN")};`,w+="else{var _fp=_fq.split('.');",z)w+=`if(_fp.length<2)${J.fail("isFQDN")};`,w+="else{var _tld=_fp[_fp.length-1];",w+=`if(!_tld||_tld.length<2||!_re[${X}].test(_tld))${J.fail("isFQDN")};`,w+="else if(!_fp.every(function(p){";else w+="if(!_fp.every(function(p){";if(w+="if(p.length===0||p.length>63)return false;",w+=`if(!_re[${W}].test(p))return false;`,!Q)w+="if(p[0]==='-'||p[p.length-1]==='-')return false;";if(w+=`return true;}))${J.fail("isFQDN")};`,z)w+="}";return w+="}",w+="}",w}})}var v=/^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{1,3}|\d)$/,Lj=K("isPort",(j)=>v.test(j),(j,z)=>{return`if (!_re[${z.addRegex(v)}].test(${j})) ${z.fail("isPort")};`});function Sj(j){if(!/^\d{8}$/.test(j)&&!/^\d{13}$/.test(j))return!1;let z=j.split("").map(Number),Q=z.length,b=0;for(let Z=0;Z<Q-1;Z++)b+=z[Z]*(Q===8?Z%2===0?3:1:Z%2===0?1:3);return(10-b%10)%10===z[Q-1]}var kj=K("isEAN",Sj,(j,z)=>{let Q=z.addRegex(/^\d{8}$/),b=z.addRegex(/^\d{13}$/);return`{var _ev=${j};if(!_re[${Q}].test(_ev)&&!_re[${b}].test(_ev)){${z.fail("isEAN")}}else{var _el=_ev.length,_es=0;for(var _ei=0;_ei<_el-1;_ei++){var _ed=_ev.charCodeAt(_ei)-48;_es+=_ed*(_el===8?(_ei%2===0?3:1):(_ei%2===0?1:3));}var _ec=(10-(_es%10))%10;if(_ec!==(_ev.charCodeAt(_el-1)-48))${z.fail("isEAN")};}}`}),e=new Set(["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]),dj=$({name:"isISO31661Alpha2",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&e.has(j.toUpperCase()),emit:(j,z)=>{return`if (!_refs[${z.addRef(e)}].has(${j}.toUpperCase())) ${z.fail("isISO31661Alpha2")};`}}),a=new Set(["ABW","AFG","AGO","AIA","ALA","ALB","AND","ANT","ARE","ARG","ARM","ASM","ATA","ATF","ATG","AUS","AUT","AZE","BDI","BEL","BEN","BES","BFA","BGD","BGR","BHR","BHS","BIH","BLM","BLR","BLZ","BMU","BOL","BRA","BRB","BRN","BTN","BVT","BWA","CAF","CAN","CCK","CHE","CHL","CHN","CIV","CMR","COD","COG","COK","COL","COM","CPV","CRI","CUB","CUW","CXR","CYM","CYP","CZE","DEU","DJI","DMA","DNK","DOM","DZA","ECU","EGY","ERI","ESH","ESP","EST","ETH","FIN","FJI","FLK","FRA","FRO","FSM","GAB","GBR","GEO","GGY","GHA","GIB","GIN","GLP","GMB","GNB","GNQ","GRC","GRD","GRL","GTM","GUF","GUM","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN","IMN","IND","IOT","IRL","IRN","IRQ","ISL","ISR","ITA","JAM","JEY","JOR","JPN","KAZ","KEN","KGZ","KHM","KIR","KNA","KOR","KWT","LAO","LBN","LBR","LBY","LCA","LIE","LKA","LSO","LTU","LUX","LVA","MAC","MAF","MAR","MCO","MDA","MDG","MDV","MEX","MHL","MKD","MLI","MLT","MMR","MNE","MNG","MNP","MOZ","MRT","MSR","MTQ","MUS","MWI","MYS","MYT","NAM","NCL","NER","NFK","NGA","NIC","NIU","NLD","NOR","NPL","NRU","NZL","OMN","PAK","PAN","PCN","PER","PHL","PLW","PNG","POL","PRI","PRK","PRT","PRY","PSE","PYF","QAT","REU","ROU","RUS","RWA","SAU","SDN","SEN","SGP","SGS","SHN","SJM","SLB","SLE","SLV","SMR","SOM","SPM","SRB","SSD","STP","SUR","SVK","SVN","SWE","SWZ","SXM","SYC","SYR","TCA","TCD","TGO","THA","TJK","TKL","TKM","TLS","TON","TTO","TUN","TUR","TUV","TWN","TZA","UGA","UKR","UMI","URY","USA","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT","WLF","WSM","YEM","ZAF","ZMB","ZWE"]),sj=$({name:"isISO31661Alpha3",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&a.has(j.toUpperCase()),emit:(j,z)=>{return`if (!_refs[${z.addRef(a)}].has(${j}.toUpperCase())) ${z.fail("isISO31661Alpha3")};`}}),j6=/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/,_j=K("isBIC",(j)=>j6.test(j.toUpperCase()),(j,z)=>{return`if (!_re[${z.addRegex(j6)}].test(${j}.toUpperCase())) ${z.fail("isBIC")};`}),z6=/^[a-zA-Z0-9_-]{20}$/,Ej=K("isFirebasePushId",(j)=>z6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(z6)}].test(${j})) ${z.fail("isFirebasePushId")};`}),Q6=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,pj=K("isSemVer",(j)=>Q6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(Q6)}].test(${j})) ${z.fail("isSemVer")};`}),b6=/^[0-9a-fA-F]{24}$/,oj=K("isMongoId",(j)=>b6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(b6)}].test(${j})) ${z.fail("isMongoId")};`}),ij=(j)=>{if(typeof j!=="string")return!1;try{return JSON.parse(j),!0}catch{return!1}},Rj=$({name:"isJSON",requiresType:"string",constraints:{},validate:ij,emit:(j,z)=>`try { JSON.parse(${j}); } catch(_e) { ${z.fail("isJSON")}; }`}),Nj=/^[A-Z2-7]+=*$/i;function nj(){let j=Nj;return K("isBase32",(z)=>{if(z.length===0)return!1;if(z.length%8!==0)return!1;return j.test(z)},(z,Q)=>{let b=Q.addRegex(j);return`if (${z}.length === 0 || ${z}.length % 8 !== 0 || !_re[${b}].test(${z})) ${Q.fail("isBase32")};`})}var f6=/^[1-9A-HJ-NP-Za-km-z]+$/,xj=K("isBase58",(j)=>f6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(f6)}].test(${j})) ${z.fail("isBase58")};`}),uj=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/,rj=/^[A-Za-z0-9_-]+={0,2}$/;function cj(j){let z=j?.urlSafe?rj:uj;return K("isBase64",(Q)=>{if(Q.length===0)return!1;return z.test(Q)},(Q,b)=>{let f=b.addRegex(z);return`if (${Q}.length === 0 || !_re[${f}].test(${Q})) ${b.fail("isBase64")};`},"string",{urlSafe:j?.urlSafe})}var Z6=/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;function mj(){return K("isDateString",(j)=>Z6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(Z6)}].test(${j})) ${z.fail("isDateString")};`})}var $6=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-^_.+]*(?:;.+)?$/,tj=K("isMimeType",(j)=>$6.test(j),(j,z)=>{return`if (!_re[${z.addRegex($6)}].test(${j})) ${z.fail("isMimeType")};`}),J6=/^[-+]?(?:[,.\d]+)(?:[.,]\d{2})?$|^\$?-?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$/;function lj(){return K("isCurrency",(j)=>{if(j.length===0)return!1;return J6.test(j)},(j,z)=>{let Q=z.addRegex(J6);return`if (${j}.length === 0 || !_re[${Q}].test(${j})) ${z.fail("isCurrency")};`})}var K6=/^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}/i,vj=K("isMagnetURI",(j)=>K6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(K6)}].test(${j})) ${z.fail("isMagnetURI")};`});function ej(j){let z=j.replace(/[\s-]/g,"");if(z.length===0||!/^\d+$/.test(z))return!1;let Q=0,b=!1;for(let f=z.length-1;f>=0;f--){let Z=z.charCodeAt(f)-48;if(b){if(Z*=2,Z>9)Z-=9}Q+=Z,b=!b}return Q%10===0}var aj=$({name:"isCreditCard",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&ej(j),emit:(j,z)=>`{
12
- var _cs=${j}.replace(/[\\s-]/g,'');
13
- if(_cs.length===0||!/^\\d+$/.test(_cs)){${z.fail("isCreditCard")}}
14
- else{var _sum=0,_alt=false;
15
- for(var _ci=_cs.length-1;_ci>=0;_ci--){var _cn=_cs.charCodeAt(_ci)-48;if(_alt){_cn*=2;if(_cn>9)_cn-=9;}_sum+=_cn;_alt=!_alt;}
16
- if(_sum%10!==0)${z.fail("isCreditCard")};}
17
- }`}),V6={AD:24,AE:23,AL:28,AT:20,AZ:28,BA:20,BE:16,BG:22,BH:22,BR:29,CH:21,CR:22,CY:28,CZ:24,DE:22,DK:18,DO:28,EE:20,ES:24,FI:18,FO:18,FR:27,GB:22,GE:22,GI:23,GL:18,GR:27,GT:28,HR:21,HU:28,IE:22,IL:23,IS:26,IT:27,JO:30,KW:30,KZ:20,LB:28,LC:32,LI:21,LT:20,LU:20,LV:21,MC:27,MD:24,ME:22,MK:19,MR:27,MT:31,MU:30,NL:18,NO:15,PK:24,PL:28,PS:29,PT:25,QA:29,RO:24,RS:22,SA:24,SC:31,SE:24,SI:19,SK:24,SM:27,ST:25,SV:28,TL:23,TN:24,TR:26,UA:29,VA:22,VG:24,XK:20};function jz(j,z){let Q=z?.allowSpaces?j.replace(/\s/g,""):j;if(Q=Q.toUpperCase(),!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(Q))return!1;let b=Q.slice(0,2),f=V6[b];if(f!==void 0&&Q.length!==f)return!1;let q=(Q.slice(4)+Q.slice(0,4)).replace(/[A-Z]/g,(W)=>String(W.charCodeAt(0)-55)),J=0;for(let W=0;W<q.length;W+=7){let X=String(J)+q.slice(W,W+7);J=parseInt(X,10)%97}return J===1}function zz(j){let z=j?.allowSpaces??!1,Q=(b)=>typeof b==="string"&&jz(b,j);return $({name:"isIBAN",requiresType:"string",constraints:{allowSpaces:j?.allowSpaces},validate:Q,emit:(b,f)=>{let Z=f.addRegex(/^[A-Z]{2}\d{2}[A-Z0-9]+$/),q=f.addRef(V6),J="{";return J+=`var _ib=${z?`${b}.replace(/\\s/g,'')`:b}.toUpperCase();`,J+=`if(!_re[${Z}].test(_ib)){${f.fail("isIBAN")}}`,J+=`else{var _ic=_ib.slice(0,2),_il=_refs[${q}][_ic];`,J+=`if(_il!==undefined&&_ib.length!==_il){${f.fail("isIBAN")}}`,J+="else{var _ir=_ib.slice(4)+_ib.slice(0,4);",J+="var _in=_ir.replace(/[A-Z]/g,function(c){return String(c.charCodeAt(0)-55);});",J+="var _im=0;for(var _ii=0;_ii<_in.length;_ii+=7){_im=parseInt(String(_im)+_in.slice(_ii,_ii+7),10)%97;}",J+=`if(_im!==1)${f.fail("isIBAN")};}}}`,J}})}function Qz(j,z){return $({name:"isByteLength",requiresType:"string",constraints:{min:j,max:z},validate:(b)=>{if(typeof b!=="string")return!1;let f=Buffer.byteLength(b,"utf8");if(f<j)return!1;if(z!==void 0&&f>z)return!1;return!0},emit:(b,f)=>{let Z=`{var _bl=Buffer.byteLength(${b},'utf8');`;if(Z+=`if(_bl<${j})${f.fail("isByteLength")};`,z!==void 0)Z+=`else if(_bl>${z})${f.fail("isByteLength")};`;return Z+="}",Z}})}var bz={md5:/^[a-f0-9]{32}$/i,md4:/^[a-f0-9]{32}$/i,md2:/^[a-f0-9]{32}$/i,sha1:/^[a-f0-9]{40}$/i,sha256:/^[a-f0-9]{64}$/i,sha384:/^[a-f0-9]{96}$/i,sha512:/^[a-f0-9]{128}$/i,ripemd128:/^[a-f0-9]{32}$/i,ripemd160:/^[a-f0-9]{40}$/i,"tiger128,3":/^[a-f0-9]{32}$/i,"tiger128,4":/^[a-f0-9]{32}$/i,"tiger160,3":/^[a-f0-9]{40}$/i,"tiger160,4":/^[a-f0-9]{40}$/i,"tiger192,3":/^[a-f0-9]{48}$/i,"tiger192,4":/^[a-f0-9]{48}$/i,crc32:/^[a-f0-9]{8}$/i,crc32b:/^[a-f0-9]{8}$/i};function fz(j){let z=bz[j];return $({name:"isHash",requiresType:"string",constraints:{algorithm:j},validate:(Q)=>typeof Q==="string"&&!!z&&z.test(Q),emit:(Q,b)=>{if(!z)return b.fail("isHash")+";";return`if (!_re[${b.addRegex(z)}].test(${Q})) ${b.fail("isHash")};`}})}var W6=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/i,Zz=K("isRFC3339",(j)=>W6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(W6)}].test(${j})) ${z.fail("isRFC3339")};`}),q6=/^([01]\d|2[0-3]):[0-5]\d$/,$z=K("isMilitaryTime",(j)=>q6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(q6)}].test(${j})) ${z.fail("isMilitaryTime")};`});function Jz(j){if(typeof j==="number")return j>=-90&&j<=90;if(typeof j==="string"){let z=parseFloat(j);if(isNaN(z))return!1;if(String(z)!==j&&j!==String(z)){if(!/^-?\d+(\.\d+)?$/.test(j))return!1}return z>=-90&&z<=90}return!1}var Kz=$({name:"isLatitude",constraints:{},validate:Jz,emit:(j,z)=>{let Q=z.addRegex(/^-?\d+(\.\d+)?$/);return`if(typeof ${j}==='number'){if(${j}<-90||${j}>90)${z.fail("isLatitude")};}else if(typeof ${j}==='string'){var _lt=parseFloat(${j});if(isNaN(_lt)||!_re[${Q}].test(${j})||_lt<-90||_lt>90)${z.fail("isLatitude")};}else{${z.fail("isLatitude")};}`}});function Wz(j){if(typeof j==="number")return j>=-180&&j<=180;if(typeof j==="string"){let z=parseFloat(j);if(isNaN(z))return!1;if(!/^-?\d+(\.\d+)?$/.test(j))return!1;return z>=-180&&z<=180}return!1}var qz=$({name:"isLongitude",constraints:{},validate:Wz,emit:(j,z)=>{let Q=z.addRegex(/^-?\d+(\.\d+)?$/);return`if(typeof ${j}==='number'){if(${j}<-180||${j}>180)${z.fail("isLongitude")};}else if(typeof ${j}==='string'){var _ln=parseFloat(${j});if(isNaN(_ln)||!_re[${Q}].test(${j})||_ln<-180||_ln>180)${z.fail("isLongitude")};}else{${z.fail("isLongitude")};}`}}),h6=/^0x[0-9a-fA-F]{40}$/,hz=K("isEthereumAddress",(j)=>h6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(h6)}].test(${j})) ${z.fail("isEthereumAddress")};`}),X6=/^1[a-km-zA-HJ-NP-Z1-9]{25,34}$/,w6=/^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/,F6=/^(bc1)[a-z0-9]{6,87}$/,Xz=K("isBtcAddress",(j)=>X6.test(j)||w6.test(j)||F6.test(j),(j,z)=>{let Q=z.addRegex(X6),b=z.addRegex(w6),f=z.addRegex(F6);return`if (!_re[${Q}].test(${j}) && !_re[${b}].test(${j}) && !_re[${f}].test(${j})) ${z.fail("isBtcAddress")};`}),Y6=new Set(["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","YER","ZAR","ZMW","ZWL"]),wz=K("isISO4217CurrencyCode",(j)=>Y6.has(j),(j,z)=>{return`if (!_refs[${z.addRef(Y6)}].has(${j})) ${z.fail("isISO4217CurrencyCode")};`}),M6=/^\+[1-9]\d{6,14}$/,Fz=K("isPhoneNumber",(j)=>M6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(M6)}].test(${j})) ${z.fail("isPhoneNumber")};`});function Yz(j){let z=j?.minLength??8,Q=j?.minLowercase??1,b=j?.minUppercase??1,f=j?.minNumbers??1,Z=j?.minSymbols??1,q=(J)=>{if(J.length<z)return!1;if(Q>0){if((J.match(/[a-z]/g)||[]).length<Q)return!1}if(b>0){if((J.match(/[A-Z]/g)||[]).length<b)return!1}if(f>0){if((J.match(/[0-9]/g)||[]).length<f)return!1}if(Z>0){if((J.match(/[^a-zA-Z0-9]/g)||[]).length<Z)return!1}return!0};return $({name:"isStrongPassword",requiresType:"string",constraints:{},validate:(J)=>typeof J==="string"&&q(J),emit:(J,W)=>{let X="";if(X+=`if(${J}.length<${z})${W.fail("isStrongPassword")};`,Q>0)X+=`
18
- else if((${J}.match(/[a-z]/g)||[]).length<${Q})${W.fail("isStrongPassword")};`;if(b>0)X+=`
19
- else if((${J}.match(/[A-Z]/g)||[]).length<${b})${W.fail("isStrongPassword")};`;if(f>0)X+=`
20
- else if((${J}.match(/[0-9]/g)||[]).length<${f})${W.fail("isStrongPassword")};`;if(Z>0)X+=`
21
- else if((${J}.match(/[^a-zA-Z0-9]/g)||[]).length<${Z})${W.fail("isStrongPassword")};`;return X}})}var Mz={US:/^\d{2}-\d{7}$/,KR:/^\d{3}-\d{2}-\d{5}$/,DE:/^\d{11}$/,FR:/^[0-9]{13}$/,GB:/^\d{10}$/,IT:/^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i,ES:/^[0-9A-Z]\d{7}[0-9A-Z]$/i,AU:/^\d{11}$/,CA:/^\d{9}$/,IN:/^[A-Z]{5}\d{4}[A-Z]$/i};function yz(j){let z=Mz[j];return $({name:"isTaxId",requiresType:"string",constraints:{locale:j},validate:(Q)=>typeof Q==="string"&&!!z&&z.test(Q),emit:(Q,b)=>{if(!z)return b.fail("isTaxId")+";";return`if (!_re[${b.addRegex(z)}].test(${Q})) ${b.fail("isTaxId")};`}})}var y6=/^[0-9A-HJKMNP-TV-Z]{26}$/;function Gz(){return K("isULID",(j)=>y6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(y6)}].test(${j})) ${z.fail("isULID")};`},"string",{format:"ulid"})}var G6=/^[a-z][0-9a-z]{23,}$/;function Bz(){return K("isCUID2",(j)=>G6.test(j),(j,z)=>{return`if (!_re[${z.addRegex(G6)}].test(${j})) ${z.fail("isCUID2")};`},"string",{format:"cuid2"})}function Vz(j){return $({name:"arrayContains",requiresType:"array",constraints:{values:j},validate:(z)=>Array.isArray(z)&&j.every((Q)=>z.indexOf(Q)!==-1),emit:(z,Q)=>{return`if (!_refs[${Q.addRef(j)}].every(function(v){return ${z}.indexOf(v)!==-1;})) ${Q.fail("arrayContains")};`}})}function Uz(j){return $({name:"arrayNotContains",requiresType:"array",constraints:{values:j},validate:(z)=>Array.isArray(z)&&j.every((Q)=>!z.includes(Q)),emit:(z,Q)=>{return`if (_refs[${Q.addRef(j)}].some(function(v){return ${z}.indexOf(v)!==-1;})) ${Q.fail("arrayNotContains")};`}})}function Dz(j){let z={cacheKey:"length",failure:h(y(),"<",j)};return F({name:"arrayMinSize",requiresType:"array",constraints:{min:j},plan:z,validate:(Q)=>Array.isArray(Q)&&Q.length>=j})}function Hz(j){let z={cacheKey:"length",failure:h(y(),">",j)};return F({name:"arrayMaxSize",requiresType:"array",constraints:{max:j},plan:z,validate:(Q)=>Array.isArray(Q)&&Q.length<=j})}function Oz(j){return $({name:"arrayUnique",requiresType:"array",constraints:{},validate:(z)=>{if(!Array.isArray(z))return!1;if(j){let Q=z.map(j);return new Set(Q).size===Q.length}return new Set(z).size===z.length},emit:(z,Q)=>{if(j){let b=Q.addRef(j);return`{var _keys=${z}.map(_refs[${b}]);if(new Set(_keys).size!==_keys.length)${Q.fail("arrayUnique")};}`}return`if(new Set(${z}).size!==${z}.length)${Q.fail("arrayUnique")};`}})}var Pz={cacheKey:"length",failure:h(y(),"===",0)},Cz=F({name:"arrayNotEmpty",requiresType:"array",constraints:{},plan:Pz,validate:(j)=>Array.isArray(j)&&j.length>0});function Az(j){let z=(Q)=>{if(Q===null||typeof Q!=="object"||Array.isArray(Q))return!1;let b=Object.keys(Q);if(j?.nullable)return b.some((f)=>Q[f]!=null);return b.length>0};return $({name:"isNotEmptyObject",requiresType:"object",constraints:{nullable:j?.nullable},validate:z,emit:(Q,b)=>{if(j?.nullable)return`if (!Object.keys(${Q}).some(function(_k){return ${Q}[_k]!=null;})) ${b.fail("isNotEmptyObject")};`;return`if (Object.keys(${Q}).length === 0) ${b.fail("isNotEmptyObject")};`}})}function Iz(j){return $({name:"isInstance",constraints:{type:j.name},validate:(z)=>z instanceof j,emit:(z,Q)=>{let b=Q.addRef(j);return`if (!(${z} instanceof _refs[${b}])) ${Q.fail("isInstance")};`}})}var gz={"ko-KR":/^(\+?82|0)1[016789]\d{7,8}$/,"en-US":/^\+?1?[2-9]\d{2}[2-9]\d{6}$/,"zh-CN":/^(\+?86)?1[3-9]\d{9}$/,"zh-TW":/^(\+?886)?9\d{8}$/,"ja-JP":/^(\+?81)?0?[789]0[0-9]{8}$/,"de-DE":/^(\+?49)?1(5\d|6[0-9]|7[0-9])\d{8}$/,"fr-FR":/^(\+?33)?[67]\d{8}$/,"en-GB":/^(\+?44)?7[1-9]\d{8}$/,"ru-RU":/^(\+?7)?9\d{9}$/,"pt-BR":/^(\+?55)?[1-9]{2}9?\d{8}$/,"in-IN":/^(\+?91)?[6-9]\d{9}$/,"ar-SA":/^(\+?966)?5\d{8}$/,"ar-EG":/^(\+?20)?1[0125]\d{8}$/,"vi-VN":/^(\+?84)?[35789]\d{8}$/,"th-TH":/^(\+?66)?[689]\d{8}$/,"id-ID":/^(\+?62)?8\d{9,11}$/,"ms-MY":/^(\+?60)?1\d{8,9}$/,"nl-NL":/^(\+?31)?6\d{8}$/,"it-IT":/^(\+?39)?3\d{9}$/,"es-ES":/^(\+?34)?[67]\d{8}$/,"pl-PL":/^(\+?48)?[45789]\d{8}$/};function Tz(j){return P("isMobilePhone",j,gz)}var Lz={AD:/^AD\d{3}$/,AT:/^\d{4}$/,AU:/^\d{4}$/,AZ:/^\d{4}$/,BE:/^\d{4}$/,BG:/^\d{4}$/,BR:/^\d{5}-?\d{3}$/,BY:/^\d{6}$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:/^\d{4}$/,CN:/^\d{6}$/,CZ:/^\d{3} ?\d{2}$/,DE:/^\d{5}$/,DK:/^\d{4}$/,EE:/^\d{5}$/,ES:/^\d{5}$/,FI:/^\d{5}$/,FR:/^\d{2} ?\d{3}$/,GB:/^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPSTUW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$/i,GR:/^\d{3} ?\d{2}$/,HR:/^\d{5}$/,HU:/^\d{4}$/,ID:/^\d{5}$/,IL:/^\d{5}(\d{2})?$/,IN:/^\d{6}$/,IS:/^\d{3}$/,IT:/^\d{5}$/,JP:/^\d{3}-?\d{4}$/,KR:/^\d{5}$/,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT-\d{5}$/,LU:/^\d{4}$/,LV:/^LV-\d{4}$/,MX:/^\d{5}$/,MT:/^[A-Z]{3} ?\d{4}$/i,MZ:/^\d{4}$/,NL:/^\d{4} ?[A-Z]{2}$/i,NO:/^\d{4}$/,NP:/^\d{5}$/,NZ:/^\d{4}$/,PH:/^\d{4}$/,PK:/^\d{5}$/,PL:/^\d{2}-\d{3}$/,PR:/^009\d{2}([ -]\d{4})?$/,PT:/^\d{4}-\d{3}$/,RO:/^\d{6}$/,RU:/^\d{6}$/,SE:/^\d{3} ?\d{2}$/,SG:/^\d{6}$/,SI:/^\d{4}$/,SK:/^\d{3} ?\d{2}$/,TH:/^\d{5}$/,TN:/^\d{4}$/,TW:/^\d{3}(\d{2})?$/,UA:/^\d{5}$/,US:/^\d{5}(-\d{4})?$/,ZA:/^\d{4}$/,ZM:/^\d{5}$/};function Sz(j){return P("isPostalCode",j,Lz)}var kz={AF:/^\d{8}$/,AL:/^[A-Z]\d{8}[A-Z]$/i,AR:/^\d{7,8}$/,AZ:/^AZE\d{8}$/,BE:/^\d{11}$/,BG:/^\d{10}$/,BR:/^\d{9}$/,BY:/^[A-Z]{2}\d{7}$/i,CA:/^\d{9}$/,CH:/^756\d{10}$/,CN:/^\d{15}(\d{2}[0-9xX])?$/,CY:/^\d{7}[A-Z]$/i,CZ:/^\d{9,10}$/,DE:/^[LI TOUAEVBMNPRSZDFGHCK]{9}$/i,DK:/^\d{10}$/,EE:/^\d{11}$/,ES:/^[0-9X-Z]\d{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i,FI:/^\d{6}[+-A]\d{3}[0-9A-FHJ-NPR-Y]$/,FR:/^\d{8,9}[0-9\u00C1-\u00FF]{1}$/i,GB:/^[A-Z]{2}\d{6}[A-Z]$/i,GR:/^[A-Z]{2}\d{6}$/i,HR:/^\d{11}$/,HU:/^\d{8}[A-Z]{2}$/i,ID:/^\d{16}$/,IE:/^\d{7}[A-W][A-W]?$/,IL:/^\d{9}$/,IN:/^\d{12}$/,IR:/^\d{10}$/,IS:/^\d{10}$/,IT:/^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i,JP:/^\d{12}$/,KR:/^\d{6}-\d{7}$/,LT:/^\d{11}$/,LU:/^\d{13}$/,LV:/^\d{6}-\d{5}$/,MK:/^\d{13}$/,MX:/^[A-Z]{4}\d{6}[HM][A-Z]{2}[B-DF-HJ-NP-TV-Z]{3}[A-Z0-9]\d$/i,MT:/^\d{7}[A-Z]$/i,NL:/^\d{9}$/,NO:/^\d{11}$/,PL:/^\d{11}$/,PT:/^[1-9]\d{7}[0-9TV]$/i,RO:/^\d{13}$/,RS:/^\d{13}$/,RU:/^\d{10}$/,SE:/^\d{10,12}$/,SI:/^\d{13}$/,SK:/^\d{9,10}$/,TH:/^\d{13}$/,TR:/^\d{11}$/,TW:/^[A-Z]\d{9}$/i,UA:/^\d{9}$/,US:/^\d{3}-\d{2}-\d{4}$/,ZA:/^\d{13}$/};function dz(j){return P("isIdentityCard",j,kz)}var sz={AM:/^[A-Z]{2}\d{7}$/i,AR:/^[A-Z]{3}\d{6}$/i,AT:/^[A-Z]\d{7}$/i,AU:/^[A-Z]\d{7}$/i,AZ:/^[Aa]\d{8}$/,BE:/^[A-Z]{2}\d{6}$/i,BG:/^\d{9}$/,BH:/^[A-Z]{2}\d{6}$/i,BR:/^[A-Z]{2}\d{6}$/i,BY:/^[A-Z]{2}\d{7}$/i,CA:/^[A-Z]{2}\d{6}$/i,CH:/^[A-Z]\d{7}$/i,CN:/^G\d{8}$/,CY:/^[A-Z](\d{6}|\d{8})$/i,CZ:/^\d{8}$/,DE:/^[CFGHJKLMNPRTVWXYZ0-9]{9}$/i,DK:/^\d{9}$/,EE:/^([A-Z]\d{7}|[A-Z]{2}\d{7})$/i,ES:/^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/i,FI:/^[A-Z]{2}\d{7}$/i,FR:/[A-Z0-9]{9}/i,GB:/^\d{9}$/,GR:/^[A-Z]{2}\d{7}$/i,HR:/^\d{9}$/,HU:/^[A-Z]{2}(\d{6}|\d{7})$/i,ID:/^[A-C]\d{7}$/i,IE:/^[A-Z0-9]{2}\d{7}$/i,IL:/^\d{9}$/,IN:/^[A-Z]\d{7}$/i,IR:/^[A-Z]\d{8}$/i,IS:/^(A)\d{7}$/i,IT:/^[A-Z0-9]{9}$/i,JO:/^[A-Z]{2}\d{7}$/i,JP:/^[A-Z]{2}\d{7}$/i,KR:/^[A-Z][A-Z0-9]\d{7}$/i,KW:/^\d{8}$/,KZ:/^[A-Z]\d{8}$/i,LI:/^[A-Z]\d{6}X$/i,LT:/^[A-Z0-9]{8}$/i,LU:/^[A-Z0-9]{8}$/i,LV:/^[A-Z0-9]{2}\d{7}$/i,LY:/^[A-Z]{2}\d{7}$/i,MA:/^[A-Z0-9]{2}\d{7}$/i,MD:/^[A-Z]{2}\d{7}$/i,ME:/^[A-Z]{2}\d{7}$/i,MK:/^[A-Z]\d{7}$/i,MT:/^\d{7}$/,MX:/^[A-Z]\d{8}$/i,MY:/^[AHK]\d{8}[A-Z]$/i,NL:/^[A-NP-Z]{2}[A-NP-Z0-9]{6}\d$/i,NO:/^\d{9}$/,NZ:/^[A-Z]{2}\d{6}$/i,PH:/^[A-Z]\d{7}[A-Z]$/i,PK:/^[A-Z]{2}\d{7}$/i,PL:/^[A-Z]{2}\d{7}$/i,PT:/^[A-Z]\d{6}$/i,RO:/^\d{8}$/,RS:/^\d{9}$/,RU:/^\d{9}$/,SA:/^[A-Z]\d{8}$/i,SE:/^\d{8}$/,SL:/^(P)[A-Z]\d{7}$/i,SK:/^[0-9A-Z]\d{7}$/i,TH:/^[A-Z]{1,2}\d{6,7}$/i,TN:/^\d{8}$/,TR:/^[A-Z]\d{8}$/i,TW:/^[A-Z]\d{9}$/i,UA:/^[A-Z]{2}\d{6}$/i,US:/^\d{9}$/,ZA:/^[A-Z]\d{8}$/i};function _z(j){return P("isPassportNumber",j,sz)}function P(j,z,Q){let b=Q[z];if(!b)throw Error(`Unsupported locale: "${z}" for ${j}`);return $({name:j,requiresType:"string",constraints:{locale:z},validate:(f)=>typeof f==="string"&&b.test(f),emit:(f,Z)=>{return`if (!_re[${Z.addRegex(b)}].test(${f})) ${Z.fail(j)};`}})}export{E6 as notEquals,r6 as notContains,N6 as minLength,d6 as minDate,g6 as min,n6 as maxLength,s6 as maxDate,T6 as max,c6 as matches,x6 as length,fj as isVariableWidth,t6 as isUppercase,Xj as isUUID,hj as isURL,Gz as isULID,yz as isTaxId,$j as isSurrogatePair,Yz as isStrongPassword,U6 as isString,pj as isSemVer,Yj as isRgbColor,Zz as isRFC3339,Sz as isPostalCode,L6 as isPositive,Lj as isPort,Fz as isPhoneNumber,_z as isPassportNumber,Kj as isOctal,I6 as isObject,jj as isNumberString,D6 as isNumber,R6 as isNotIn,Az as isNotEmptyObject,o6 as isNotEmpty,S6 as isNegative,Zj as isMultibyte,oj as isMongoId,Tz as isMobilePhone,tj as isMimeType,$z as isMilitaryTime,vj as isMagnetURI,yj as isMACAddress,m6 as isLowercase,qz as isLongitude,Ij as isLocale,Kz as isLatitude,Aj as isLatLong,Cj as isJWT,Rj as isJSON,C6 as isInt,Iz as isInstance,i6 as isIn,dz as isIdentityCard,Pj as isISSN,Hj as isISRC,Dj as isISO8601,wz as isISO4217CurrencyCode,sj as isISO31661Alpha3,dj as isISO31661Alpha2,Vj as isISIN,Gj as isISBN,wj as isIP,zz as isIBAN,Jj as isHexadecimal,Fj as isHexColor,fz as isHash,bj as isHalfWidth,Mj as isHSL,Qj as isFullWidth,Ej as isFirebasePushId,Tj as isFQDN,hz as isEthereumAddress,P6 as isEnum,p6 as isEmpty,Wj as isEmail,kj as isEAN,k6 as isDivisibleBy,zj as isDecimal,mj as isDateString,O6 as isDate,gj as isDataURI,lj as isCurrency,aj as isCreditCard,Bz as isCUID2,Qz as isByteLength,Xz as isBtcAddress,a6 as isBooleanString,H6 as isBoolean,cj as isBase64,xj as isBase58,nj as isBase32,_j as isBIC,l6 as isAscii,A6 as isArray,e6 as isAlphanumeric,v6 as isAlpha,_6 as equals,u6 as contains,Oz as arrayUnique,Ez as arrayOf,Cz as arrayNotEmpty,Uz as arrayNotContains,Dz as arrayMinSize,Hz as arrayMaxSize,Vz as arrayContains};
1
+ export { isString, isNumber, isBoolean, isDate, isEnum, isInt, isArray, isObject } from './typechecker.js';
2
+ export { min, max, isPositive, isNegative, isDivisibleBy } from './number.js';
3
+ export { minDate, maxDate } from './date.js';
4
+ export { equals, notEquals, isEmpty, isNotEmpty, isIn, isNotIn } from './common.js';
5
+ export { minLength, maxLength, length, contains, notContains, matches, isLowercase, isUppercase, isAscii, isAlpha, isAlphanumeric, isHttpToken, isBooleanString, isNumberString, isDecimal, isFullWidth, isHalfWidth, isVariableWidth, isMultibyte, isSurrogatePair, isHexadecimal, isOctal, isEmail, isURL, isUUID, isIP, isHexColor, isRgbColor, isHSL, isMACAddress, isISBN, isISIN, isISO8601, isISRC, isISSN, isJWT, isLatLong, isLocale, isDataURI, isFQDN, isPort, isEAN, isISO31661Alpha2, isISO31661Alpha3, isBIC, isFirebasePushId, isSemVer, isMongoId, isJSON, isBase32, isBase58, isBase64, isDateString, isMimeType, isCurrency, isMagnetURI, isCreditCard, isIBAN, isByteLength, isHash, isRFC3339, isMilitaryTime, isLatitude, isLongitude, isEthereumAddress, isBtcAddress, isISO4217CurrencyCode, isPhoneNumber, isStrongPassword, isTaxId, isULID, isCUID2, } from './string.js';
6
+ export { arrayContains, arrayNotContains, arrayMinSize, arrayMaxSize, arrayUnique, arrayNotEmpty } from './array.js';
7
+ export { isNotEmptyObject, isInstance } from './object.js';
8
+ export { isMobilePhone, isPostalCode, isIdentityCard, isPassportNumber } from './locales.js';
@@ -1,5 +1,6 @@
1
1
  import type { EmittableRule } from '../types';
2
- export declare function isMobilePhone(locale: string): EmittableRule;
3
- export declare function isPostalCode(locale: string): EmittableRule;
4
- export declare function isIdentityCard(locale: string): EmittableRule;
5
- export declare function isPassportNumber(locale: string): EmittableRule;
2
+ declare function isMobilePhone(locale: string): EmittableRule;
3
+ declare function isPostalCode(locale: string): EmittableRule;
4
+ declare function isIdentityCard(locale: string): EmittableRule;
5
+ declare function isPassportNumber(locale: string): EmittableRule;
6
+ export { isMobilePhone, isPostalCode, isIdentityCard, isPassportNumber };
@@ -0,0 +1,249 @@
1
+ import { BakerError } from '../errors.js';
2
+ import { makeRule } from '../rule-plan.js';
3
+ // ─────────────────────────────────────────────────────────────────────────────
4
+ // Locale-specific Validators
5
+ // ─────────────────────────────────────────────────────────────────────────────
6
+ // ─── isMobilePhone ────────────────────────────────────────────────────────────
7
+ const MOBILE_PHONE_REGEXES = {
8
+ 'ko-KR': /^(\+?82|0)1[016789]\d{7,8}$/,
9
+ 'en-US': /^\+?1?[2-9]\d{2}[2-9]\d{6}$/,
10
+ 'zh-CN': /^(\+?86)?1[3-9]\d{9}$/,
11
+ 'zh-TW': /^(\+?886)?9\d{8}$/,
12
+ 'ja-JP': /^(\+?81)?0?[789]0[0-9]{8}$/,
13
+ 'de-DE': /^(\+?49)?1(5\d|6[0-9]|7[0-9])\d{8}$/,
14
+ 'fr-FR': /^(\+?33)?[67]\d{8}$/,
15
+ 'en-GB': /^(\+?44)?7[1-9]\d{8}$/,
16
+ 'ru-RU': /^(\+?7)?9\d{9}$/,
17
+ 'pt-BR': /^(\+?55)?[1-9]{2}9?\d{8}$/,
18
+ 'in-IN': /^(\+?91)?[6-9]\d{9}$/,
19
+ 'ar-SA': /^(\+?966)?5\d{8}$/,
20
+ 'ar-EG': /^(\+?20)?1[0125]\d{8}$/,
21
+ 'vi-VN': /^(\+?84)?[35789]\d{8}$/,
22
+ 'th-TH': /^(\+?66)?[689]\d{8}$/,
23
+ 'id-ID': /^(\+?62)?8\d{9,11}$/,
24
+ 'ms-MY': /^(\+?60)?1\d{8,9}$/,
25
+ 'nl-NL': /^(\+?31)?6\d{8}$/,
26
+ 'it-IT': /^(\+?39)?3\d{9}$/,
27
+ 'es-ES': /^(\+?34)?[67]\d{8}$/,
28
+ 'pl-PL': /^(\+?48)?[45789]\d{8}$/,
29
+ };
30
+ function isMobilePhone(locale) {
31
+ return makeLocaleRegexRule('isMobilePhone', locale, MOBILE_PHONE_REGEXES);
32
+ }
33
+ // ─── isPostalCode ─────────────────────────────────────────────────────────────
34
+ const POSTAL_CODE_REGEXES = {
35
+ AD: /^AD\d{3}$/,
36
+ AT: /^\d{4}$/,
37
+ AU: /^\d{4}$/,
38
+ AZ: /^\d{4}$/,
39
+ BE: /^\d{4}$/,
40
+ BG: /^\d{4}$/,
41
+ BR: /^\d{5}-?\d{3}$/,
42
+ BY: /^\d{6}$/,
43
+ CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
44
+ CH: /^\d{4}$/,
45
+ CN: /^\d{6}$/,
46
+ CZ: /^\d{3} ?\d{2}$/,
47
+ DE: /^\d{5}$/,
48
+ DK: /^\d{4}$/,
49
+ EE: /^\d{5}$/,
50
+ ES: /^\d{5}$/,
51
+ FI: /^\d{5}$/,
52
+ FR: /^\d{2} ?\d{3}$/,
53
+ GB: /^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPSTUW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$/i,
54
+ GR: /^\d{3} ?\d{2}$/,
55
+ HR: /^\d{5}$/,
56
+ HU: /^\d{4}$/,
57
+ ID: /^\d{5}$/,
58
+ IL: /^\d{5}(\d{2})?$/,
59
+ IN: /^\d{6}$/,
60
+ IS: /^\d{3}$/,
61
+ IT: /^\d{5}$/,
62
+ JP: /^\d{3}-?\d{4}$/,
63
+ KR: /^\d{5}$/,
64
+ LI: /^(948[5-9]|949[0-7])$/,
65
+ LT: /^LT-\d{5}$/,
66
+ LU: /^\d{4}$/,
67
+ LV: /^LV-\d{4}$/,
68
+ MX: /^\d{5}$/,
69
+ MT: /^[A-Z]{3} ?\d{4}$/i,
70
+ MZ: /^\d{4}$/,
71
+ NL: /^\d{4} ?[A-Z]{2}$/i,
72
+ NO: /^\d{4}$/,
73
+ NP: /^\d{5}$/,
74
+ NZ: /^\d{4}$/,
75
+ PH: /^\d{4}$/,
76
+ PK: /^\d{5}$/,
77
+ PL: /^\d{2}-\d{3}$/,
78
+ PR: /^009\d{2}([ -]\d{4})?$/,
79
+ PT: /^\d{4}-\d{3}$/,
80
+ RO: /^\d{6}$/,
81
+ RU: /^\d{6}$/,
82
+ SE: /^\d{3} ?\d{2}$/,
83
+ SG: /^\d{6}$/,
84
+ SI: /^\d{4}$/,
85
+ SK: /^\d{3} ?\d{2}$/,
86
+ TH: /^\d{5}$/,
87
+ TN: /^\d{4}$/,
88
+ TW: /^\d{3}(\d{2})?$/,
89
+ UA: /^\d{5}$/,
90
+ US: /^\d{5}(-\d{4})?$/,
91
+ ZA: /^\d{4}$/,
92
+ ZM: /^\d{5}$/,
93
+ };
94
+ function isPostalCode(locale) {
95
+ return makeLocaleRegexRule('isPostalCode', locale, POSTAL_CODE_REGEXES);
96
+ }
97
+ // ─── isIdentityCard ───────────────────────────────────────────────────────────
98
+ const IDENTITY_CARD_REGEXES = {
99
+ AF: /^\d{8}$/,
100
+ AL: /^[A-Z]\d{8}[A-Z]$/i,
101
+ AR: /^\d{7,8}$/,
102
+ AZ: /^AZE\d{8}$/,
103
+ BE: /^\d{11}$/,
104
+ BG: /^\d{10}$/,
105
+ BR: /^\d{9}$/,
106
+ BY: /^[A-Z]{2}\d{7}$/i,
107
+ CA: /^\d{9}$/,
108
+ CH: /^756\d{10}$/,
109
+ CN: /^\d{15}(\d{2}[0-9xX])?$/,
110
+ CY: /^\d{7}[A-Z]$/i,
111
+ CZ: /^\d{9,10}$/,
112
+ DE: /^[LITOUAEVBMNPRSZDFGHCK]{9}$/i,
113
+ DK: /^\d{10}$/,
114
+ EE: /^\d{11}$/,
115
+ ES: /^[0-9X-Z]\d{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i,
116
+ FI: /^\d{6}[+-A]\d{3}[0-9A-FHJ-NPR-Y]$/,
117
+ FR: /^\d{8,9}[0-9Á-ÿ]{1}$/i,
118
+ GB: /^[A-Z]{2}\d{6}[A-Z]$/i,
119
+ GR: /^[A-Z]{2}\d{6}$/i,
120
+ HR: /^\d{11}$/,
121
+ HU: /^\d{8}[A-Z]{2}$/i,
122
+ ID: /^\d{16}$/,
123
+ IE: /^\d{7}[A-W][A-W]?$/,
124
+ IL: /^\d{9}$/,
125
+ IN: /^\d{12}$/,
126
+ IR: /^\d{10}$/,
127
+ IS: /^\d{10}$/,
128
+ IT: /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i,
129
+ JP: /^\d{12}$/,
130
+ KR: /^\d{6}-\d{7}$/,
131
+ LT: /^\d{11}$/,
132
+ LU: /^\d{13}$/,
133
+ LV: /^\d{6}-\d{5}$/,
134
+ MK: /^\d{13}$/,
135
+ MX: /^[A-Z]{4}\d{6}[HM][A-Z]{2}[B-DF-HJ-NP-TV-Z]{3}[A-Z0-9]\d$/i,
136
+ MT: /^\d{7}[A-Z]$/i,
137
+ NL: /^\d{9}$/,
138
+ NO: /^\d{11}$/,
139
+ PL: /^\d{11}$/,
140
+ PT: /^[1-9]\d{7}[0-9TV]$/i,
141
+ RO: /^\d{13}$/,
142
+ RS: /^\d{13}$/,
143
+ RU: /^\d{10}$/,
144
+ SE: /^\d{10,12}$/,
145
+ SI: /^\d{13}$/,
146
+ SK: /^\d{9,10}$/,
147
+ TH: /^\d{13}$/,
148
+ TR: /^\d{11}$/,
149
+ TW: /^[A-Z]\d{9}$/i,
150
+ UA: /^\d{9}$/,
151
+ US: /^\d{3}-\d{2}-\d{4}$/,
152
+ ZA: /^\d{13}$/,
153
+ };
154
+ function isIdentityCard(locale) {
155
+ return makeLocaleRegexRule('isIdentityCard', locale, IDENTITY_CARD_REGEXES);
156
+ }
157
+ // ─── isPassportNumber ─────────────────────────────────────────────────────────
158
+ const PASSPORT_REGEXES = {
159
+ AM: /^[A-Z]{2}\d{7}$/i,
160
+ AR: /^[A-Z]{3}\d{6}$/i,
161
+ AT: /^[A-Z]\d{7}$/i,
162
+ AU: /^[A-Z]\d{7}$/i,
163
+ AZ: /^[Aa]\d{8}$/,
164
+ BE: /^[A-Z]{2}\d{6}$/i,
165
+ BG: /^\d{9}$/,
166
+ BH: /^[A-Z]{2}\d{6}$/i,
167
+ BR: /^[A-Z]{2}\d{6}$/i,
168
+ BY: /^[A-Z]{2}\d{7}$/i,
169
+ CA: /^[A-Z]{2}\d{6}$/i,
170
+ CH: /^[A-Z]\d{7}$/i,
171
+ CN: /^G\d{8}$/,
172
+ CY: /^[A-Z](\d{6}|\d{8})$/i,
173
+ CZ: /^\d{8}$/,
174
+ DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/i,
175
+ DK: /^\d{9}$/,
176
+ EE: /^([A-Z]\d{7}|[A-Z]{2}\d{7})$/i,
177
+ ES: /^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/i,
178
+ FI: /^[A-Z]{2}\d{7}$/i,
179
+ FR: /^[A-Z0-9]{9}$/i,
180
+ GB: /^\d{9}$/,
181
+ GR: /^[A-Z]{2}\d{7}$/i,
182
+ HR: /^\d{9}$/,
183
+ HU: /^[A-Z]{2}(\d{6}|\d{7})$/i,
184
+ ID: /^[A-C]\d{7}$/i,
185
+ IE: /^[A-Z0-9]{2}\d{7}$/i,
186
+ IL: /^\d{9}$/,
187
+ IN: /^[A-Z]\d{7}$/i,
188
+ IR: /^[A-Z]\d{8}$/i,
189
+ IS: /^(A)\d{7}$/i,
190
+ IT: /^[A-Z0-9]{9}$/i,
191
+ JO: /^[A-Z]{2}\d{7}$/i,
192
+ JP: /^[A-Z]{2}\d{7}$/i,
193
+ KR: /^[A-Z][A-Z0-9]\d{7}$/i,
194
+ KW: /^\d{8}$/,
195
+ KZ: /^[A-Z]\d{8}$/i,
196
+ LI: /^[A-Z]\d{6}X$/i,
197
+ LT: /^[A-Z0-9]{8}$/i,
198
+ LU: /^[A-Z0-9]{8}$/i,
199
+ LV: /^[A-Z0-9]{2}\d{7}$/i,
200
+ LY: /^[A-Z]{2}\d{7}$/i,
201
+ MA: /^[A-Z0-9]{2}\d{7}$/i,
202
+ MD: /^[A-Z]{2}\d{7}$/i,
203
+ ME: /^[A-Z]{2}\d{7}$/i,
204
+ MK: /^[A-Z]\d{7}$/i,
205
+ MT: /^\d{7}$/,
206
+ MX: /^[A-Z]\d{8}$/i,
207
+ MY: /^[AHK]\d{8}[A-Z]$/i,
208
+ NL: /^[A-NP-Z]{2}[A-NP-Z0-9]{6}\d$/i,
209
+ NO: /^\d{9}$/,
210
+ NZ: /^[A-Z]{2}\d{6}$/i,
211
+ PH: /^[A-Z]\d{7}[A-Z]$/i,
212
+ PK: /^[A-Z]{2}\d{7}$/i,
213
+ PL: /^[A-Z]{2}\d{7}$/i,
214
+ PT: /^[A-Z]\d{6}$/i,
215
+ RO: /^\d{8}$/,
216
+ RS: /^\d{9}$/,
217
+ RU: /^\d{9}$/,
218
+ SA: /^[A-Z]\d{8}$/i,
219
+ SE: /^\d{8}$/,
220
+ SL: /^(P)[A-Z]\d{7}$/i,
221
+ SK: /^[0-9A-Z]\d{7}$/i,
222
+ TH: /^[A-Z]{1,2}\d{6,7}$/i,
223
+ TN: /^\d{8}$/,
224
+ TR: /^[A-Z]\d{8}$/i,
225
+ TW: /^[A-Z]\d{9}$/i,
226
+ UA: /^[A-Z]{2}\d{6}$/i,
227
+ US: /^\d{9}$/,
228
+ ZA: /^[A-Z]\d{8}$/i,
229
+ };
230
+ function isPassportNumber(locale) {
231
+ return makeLocaleRegexRule('isPassportNumber', locale, PASSPORT_REGEXES);
232
+ }
233
+ function makeLocaleRegexRule(name, locale, registry) {
234
+ const re = registry[locale];
235
+ if (!re) {
236
+ throw new BakerError(`Unsupported locale: "${locale}" for ${name}`);
237
+ }
238
+ return makeRule({
239
+ name,
240
+ requiresType: 'string',
241
+ constraints: { locale },
242
+ validate: value => typeof value === 'string' && re.test(value),
243
+ emit: (varName, ctx) => {
244
+ const i = ctx.addRegex(re);
245
+ return `if (!re[${i}].test(${varName})) ${ctx.fail(name)};`;
246
+ },
247
+ });
248
+ }
249
+ export { isMobilePhone, isPostalCode, isIdentityCard, isPassportNumber };