@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.
- package/CHANGELOG.md +256 -0
- package/MIGRATION-3.0.md +104 -0
- package/README.md +109 -63
- package/dist/index.d.ts +7 -6
- package/dist/index.js +10 -321
- package/dist/src/collect.d.ts +13 -10
- package/dist/src/collect.js +26 -0
- package/dist/src/configure.d.ts +8 -6
- package/dist/src/configure.js +43 -0
- package/dist/src/create-rule.js +41 -0
- package/dist/src/decorators/field.d.ts +22 -18
- package/dist/src/decorators/field.js +268 -0
- package/dist/src/decorators/index.d.ts +1 -0
- package/dist/src/decorators/index.js +2 -2
- package/dist/src/decorators/recipe.d.ts +17 -0
- package/dist/src/decorators/recipe.js +23 -0
- package/dist/src/errors.d.ts +27 -17
- package/dist/src/errors.js +52 -0
- package/dist/src/functions/check-call-options.d.ts +8 -0
- package/dist/src/functions/check-call-options.js +51 -0
- package/dist/src/functions/deserialize.d.ts +13 -6
- package/dist/src/functions/deserialize.js +57 -0
- package/dist/src/functions/serialize.d.ts +10 -4
- package/dist/src/functions/serialize.js +52 -0
- package/dist/src/functions/validate.d.ts +13 -10
- package/dist/src/functions/validate.js +49 -0
- package/dist/src/interfaces.d.ts +1 -1
- package/dist/src/interfaces.js +4 -0
- package/dist/src/meta-access.d.ts +19 -0
- package/dist/src/meta-access.js +75 -0
- package/dist/src/registry.js +8 -0
- package/dist/src/rule-metadata.d.ts +11 -0
- package/dist/src/rule-metadata.js +17 -0
- package/dist/src/rule-plan.d.ts +10 -11
- package/dist/src/rule-plan.js +117 -0
- package/dist/src/rules/array.d.ts +7 -6
- package/dist/src/rules/array.js +96 -0
- package/dist/src/rules/common.js +77 -0
- package/dist/src/rules/date.js +35 -0
- package/dist/src/rules/index.d.ts +2 -4
- package/dist/src/rules/index.js +8 -21
- package/dist/src/rules/locales.d.ts +5 -4
- package/dist/src/rules/locales.js +249 -0
- package/dist/src/rules/number.js +79 -0
- package/dist/src/rules/object.d.ts +1 -1
- package/dist/src/rules/object.js +49 -0
- package/dist/src/rules/string.d.ts +83 -80
- package/dist/src/rules/string.js +1998 -0
- package/dist/src/rules/typechecker.js +143 -0
- package/dist/src/seal/circular-analyzer.js +63 -0
- package/dist/src/seal/codegen-utils.js +18 -0
- package/dist/src/seal/deserialize-builder.d.ts +8 -4
- package/dist/src/seal/deserialize-builder.js +1546 -0
- package/dist/src/seal/expose-validator.d.ts +3 -2
- package/dist/src/seal/expose-validator.js +65 -0
- package/dist/src/seal/seal-state.d.ts +10 -0
- package/dist/src/seal/seal-state.js +18 -0
- package/dist/src/seal/seal.d.ts +22 -21
- package/dist/src/seal/seal.js +431 -0
- package/dist/src/seal/serialize-builder.d.ts +3 -2
- package/dist/src/seal/serialize-builder.js +374 -0
- package/dist/src/seal/validate-meta.d.ts +13 -0
- package/dist/src/seal/validate-meta.js +61 -0
- package/dist/src/symbols.d.ts +1 -1
- package/dist/src/symbols.js +13 -2
- package/dist/src/transformers/collection.transformer.js +25 -0
- package/dist/src/transformers/date.transformer.js +18 -0
- package/dist/src/transformers/index.js +6 -2
- package/dist/src/transformers/luxon.transformer.d.ts +4 -2
- package/dist/src/transformers/luxon.transformer.js +34 -0
- package/dist/src/transformers/moment.transformer.d.ts +4 -2
- package/dist/src/transformers/moment.transformer.js +32 -0
- package/dist/src/transformers/number.transformer.js +8 -0
- package/dist/src/transformers/string.transformer.js +12 -0
- package/dist/src/types.d.ts +27 -25
- package/dist/src/types.js +1 -0
- package/dist/src/utils.d.ts +2 -2
- package/dist/src/utils.js +10 -0
- package/package.json +80 -67
- package/dist/index-03cysbck.js +0 -3
- package/dist/index-dcbd798a.js +0 -3
- package/dist/index-jp2yjd6g.js +0 -3
- package/dist/index-mw7met6r.js +0 -3
- package/dist/index-xdn55cz3.js +0 -1
- package/dist/src/functions/_run-sealed.d.ts +0 -7
- package/dist/src/functions/index.d.ts +0 -3
- 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
|
|
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';
|
package/dist/src/rules/index.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 };
|