@zipbul/baker 3.4.1 → 4.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 +31 -0
- package/README.md +236 -148
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -1
- package/dist/src/baker.d.ts +26 -0
- package/dist/src/baker.js +1 -0
- package/dist/src/configure.d.ts +7 -1
- package/dist/src/configure.js +1 -1
- package/dist/src/create-rule.d.ts +2 -1
- package/dist/src/decorators/field.d.ts +2 -1
- package/dist/src/decorators/field.js +1 -1
- package/dist/src/enums.d.ts +51 -0
- package/dist/src/enums.js +1 -0
- package/dist/src/rule-plan.d.ts +5 -3
- package/dist/src/rule-plan.js +1 -1
- package/dist/src/rules/array.js +1 -1
- package/dist/src/rules/date.js +1 -1
- package/dist/src/rules/locales.js +1 -1
- package/dist/src/rules/number.js +1 -1
- package/dist/src/rules/object.js +1 -1
- package/dist/src/rules/string.js +5 -5
- package/dist/src/rules/typechecker.js +5 -5
- package/dist/src/seal/deserialize-builder.js +230 -230
- package/dist/src/seal/enums.d.ts +8 -0
- package/dist/src/seal/enums.js +1 -0
- package/dist/src/seal/expose-validator.js +1 -1
- package/dist/src/seal/seal.d.ts +15 -1
- package/dist/src/seal/seal.js +1 -1
- package/dist/src/seal/serialize-builder.js +8 -8
- package/dist/src/seal/validate-meta.js +1 -1
- package/dist/src/types.d.ts +11 -10
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RequiredType } from './enums';
|
|
1
2
|
import type { EmittableRule } from './types';
|
|
2
3
|
export interface CreateRuleOptions {
|
|
3
4
|
/** Rule name. Used as the error code. */
|
|
@@ -7,7 +8,7 @@ export interface CreateRuleOptions {
|
|
|
7
8
|
/** Rule parameters */
|
|
8
9
|
constraints?: Record<string, unknown>;
|
|
9
10
|
/** Type assumed by this rule — used for type gate optimization */
|
|
10
|
-
requiresType?:
|
|
11
|
+
requiresType?: RequiredType;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* Creates a user-defined validation rule.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ClassCtor, EmittableRule, Transformer } from '../types';
|
|
2
|
+
import { ExcludeMode } from '../enums';
|
|
2
3
|
interface ArrayOfMarker {
|
|
3
4
|
readonly [key: symbol]: true;
|
|
4
5
|
readonly rules: EmittableRule[];
|
|
@@ -39,7 +40,7 @@ interface FieldOptions {
|
|
|
39
40
|
/** Serialize direction key mapping (cannot be used with name) */
|
|
40
41
|
serializeName?: string;
|
|
41
42
|
/** Field exclusion — true: bidirectional, 'deserializeOnly': deserialization only, 'serializeOnly': serialization only */
|
|
42
|
-
exclude?: boolean |
|
|
43
|
+
exclude?: boolean | ExcludeMode;
|
|
43
44
|
/** Groups — field visibility control + conditional validation rule application */
|
|
44
45
|
groups?: string[];
|
|
45
46
|
/** Conditional validation — skip all field validation when false */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ensureMeta as
|
|
1
|
+
import{ensureMeta as L}from"../collect.js";import{Direction as h,ExcludeMode as N}from"../enums.js";import{BakerError as X}from"../errors.js";import{isAsyncFunction as P,isPromiseLike as Y}from"../utils.js";const I=Symbol.for("baker:arrayOf");function arrayOf(...q){return{rules:q,[I]:!0}}function $(q){return typeof q==="object"&&q!==null&&q[I]===!0}const j=new Set(["type","discriminator","keepDiscriminatorProperty","rules","optional","nullable","name","deserializeName","serializeName","exclude","groups","when","transform","message","context","mapValue","setValue"]);function S(q){if(typeof q==="function")return!1;if(typeof q!=="object"||q===null)return!1;if($(q))return!1;const C=Object.keys(q);if(C.length===0)return!0;return C.some((b)=>j.has(b))}function V(q,C,b){const J=b?`${C} ${b}`:C;if(typeof q==="function"){const Q=q;if(typeof Q.emit!=="function"||typeof Q.ruleName!=="string"){const G=Q.name?` Did you forget to call '${Q.name}()'? Factories must be invoked (e.g., '${Q.name}()'). Rule constants are passed directly (e.g., 'isString' without parentheses).`:" Use createRule() or import a rule from @zipbul/baker/rules.";throw new X(`@Field on ${J}: argument is not a baker rule.${G} Valid @Field forms: @Field(), @Field(rule, ...), @Field(options), @Field(rule, ..., options).`)}return}throw new X(`@Field on ${J}: expected a baker rule (function with .emit and .ruleName), got ${q===null?"null":typeof q}. Use createRule() or import a rule from @zipbul/baker/rules. Valid @Field forms: @Field(), @Field(rule, ...), @Field(options), @Field(rule, ..., options).`)}function z(q){if(q.length===0)return{rules:[],options:{}};if(q.length===1&&S(q[0])){const b=q[0];return{rules:b.rules??[],options:b}}const C=q[q.length-1];if(S(C)){const b=C;let J=q.slice(0,-1);if(b.rules)J=[...J,...b.rules];return{rules:J,options:b}}return{rules:q,options:{}}}function D(q,C,b){for(const J of C)if($(J))for(const H of J.rules){const Q={rule:H,each:!0};if(b.groups!==void 0)Q.groups=b.groups;if(b.message!==void 0)Q.message=b.message;if(b.context!==void 0)Q.context=b.context;q.validation.push(Q)}else{const H={rule:J};if(b.groups!==void 0)H.groups=b.groups;if(b.message!==void 0)H.message=b.message;if(b.context!==void 0)H.context=b.context;q.validation.push(H)}}function _(q,C){if(C.name){const b={name:C.name};if(C.groups!==void 0)b.groups=C.groups;q.expose.push(b)}else if(C.deserializeName||C.serializeName){if(C.deserializeName){const b={name:C.deserializeName,deserializeOnly:!0};if(C.groups!==void 0)b.groups=C.groups;q.expose.push(b)}if(C.serializeName){const b={name:C.serializeName,serializeOnly:!0};if(C.groups!==void 0)b.groups=C.groups;q.expose.push(b)}}else if(C.groups)q.expose.push({groups:C.groups});else q.expose.push({})}function w(q,C,b){const J=P(b);return{fn:(Q)=>{const G=b(Q);if(!J&&Y(G))throw new X(`@Field(${q}) ${C} transform returned Promise. Declare the transform with async if it is asynchronous.`);return G},isAsync:J}}function T(q,C,b){if(!b.transform)return;const J=Array.isArray(b.transform)?b.transform:[b.transform];for(const H of J){const Q=w(C,h.Deserialize,H.deserialize),G=w(C,h.Serialize,H.serialize);q.transform.push({fn:Q.fn,isAsync:Q.isAsync,options:{deserializeOnly:!0}},{fn:G.fn,isAsync:G.isAsync,options:{serializeOnly:!0}})}}function Field(...q){return(C,b)=>{if(b.static)throw new X("@Field cannot decorate static fields.");if(b.private)throw new X("@Field cannot decorate private fields.");if(typeof b.name==="symbol")throw new X("@Field: symbol property keys are not supported. Use a string property name.");const J=b.name,H=L(b.metadata,J),{rules:Q,options:G}=z(q);if(G.name&&(G.deserializeName||G.serializeName))throw new X(`@Field on ${J}: 'name' cannot be combined with 'deserializeName'/'serializeName'. Use one or the other.`);for(let U=0;U<Q.length;U++){const W=Q[U];if($(W))for(let Z=0;Z<W.rules.length;Z++)V(W.rules[Z],J,`arrayOf[${Z}]`);else V(W,J)}D(H,Q,G);if(G.context!==void 0)H.context=G.context;if(G.message!==void 0)H.message=G.message;if(G.optional)H.flags.isOptional=!0;if(G.nullable)H.flags.isNullable=!0;if(G.when)H.flags.validateIf=G.when;if(G.type){const U={fn:G.type};if(G.discriminator!==void 0)U.discriminator=G.discriminator;if(G.keepDiscriminatorProperty!==void 0)U.keepDiscriminatorProperty=G.keepDiscriminatorProperty;const W=G.mapValue??G.setValue;if(W!==void 0)U.collectionValue=W;H.type=U}_(H,G);if(G.exclude){if(G.exclude===!0)H.exclude={};else if(G.exclude===N.DeserializeOnly)H.exclude={deserializeOnly:!0};else if(G.exclude===N.SerializeOnly)H.exclude={serializeOnly:!0}}T(H,J,G)}}export{arrayOf,Field};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Type a rule assumes for its value — drives the builder's type gate, gate dedup, and autoConvert target. */
|
|
2
|
+
export declare enum RequiredType {
|
|
3
|
+
String = "string",
|
|
4
|
+
Number = "number",
|
|
5
|
+
Boolean = "boolean",
|
|
6
|
+
Date = "date",
|
|
7
|
+
Array = "array",
|
|
8
|
+
Object = "object"
|
|
9
|
+
}
|
|
10
|
+
/** Direction of a (de)serialization pass. */
|
|
11
|
+
export declare enum Direction {
|
|
12
|
+
Deserialize = "deserialize",
|
|
13
|
+
Serialize = "serialize"
|
|
14
|
+
}
|
|
15
|
+
/** Collection container type for a nested field. */
|
|
16
|
+
export declare enum CollectionType {
|
|
17
|
+
Map = "Map",
|
|
18
|
+
Set = "Set"
|
|
19
|
+
}
|
|
20
|
+
/** Cached accessor a RulePlan reuses across checks. */
|
|
21
|
+
export declare enum CacheKey {
|
|
22
|
+
Length = "length",
|
|
23
|
+
Time = "time"
|
|
24
|
+
}
|
|
25
|
+
/** Discriminant for a RulePlanExpr node. */
|
|
26
|
+
export declare enum RulePlanExprKind {
|
|
27
|
+
Value = "value",
|
|
28
|
+
Member = "member",
|
|
29
|
+
Call0 = "call0",
|
|
30
|
+
Literal = "literal"
|
|
31
|
+
}
|
|
32
|
+
/** Discriminant for a RulePlanCheck node. */
|
|
33
|
+
export declare enum RulePlanCheckKind {
|
|
34
|
+
Compare = "compare",
|
|
35
|
+
And = "and",
|
|
36
|
+
Or = "or"
|
|
37
|
+
}
|
|
38
|
+
/** Comparison operator emitted into generated check code. */
|
|
39
|
+
export declare enum RuleOp {
|
|
40
|
+
Lt = "<",
|
|
41
|
+
Lte = "<=",
|
|
42
|
+
Gt = ">",
|
|
43
|
+
Gte = ">=",
|
|
44
|
+
Eq = "===",
|
|
45
|
+
Neq = "!=="
|
|
46
|
+
}
|
|
47
|
+
/** Direction in which a field is excluded. */
|
|
48
|
+
export declare enum ExcludeMode {
|
|
49
|
+
DeserializeOnly = "deserializeOnly",
|
|
50
|
+
SerializeOnly = "serializeOnly"
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export var RequiredType;((b)=>{b.String="string";b.Number="number";b.Boolean="boolean";b.Date="date";b.Array="array";b.Object="object"})(RequiredType||={});export var Direction;((g)=>{g.Deserialize="deserialize";g.Serialize="serialize"})(Direction||={});export var CollectionType;((g)=>{g.Map="Map";g.Set="Set"})(CollectionType||={});export var CacheKey;((g)=>{g.Length="length";g.Time="time"})(CacheKey||={});export var RulePlanExprKind;((j)=>{j.Value="value";j.Member="member";j.Call0="call0";j.Literal="literal"})(RulePlanExprKind||={});export var RulePlanCheckKind;((m)=>{m.Compare="compare";m.And="and";m.Or="or"})(RulePlanCheckKind||={});export var RuleOp;((b)=>{b.Lt="<";b.Lte="<=";b.Gt=">";b.Gte=">=";b.Eq="===";b.Neq="!=="})(RuleOp||={});export var ExcludeMode;((g)=>{g.DeserializeOnly="deserializeOnly";g.SerializeOnly="serializeOnly"})(ExcludeMode||={});
|
package/dist/src/rule-plan.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { RequiredType } from './enums';
|
|
1
2
|
import type { EmitContext, InternalRule, RulePlan, RulePlanCheck, RulePlanExpr } from './types';
|
|
3
|
+
import { RuleOp } from './enums';
|
|
2
4
|
type RulePlanCache = {
|
|
3
5
|
length?: string;
|
|
4
6
|
time?: string;
|
|
@@ -7,11 +9,11 @@ declare const planValue: () => RulePlanExpr;
|
|
|
7
9
|
declare const planLength: (object?: RulePlanExpr) => RulePlanExpr;
|
|
8
10
|
declare const planTime: (object?: RulePlanExpr) => RulePlanExpr;
|
|
9
11
|
declare const planLiteral: (value: number) => RulePlanExpr;
|
|
10
|
-
declare const planCompare: (left: RulePlanExpr, op:
|
|
12
|
+
declare const planCompare: (left: RulePlanExpr, op: RuleOp, right: number | RulePlanExpr) => RulePlanCheck;
|
|
11
13
|
declare const planOr: (...checks: RulePlanCheck[]) => RulePlanCheck;
|
|
12
14
|
declare function makePlannedRule(options: {
|
|
13
15
|
name: string;
|
|
14
|
-
requiresType:
|
|
16
|
+
requiresType: RequiredType;
|
|
15
17
|
constraints?: Record<string, unknown>;
|
|
16
18
|
plan: RulePlan;
|
|
17
19
|
validate: (value: unknown) => boolean;
|
|
@@ -20,7 +22,7 @@ declare function makeRule(options: {
|
|
|
20
22
|
name: string;
|
|
21
23
|
validate: (value: unknown) => boolean | Promise<boolean>;
|
|
22
24
|
emit: (varName: string, ctx: EmitContext) => string;
|
|
23
|
-
requiresType?:
|
|
25
|
+
requiresType?: RequiredType;
|
|
24
26
|
constraints?: Record<string, unknown>;
|
|
25
27
|
isAsync?: boolean;
|
|
26
28
|
plan?: RulePlan;
|
package/dist/src/rule-plan.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineRuleMetadata as
|
|
1
|
+
import{RuleOp as Y,RulePlanCheckKind as H,RulePlanExprKind as D}from"./enums.js";import{defineRuleMetadata as Z}from"./rule-metadata.js";const planValue=()=>({kind:D.Value});const planLength=(z=planValue())=>({kind:D.Member,object:z,property:"length"});const planTime=(z=planValue())=>({kind:D.Call0,object:z,method:"getTime"});const planLiteral=(z)=>({kind:D.Literal,value:z});const planCompare=(z,A,B)=>({kind:H.Compare,left:z,op:A,right:typeof B==="number"?planLiteral(B):B});const planOr=(...z)=>({kind:H.Or,checks:z});function makePlannedRule(z){const A={name:z.name,requiresType:z.requiresType,plan:z.plan,validate:z.validate,emit:(B,F)=>emitRulePlan(B,F,z.name,z.plan,void 0,F.insideTypeGate)};if(z.constraints!==void 0)A.constraints=z.constraints;return makeRule(A)}function makeRule(z){const A=(F)=>z.validate(F),B={emit:z.emit,ruleName:z.name,constraints:z.constraints??{}};if(z.requiresType!==void 0)B.requiresType=z.requiresType;if(z.isAsync!==void 0)B.isAsync=z.isAsync;if(z.plan!==void 0)B.plan=z.plan;Z(A,B);return A}function emitRulePlan(z,A,B,F,J,W){const X=W?_(F.failure):F.failure;return`if (${U(X,z,J)}) ${A.fail(B)};`}function _(z){if(z.kind===H.Compare)return z;const A=z.checks.filter((B)=>!$(B));if(A.length===0)return z;if(A.length===1)return A[0];return{kind:z.kind,checks:A}}function $(z){if(z.kind!==H.Compare||z.op!==Y.Neq)return!1;return Q(z.left,z.right)}function Q(z,A){if(z.kind!==A.kind)return!1;switch(z.kind){case D.Value:return!0;case D.Literal:return z.value===A.value;case D.Member:return Q(z.object,A.object);case D.Call0:return z.method===A.method&&Q(z.object,A.object);default:return z}}function U(z,A,B){if(z.kind===H.Compare)return`${I(z.left,A,B)} ${z.op} ${I(z.right,A,B)}`;const F=z.kind===H.And?" && ":" || ";return`(${z.checks.map((J)=>U(J,A,B)).join(F)})`}function I(z,A,B){switch(z.kind){case D.Value:return A;case D.Literal:return String(z.value);case D.Member:return B?.length??`${I(z.object,A,B)}.length`;case D.Call0:return B?.time??`${I(z.object,A,B)}.getTime()`;default:return z}}export{planValue,planLength,planTime,planLiteral,planCompare,planOr,makePlannedRule,makeRule,emitRulePlan};
|
package/dist/src/rules/array.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{makePlannedRule as
|
|
1
|
+
import{CacheKey as D,RequiredType as A,RuleOp as F}from"../enums.js";import{makePlannedRule as G,makeRule as H,planCompare as I,planLength as J}from"../rule-plan.js";function arrayContains(b){return H({name:"arrayContains",requiresType:A.Array,constraints:{values:b},validate:(j)=>Array.isArray(j)&&b.every((w)=>j.includes(w)),emit:(j,w)=>{return`if (!refs[${w.addRef(b)}].every(function(v){return ${j}.includes(v);})) ${w.fail("arrayContains")};`}})}function arrayNotContains(b){return H({name:"arrayNotContains",requiresType:A.Array,constraints:{values:b},validate:(j)=>Array.isArray(j)&&b.every((w)=>!j.includes(w)),emit:(j,w)=>{return`if (refs[${w.addRef(b)}].some(function(v){return ${j}.includes(v);})) ${w.fail("arrayNotContains")};`}})}function arrayMinSize(b){const j={cacheKey:D.Length,failure:I(J(),F.Lt,b)};return G({name:"arrayMinSize",requiresType:A.Array,constraints:{min:b},plan:j,validate:(w)=>Array.isArray(w)&&w.length>=b})}function arrayMaxSize(b){const j={cacheKey:D.Length,failure:I(J(),F.Gt,b)};return G({name:"arrayMaxSize",requiresType:A.Array,constraints:{max:b},plan:j,validate:(w)=>Array.isArray(w)&&w.length<=b})}function arrayUnique(b){return H({name:"arrayUnique",requiresType:A.Array,constraints:{},validate:(j)=>{if(!Array.isArray(j))return!1;if(b){const w=j.map(b);return new Set(w).size===w.length}return new Set(j).size===j.length},emit:(j,w)=>{if(b){const B=w.addRef(b);return`{var keys=${j}.map(refs[${B}]);if(new Set(keys).size!==keys.length)${w.fail("arrayUnique")};}`}return`if(new Set(${j}).size!==${j}.length)${w.fail("arrayUnique")};`}})}const Q={cacheKey:D.Length,failure:I(J(),F.Eq,0)};const arrayNotEmpty=G({name:"arrayNotEmpty",requiresType:A.Array,constraints:{},plan:Q,validate:(b)=>Array.isArray(b)&&b.length>0});export{arrayContains,arrayNotContains,arrayMinSize,arrayMaxSize,arrayUnique,arrayNotEmpty};
|
package/dist/src/rules/date.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{makePlannedRule as
|
|
1
|
+
import{CacheKey as A,RequiredType as B,RuleOp as w}from"../enums.js";import{makePlannedRule as D,planCompare as x,planLiteral as E,planOr as F,planTime as b}from"../rule-plan.js";export function minDate(f){const g=f.getTime(),z={cacheKey:A.Time,failure:F(x(b(),w.Neq,b()),x(b(),w.Lt,E(g)))};return D({name:"minDate",requiresType:B.Date,constraints:{min:f.toISOString()},plan:z,validate:(j)=>j instanceof Date&&j.getTime()>=g})}export function maxDate(f){const g=f.getTime(),z={cacheKey:A.Time,failure:F(x(b(),w.Neq,b()),x(b(),w.Gt,E(g)))};return D({name:"maxDate",requiresType:B.Date,constraints:{max:f.toISOString()},plan:z,validate:(j)=>j instanceof Date&&j.getTime()<=g})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BakerError as
|
|
1
|
+
import{RequiredType as Q}from"../enums.js";import{BakerError as U}from"../errors.js";import{makeRule as V}from"../rule-plan.js";const W={"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 isMobilePhone(f){return w("isMobilePhone",f,W)}const Z={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 isPostalCode(f){return w("isPostalCode",f,Z)}const $={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:/^[LITOUAEVBMNPRSZDFGHCK]{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 isIdentityCard(f){return w("isIdentityCard",f,$)}const h={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 isPassportNumber(f){return w("isPassportNumber",f,h)}function w(f,z,K){const F=K[z];if(!F)throw new U(`Unsupported locale: "${z}" for ${f}`);return V({name:f,requiresType:Q.String,constraints:{locale:z},validate:(j)=>typeof j==="string"&&F.test(j),emit:(j,J)=>{return`if (!re[${J.addRegex(F)}].test(${j})) ${J.fail(f)};`}})}export{isMobilePhone,isPostalCode,isIdentityCard,isPassportNumber};
|
package/dist/src/rules/number.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BakerError as
|
|
1
|
+
import{RequiredType as A,RuleOp as h}from"../enums.js";import{BakerError as I}from"../errors.js";import{makePlannedRule as D,makeRule as J,planCompare as z,planLiteral as F,planOr as G,planValue as f}from"../rule-plan.js";export function min(b,w){if(!Number.isFinite(b))throw new I(`min: bound must be a finite number, got ${b}`);const j=w?.exclusive??!1,H={failure:G(z(f(),h.Neq,f()),z(f(),j?h.Lte:h.Lt,F(b)))};return D({name:"min",requiresType:A.Number,constraints:j?{min:b,exclusive:!0}:{min:b},plan:H,validate:j?(g)=>typeof g==="number"&&g>b:(g)=>typeof g==="number"&&g>=b})}export function max(b,w){if(!Number.isFinite(b))throw new I(`max: bound must be a finite number, got ${b}`);const j=w?.exclusive??!1,H={failure:G(z(f(),h.Neq,f()),z(f(),j?h.Gte:h.Gt,F(b)))};return D({name:"max",requiresType:A.Number,constraints:j?{max:b,exclusive:!0}:{max:b},plan:H,validate:j?(g)=>typeof g==="number"&&g<b:(g)=>typeof g==="number"&&g<=b})}export const isPositive=D({name:"isPositive",requiresType:A.Number,constraints:{min:0,exclusive:!0},plan:{failure:G(z(f(),h.Neq,f()),z(f(),h.Lte,F(0)))},validate:(b)=>typeof b==="number"&&b>0});export const isNegative=D({name:"isNegative",requiresType:A.Number,constraints:{max:0,exclusive:!0},plan:{failure:G(z(f(),h.Neq,f()),z(f(),h.Gte,F(0)))},validate:(b)=>typeof b==="number"&&b<0});export function isDivisibleBy(b){if(b===0)throw new I("isDivisibleBy: divisor must not be zero");return J({name:"isDivisibleBy",requiresType:A.Number,constraints:{divisor:b},validate:(w)=>typeof w==="number"&&w%b===0,emit:(w,j)=>`if (${w} % ${b} !== 0) ${j.fail("isDivisibleBy")};`})}
|
package/dist/src/rules/object.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{makeRule as
|
|
1
|
+
import{RequiredType as C}from"../enums.js";import{makeRule as B}from"../rule-plan.js";export function isNotEmptyObject(w){const z=(f)=>{if(f===null||typeof f!=="object"||Array.isArray(f))return!1;const h=f;if(w?.nullable){for(const A in h)if(h[A]!=null)return!0;return!1}for(const A in h)return!0;return!1};return B({name:"isNotEmptyObject",requiresType:C.Object,constraints:{nullable:w?.nullable},validate:z,emit:(f,h)=>{if(w?.nullable)return`{var __ne=false;for(var __k in ${f}){if(${f}[__k]!=null){__ne=true;break;}}if(!__ne) ${h.fail("isNotEmptyObject")};}`;return`{var __ne=false;for(var __k in ${f}){__ne=true;break;}if(!__ne) ${h.fail("isNotEmptyObject")};}`}})}export function isInstance(w){return B({name:"isInstance",constraints:{type:w.name},validate:(z)=>z instanceof w,emit:(z,f)=>{const h=f.addRef(w);return`if (!(${z} instanceof refs[${h}])) ${f.fail("isInstance")};`}})}
|
package/dist/src/rules/string.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{makePlannedRule as C,makeRule as q,planCompare as h,planLength as P,planOr as Hj}from"../rule-plan.js";function X(j,Z,$,z="string",Q={}){return q({name:j,requiresType:z,constraints:Q,validate:(J)=>typeof J==="string"&&Z(J),emit:$})}function minLength(j){const Z={cacheKey:"length",failure:h(P(),"<",j)};return C({name:"minLength",requiresType:"string",constraints:{min:j},plan:Z,validate:($)=>typeof $==="string"&&$.length>=j})}function maxLength(j){const Z={cacheKey:"length",failure:h(P(),">",j)};return C({name:"maxLength",requiresType:"string",constraints:{max:j},plan:Z,validate:($)=>typeof $==="string"&&$.length<=j})}function length(j,Z){const $={cacheKey:"length",failure:Hj(h(P(),"<",j),h(P(),">",Z))};return C({name:"length",requiresType:"string",constraints:{min:j,max:Z},plan:$,validate:(z)=>typeof z==="string"&&z.length>=j&&z.length<=Z})}function contains(j){return q({name:"contains",requiresType:"string",constraints:{seed:j},validate:(Z)=>typeof Z==="string"&&Z.includes(j),emit:(Z,$)=>{const z=$.addRef(j);return`if (!${Z}.includes(refs[${z}])) ${$.fail("contains")};`}})}function notContains(j){return q({name:"notContains",requiresType:"string",constraints:{seed:j},validate:(Z)=>typeof Z==="string"&&!Z.includes(j),emit:(Z,$)=>{const z=$.addRef(j);return`if (${Z}.includes(refs[${z}])) ${$.fail("notContains")};`}})}function matches(j,Z){const $=j instanceof RegExp?j:new RegExp(j,Z);return q({name:"matches",requiresType:"string",constraints:{pattern:$.source},validate:(z)=>typeof z==="string"&&$.test(z),emit:(z,Q)=>{return`if (!re[${Q.addRegex($)}].test(${z})) ${Q.fail("matches")};`}})}const isLowercase=q({name:"isLowercase",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&j===j.toLowerCase(),emit:(j,Z)=>`if (${j} !== ${j}.toLowerCase()) ${Z.fail("isLowercase")};`});const isUppercase=q({name:"isUppercase",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&j===j.toUpperCase(),emit:(j,Z)=>`if (${j} !== ${j}.toUpperCase()) ${Z.fail("isUppercase")};`});const T=new RegExp(`^[${String.fromCharCode(0)}-${String.fromCharCode(127)}]*$`);const isAscii=X("isAscii",(j)=>T.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(T)}].test(${j})) ${Z.fail("isAscii")};`});const A=/^[a-zA-Z]+$/;const isAlpha=X("isAlpha",(j)=>A.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(A)}].test(${j})) ${Z.fail("isAlpha")};`});const k=/^[a-zA-Z0-9]+$/;const isAlphanumeric=X("isAlphanumeric",(j)=>k.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(k)}].test(${j})) ${Z.fail("isAlphanumeric")};`});const g=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;const isHttpToken=X("isHttpToken",(j)=>g.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(g)}].test(${j})) ${Z.fail("isHttpToken")};`});const O=(j)=>{if(j==="null")return!0;try{return new URL(j).origin===j}catch{return!1}};const isOrigin=q({name:"isOrigin",requiresType:"string",constraints:{format:"origin"},validate:(j)=>typeof j==="string"&&O(j),emit:(j,Z)=>{return`if (!(refs[${Z.addRef(O)}](${j}))) ${Z.fail("isOrigin")};`}});const L=(j)=>j==="*"||O(j);const isCorsOrigin=q({name:"isCorsOrigin",requiresType:"string",constraints:{format:"origin",allowWildcard:!0},validate:(j)=>typeof j==="string"&&L(j),emit:(j,Z)=>{return`if (!(refs[${Z.addRef(L)}](${j}))) ${Z.fail("isCorsOrigin")};`}});const isBooleanString=q({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")};`});const Bj=/^[0-9]+$/;const Oj=/^[+-]?(?:[0-9]*\.)?[0-9]+$/;function isNumberString(j){const Z=j?.no_symbols??!1,$=Z?Bj:Oj;return X("isNumberString",(z)=>$.test(z),(z,Q)=>{return`if (!re[${Q.addRegex($)}].test(${z})) ${Q.fail("isNumberString")};`},"string",{no_symbols:Z})}function isDecimal(){const j=/^[-+]?(?:\d+(?:\.\d+)?|\.\d+)$/;return X("isDecimal",(Z)=>j.test(Z),(Z,$)=>{return`if (!re[${$.addRegex(j)}].test(${Z})) ${$.fail("isDecimal")};`})}const H=/[^\u0020-\u007E\uFF61-\uFF9F]/;const isFullWidth=X("isFullWidth",(j)=>H.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(H)}].test(${j})) ${Z.fail("isFullWidth")};`});const B=/[\u0020-\u007E\uFF61-\uFF9F]/;const isHalfWidth=X("isHalfWidth",(j)=>B.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(B)}].test(${j})) ${Z.fail("isHalfWidth")};`});const isVariableWidth=X("isVariableWidth",(j)=>H.test(j)&&B.test(j),(j,Z)=>{const $=Z.addRegex(H),z=Z.addRegex(B);return`if (!re[${$}].test(${j}) || !re[${z}].test(${j})) ${Z.fail("isVariableWidth")};`});const I=new RegExp(`[^${String.fromCharCode(0)}-${String.fromCharCode(255)}]`);const isMultibyte=X("isMultibyte",(j)=>I.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(I)}].test(${j})) ${Z.fail("isMultibyte")};`});const d=/[\uD800-\uDBFF][\uDC00-\uDFFF]/;const isSurrogatePair=X("isSurrogatePair",(j)=>d.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(d)}].test(${j})) ${Z.fail("isSurrogatePair")};`});const p=/^[0-9a-fA-F]+$/;const isHexadecimal=X("isHexadecimal",(j)=>p.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(p)}].test(${j})) ${Z.fail("isHexadecimal")};`});const S=/^(0[oO])?[0-7]+$/;const isOctal=X("isOctal",(j)=>S.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(S)}].test(${j})) ${Z.fail("isOctal")};`});const _=/^[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 isEmail(){return X("isEmail",(j)=>_.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(_)}].test(${j})) ${Z.fail("isEmail")};`},"string",{format:"email"})}const Cj=["http","https","ftp"];function isURL(j){const Z=j?.protocols??Cj,$=Z.map((Q)=>Q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),z=new RegExp(`^(?:${$}):\\/\\/(?:[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 q({name:"isURL",requiresType:"string",constraints:{format:"uri",protocols:Z},validate:(Q)=>typeof Q==="string"&&z.test(Q),emit:(Q,J)=>{return`if (!re[${J.addRegex(z)}].test(${Q})) ${J.fail("isURL")};`}})}const E={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 isUUID(j){const Z=j!=null?E[j]:E.all;return X("isUUID",($)=>Z.test($),($,z)=>{return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isUUID")};`},"string",{format:"uuid",version:j})}const y=/^(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)$/;const G=/^(?:[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 isIP(j){return q({name:"isIP",requiresType:"string",constraints:{version:j},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j===4)return y.test(Z);if(j===6)return G.test(Z);return y.test(Z)||G.test(Z)},emit:(Z,$)=>{if(j===4)return`if (!re[${$.addRegex(y)}].test(${Z})) ${$.fail("isIP")};`;if(j===6)return`if (!re[${$.addRegex(G)}].test(${Z})) ${$.fail("isIP")};`;const z=$.addRegex(y),Q=$.addRegex(G);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isIP")};`}})}const o=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;const isHexColor=X("isHexColor",(j)=>o.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(o)}].test(${j})) ${Z.fail("isHexColor")};`});const M=/^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*\)$/;const D=/^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*\)$/;const R=/^rgb\(\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*\)$/;const N=/^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 isRgbColor(j=!1){return q({name:"isRgbColor",requiresType:"string",constraints:{includePercentValues:j},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j)return R.test(Z)||N.test(Z)||M.test(Z)||D.test(Z);return M.test(Z)||D.test(Z)},emit:(Z,$)=>{if(j){const J=$.addRegex(R),f=$.addRegex(N),K=$.addRegex(M),Y=$.addRegex(D);return`if (!re[${J}].test(${Z}) && !re[${f}].test(${Z}) && !re[${K}].test(${Z}) && !re[${Y}].test(${Z})) ${$.fail("isRgbColor")};`}const z=$.addRegex(M),Q=$.addRegex(D);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isRgbColor")};`}})}const s=/^(?:hsl\(\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*\)|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*\))$/;const isHSL=X("isHSL",(j)=>s.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(s)}].test(${j})) ${Z.fail("isHSL")};`});const n=/^[0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}$/;const u=/^[0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5}$/;const x=/^[0-9a-fA-F]{12}$/;function isMACAddress(j){return q({name:"isMACAddress",requiresType:"string",constraints:{no_separators:j?.no_separators},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j?.no_separators)return x.test(Z);return n.test(Z)||u.test(Z)},emit:(Z,$)=>{if(j?.no_separators)return`if (!re[${$.addRegex(x)}].test(${Z})) ${$.fail("isMACAddress")};`;const z=$.addRegex(n),Q=$.addRegex(u);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isMACAddress")};`}})}function i(j){const Z=j.replace(/[-\s]/g,"");if(!/^\d{9}[\dX]$/.test(Z))return!1;let $=0;for(let Q=0;Q<9;Q++)$+=(10-Q)*(Z.charCodeAt(Q)-48);const z=Z[9]==="X"?10:Z.charCodeAt(9)-48;$+=z;return $%11===0}function l(j){const Z=j.replace(/[-\s]/g,"");if(!/^\d{13}$/.test(Z))return!1;let $=0;for(let Q=0;Q<12;Q++)$+=(Z.charCodeAt(Q)-48)*(Q%2===0?1:3);return(10-$%10)%10===Z.charCodeAt(12)-48}function isISBN(j){const Z=(Q)=>{if(typeof Q!=="string")return!1;if(j===10)return i(Q);if(j===13)return l(Q);return i(Q)||l(Q)},$=(Q)=>`{var s=${Q}.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%%}}}`,z=(Q)=>`{var s=${Q}.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 q({name:"isISBN",requiresType:"string",constraints:{version:j},validate:Z,emit:(Q,J)=>{const f=J.fail("isISBN");if(j===10)return $(Q).replace(/%%FAIL%%/g,f);if(j===13)return z(Q).replace(/%%FAIL%%/g,f);const K=$(Q).replace(/%%FAIL%%/g,"__isbn_ok=false"),Y=z(Q).replace(/%%FAIL%%/g,"__isbn_ok=false");return`{var __isbn_ok=true;${K} if(!__isbn_ok){__isbn_ok=true;${Y}} if(!__isbn_ok)${f};}`}})}const Uj=/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/;function Tj(j){if(!Uj.test(j))return!1;let Z=0,$=!1;for(let z=j.length-1;z>=0;z--){const Q=j.charCodeAt(z);if(Q<=57){let J=Q-48;if($){J*=2;if(J>9)J-=9}Z+=J;$=!$}else{const J=Q-55,f=J%10;let K=f;if($){K*=2;if(K>9)K-=9}Z+=K;$=!$;K=(J-f)/10;if($){K*=2;if(K>9)K-=9}Z+=K;$=!$}}return Z%10===0}const isISIN=X("isISIN",Tj,(j,Z)=>{return`if (!re[${Z.addRegex(Uj)}].test(${j})) ${Z.fail("isISIN")};
|
|
1
|
+
import{CacheKey as k,RequiredType as f,RuleOp as h}from"../enums.js";import{makePlannedRule as g,makeRule as W,planCompare as B,planLength as y,planOr as Cj}from"../rule-plan.js";function X(j,Z,$,z=f.String,Q={}){return W({name:j,requiresType:z,constraints:Q,validate:(K)=>typeof K==="string"&&Z(K),emit:$})}function minLength(j){const Z={cacheKey:k.Length,failure:B(y(),h.Lt,j)};return g({name:"minLength",requiresType:f.String,constraints:{min:j},plan:Z,validate:($)=>typeof $==="string"&&$.length>=j})}function maxLength(j){const Z={cacheKey:k.Length,failure:B(y(),h.Gt,j)};return g({name:"maxLength",requiresType:f.String,constraints:{max:j},plan:Z,validate:($)=>typeof $==="string"&&$.length<=j})}function length(j,Z){const $={cacheKey:k.Length,failure:Cj(B(y(),h.Lt,j),B(y(),h.Gt,Z))};return g({name:"length",requiresType:f.String,constraints:{min:j,max:Z},plan:$,validate:(z)=>typeof z==="string"&&z.length>=j&&z.length<=Z})}function contains(j){return W({name:"contains",requiresType:f.String,constraints:{seed:j},validate:(Z)=>typeof Z==="string"&&Z.includes(j),emit:(Z,$)=>{const z=$.addRef(j);return`if (!${Z}.includes(refs[${z}])) ${$.fail("contains")};`}})}function notContains(j){return W({name:"notContains",requiresType:f.String,constraints:{seed:j},validate:(Z)=>typeof Z==="string"&&!Z.includes(j),emit:(Z,$)=>{const z=$.addRef(j);return`if (${Z}.includes(refs[${z}])) ${$.fail("notContains")};`}})}function matches(j,Z){const $=j instanceof RegExp?j:new RegExp(j,Z);return W({name:"matches",requiresType:f.String,constraints:{pattern:$.source},validate:(z)=>typeof z==="string"&&$.test(z),emit:(z,Q)=>{return`if (!re[${Q.addRegex($)}].test(${z})) ${Q.fail("matches")};`}})}const isLowercase=W({name:"isLowercase",requiresType:f.String,constraints:{},validate:(j)=>typeof j==="string"&&j===j.toLowerCase(),emit:(j,Z)=>`if (${j} !== ${j}.toLowerCase()) ${Z.fail("isLowercase")};`});const isUppercase=W({name:"isUppercase",requiresType:f.String,constraints:{},validate:(j)=>typeof j==="string"&&j===j.toUpperCase(),emit:(j,Z)=>`if (${j} !== ${j}.toUpperCase()) ${Z.fail("isUppercase")};`});const L=new RegExp(`^[${String.fromCharCode(0)}-${String.fromCharCode(127)}]*$`);const isAscii=X("isAscii",(j)=>L.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(L)}].test(${j})) ${Z.fail("isAscii")};`});const I=/^[a-zA-Z]+$/;const isAlpha=X("isAlpha",(j)=>I.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(I)}].test(${j})) ${Z.fail("isAlpha")};`});const T=/^[a-zA-Z0-9]+$/;const isAlphanumeric=X("isAlphanumeric",(j)=>T.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(T)}].test(${j})) ${Z.fail("isAlphanumeric")};`});const S=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;const isHttpToken=X("isHttpToken",(j)=>S.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(S)}].test(${j})) ${Z.fail("isHttpToken")};`});const A=(j)=>{if(j==="null")return!0;try{return new URL(j).origin===j}catch{return!1}};const isOrigin=W({name:"isOrigin",requiresType:f.String,constraints:{format:"origin"},validate:(j)=>typeof j==="string"&&A(j),emit:(j,Z)=>{return`if (!(refs[${Z.addRef(A)}](${j}))) ${Z.fail("isOrigin")};`}});const d=(j)=>j==="*"||A(j);const isCorsOrigin=W({name:"isCorsOrigin",requiresType:f.String,constraints:{format:"origin",allowWildcard:!0},validate:(j)=>typeof j==="string"&&d(j),emit:(j,Z)=>{return`if (!(refs[${Z.addRef(d)}](${j}))) ${Z.fail("isCorsOrigin")};`}});const isBooleanString=W({name:"isBooleanString",requiresType:f.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")};`});const Aj=/^[0-9]+$/;const kj=/^[+-]?(?:[0-9]*\.)?[0-9]+$/;function isNumberString(j){const Z=j?.no_symbols??!1,$=Z?Aj:kj;return X("isNumberString",(z)=>$.test(z),(z,Q)=>{return`if (!re[${Q.addRegex($)}].test(${z})) ${Q.fail("isNumberString")};`},f.String,{no_symbols:Z})}function isDecimal(){const j=/^[-+]?(?:\d+(?:\.\d+)?|\.\d+)$/;return X("isDecimal",(Z)=>j.test(Z),(Z,$)=>{return`if (!re[${$.addRegex(j)}].test(${Z})) ${$.fail("isDecimal")};`})}const O=/[^\u0020-\u007E\uFF61-\uFF9F]/;const isFullWidth=X("isFullWidth",(j)=>O.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(O)}].test(${j})) ${Z.fail("isFullWidth")};`});const C=/[\u0020-\u007E\uFF61-\uFF9F]/;const isHalfWidth=X("isHalfWidth",(j)=>C.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(C)}].test(${j})) ${Z.fail("isHalfWidth")};`});const isVariableWidth=X("isVariableWidth",(j)=>O.test(j)&&C.test(j),(j,Z)=>{const $=Z.addRegex(O),z=Z.addRegex(C);return`if (!re[${$}].test(${j}) || !re[${z}].test(${j})) ${Z.fail("isVariableWidth")};`});const p=new RegExp(`[^${String.fromCharCode(0)}-${String.fromCharCode(255)}]`);const isMultibyte=X("isMultibyte",(j)=>p.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(p)}].test(${j})) ${Z.fail("isMultibyte")};`});const _=/[\uD800-\uDBFF][\uDC00-\uDFFF]/;const isSurrogatePair=X("isSurrogatePair",(j)=>_.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(_)}].test(${j})) ${Z.fail("isSurrogatePair")};`});const E=/^[0-9a-fA-F]+$/;const isHexadecimal=X("isHexadecimal",(j)=>E.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(E)}].test(${j})) ${Z.fail("isHexadecimal")};`});const o=/^(0[oO])?[0-7]+$/;const isOctal=X("isOctal",(j)=>o.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(o)}].test(${j})) ${Z.fail("isOctal")};`});const N=/^[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 isEmail(){return X("isEmail",(j)=>N.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(N)}].test(${j})) ${Z.fail("isEmail")};`},f.String,{format:"email"})}const gj=["http","https","ftp"];function isURL(j){const Z=j?.protocols??gj,$=Z.map((Q)=>Q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),z=new RegExp(`^(?:${$}):\\/\\/(?:[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 W({name:"isURL",requiresType:f.String,constraints:{format:"uri",protocols:Z},validate:(Q)=>typeof Q==="string"&&z.test(Q),emit:(Q,K)=>{return`if (!re[${K.addRegex(z)}].test(${Q})) ${K.fail("isURL")};`}})}const R={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 isUUID(j){const Z=j!=null?R[j]:R.all;return X("isUUID",($)=>Z.test($),($,z)=>{return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isUUID")};`},f.String,{format:"uuid",version:j})}const q=/^(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)$/;const D=/^(?:[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 isIP(j){return W({name:"isIP",requiresType:f.String,constraints:{version:j},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j===4)return q.test(Z);if(j===6)return D.test(Z);return q.test(Z)||D.test(Z)},emit:(Z,$)=>{if(j===4)return`if (!re[${$.addRegex(q)}].test(${Z})) ${$.fail("isIP")};`;if(j===6)return`if (!re[${$.addRegex(D)}].test(${Z})) ${$.fail("isIP")};`;const z=$.addRegex(q),Q=$.addRegex(D);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isIP")};`}})}const s=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;const isHexColor=X("isHexColor",(j)=>s.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(s)}].test(${j})) ${Z.fail("isHexColor")};`});const U=/^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*\)$/;const 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*\)$/;const n=/^rgb\(\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*\)$/;const x=/^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 isRgbColor(j=!1){return W({name:"isRgbColor",requiresType:f.String,constraints:{includePercentValues:j},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j)return n.test(Z)||x.test(Z)||U.test(Z)||P.test(Z);return U.test(Z)||P.test(Z)},emit:(Z,$)=>{if(j){const K=$.addRegex(n),Y=$.addRegex(x),J=$.addRegex(U),w=$.addRegex(P);return`if (!re[${K}].test(${Z}) && !re[${Y}].test(${Z}) && !re[${J}].test(${Z}) && !re[${w}].test(${Z})) ${$.fail("isRgbColor")};`}const z=$.addRegex(U),Q=$.addRegex(P);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isRgbColor")};`}})}const u=/^(?:hsl\(\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*\)|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*\))$/;const isHSL=X("isHSL",(j)=>u.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(u)}].test(${j})) ${Z.fail("isHSL")};`});const l=/^[0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}$/;const i=/^[0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5}$/;const m=/^[0-9a-fA-F]{12}$/;function isMACAddress(j){return W({name:"isMACAddress",requiresType:f.String,constraints:{no_separators:j?.no_separators},validate:(Z)=>{if(typeof Z!=="string")return!1;if(j?.no_separators)return m.test(Z);return l.test(Z)||i.test(Z)},emit:(Z,$)=>{if(j?.no_separators)return`if (!re[${$.addRegex(m)}].test(${Z})) ${$.fail("isMACAddress")};`;const z=$.addRegex(l),Q=$.addRegex(i);return`if (!re[${z}].test(${Z}) && !re[${Q}].test(${Z})) ${$.fail("isMACAddress")};`}})}function c(j){const Z=j.replace(/[-\s]/g,"");if(!/^\d{9}[\dX]$/.test(Z))return!1;let $=0;for(let Q=0;Q<9;Q++)$+=(10-Q)*(Z.charCodeAt(Q)-48);const z=Z[9]==="X"?10:Z.charCodeAt(9)-48;$+=z;return $%11===0}function r(j){const Z=j.replace(/[-\s]/g,"");if(!/^\d{13}$/.test(Z))return!1;let $=0;for(let Q=0;Q<12;Q++)$+=(Z.charCodeAt(Q)-48)*(Q%2===0?1:3);return(10-$%10)%10===Z.charCodeAt(12)-48}function isISBN(j){const Z=(Q)=>{if(typeof Q!=="string")return!1;if(j===10)return c(Q);if(j===13)return r(Q);return c(Q)||r(Q)},$=(Q)=>`{var s=${Q}.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%%}}}`,z=(Q)=>`{var s=${Q}.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 W({name:"isISBN",requiresType:f.String,constraints:{version:j},validate:Z,emit:(Q,K)=>{const Y=K.fail("isISBN");if(j===10)return $(Q).replace(/%%FAIL%%/g,Y);if(j===13)return z(Q).replace(/%%FAIL%%/g,Y);const J=$(Q).replace(/%%FAIL%%/g,"__isbn_ok=false"),w=z(Q).replace(/%%FAIL%%/g,"__isbn_ok=false");return`{var __isbn_ok=true;${J} if(!__isbn_ok){__isbn_ok=true;${w}} if(!__isbn_ok)${Y};}`}})}const Bj=/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/;function Lj(j){if(!Bj.test(j))return!1;let Z=0,$=!1;for(let z=j.length-1;z>=0;z--){const Q=j.charCodeAt(z);if(Q<=57){let K=Q-48;if($){K*=2;if(K>9)K-=9}Z+=K;$=!$}else{const K=Q-55,Y=K%10;let J=Y;if($){J*=2;if(J>9)J-=9}Z+=J;$=!$;J=(K-Y)/10;if($){J*=2;if(J>9)J-=9}Z+=J;$=!$}}return Z%10===0}const isISIN=X("isISIN",Lj,(j,Z)=>{return`if (!re[${Z.addRegex(Bj)}].test(${j})) ${Z.fail("isISIN")};
|
|
2
2
|
else { var isSum=0,isAlt=false;
|
|
3
3
|
for(var isI=${j}.length-1;isI>=0;isI--){var isCd=${j}.charCodeAt(isI);if(isCd<=57){var isN=isCd-48;if(isAlt){isN*=2;if(isN>9)isN-=9;}isSum+=isN;isAlt=!isAlt;}else{var isVal=isCd-55;var isO=isVal%10;var isN=isO;if(isAlt){isN*=2;if(isN>9)isN-=9;}isSum+=isN;isAlt=!isAlt;isN=(isVal-isO)/10;if(isAlt){isN*=2;if(isN>9)isN-=9;}isSum+=isN;isAlt=!isAlt;}}
|
|
4
|
-
if(isSum%10!==0)${Z.fail("isISIN")}; }`});const
|
|
5
|
-
else { var dm=${$}.match(/^(\\d{4})-(\\d{2})(?:-(\\d{2}))?/);if(dm){var mo=Number(dm[2]);if(mo<1||mo>12){${z.fail("isISO8601")}}else if(dm[3]!==undefined){var da=Number(dm[3]),md=new Date(Number(dm[1]),mo,0).getDate();if(da<1||da>md){${z.fail("isISO8601")}}}}var tm=${$}.match(/T(\\d{2}):(\\d{2}):(\\d{2})/);if(tm){var hh=Number(tm[1]),mm=Number(tm[2]),ss=Number(tm[3]);if(hh<0||hh>23||mm<0||mm>59||ss<0||ss>60)${z.fail("isISO8601")};} }`}});return X("isISO8601",(Z)=>U.test(Z),(Z,$)=>{return`if (!re[${$.addRegex(U)}].test(${Z})) ${$.fail("isISO8601")};`},"string",{format:"date-time",strict:!1})}const m=/^[A-Z]{2}-[A-Z0-9]{3}-\d{2}-\d{5}$|^[A-Z]{2}[A-Z0-9]{3}\d{7}$/;const isISRC=X("isISRC",(j)=>m.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(m)}].test(${j})) ${Z.fail("isISRC")};`});function kj(j,Z){const $=Z?.requireHyphen!==!1,z=$?j:j.replace(/-/g,"");if(!($?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/).test(z))return!1;const J=z.replace(/-/g,"");let f=0;for(let Y=0;Y<7;Y++)f+=(8-Y)*(J.charCodeAt(Y)-48);const K=J[7]==="X"?10:J.charCodeAt(7)-48;f+=K;return f%11===0}function isISSN(j){const Z=j?.requireHyphen!==!1,$=(Q)=>typeof Q==="string"&&kj(Q,j),z=Z?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/;return q({name:"isISSN",requiresType:"string",constraints:{requireHyphen:j?.requireHyphen},validate:$,emit:(Q,J)=>{const f=J.addRegex(z);return`{var issn=${Z?Q:`${Q}.replace(/-/g,'')`};if(!re[${f}].test(issn)){${J.fail("isISSN")}}else{var id=issn.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)${J.fail("isISSN")};}}`}})}const c=/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;const isJWT=X("isJWT",(j)=>c.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(c)}].test(${j})) ${Z.fail("isJWT")};`});const r=/^[-+]?([1-8]?\d(?:\.\d+)?|90(?:\.0+)?),\s*[-+]?(180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$/;function isLatLong(){return X("isLatLong",(j)=>r.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(r)}].test(${j})) ${Z.fail("isLatLong")};`})}const v=/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?(?:-[a-zA-Z\d]{5,8})*$/;const isLocale=X("isLocale",(j)=>v.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(v)}].test(${j})) ${Z.fail("isLocale")};`});const t=/^data:([a-zA-Z0-9!#$&\-^_]+\/[a-zA-Z0-9!#$&\-^_]+)(?:;[a-zA-Z0-9-]+=[a-zA-Z0-9-]+)*(?:;base64)?,[\s\S]*$/;const isDataURI=X("isDataURI",(j)=>t.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(t)}].test(${j})) ${Z.fail("isDataURI")};`});function isFQDN(j){const Z=j?.require_tld!==!1,$=j?.allow_underscores??!1,z=j?.allow_trailing_dot??!1,Q=$?/^[a-zA-Z0-9_-]+$/:/^[a-zA-Z0-9-]+$/,J=(f)=>{if(typeof f!=="string")return!1;let K=f;if(z&&K.endsWith("."))K=K.slice(0,-1);if(K.length===0)return!1;const Y=K.split(".");if(Z&&Y.length<2)return!1;if(Z){const W=Y[Y.length-1];if(!W||W.length<2||!/^[a-zA-Z]{2,}$/.test(W))return!1}return Y.every((W)=>{if(W.length===0||W.length>63)return!1;if(!Q.test(W))return!1;if(!$&&(W.startsWith("-")||W.endsWith("-")))return!1;return!0})};return q({name:"isFQDN",requiresType:"string",constraints:{require_tld:j?.require_tld,allow_underscores:j?.allow_underscores,allow_trailing_dot:j?.allow_trailing_dot},validate:J,emit:(f,K)=>{const Y=K.addRegex(Q),W=Z?K.addRegex(/^[a-zA-Z]{2,}$/):-1,F=`var fqOk=true;for(var fi=0;fi<fp.length;fi++){var p=fp[fi];${`if(p.length===0||p.length>63){fqOk=false;break;}if(!re[${Y}].test(p)){fqOk=false;break;}`+($?"":"if(p[0]==='-'||p[p.length-1]==='-'){fqOk=false;break;}")}}if(!fqOk)${K.fail("isFQDN")};`;let w=`{var fq=${f};`;if(z)w+="if(fq.endsWith('.'))fq=fq.slice(0,-1);";w+=`if(fq.length===0)${K.fail("isFQDN")};`;w+="else{var fp=fq.split('.');";if(Z){w+=`if(fp.length<2)${K.fail("isFQDN")};`;w+="else{var tld=fp[fp.length-1];";w+=`if(!tld||tld.length<2||!re[${W}].test(tld))${K.fail("isFQDN")};`;w+=`else{${F}}`;w+="}"}else w+=F;w+="}";w+="}";return w}})}const e=/^(?: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)$/;const isPort=X("isPort",(j)=>e.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(e)}].test(${j})) ${Z.fail("isPort")};`});function gj(j){if(!/^\d{8}$/.test(j)&&!/^\d{13}$/.test(j))return!1;const Z=j.length;let $=0;for(let Q=0;Q<Z-1;Q++){const J=j.charCodeAt(Q)-48;$+=J*(Z===8?Q%2===0?3:1:Q%2===0?1:3)}return(10-$%10)%10===j.charCodeAt(Z-1)-48}const isEAN=X("isEAN",gj,(j,Z)=>{const $=Z.addRegex(/^\d{8}$/),z=Z.addRegex(/^\d{13}$/);return`{var ev=${j};if(!re[${$}].test(ev)&&!re[${z}].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")};}}`});const a=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"]);const isISO31661Alpha2=q({name:"isISO31661Alpha2",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("isISO31661Alpha2")};`}});const jj=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"]);const isISO31661Alpha3=q({name:"isISO31661Alpha3",requiresType:"string",constraints:{},validate:(j)=>typeof j==="string"&&jj.has(j.toUpperCase()),emit:(j,Z)=>{return`if (!refs[${Z.addRef(jj)}].has(${j}.toUpperCase())) ${Z.fail("isISO31661Alpha3")};`}});const Zj=/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/i;const isBIC=X("isBIC",(j)=>Zj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Zj)}].test(${j})) ${Z.fail("isBIC")};`});const $j=/^[a-zA-Z0-9_-]{20}$/;const isFirebasePushId=X("isFirebasePushId",(j)=>$j.test(j),(j,Z)=>{return`if (!re[${Z.addRegex($j)}].test(${j})) ${Z.fail("isFirebasePushId")};`});const zj=/^(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-]+)*))?$/;const isSemVer=X("isSemVer",(j)=>zj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(zj)}].test(${j})) ${Z.fail("isSemVer")};`});const Qj=/^[0-9a-fA-F]{24}$/;const isMongoId=X("isMongoId",(j)=>Qj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Qj)}].test(${j})) ${Z.fail("isMongoId")};`});const Lj=(j)=>{if(typeof j!=="string")return!1;try{JSON.parse(j);return!0}catch{return!1}};const isJSON=q({name:"isJSON",requiresType:"string",constraints:{},validate:Lj,emit:(j,Z)=>`try { JSON.parse(${j}); } catch { ${Z.fail("isJSON")}; }`});const Kj=/^[A-Z2-7]+=*$/i;function isBase32(){return X("isBase32",(j)=>j.length%8===0&&Kj.test(j),(j,Z)=>{const $=Z.addRegex(Kj);return`if (${j}.length % 8 !== 0 || !re[${$}].test(${j})) ${Z.fail("isBase32")};`})}const Jj=/^[1-9A-HJ-NP-Za-km-z]+$/;const isBase58=X("isBase58",(j)=>Jj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Jj)}].test(${j})) ${Z.fail("isBase58")};`});const Ij=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;const dj=/^[A-Za-z0-9_-]+={0,2}$/;function isBase64(j){const Z=j?.urlSafe?dj:Ij;return X("isBase64",($)=>Z.test($),($,z)=>{return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isBase64")};`},"string",{urlSafe:j?.urlSafe})}const hj=/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;function pj(j){if(!hj.test(j))return!1;const Z=Number(j.slice(0,4)),$=Number(j.slice(5,7)),z=Number(j.slice(8,10)),Q=new Date(Z,$,0).getDate();return z>=1&&z<=Q}function isDateString(){return X("isDateString",pj,(j,Z)=>{return`if (!re[${Z.addRegex(hj)}].test(${j})) ${Z.fail("isDateString")};
|
|
6
|
-
else { var y=Number(${j}.slice(0,4)),m=Number(${j}.slice(5,7)),d=Number(${j}.slice(8,10));var md=new Date(y,m,0).getDate(); if(d<1||d>md)${Z.fail("isDateString")}; }`})}const
|
|
4
|
+
if(isSum%10!==0)${Z.fail("isISIN")}; }`});const H=/^\d{4}(?:-\d{2}(?:-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?)?)?$/;function Ij(j){if(!H.test(j))return!1;const Z=j.match(/^(\d{4})-(\d{2})(?:-(\d{2}))?/);if(!Z)return!0;const $=Number(Z[2]);if($<1||$>12)return!1;if(Z[3]!==void 0){const J=Number(Z[3]),w=new Date(Number(Z[1]),$,0).getDate();if(J<1||J>w)return!1}const z=j.match(/T(\d{2}):(\d{2}):(\d{2})/);if(!z)return!0;const Q=Number(z[1]),K=Number(z[2]),Y=Number(z[3]);return Q>=0&&Q<=23&&K>=0&&K<=59&&Y>=0&&Y<=60}function isISO8601(j){if(j?.strict){const Z=($)=>typeof $==="string"&&Ij($);return W({name:"isISO8601",requiresType:f.String,constraints:{format:"date-time",strict:!0},validate:Z,emit:($,z)=>{return`if (!re[${z.addRegex(H)}].test(${$})) ${z.fail("isISO8601")};
|
|
5
|
+
else { var dm=${$}.match(/^(\\d{4})-(\\d{2})(?:-(\\d{2}))?/);if(dm){var mo=Number(dm[2]);if(mo<1||mo>12){${z.fail("isISO8601")}}else if(dm[3]!==undefined){var da=Number(dm[3]),md=new Date(Number(dm[1]),mo,0).getDate();if(da<1||da>md){${z.fail("isISO8601")}}}}var tm=${$}.match(/T(\\d{2}):(\\d{2}):(\\d{2})/);if(tm){var hh=Number(tm[1]),mm=Number(tm[2]),ss=Number(tm[3]);if(hh<0||hh>23||mm<0||mm>59||ss<0||ss>60)${z.fail("isISO8601")};} }`}})}return X("isISO8601",(Z)=>H.test(Z),(Z,$)=>{return`if (!re[${$.addRegex(H)}].test(${Z})) ${$.fail("isISO8601")};`},f.String,{format:"date-time",strict:!1})}const v=/^[A-Z]{2}-[A-Z0-9]{3}-\d{2}-\d{5}$|^[A-Z]{2}[A-Z0-9]{3}\d{7}$/;const isISRC=X("isISRC",(j)=>v.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(v)}].test(${j})) ${Z.fail("isISRC")};`});function Tj(j,Z){const $=Z?.requireHyphen!==!1,z=$?j:j.replace(/-/g,"");if(!($?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/).test(z))return!1;const K=z.replace(/-/g,"");let Y=0;for(let w=0;w<7;w++)Y+=(8-w)*(K.charCodeAt(w)-48);const J=K[7]==="X"?10:K.charCodeAt(7)-48;Y+=J;return Y%11===0}function isISSN(j){const Z=j?.requireHyphen!==!1,$=(Q)=>typeof Q==="string"&&Tj(Q,j),z=Z?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/;return W({name:"isISSN",requiresType:f.String,constraints:{requireHyphen:j?.requireHyphen},validate:$,emit:(Q,K)=>{const Y=K.addRegex(z);return`{var issn=${Z?Q:`${Q}.replace(/-/g,'')`};if(!re[${Y}].test(issn)){${K.fail("isISSN")}}else{var id=issn.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)${K.fail("isISSN")};}}`}})}const t=/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;const isJWT=X("isJWT",(j)=>t.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(t)}].test(${j})) ${Z.fail("isJWT")};`});const a=/^[-+]?([1-8]?\d(?:\.\d+)?|90(?:\.0+)?),\s*[-+]?(180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$/;function isLatLong(){return X("isLatLong",(j)=>a.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(a)}].test(${j})) ${Z.fail("isLatLong")};`})}const e=/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?(?:-[a-zA-Z\d]{5,8})*$/;const isLocale=X("isLocale",(j)=>e.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(e)}].test(${j})) ${Z.fail("isLocale")};`});const jj=/^data:([a-zA-Z0-9!#$&\-^_]+\/[a-zA-Z0-9!#$&\-^_]+)(?:;[a-zA-Z0-9-]+=[a-zA-Z0-9-]+)*(?:;base64)?,[\s\S]*$/;const isDataURI=X("isDataURI",(j)=>jj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(jj)}].test(${j})) ${Z.fail("isDataURI")};`});function isFQDN(j){const Z=j?.require_tld!==!1,$=j?.allow_underscores??!1,z=j?.allow_trailing_dot??!1,Q=$?/^[a-zA-Z0-9_-]+$/:/^[a-zA-Z0-9-]+$/,K=(Y)=>{if(typeof Y!=="string")return!1;let J=Y;if(z&&J.endsWith("."))J=J.slice(0,-1);if(J.length===0)return!1;const w=J.split(".");if(Z&&w.length<2)return!1;if(Z){const b=w[w.length-1];if(!b||b.length<2||!/^[a-zA-Z]{2,}$/.test(b))return!1}return w.every((b)=>{if(b.length===0||b.length>63)return!1;if(!Q.test(b))return!1;if(!$&&(b.startsWith("-")||b.endsWith("-")))return!1;return!0})};return W({name:"isFQDN",requiresType:f.String,constraints:{require_tld:j?.require_tld,allow_underscores:j?.allow_underscores,allow_trailing_dot:j?.allow_trailing_dot},validate:K,emit:(Y,J)=>{const w=J.addRegex(Q),b=Z?J.addRegex(/^[a-zA-Z]{2,}$/):-1,G=`var fqOk=true;for(var fi=0;fi<fp.length;fi++){var p=fp[fi];${`if(p.length===0||p.length>63){fqOk=false;break;}if(!re[${w}].test(p)){fqOk=false;break;}`+($?"":"if(p[0]==='-'||p[p.length-1]==='-'){fqOk=false;break;}")}}if(!fqOk)${J.fail("isFQDN")};`;let F=`{var fq=${Y};`;if(z)F+="if(fq.endsWith('.'))fq=fq.slice(0,-1);";F+=`if(fq.length===0)${J.fail("isFQDN")};`;F+="else{var fp=fq.split('.');";if(Z){F+=`if(fp.length<2)${J.fail("isFQDN")};`;F+="else{var tld=fp[fp.length-1];";F+=`if(!tld||tld.length<2||!re[${b}].test(tld))${J.fail("isFQDN")};`;F+=`else{${G}}`;F+="}"}else F+=G;F+="}";F+="}";return F}})}const Zj=/^(?: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)$/;const isPort=X("isPort",(j)=>Zj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Zj)}].test(${j})) ${Z.fail("isPort")};`});function Sj(j){if(!/^\d{8}$/.test(j)&&!/^\d{13}$/.test(j))return!1;const Z=j.length;let $=0;for(let Q=0;Q<Z-1;Q++){const K=j.charCodeAt(Q)-48;$+=K*(Z===8?Q%2===0?3:1:Q%2===0?1:3)}return(10-$%10)%10===j.charCodeAt(Z-1)-48}const isEAN=X("isEAN",Sj,(j,Z)=>{const $=Z.addRegex(/^\d{8}$/),z=Z.addRegex(/^\d{13}$/);return`{var ev=${j};if(!re[${$}].test(ev)&&!re[${z}].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")};}}`});const $j=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"]);const isISO31661Alpha2=W({name:"isISO31661Alpha2",requiresType:f.String,constraints:{},validate:(j)=>typeof j==="string"&&$j.has(j.toUpperCase()),emit:(j,Z)=>{return`if (!refs[${Z.addRef($j)}].has(${j}.toUpperCase())) ${Z.fail("isISO31661Alpha2")};`}});const zj=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"]);const isISO31661Alpha3=W({name:"isISO31661Alpha3",requiresType:f.String,constraints:{},validate:(j)=>typeof j==="string"&&zj.has(j.toUpperCase()),emit:(j,Z)=>{return`if (!refs[${Z.addRef(zj)}].has(${j}.toUpperCase())) ${Z.fail("isISO31661Alpha3")};`}});const Qj=/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/i;const isBIC=X("isBIC",(j)=>Qj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Qj)}].test(${j})) ${Z.fail("isBIC")};`});const Jj=/^[a-zA-Z0-9_-]{20}$/;const isFirebasePushId=X("isFirebasePushId",(j)=>Jj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Jj)}].test(${j})) ${Z.fail("isFirebasePushId")};`});const Kj=/^(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-]+)*))?$/;const isSemVer=X("isSemVer",(j)=>Kj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Kj)}].test(${j})) ${Z.fail("isSemVer")};`});const Xj=/^[0-9a-fA-F]{24}$/;const isMongoId=X("isMongoId",(j)=>Xj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Xj)}].test(${j})) ${Z.fail("isMongoId")};`});const dj=(j)=>{if(typeof j!=="string")return!1;try{JSON.parse(j);return!0}catch{return!1}};const isJSON=W({name:"isJSON",requiresType:f.String,constraints:{},validate:dj,emit:(j,Z)=>`try { JSON.parse(${j}); } catch { ${Z.fail("isJSON")}; }`});const fj=/^[A-Z2-7]+=*$/i;function isBase32(){return X("isBase32",(j)=>j.length%8===0&&fj.test(j),(j,Z)=>{const $=Z.addRegex(fj);return`if (${j}.length % 8 !== 0 || !re[${$}].test(${j})) ${Z.fail("isBase32")};`})}const Yj=/^[1-9A-HJ-NP-Za-km-z]+$/;const isBase58=X("isBase58",(j)=>Yj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Yj)}].test(${j})) ${Z.fail("isBase58")};`});const pj=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;const _j=/^[A-Za-z0-9_-]+={0,2}$/;function isBase64(j){const Z=j?.urlSafe?_j:pj;return X("isBase64",($)=>Z.test($),($,z)=>{return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isBase64")};`},f.String,{urlSafe:j?.urlSafe})}const yj=/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;function Ej(j){if(!yj.test(j))return!1;const Z=Number(j.slice(0,4)),$=Number(j.slice(5,7)),z=Number(j.slice(8,10)),Q=new Date(Z,$,0).getDate();return z>=1&&z<=Q}function isDateString(){return X("isDateString",Ej,(j,Z)=>{return`if (!re[${Z.addRegex(yj)}].test(${j})) ${Z.fail("isDateString")};
|
|
6
|
+
else { var y=Number(${j}.slice(0,4)),m=Number(${j}.slice(5,7)),d=Number(${j}.slice(8,10));var md=new Date(y,m,0).getDate(); if(d<1||d>md)${Z.fail("isDateString")}; }`})}const Wj=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-^_.+]*(?:;.+)?$/;const isMimeType=X("isMimeType",(j)=>Wj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Wj)}].test(${j})) ${Z.fail("isMimeType")};`});const wj=/^(?:[-+]?\$?|\$[-+]?)(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d{1,2})?$/;function isCurrency(){return X("isCurrency",(j)=>wj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(wj)}].test(${j})) ${Z.fail("isCurrency")};`})}const bj=/^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}(?:&[a-z][a-z0-9.]*=[^&\s]*)*$/i;const isMagnetURI=X("isMagnetURI",(j)=>bj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(bj)}].test(${j})) ${Z.fail("isMagnetURI")};`});function oj(j){const Z=j.replace(/[\s-]/g,"");if(Z.length===0||!/^\d+$/.test(Z))return!1;let $=0,z=!1;for(let Q=Z.length-1;Q>=0;Q--){let K=Z.charCodeAt(Q)-48;if(z){K*=2;if(K>9)K-=9}$+=K;z=!z}return $%10===0}const isCreditCard=W({name:"isCreditCard",requiresType:f.String,constraints:{},validate:(j)=>typeof j==="string"&&oj(j),emit:(j,Z)=>`{
|
|
7
7
|
var cs=${j}.replace(/[\\s-]/g,'');
|
|
8
8
|
if(cs.length===0||!/^\\d+$/.test(cs)){${Z.fail("isCreditCard")}}
|
|
9
9
|
else{var sum=0,alt=false;
|
|
10
10
|
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;}
|
|
11
11
|
if(sum%10!==0)${Z.fail("isCreditCard")};}
|
|
12
|
-
}`});const
|
|
12
|
+
}`});const Oj={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 Nj(j,Z){let $=Z?.allowSpaces?j.replace(/\s/g,""):j;$=$.toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test($))return!1;const z=$.slice(0,2),Q=Oj[z];if(Q!==void 0&&$.length!==Q)return!1;const K=$.slice(4)+$.slice(0,4);let Y=0;for(let J=0;J<K.length;J++){const w=K.charCodeAt(J);if(w<=57)Y=(Y*10+(w-48))%97;else{const b=w-55;Y=(Y*100+b)%97}}return Y===1}function isIBAN(j){const Z=j?.allowSpaces??!1,$=(z)=>typeof z==="string"&&Nj(z,j);return W({name:"isIBAN",requiresType:f.String,constraints:{allowSpaces:j?.allowSpaces},validate:$,emit:(z,Q)=>{const K=Q.addRegex(/^[A-Z]{2}\d{2}[A-Z0-9]+$/),Y=Q.addRef(Oj);let J="{";J+=`var ib=${Z?`${z}.replace(/\\s/g,'')`:z}.toUpperCase();`;J+=`if(!re[${K}].test(ib)){${Q.fail("isIBAN")}}`;J+=`else{var ic=ib.slice(0,2),il=refs[${Y}][ic];`;J+=`if(il!==undefined&&ib.length!==il){${Q.fail("isIBAN")}}`;J+="else{var ir=ib.slice(4)+ib.slice(0,4);";J+="var im=0;for(var ii=0;ii<ir.length;ii++){var cc=ir.charCodeAt(ii);";J+="if(cc<=57){im=(im*10+(cc-48))%97;}else{im=(im*100+(cc-55))%97;}}";J+=`if(im!==1)${Q.fail("isIBAN")};}}}`;return J}})}function isByteLength(j,Z){const $=(z)=>{if(typeof z!=="string")return!1;const Q=Buffer.byteLength(z,"utf8");if(Q<j)return!1;if(Z!==void 0&&Q>Z)return!1;return!0};return W({name:"isByteLength",requiresType:f.String,constraints:{min:j,max:Z},validate:$,emit:(z,Q)=>{let K=`{var bl=Buffer.byteLength(${z},'utf8');`;K+=`if(bl<${j})${Q.fail("isByteLength")};`;if(Z!==void 0)K+=`else if(bl>${Z})${Q.fail("isByteLength")};`;K+="}";return K}})}const Rj={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 isHash(j){const Z=Rj[j];return W({name:"isHash",requiresType:f.String,constraints:{algorithm:j},validate:($)=>typeof $==="string"&&!!Z&&Z.test($),emit:($,z)=>{if(!Z)return z.fail("isHash")+";";return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isHash")};`}})}const Fj=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/i;const isRFC3339=X("isRFC3339",(j)=>Fj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Fj)}].test(${j})) ${Z.fail("isRFC3339")};`});const Vj=/^([01]\d|2[0-3]):[0-5]\d$/;const isMilitaryTime=X("isMilitaryTime",(j)=>Vj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Vj)}].test(${j})) ${Z.fail("isMilitaryTime")};`});function sj(j){if(typeof j==="number")return j>=-90&&j<=90;if(typeof j==="string"){const Z=parseFloat(j);if(isNaN(Z))return!1;if(!/^-?\d+(\.\d+)?$/.test(j))return!1;return Z>=-90&&Z<=90}return!1}const isLatitude=W({name:"isLatitude",constraints:{},validate:sj,emit:(j,Z)=>{const $=Z.addRegex(/^-?\d+(\.\d+)?$/);return`if(typeof ${j}==='number'){if(${j}<-90||${j}>90)${Z.fail("isLatitude")};}else if(typeof ${j}==='string'){if(!re[${$}].test(${j})){${Z.fail("isLatitude")}}else{var lt=parseFloat(${j});if(lt<-90||lt>90)${Z.fail("isLatitude")};}}else{${Z.fail("isLatitude")};}`}});function nj(j){if(typeof j==="number")return j>=-180&&j<=180;if(typeof j==="string"){const Z=parseFloat(j);if(isNaN(Z))return!1;if(!/^-?\d+(\.\d+)?$/.test(j))return!1;return Z>=-180&&Z<=180}return!1}const isLongitude=W({name:"isLongitude",constraints:{},validate:nj,emit:(j,Z)=>{const $=Z.addRegex(/^-?\d+(\.\d+)?$/);return`if(typeof ${j}==='number'){if(${j}<-180||${j}>180)${Z.fail("isLongitude")};}else if(typeof ${j}==='string'){if(!re[${$}].test(${j})){${Z.fail("isLongitude")}}else{var ln=parseFloat(${j});if(ln<-180||ln>180)${Z.fail("isLongitude")};}}else{${Z.fail("isLongitude")};}`}});const Gj=/^0x[0-9a-fA-F]{40}$/;const isEthereumAddress=X("isEthereumAddress",(j)=>Gj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Gj)}].test(${j})) ${Z.fail("isEthereumAddress")};`});const Mj=/^1[a-km-zA-HJ-NP-Z1-9]{25,34}$/;const qj=/^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/;const Dj=/^(bc1)[a-z0-9]{6,87}$/;const isBtcAddress=X("isBtcAddress",(j)=>Mj.test(j)||qj.test(j)||Dj.test(j),(j,Z)=>{const $=Z.addRegex(Mj),z=Z.addRegex(qj),Q=Z.addRegex(Dj);return`if (!re[${$}].test(${j}) && !re[${z}].test(${j}) && !re[${Q}].test(${j})) ${Z.fail("isBtcAddress")};`});const Uj=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"]);const isISO4217CurrencyCode=X("isISO4217CurrencyCode",(j)=>Uj.has(j),(j,Z)=>{return`if (!refs[${Z.addRef(Uj)}].has(${j})) ${Z.fail("isISO4217CurrencyCode")};`});const Pj=/^\+[1-9]\d{6,14}$/;const isPhoneNumber=X("isPhoneNumber",(j)=>Pj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Pj)}].test(${j})) ${Z.fail("isPhoneNumber")};`});function isStrongPassword(j){const Z=j?.minLength??8,$=j?.minLowercase??1,z=j?.minUppercase??1,Q=j?.minNumbers??1,K=j?.minSymbols??1,Y=(J)=>{if(J.length<Z)return!1;let w=0,b=0,V=0,G=0;for(let F=0;F<J.length;F++){const M=J.charCodeAt(F);if(M>=97&&M<=122)w++;else if(M>=65&&M<=90)b++;else if(M>=48&&M<=57)V++;else G++}return w>=$&&b>=z&&V>=Q&&G>=K};return W({name:"isStrongPassword",requiresType:f.String,constraints:{},validate:(J)=>typeof J==="string"&&Y(J),emit:(J,w)=>{const b=w.fail("isStrongPassword"),V=[];if($>0)V.push(`spLo<${$}`);if(z>0)V.push(`spUp<${z}`);if(Q>0)V.push(`spNum<${Q}`);if(K>0)V.push(`spSym<${K}`);const G=V.length===0?"":`if(${V.join("||")}){${b}}`;return`if(${J}.length<${Z}){${b}}else{var spLo=0,spUp=0,spNum=0,spSym=0;for(var spI=0;spI<${J}.length;spI++){var spC=${J}.charCodeAt(spI);if(spC>=97&&spC<=122)spLo++;else if(spC>=65&&spC<=90)spUp++;else if(spC>=48&&spC<=57)spNum++;else spSym++;}`+G+"}"}})}const xj={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 isTaxId(j){const Z=xj[j];return W({name:"isTaxId",requiresType:f.String,constraints:{locale:j},validate:($)=>typeof $==="string"&&!!Z&&Z.test($),emit:($,z)=>{if(!Z)return z.fail("isTaxId")+";";return`if (!re[${z.addRegex(Z)}].test(${$})) ${z.fail("isTaxId")};`}})}const Hj=/^[0-9A-HJKMNP-TV-Z]{26}$/;function isULID(){return X("isULID",(j)=>Hj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(Hj)}].test(${j})) ${Z.fail("isULID")};`},f.String,{format:"ulid"})}const hj=/^[a-z][0-9a-z]{23,31}$/;function isCUID2(){return X("isCUID2",(j)=>hj.test(j),(j,Z)=>{return`if (!re[${Z.addRegex(hj)}].test(${j})) ${Z.fail("isCUID2")};`},f.String,{format:"cuid2"})}export{minLength,maxLength,length,contains,notContains,matches,isLowercase,isUppercase,isAscii,isAlpha,isAlphanumeric,isHttpToken,isOrigin,isCorsOrigin,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};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{makeRule as
|
|
2
|
-
else `:""}{ var exp=${h}.toExponential().split('e'); var mant=(exp[0].split('.')[1]||'').length; var exp2=parseInt(exp[1],10); if(Math.max(0,mant-exp2)>${
|
|
3
|
-
else if (isNaN(${h})) ${j.fail("isNumber")};`;if(!
|
|
4
|
-
else if (${h} === Infinity || ${h} === -Infinity) ${j.fail("isNumber")};`;if(
|
|
5
|
-
else { var exp=${h}.toExponential().split('e'); var mant=(exp[0].split('.')[1]||'').length; var exp2=parseInt(exp[1],10); if(Math.max(0,mant-exp2)>${
|
|
1
|
+
import{RequiredType as G}from"../enums.js";import{makeRule as z}from"../rule-plan.js";export const isString=z({name:"isString",constraints:{},validate:(b)=>typeof b==="string",emit:(b,g)=>`if (typeof ${b} !== 'string') ${g.fail("isString")};`});export function isNumber(b){const g=b?.allowNaN??!1,C=b?.allowInfinity??!1,A=b?.maxDecimalPlaces,B=(h)=>{if(typeof h!=="number")return!1;if(isNaN(h))return g;if(!isFinite(h))return C;if(A!==void 0){const j=h.toExponential().split("e"),E=(j[0].split(".")[1]||"").length,F=parseInt(j[1],10);if(Math.max(0,E-F)>A)return!1}return!0};return z({name:"isNumber",constraints:{allowNaN:b?.allowNaN,allowInfinity:b?.allowInfinity,maxDecimalPlaces:b?.maxDecimalPlaces},validate:B,emit:(h,j)=>{if(j.insideTypeGate){let F="";if(!C)F+=`if (${h} === Infinity || ${h} === -Infinity) ${j.fail("isNumber")};`;if(A!==void 0)F+=`${F?`
|
|
2
|
+
else `:""}{ var exp=${h}.toExponential().split('e'); var mant=(exp[0].split('.')[1]||'').length; var exp2=parseInt(exp[1],10); if(Math.max(0,mant-exp2)>${A}) ${j.fail("isNumber")}; }`;return F}let E=`if (typeof ${h} !== 'number') ${j.fail("isNumber")};`;if(!g)E+=`
|
|
3
|
+
else if (isNaN(${h})) ${j.fail("isNumber")};`;if(!C)E+=`
|
|
4
|
+
else if (${h} === Infinity || ${h} === -Infinity) ${j.fail("isNumber")};`;if(A!==void 0)E+=`
|
|
5
|
+
else { var exp=${h}.toExponential().split('e'); var mant=(exp[0].split('.')[1]||'').length; var exp2=parseInt(exp[1],10); if(Math.max(0,mant-exp2)>${A}) ${j.fail("isNumber")}; }`;return E}})}export const isBoolean=z({name:"isBoolean",constraints:{},validate:(b)=>typeof b==="boolean",emit:(b,g)=>`if (typeof ${b} !== 'boolean') ${g.fail("isBoolean")};`});export const isDate=z({name:"isDate",constraints:{},validate:(b)=>b instanceof Date&&!isNaN(b.getTime()),emit:(b,g)=>`if (!(${b} instanceof Date) || isNaN(${b}.getTime())) ${g.fail("isDate")};`});export function isEnum(b){const g=Object.values(b),C=g.length>=8,A=C?new Set(g):null;return z({name:"isEnum",constraints:{values:g},validate:C?(B)=>A.has(B):(B)=>g.includes(B),emit:(B,h)=>{if(C)return`if (!refs[${h.addRef(A)}].has(${B})) ${h.fail("isEnum")};`;return`if (!refs[${h.addRef(g)}].includes(${B})) ${h.fail("isEnum")};`}})}export const isInt=z({name:"isInt",requiresType:G.Number,constraints:{},validate:(b)=>typeof b==="number"&&Number.isInteger(b),emit:(b,g)=>g.insideTypeGate?`if (!Number.isInteger(${b})) ${g.fail("isInt")};`:`if (typeof ${b} !== 'number' || !Number.isInteger(${b})) ${g.fail("isInt")};`});export const isArray=z({name:"isArray",constraints:{},validate:(b)=>Array.isArray(b),emit:(b,g)=>`if (!Array.isArray(${b})) ${g.fail("isArray")};`});export const isObject=z({name:"isObject",constraints:{},validate:(b)=>typeof b==="object"&&b!==null&&!Array.isArray(b),emit:(b,g)=>`if (typeof ${b} !== 'object' || ${b} === null || Array.isArray(${b})) ${g.fail("isObject")};`});export const isRegExp=z({name:"isRegExp",constraints:{},validate:(b)=>b instanceof RegExp,emit:(b,g)=>`if (!(${b} instanceof RegExp)) ${g.fail("isRegExp")};`});export const isFunction=z({name:"isFunction",constraints:{},validate:(b)=>typeof b==="function",emit:(b,g)=>`if (typeof ${b} !== 'function') ${g.fail("isFunction")};`});export const isStatelessRegExp=z({name:"isStatelessRegExp",constraints:{},validate:(b)=>b instanceof RegExp&&!b.global&&!b.sticky,emit:(b,g)=>`if (!(${b} instanceof RegExp) || ${b}.global || ${b}.sticky) ${g.fail("isStatelessRegExp")};`});
|