@zipbul/baker 5.0.0 → 5.2.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 +101 -0
- package/README.md +11 -14
- package/dist/index.d.ts +11 -12
- package/dist/index.js +1 -1
- package/dist/src/baker.d.ts +19 -9
- package/dist/src/baker.js +1 -1
- package/dist/src/common/enums.d.ts +10 -0
- package/dist/src/common/enums.js +1 -0
- package/dist/src/common/index.d.ts +6 -0
- package/dist/src/common/index.js +1 -0
- package/dist/src/common/interfaces.d.ts +4 -0
- package/dist/src/common/types.d.ts +2 -0
- package/dist/src/config/config-normalizer.d.ts +7 -0
- package/dist/src/config/config-normalizer.js +1 -0
- package/dist/src/config/constants.d.ts +6 -0
- package/dist/src/config/constants.js +1 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/{configure.d.ts → config/interfaces.d.ts} +1 -8
- package/dist/src/config/interfaces.js +0 -0
- package/dist/src/decorators/constants.d.ts +2 -0
- package/dist/src/decorators/constants.js +1 -0
- package/dist/src/decorators/enums.d.ts +5 -0
- package/dist/src/decorators/enums.js +1 -0
- package/dist/src/decorators/field.d.ts +3 -54
- package/dist/src/decorators/field.js +1 -1
- package/dist/src/decorators/index.d.ts +2 -2
- package/dist/src/decorators/index.js +1 -1
- package/dist/src/decorators/interfaces.d.ts +50 -0
- package/dist/src/decorators/interfaces.js +0 -0
- package/dist/src/decorators/public.d.ts +2 -0
- package/dist/src/decorators/public.js +1 -0
- package/dist/src/decorators/types.d.ts +6 -0
- package/dist/src/decorators/types.js +0 -0
- package/dist/src/metadata/enums.d.ts +5 -0
- package/dist/src/metadata/enums.js +1 -0
- package/dist/src/metadata/index.d.ts +3 -0
- package/dist/src/metadata/index.js +1 -0
- package/dist/src/metadata/interfaces.d.ts +90 -0
- package/dist/src/metadata/interfaces.js +0 -0
- package/dist/src/metadata/meta-store.d.ts +49 -0
- package/dist/src/metadata/meta-store.js +1 -0
- package/dist/src/metadata/types.d.ts +10 -0
- package/dist/src/metadata/types.js +0 -0
- package/dist/src/rules/array.d.ts +2 -2
- package/dist/src/rules/array.js +1 -1
- package/dist/src/rules/binary.d.ts +2 -2
- package/dist/src/rules/binary.js +1 -1
- package/dist/src/rules/combinators.d.ts +1 -1
- package/dist/src/rules/combinators.js +1 -1
- package/dist/src/rules/common.d.ts +3 -3
- package/dist/src/rules/common.js +1 -1
- package/dist/src/rules/constants.d.ts +10 -0
- package/dist/src/rules/constants.js +1 -0
- package/dist/src/{create-rule.d.ts → rules/create-rule.d.ts} +1 -1
- package/dist/src/rules/create-rule.js +1 -0
- package/dist/src/rules/date.d.ts +1 -1
- package/dist/src/rules/date.js +1 -1
- package/dist/src/{enums.d.ts → rules/enums.d.ts} +0 -20
- package/dist/src/rules/enums.js +1 -0
- package/dist/src/rules/index.d.ts +5 -13
- package/dist/src/rules/index.js +1 -1
- package/dist/src/rules/interfaces.d.ts +43 -0
- package/dist/src/rules/interfaces.js +0 -0
- package/dist/src/rules/locales.d.ts +1 -1
- package/dist/src/rules/locales.js +1 -1
- package/dist/src/rules/number.d.ts +3 -3
- package/dist/src/rules/number.js +1 -1
- package/dist/src/rules/object.d.ts +1 -1
- package/dist/src/rules/object.js +1 -1
- package/dist/src/rules/public.d.ts +14 -0
- package/dist/src/rules/public.js +1 -0
- package/dist/src/{rule-metadata.d.ts → rules/rule-metadata.d.ts} +1 -1
- package/dist/src/{rule-metadata.js → rules/rule-metadata.js} +1 -1
- package/dist/src/{rule-plan.d.ts → rules/rule-plan.d.ts} +4 -7
- package/dist/src/rules/rule-plan.js +1 -0
- package/dist/src/rules/string-basic.d.ts +23 -0
- package/dist/src/rules/string-basic.js +1 -0
- package/dist/src/rules/string-crypto.d.ts +5 -0
- package/dist/src/rules/string-crypto.js +1 -0
- package/dist/src/rules/string-datetime.d.ts +3 -0
- package/dist/src/rules/string-datetime.js +1 -0
- package/dist/src/rules/string-encoding.d.ts +14 -0
- package/dist/src/rules/string-encoding.js +1 -0
- package/dist/src/rules/string-finance.d.ts +18 -0
- package/dist/src/rules/string-finance.js +10 -0
- package/dist/src/rules/string-format.d.ts +38 -0
- package/dist/src/rules/string-format.js +1 -0
- package/dist/src/rules/string-geo.d.ts +5 -0
- package/dist/src/rules/string-geo.js +1 -0
- package/dist/src/rules/string-identifier.d.ts +16 -0
- package/dist/src/rules/string-identifier.js +3 -0
- package/dist/src/rules/string-shared.d.ts +3 -0
- package/dist/src/rules/string-shared.js +1 -0
- package/dist/src/rules/string-width.d.ts +6 -0
- package/dist/src/rules/string-width.js +1 -0
- package/dist/src/rules/string.d.ts +14 -110
- package/dist/src/rules/string.js +1 -12
- package/dist/src/rules/typechecker.d.ts +10 -10
- package/dist/src/rules/typechecker.js +5 -5
- package/dist/src/rules/types.d.ts +26 -0
- package/dist/src/rules/types.js +0 -0
- package/dist/src/{functions → runtime}/check-call-options.d.ts +1 -1
- package/dist/src/runtime/check-call-options.js +1 -0
- package/dist/src/runtime/constants.d.ts +3 -0
- package/dist/src/runtime/constants.js +1 -0
- package/dist/src/runtime/deserialize.d.ts +6 -0
- package/dist/src/runtime/deserialize.js +1 -0
- package/dist/src/runtime/index.d.ts +3 -0
- package/dist/src/runtime/index.js +1 -0
- package/dist/src/runtime/serialize.d.ts +11 -0
- package/dist/src/runtime/serialize.js +1 -0
- package/dist/src/runtime/validate.d.ts +6 -0
- package/dist/src/runtime/validate.js +1 -0
- package/dist/src/seal/async-analyzer.d.ts +20 -0
- package/dist/src/seal/async-analyzer.js +1 -0
- package/dist/src/seal/circular-analyzer.d.ts +9 -6
- package/dist/src/seal/circular-analyzer.js +1 -1
- package/dist/src/seal/circular-placeholder.d.ts +20 -0
- package/dist/src/seal/circular-placeholder.js +1 -0
- package/dist/src/seal/codegen-utils.d.ts +15 -0
- package/dist/src/seal/codegen-utils.js +1 -1
- package/dist/src/seal/compile-cache.d.ts +38 -0
- package/dist/src/seal/compile-cache.js +1 -0
- package/dist/src/seal/constants.d.ts +62 -0
- package/dist/src/seal/constants.js +1 -0
- package/dist/src/seal/deserialize-builder.d.ts +6 -9
- package/dist/src/seal/deserialize-builder.js +199 -262
- package/dist/src/seal/deserialize-codegen.d.ts +58 -0
- package/dist/src/seal/deserialize-codegen.js +64 -0
- package/dist/src/seal/enums.d.ts +1 -2
- package/dist/src/seal/enums.js +1 -1
- package/dist/src/seal/expose-validator.d.ts +2 -2
- package/dist/src/seal/expose-validator.js +1 -1
- package/dist/src/seal/index.d.ts +3 -0
- package/dist/src/seal/index.js +1 -0
- package/dist/src/seal/inheritance-merger.d.ts +18 -0
- package/dist/src/seal/inheritance-merger.js +1 -0
- package/dist/src/seal/interfaces.d.ts +89 -0
- package/dist/src/seal/interfaces.js +0 -0
- package/dist/src/seal/meta-validator.d.ts +16 -0
- package/dist/src/seal/meta-validator.js +1 -0
- package/dist/src/seal/seal.d.ts +5 -30
- package/dist/src/seal/seal.js +1 -1
- package/dist/src/seal/serialize-builder.d.ts +6 -4
- package/dist/src/seal/serialize-builder.js +63 -63
- package/dist/src/seal/type-normalizer.d.ts +9 -0
- package/dist/src/seal/type-normalizer.js +1 -0
- package/dist/src/seal/type-resolver.d.ts +2 -0
- package/dist/src/seal/type-resolver.js +1 -0
- package/dist/src/seal/types.d.ts +6 -0
- package/dist/src/seal/types.js +0 -0
- package/dist/src/symbols.d.ts +2 -4
- package/dist/src/symbols.js +1 -1
- package/dist/src/transformers/{collection.transformer.d.ts → collection.d.ts} +1 -1
- package/dist/src/transformers/constants.d.ts +2 -0
- package/dist/src/transformers/constants.js +1 -0
- package/dist/src/transformers/{date.transformer.d.ts → date.d.ts} +1 -1
- package/dist/src/transformers/date.js +1 -0
- package/dist/src/transformers/index.d.ts +3 -8
- package/dist/src/transformers/index.js +1 -1
- package/dist/src/transformers/interfaces.d.ts +26 -0
- package/dist/src/transformers/interfaces.js +0 -0
- package/dist/src/transformers/luxon.d.ts +3 -0
- package/dist/src/transformers/luxon.js +1 -0
- package/dist/src/transformers/moment.d.ts +3 -0
- package/dist/src/transformers/moment.js +1 -0
- package/dist/src/transformers/{number.transformer.d.ts → number.d.ts} +1 -1
- package/dist/src/transformers/public.d.ts +7 -0
- package/dist/src/transformers/public.js +1 -0
- package/dist/src/transformers/{string.transformer.d.ts → string.d.ts} +1 -1
- package/dist/src/transformers/types.d.ts +3 -0
- package/dist/src/transformers/types.js +0 -0
- package/package.json +7 -7
- package/dist/src/collect.d.ts +0 -15
- package/dist/src/collect.js +0 -1
- package/dist/src/configure.js +0 -1
- package/dist/src/create-rule.js +0 -1
- package/dist/src/enums.js +0 -1
- package/dist/src/functions/check-call-options.js +0 -1
- package/dist/src/functions/deserialize.d.ts +0 -19
- package/dist/src/functions/deserialize.js +0 -1
- package/dist/src/functions/serialize.d.ts +0 -16
- package/dist/src/functions/serialize.js +0 -1
- package/dist/src/functions/validate.d.ts +0 -18
- package/dist/src/functions/validate.js +0 -1
- package/dist/src/interfaces.d.ts +0 -32
- package/dist/src/meta-access.d.ts +0 -19
- package/dist/src/meta-access.js +0 -1
- package/dist/src/rule-plan.js +0 -1
- package/dist/src/seal/validate-meta.d.ts +0 -13
- package/dist/src/seal/validate-meta.js +0 -1
- package/dist/src/transformers/date.transformer.js +0 -1
- package/dist/src/transformers/luxon.transformer.d.ts +0 -8
- package/dist/src/transformers/luxon.transformer.js +0 -1
- package/dist/src/transformers/moment.transformer.d.ts +0 -7
- package/dist/src/transformers/moment.transformer.js +0 -1
- package/dist/src/types.d.ts +0 -177
- /package/dist/src/{errors.d.ts → common/errors.d.ts} +0 -0
- /package/dist/src/{errors.js → common/errors.js} +0 -0
- /package/dist/src/{interfaces.js → common/interfaces.js} +0 -0
- /package/dist/src/{types.js → common/types.js} +0 -0
- /package/dist/src/{utils.d.ts → common/utils.d.ts} +0 -0
- /package/dist/src/{utils.js → common/utils.js} +0 -0
- /package/dist/src/transformers/{collection.transformer.js → collection.js} +0 -0
- /package/dist/src/transformers/{number.transformer.js → number.js} +0 -0
- /package/dist/src/transformers/{string.transformer.js → string.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{CacheKey as f}from"../common/index.js";import{RequiredType as W,RuleOp as G}from"./enums.js";import{makePlannedRule as F,makeRule as X,planCompare as Y,planLength as B,planOr as P}from"./rule-plan.js";import{makeStringRule as $}from"./string-shared.js";function minLength(j){const z={cacheKey:f.Length,failure:Y(B(),G.Lt,j)};return F({name:"minLength",requiresType:W.String,constraints:{min:j},plan:z,validate:(J)=>typeof J==="string"&&J.length>=j})}function maxLength(j){const z={cacheKey:f.Length,failure:Y(B(),G.Gt,j)};return F({name:"maxLength",requiresType:W.String,constraints:{max:j},plan:z,validate:(J)=>typeof J==="string"&&J.length<=j})}function length(j,z){const J={cacheKey:f.Length,failure:P(Y(B(),G.Lt,j),Y(B(),G.Gt,z))};return F({name:"length",requiresType:W.String,constraints:{min:j,max:z},plan:J,validate:(Q)=>typeof Q==="string"&&Q.length>=j&&Q.length<=z})}function contains(j){return X({name:"contains",requiresType:W.String,constraints:{seed:j},validate:(z)=>typeof z==="string"&&z.includes(j),emit:(z,J)=>{const Q=J.addRef(j);return`if (!${z}.includes(refs[${Q}])) ${J.fail("contains")};`}})}function notContains(j){return X({name:"notContains",requiresType:W.String,constraints:{seed:j},validate:(z)=>typeof z==="string"&&!z.includes(j),emit:(z,J)=>{const Q=J.addRef(j);return`if (${z}.includes(refs[${Q}])) ${J.fail("notContains")};`}})}function matches(j,z){const J=j instanceof RegExp?j.source:j,Q=(j instanceof RegExp?j.flags:z??"").replace(/[gy]/g,""),Z=new RegExp(J,Q);return X({name:"matches",requiresType:W.String,constraints:{pattern:Z.source},validate:(w)=>typeof w==="string"&&Z.test(w),emit:(w,M)=>{return`if (!re[${M.addRegex(Z)}].test(${w})) ${M.fail("matches")};`}})}const isLowercase=X({name:"isLowercase",requiresType:W.String,constraints:{},validate:(j)=>typeof j==="string"&&j===j.toLowerCase(),emit:(j,z)=>`if (${j} !== ${j}.toLowerCase()) ${z.fail("isLowercase")};`});const isUppercase=X({name:"isUppercase",requiresType:W.String,constraints:{},validate:(j)=>typeof j==="string"&&j===j.toUpperCase(),emit:(j,z)=>`if (${j} !== ${j}.toUpperCase()) ${z.fail("isUppercase")};`});const D=new RegExp(`^[${String.fromCharCode(0)}-${String.fromCharCode(127)}]*$`);const isAscii=$("isAscii",(j)=>D.test(j),(j,z)=>{return`if (!re[${z.addRegex(D)}].test(${j})) ${z.fail("isAscii")};`});const H=/^[a-zA-Z]+$/;const isAlpha=$("isAlpha",(j)=>H.test(j),(j,z)=>{return`if (!re[${z.addRegex(H)}].test(${j})) ${z.fail("isAlpha")};`});const K=/^[a-zA-Z0-9]+$/;const isAlphanumeric=$("isAlphanumeric",(j)=>K.test(j),(j,z)=>{return`if (!re[${z.addRegex(K)}].test(${j})) ${z.fail("isAlphanumeric")};`});const V=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;const isHttpToken=$("isHttpToken",(j)=>V.test(j),(j,z)=>{return`if (!re[${z.addRegex(V)}].test(${j})) ${z.fail("isHttpToken")};`});const b=(j)=>{if(j==="null")return!0;try{return new URL(j).origin===j}catch{return!1}};const isOrigin=X({name:"isOrigin",requiresType:W.String,constraints:{format:"origin"},validate:(j)=>typeof j==="string"&&b(j),emit:(j,z)=>{return`if (!(refs[${z.addRef(b)}](${j}))) ${z.fail("isOrigin")};`}});const I=(j)=>j==="*"||b(j);const isCorsOrigin=X({name:"isCorsOrigin",requiresType:W.String,constraints:{format:"origin",allowWildcard:!0},validate:(j)=>typeof j==="string"&&I(j),emit:(j,z)=>{return`if (!(refs[${z.addRef(I)}](${j}))) ${z.fail("isCorsOrigin")};`}});const isBooleanString=X({name:"isBooleanString",requiresType:W.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 U=/^[0-9]+$/;const q=/^[+-]?(?:[0-9]*\.)?[0-9]+$/;function isNumberString(j){const z=j?.noSymbols??!1,J=z?U:q;return $("isNumberString",(Q)=>J.test(Q),(Q,Z)=>{return`if (!re[${Z.addRegex(J)}].test(${Q})) ${Z.fail("isNumberString")};`},W.String,{noSymbols:z})}function isDecimal(){const j=/^[-+]?(?:\d+(?:\.\d+)?|\.\d+)$/;return $("isDecimal",(z)=>j.test(z),(z,J)=>{return`if (!re[${J.addRegex(j)}].test(${z})) ${J.fail("isDecimal")};`})}export{minLength,maxLength,length,contains,notContains,matches,isLowercase,isUppercase,isAscii,isAlpha,isAlphanumeric,isHttpToken,isOrigin,isCorsOrigin,isBooleanString,isNumberString,isDecimal};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BakerError as U}from"../common/index.js";import{HASH_REGEXES as V}from"./constants.js";import{RequiredType as W}from"./enums.js";import{makeRule as Y}from"./rule-plan.js";import{makeStringRule as Q}from"./string-shared.js";const J=/^0x[0-9a-fA-F]{40}$/;const isEthereumAddress=Q("isEthereumAddress",(b)=>J.test(b),(b,f)=>{return`if (!re[${f.addRegex(J)}].test(${b})) ${f.fail("isEthereumAddress")};`});const L=/^1[a-km-zA-HJ-NP-Z1-9]{25,34}$/;const M=/^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/;const O=/^(?:(?:bc1|tb1)[a-z0-9]{6,87}|(?:BC1|TB1)[A-Z0-9]{6,87})$/;const isBtcAddress=Q("isBtcAddress",(b)=>L.test(b)||M.test(b)||O.test(b),(b,f)=>{const z=f.addRegex(L),F=f.addRegex(M),I=f.addRegex(O);return`if (!re[${z}].test(${b}) && !re[${F}].test(${b}) && !re[${I}].test(${b})) ${f.fail("isBtcAddress")};`});function isHash(b){const f=V[b];if(!f)throw new U(`Unsupported algorithm: "${b}" for isHash`);return Y({name:"isHash",requiresType:W.String,constraints:{algorithm:b},validate:(z)=>typeof z==="string"&&f.test(z),emit:(z,F)=>{return`if (!re[${F.addRegex(f)}].test(${z})) ${F.fail("isHash")};`}})}export{isEthereumAddress,isBtcAddress,isHash};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{makeStringRule as d}from"./string-shared.js";const e=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/i;const isRFC3339=d("isRFC3339",(i)=>e.test(i),(i,t)=>{return`if (!re[${t.addRegex(e)}].test(${i})) ${t.fail("isRFC3339")};`});const s=/^([01]\d|2[0-3]):[0-5]\d$/;const isMilitaryTime=d("isMilitaryTime",(i)=>s.test(i),(i,t)=>{return`if (!re[${t.addRegex(s)}].test(${i})) ${t.fail("isMilitaryTime")};`});export{isRFC3339,isMilitaryTime};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EmittableRule } from './interfaces';
|
|
2
|
+
declare const isHexadecimal: EmittableRule;
|
|
3
|
+
declare const isOctal: EmittableRule;
|
|
4
|
+
declare const isHexColor: EmittableRule;
|
|
5
|
+
declare function isRgbColor(includePercentValues?: boolean): EmittableRule;
|
|
6
|
+
declare const isHSL: EmittableRule;
|
|
7
|
+
declare function isBase32(): EmittableRule;
|
|
8
|
+
declare const isBase58: EmittableRule;
|
|
9
|
+
interface IsBase64Options {
|
|
10
|
+
urlSafe?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare function isBase64(options?: IsBase64Options): EmittableRule;
|
|
13
|
+
export { isHexadecimal, isOctal, isHexColor, isRgbColor, isHSL, isBase32, isBase58, isBase64 };
|
|
14
|
+
export type { IsBase64Options };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RequiredType as b}from"./enums.js";import{makeRule as V}from"./rule-plan.js";import{makeStringRule as D}from"./string-shared.js";const M=/^[0-9a-fA-F]+$/;const isHexadecimal=D("isHexadecimal",(w)=>M.test(w),(w,j)=>{return`if (!re[${j.addRegex(M)}].test(${w})) ${j.fail("isHexadecimal")};`});const Q=/^(0[oO])?[0-7]+$/;const isOctal=D("isOctal",(w)=>Q.test(w),(w,j)=>{return`if (!re[${j.addRegex(Q)}].test(${w})) ${j.fail("isOctal")};`});const W=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;const isHexColor=D("isHexColor",(w)=>W.test(w),(w,j)=>{return`if (!re[${j.addRegex(W)}].test(${w})) ${j.fail("isHexColor")};`});const I=/^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 J=/^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 Y=/^rgb\(\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*\)$/;const Z=/^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(w=!1){return V({name:"isRgbColor",requiresType:b.String,constraints:{includePercentValues:w},validate:(j)=>{if(typeof j!=="string")return!1;if(w)return Y.test(j)||Z.test(j)||I.test(j)||J.test(j);return I.test(j)||J.test(j)},emit:(j,z)=>{if(w){const q=z.addRegex(Y),h=z.addRegex(Z),y=z.addRegex(I),X=z.addRegex(J);return`if (!re[${q}].test(${j}) && !re[${h}].test(${j}) && !re[${y}].test(${j}) && !re[${X}].test(${j})) ${z.fail("isRgbColor")};`}const F=z.addRegex(I),K=z.addRegex(J);return`if (!re[${F}].test(${j}) && !re[${K}].test(${j})) ${z.fail("isRgbColor")};`}})}const $=/^(?: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=D("isHSL",(w)=>$.test(w),(w,j)=>{return`if (!re[${j.addRegex($)}].test(${w})) ${j.fail("isHSL")};`});const f=/^[A-Z2-7]+=*$/i;function isBase32(){return D("isBase32",(w)=>w.length%8===0&&f.test(w),(w,j)=>{const z=j.addRegex(f);return`if (${w}.length % 8 !== 0 || !re[${z}].test(${w})) ${j.fail("isBase32")};`})}const U=/^[1-9A-HJ-NP-Za-km-z]+$/;const isBase58=D("isBase58",(w)=>U.test(w),(w,j)=>{return`if (!re[${j.addRegex(U)}].test(${w})) ${j.fail("isBase58")};`});const T=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;const k=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?|[A-Za-z0-9_-]{4})$/;function isBase64(w){const j=w?.urlSafe?k:T;return D("isBase64",(z)=>j.test(z),(z,F)=>{return`if (!re[${F.addRegex(j)}].test(${z})) ${F.fail("isBase64")};`},b.String,w?.urlSafe!==void 0?{urlSafe:w.urlSafe}:{})}export{isHexadecimal,isOctal,isHexColor,isRgbColor,isHSL,isBase32,isBase58,isBase64};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EmittableRule } from './interfaces';
|
|
2
|
+
declare function isISBN(version?: 10 | 13): EmittableRule;
|
|
3
|
+
declare const isISIN: EmittableRule;
|
|
4
|
+
interface IsISSNOptions {
|
|
5
|
+
requireHyphen?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare function isISSN(options?: IsISSNOptions): EmittableRule;
|
|
8
|
+
declare const isEAN: EmittableRule;
|
|
9
|
+
declare const isBIC: EmittableRule;
|
|
10
|
+
declare function isCurrency(): EmittableRule;
|
|
11
|
+
declare const isCreditCard: import("./interfaces").InternalRule;
|
|
12
|
+
interface IsIBANOptions {
|
|
13
|
+
allowSpaces?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function isIBAN(options?: IsIBANOptions): EmittableRule;
|
|
16
|
+
declare const isISO4217CurrencyCode: EmittableRule;
|
|
17
|
+
export { isISBN, isISIN, isISSN, isEAN, isBIC, isCreditCard, isIBAN, isCurrency, isISO4217CurrencyCode };
|
|
18
|
+
export type { IsISSNOptions, IsIBANOptions };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{IBAN_COUNTRY_LENGTH as L,ISO4217_CODES as F}from"./constants.js";import{RequiredType as Z}from"./enums.js";import{makeRule as $}from"./rule-plan.js";import{makeStringRule as X}from"./string-shared.js";function w(z){const j=z.replace(/[-\s]/g,"");if(!/^\d{9}[\dX]$/.test(j))return!1;let K=0;for(let J=0;J<9;J++)K+=(10-J)*(j.charCodeAt(J)-48);const M=j[9]==="X"?10:j.charCodeAt(9)-48;K+=M;return K%11===0}function D(z){const j=z.replace(/[-\s]/g,"");if(!/^\d{13}$/.test(j))return!1;let K=0;for(let J=0;J<12;J++)K+=(j.charCodeAt(J)-48)*(J%2===0?1:3);return(10-K%10)%10===j.charCodeAt(12)-48}function isISBN(z){const j=(J)=>{if(typeof J!=="string")return!1;if(z===10)return w(J);if(z===13)return D(J);return w(J)||D(J)},K=(J)=>`{var s=${J}.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%%}}}`,M=(J)=>`{var s=${J}.replace(/[-\\s]/g,'');if(!/^\\d{13}$/.test(s)){%%FAIL%%}else{var sm=0;for(var i=0;i<12;i++)sm+=(s.charCodeAt(i)-48)*(i%2===0?1:3);var ck=(10-(sm%10))%10;if(ck!==(s.charCodeAt(12)-48)){%%FAIL%%}}}`;return $({name:"isISBN",requiresType:Z.String,constraints:{version:z},validate:j,emit:(J,P)=>{const V=P.fail("isISBN");if(z===10)return K(J).replace(/%%FAIL%%/g,V);if(z===13)return M(J).replace(/%%FAIL%%/g,V);const Q=K(J).replace(/%%FAIL%%/g,"__isbn_ok=false"),W=M(J).replace(/%%FAIL%%/g,"__isbn_ok=false");return`{var __isbn_ok=true;${Q} if(!__isbn_ok){__isbn_ok=true;${W}} if(!__isbn_ok)${V};}`}})}const U=/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/;function f(z){if(!U.test(z))return!1;let j=0,K=!1;for(let M=z.length-1;M>=0;M--){const J=z.charCodeAt(M);if(J<=57){let P=J-48;if(K){P*=2;if(P>9)P-=9}j+=P;K=!K}else{const P=J-55,V=P%10;let Q=V;if(K){Q*=2;if(Q>9)Q-=9}j+=Q;K=!K;Q=(P-V)/10;if(K){Q*=2;if(Q>9)Q-=9}j+=Q;K=!K}}return j%10===0}const isISIN=X("isISIN",f,(z,j)=>{return`if (!re[${j.addRegex(U)}].test(${z})) ${j.fail("isISIN")};
|
|
2
|
+
else { var isSum=0,isAlt=false;
|
|
3
|
+
for(var isI=${z}.length-1;isI>=0;isI--){var isCd=${z}.charCodeAt(isI),isN;if(isCd<=57){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;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)${j.fail("isISIN")}; }`});function A(z,j){const K=j?.requireHyphen!==!1,M=K?z:z.replace(/-/g,"");if(!(K?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/).test(M))return!1;const P=K?M.replace(/-/g,""):M;let V=0;for(let W=0;W<7;W++)V+=(8-W)*(P.charCodeAt(W)-48);const Q=P[7]==="X"?10:P.charCodeAt(7)-48;V+=Q;return V%11===0}function isISSN(z){const j=z?.requireHyphen!==!1,K=(J)=>typeof J==="string"&&A(J,z),M=j?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/;return $({name:"isISSN",requiresType:Z.String,constraints:{requireHyphen:j},validate:K,emit:(J,P)=>{const V=P.addRegex(M),Q=j?J:`${J}.replace(/-/g,'')`,W=j?"issn.replace(/-/g,'')":"issn";return`{var issn=${Q};if(!re[${V}].test(issn)){${P.fail("isISSN")}}else{var id=${W},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)${P.fail("isISSN")};}}`}})}function T(z){if(!/^\d{8}$/.test(z)&&!/^\d{13}$/.test(z))return!1;const j=z.length;let K=0;for(let J=0;J<j-1;J++){const P=z.charCodeAt(J)-48;K+=P*(j===8?J%2===0?3:1:J%2===0?1:3)}return(10-K%10)%10===z.charCodeAt(j-1)-48}const isEAN=X("isEAN",T,(z,j)=>{const K=j.addRegex(/^\d{8}$/),M=j.addRegex(/^\d{13}$/);return`{var ev=${z};if(!re[${K}].test(ev)&&!re[${M}].test(ev)){${j.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))${j.fail("isEAN")};}}`});const G=/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/i;const isBIC=X("isBIC",(z)=>G.test(z),(z,j)=>{return`if (!re[${j.addRegex(G)}].test(${z})) ${j.fail("isBIC")};`});const b=/^(?:[-+]?\$?|\$[-+]?)(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d{1,2})?$/;function isCurrency(){return X("isCurrency",(z)=>b.test(z),(z,j)=>{return`if (!re[${j.addRegex(b)}].test(${z})) ${j.fail("isCurrency")};`})}function k(z){const j=z.replace(/[\s-]/g,"");if(j.length===0||!/^\d+$/.test(j))return!1;let K=0,M=!1;for(let J=j.length-1;J>=0;J--){let P=j.charCodeAt(J)-48;if(M){P*=2;if(P>9)P-=9}K+=P;M=!M}return K%10===0}const isCreditCard=$({name:"isCreditCard",requiresType:Z.String,constraints:{},validate:(z)=>typeof z==="string"&&k(z),emit:(z,j)=>`{
|
|
5
|
+
var cs=${z}.replace(/[\\s-]/g,'');
|
|
6
|
+
if(cs.length===0||!/^\\d+$/.test(cs)){${j.fail("isCreditCard")}}
|
|
7
|
+
else{var sum=0,alt=false;
|
|
8
|
+
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;}
|
|
9
|
+
if(sum%10!==0)${j.fail("isCreditCard")};}
|
|
10
|
+
}`});function H(z,j){let K=j?.allowSpaces?z.replace(/\s/g,""):z;K=K.toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(K))return!1;const M=K.slice(0,2),J=L[M];if(J!==void 0&&K.length!==J)return!1;const P=K.slice(4)+K.slice(0,4);let V=0;for(let Q=0;Q<P.length;Q++){const W=P.charCodeAt(Q);if(W<=57)V=(V*10+(W-48))%97;else{const Y=W-55;V=(V*100+Y)%97}}return V===1}function isIBAN(z){const j=z?.allowSpaces??!1,K=(M)=>typeof M==="string"&&H(M,z);return $({name:"isIBAN",requiresType:Z.String,constraints:{allowSpaces:j},validate:K,emit:(M,J)=>{const P=J.addRegex(/^[A-Z]{2}\d{2}[A-Z0-9]+$/),V=J.addRef(L);let Q="{";Q+=`var ib=${j?`${M}.replace(/\\s/g,'')`:M}.toUpperCase();`;Q+=`if(!re[${P}].test(ib)){${J.fail("isIBAN")}}`;Q+=`else{var ic=ib.slice(0,2),il=refs[${V}][ic];`;Q+=`if(il!==undefined&&ib.length!==il){${J.fail("isIBAN")}}`;Q+="else{var ir=ib.slice(4)+ib.slice(0,4);";Q+="var im=0;for(var ii=0;ii<ir.length;ii++){var cc=ir.charCodeAt(ii);";Q+="if(cc<=57){im=(im*10+(cc-48))%97;}else{im=(im*100+(cc-55))%97;}}";Q+=`if(im!==1)${J.fail("isIBAN")};}}}`;return Q}})}const isISO4217CurrencyCode=X("isISO4217CurrencyCode",(z)=>F.has(z),(z,j)=>{return`if (!refs[${j.addRef(F)}].has(${z})) ${j.fail("isISO4217CurrencyCode")};`});export{isISBN,isISIN,isISSN,isEAN,isBIC,isCreditCard,isIBAN,isCurrency,isISO4217CurrencyCode};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { EmittableRule } from './interfaces';
|
|
2
|
+
declare function isEmail(): EmittableRule;
|
|
3
|
+
interface IsURLOptions {
|
|
4
|
+
protocols?: string[];
|
|
5
|
+
}
|
|
6
|
+
declare function isURL(options?: IsURLOptions): EmittableRule;
|
|
7
|
+
declare function isUUID(version?: 1 | 2 | 3 | 4 | 5 | 'all'): EmittableRule;
|
|
8
|
+
declare function isIP(version?: 4 | 6): EmittableRule;
|
|
9
|
+
interface IsMACAddressOptions {
|
|
10
|
+
noSeparators?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare function isMACAddress(options?: IsMACAddressOptions): EmittableRule;
|
|
13
|
+
declare const isJWT: EmittableRule;
|
|
14
|
+
declare const isLocale: EmittableRule;
|
|
15
|
+
declare const isDataURI: EmittableRule;
|
|
16
|
+
interface IsFQDNOptions {
|
|
17
|
+
requireTld?: boolean;
|
|
18
|
+
allowUnderscores?: boolean;
|
|
19
|
+
allowTrailingDot?: boolean;
|
|
20
|
+
}
|
|
21
|
+
declare function isFQDN(options?: IsFQDNOptions): EmittableRule;
|
|
22
|
+
declare const isPort: EmittableRule;
|
|
23
|
+
declare const isJSON: import("./interfaces").InternalRule;
|
|
24
|
+
declare const isMimeType: EmittableRule;
|
|
25
|
+
declare const isMagnetURI: EmittableRule;
|
|
26
|
+
declare function isByteLength(min: number, max?: number): EmittableRule;
|
|
27
|
+
declare const isPhoneNumber: EmittableRule;
|
|
28
|
+
interface IsStrongPasswordOptions {
|
|
29
|
+
minLength?: number;
|
|
30
|
+
minLowercase?: number;
|
|
31
|
+
minUppercase?: number;
|
|
32
|
+
minNumbers?: number;
|
|
33
|
+
minSymbols?: number;
|
|
34
|
+
}
|
|
35
|
+
declare function isStrongPassword(options?: IsStrongPasswordOptions): EmittableRule;
|
|
36
|
+
declare function isTaxId(locale: string): EmittableRule;
|
|
37
|
+
export { isEmail, isURL, isUUID, isIP, isMACAddress, isJWT, isLocale, isDataURI, isFQDN, isPort, isJSON, isMimeType, isMagnetURI, isByteLength, isPhoneNumber, isStrongPassword, isTaxId, };
|
|
38
|
+
export type { IsURLOptions, IsMACAddressOptions, IsFQDNOptions, IsStrongPasswordOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BakerError as I}from"../common/index.js";import{TAX_ID_REGEXES as k}from"./constants.js";import{RequiredType as f}from"./enums.js";import{makeRule as H}from"./rule-plan.js";import{makeStringRule as B}from"./string-shared.js";const D=/^[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 B("isEmail",(j)=>D.test(j),(j,z)=>{return`if (!re[${z.addRegex(D)}].test(${j})) ${z.fail("isEmail")};`},f.String,{format:"email"})}const T=Object.freeze(["http","https","ftp"]);function isURL(j){const z=j?.protocols??T,K=z.map(($)=>$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),Z=new RegExp(`^(?:${K}):\\/\\/(?:[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 H({name:"isURL",requiresType:f.String,constraints:{format:"uri",protocols:[...z]},validate:($)=>typeof $==="string"&&Z.test($),emit:($,X)=>{return`if (!re[${X.addRegex(Z)}].test(${$})) ${X.fail("isURL")};`}})}const w={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?w[j]:w.all;return B("isUUID",(K)=>z.test(K),(K,Z)=>{return`if (!re[${Z.addRegex(z)}].test(${K})) ${Z.fail("isUUID")};`},f.String,{format:"uuid",version:j})}const h=/^(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 C=/^(?:[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}$|^::$|^::(?: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 H({name:"isIP",requiresType:f.String,constraints:{version:j},validate:(z)=>{if(typeof z!=="string")return!1;if(j===4)return h.test(z);if(j===6)return C.test(z);return h.test(z)||C.test(z)},emit:(z,K)=>{if(j===4)return`if (!re[${K.addRegex(h)}].test(${z})) ${K.fail("isIP")};`;if(j===6)return`if (!re[${K.addRegex(C)}].test(${z})) ${K.fail("isIP")};`;const Z=K.addRegex(h),$=K.addRegex(C);return`if (!re[${Z}].test(${z}) && !re[${$}].test(${z})) ${K.fail("isIP")};`}})}const q=/^[0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}$/;const O=/^[0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5}$/;const M=/^[0-9a-fA-F]{12}$/;function isMACAddress(j){const z=j?.noSeparators??!1;return H({name:"isMACAddress",requiresType:f.String,constraints:{noSeparators:z},validate:(K)=>{if(typeof K!=="string")return!1;if(z)return M.test(K);return q.test(K)||O.test(K)},emit:(K,Z)=>{if(z)return`if (!re[${Z.addRegex(M)}].test(${K})) ${Z.fail("isMACAddress")};`;const $=Z.addRegex(q),X=Z.addRegex(O);return`if (!re[${$}].test(${K}) && !re[${X}].test(${K})) ${Z.fail("isMACAddress")};`}})}const A=/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;const isJWT=B("isJWT",(j)=>A.test(j),(j,z)=>{return`if (!re[${z.addRegex(A)}].test(${j})) ${z.fail("isJWT")};`});const g=/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?(?:-(?:[a-zA-Z\d]{5,8}|\d[a-zA-Z\d]{3}))*$/;const isLocale=B("isLocale",(j)=>g.test(j),(j,z)=>{return`if (!re[${z.addRegex(g)}].test(${j})) ${z.fail("isLocale")};`});const y=/^data:([a-zA-Z0-9!#$&\-^_]+\/[a-zA-Z0-9!#$&\-^_]+)(?:;[a-zA-Z0-9-]+=[a-zA-Z0-9-]+)*(?:;base64)?,[\s\S]*$/;const isDataURI=B("isDataURI",(j)=>y.test(j),(j,z)=>{return`if (!re[${z.addRegex(y)}].test(${j})) ${z.fail("isDataURI")};`});function isFQDN(j){const z=j?.requireTld!==!1,K=j?.allowUnderscores??!1,Z=j?.allowTrailingDot??!1,$=K?/^[a-zA-Z0-9_-]+$/:/^[a-zA-Z0-9-]+$/,X=(J)=>{if(typeof J!=="string")return!1;let Q=J;if(Z&&Q.endsWith("."))Q=Q.slice(0,-1);if(Q.length===0)return!1;const W=Q.split(".");if(z&&W.length<2)return!1;if(z){const F=W[W.length-1];if(!F||!/^[a-zA-Z]{2,}$/.test(F))return!1}return W.every((F)=>{if(F.length===0||F.length>63)return!1;if(!$.test(F))return!1;if(!K&&(F.startsWith("-")||F.endsWith("-")))return!1;return!0})};return H({name:"isFQDN",requiresType:f.String,constraints:{requireTld:z,allowUnderscores:K,allowTrailingDot:Z},validate:X,emit:(J,Q)=>{const W=Q.addRegex($),F=z?Q.addRegex(/^[a-zA-Z]{2,}$/):-1,b=`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;}`+(K?"":"if(p[0]==='-'||p[p.length-1]==='-'){fqOk=false;break;}")}}if(!fqOk)${Q.fail("isFQDN")};`;let G=`{var fq=${J};`;if(Z)G+="if(fq.endsWith('.'))fq=fq.slice(0,-1);";G+=`if(fq.length===0)${Q.fail("isFQDN")};`;G+="else{var fp=fq.split('.');";if(z){G+=`if(fp.length<2)${Q.fail("isFQDN")};`;G+="else{var tld=fp[fp.length-1];";G+=`if(!tld||!re[${F}].test(tld))${Q.fail("isFQDN")};`;G+=`else{${b}}`;G+="}"}else G+=b;G+="}";G+="}";return G}})}const L=/^(?: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=B("isPort",(j)=>L.test(j),(j,z)=>{return`if (!re[${z.addRegex(L)}].test(${j})) ${z.fail("isPort")};`});const d=(j)=>{if(typeof j!=="string")return!1;try{JSON.parse(j);return!0}catch{return!1}};const isJSON=H({name:"isJSON",requiresType:f.String,constraints:{},validate:d,emit:(j,z)=>`try { JSON.parse(${j}); } catch { ${z.fail("isJSON")}; }`});const S=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-^_.+]*(?:;.+)?$/;const isMimeType=B("isMimeType",(j)=>S.test(j),(j,z)=>{return`if (!re[${z.addRegex(S)}].test(${j})) ${z.fail("isMimeType")};`});const U=/^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}(?:&[a-z][a-z0-9.]*=[^&\s]*)*$/i;const isMagnetURI=B("isMagnetURI",(j)=>U.test(j),(j,z)=>{return`if (!re[${z.addRegex(U)}].test(${j})) ${z.fail("isMagnetURI")};`});function isByteLength(j,z){const K=(Z)=>{if(typeof Z!=="string")return!1;const $=Buffer.byteLength(Z,"utf8");if($<j)return!1;if(z!==void 0&&$>z)return!1;return!0};return H({name:"isByteLength",requiresType:f.String,constraints:{min:j,max:z},validate:K,emit:(Z,$)=>{let X=`{var bl=Buffer.byteLength(${Z},'utf8');`;X+=`if(bl<${j})${$.fail("isByteLength")};`;if(z!==void 0)X+=`else if(bl>${z})${$.fail("isByteLength")};`;X+="}";return X}})}const P=/^\+[1-9]\d{6,14}$/;const isPhoneNumber=B("isPhoneNumber",(j)=>P.test(j),(j,z)=>{return`if (!re[${z.addRegex(P)}].test(${j})) ${z.fail("isPhoneNumber")};`});function isStrongPassword(j){const z=j?.minLength??8,K=j?.minLowercase??1,Z=j?.minUppercase??1,$=j?.minNumbers??1,X=j?.minSymbols??1,J=(Q)=>{if(Q.length<z)return!1;let W=0,F=0,Y=0,b=0;for(let G=0;G<Q.length;G++){const V=Q.charCodeAt(G);if(V>=97&&V<=122)W++;else if(V>=65&&V<=90)F++;else if(V>=48&&V<=57)Y++;else b++}return W>=K&&F>=Z&&Y>=$&&b>=X};return H({name:"isStrongPassword",requiresType:f.String,constraints:{},validate:(Q)=>typeof Q==="string"&&J(Q),emit:(Q,W)=>{const F=W.fail("isStrongPassword"),Y=[];if(K>0)Y.push(`spLo<${K}`);if(Z>0)Y.push(`spUp<${Z}`);if($>0)Y.push(`spNum<${$}`);if(X>0)Y.push(`spSym<${X}`);const b=Y.length===0?"":`if(${Y.join("||")}){${F}}`;return`if(${Q}.length<${z}){${F}}else{var spLo=0,spUp=0,spNum=0,spSym=0;for(var spI=0;spI<${Q}.length;spI++){var spC=${Q}.charCodeAt(spI);if(spC>=97&&spC<=122)spLo++;else if(spC>=65&&spC<=90)spUp++;else if(spC>=48&&spC<=57)spNum++;else spSym++;}`+b+"}"}})}function isTaxId(j){const z=k[j];if(!z)throw new I(`Unsupported locale: "${j}" for isTaxId`);return H({name:"isTaxId",requiresType:f.String,constraints:{locale:j},validate:(K)=>typeof K==="string"&&z.test(K),emit:(K,Z)=>{return`if (!re[${Z.addRegex(z)}].test(${K})) ${Z.fail("isTaxId")};`}})}export{isEmail,isURL,isUUID,isIP,isMACAddress,isJWT,isLocale,isDataURI,isFQDN,isPort,isJSON,isMimeType,isMagnetURI,isByteLength,isPhoneNumber,isStrongPassword,isTaxId};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{makeRule as K}from"./rule-plan.js";import{makeStringRule as P}from"./string-shared.js";const B=/^-?\d+(\.\d+)?$/;function H(q,y,z){return K({name:q,constraints:{},validate:(f)=>{if(typeof f==="number")return f>=y&&f<=z;if(typeof f==="string"){if(!B.test(f))return!1;const w=parseFloat(f);return w>=y&&w<=z}return!1},emit:(f,w)=>{const J=w.addRegex(B);return`if(typeof ${f}==='number'){if(${f}<${y}||${f}>${z})${w.fail(q)};}else if(typeof ${f}==='string'){if(!re[${J}].test(${f})){${w.fail(q)}}else{var rg=parseFloat(${f});if(rg<${y}||rg>${z})${w.fail(q)};}}else{${w.fail(q)};}`}})}const D=/^[-+]?([1-8]?\d(?:\.\d+)?|90(?:\.0+)?),\s*[-+]?(180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$/;function isLatLong(){return P("isLatLong",(q)=>D.test(q),(q,y)=>{return`if (!re[${y.addRegex(D)}].test(${q})) ${y.fail("isLatLong")};`})}const isLatitude=H("isLatitude",-90,90);const isLongitude=H("isLongitude",-180,180);export{isLatLong,isLatitude,isLongitude};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EmittableRule } from './interfaces';
|
|
2
|
+
interface IsISO8601Options {
|
|
3
|
+
strict?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare function isISO8601(options?: IsISO8601Options): EmittableRule;
|
|
6
|
+
declare const isISRC: EmittableRule;
|
|
7
|
+
declare const isISO31661Alpha2: import("./interfaces").InternalRule;
|
|
8
|
+
declare const isISO31661Alpha3: import("./interfaces").InternalRule;
|
|
9
|
+
declare const isFirebasePushId: EmittableRule;
|
|
10
|
+
declare const isSemVer: EmittableRule;
|
|
11
|
+
declare const isMongoId: EmittableRule;
|
|
12
|
+
declare function isDateString(): EmittableRule;
|
|
13
|
+
declare function isULID(): EmittableRule;
|
|
14
|
+
declare function isCUID2(): EmittableRule;
|
|
15
|
+
export { isISO8601, isISRC, isISO31661Alpha2, isISO31661Alpha3, isFirebasePushId, isSemVer, isMongoId, isDateString, isULID, isCUID2, };
|
|
16
|
+
export type { IsISO8601Options };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{ISO31661A2_CODES as P,ISO31661A3_CODES as w}from"./constants.js";import{RequiredType as W}from"./enums.js";import{makeRule as Z}from"./rule-plan.js";import{makeStringRule as Q}from"./string-shared.js";function q(j,H){if(H===2)return j%4===0&&j%100!==0||j%400===0?29:28;return H===4||H===6||H===9||H===11?30:31}function U(j,H){return`(${H}===2?(((${j}%4===0&&${j}%100!==0)||${j}%400===0)?29:28):(${H}===4||${H}===6||${H}===9||${H}===11?30:31))`}const Y=/^\d{4}(?:-\d{2}(?:-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?)?)?$/;function T(j){if(!Y.test(j))return!1;const H=j.match(/^(\d{4})-(\d{2})(?:-(\d{2}))?/);if(!H)return!0;const J=Number(H[2]);if(J<1||J>12)return!1;if(H[3]!==void 0){const z=Number(H[3]),A=q(Number(H[1]),J);if(z<1||z>A)return!1}const K=j.match(/T(\d{2}):(\d{2}):(\d{2})/);if(!K)return!0;const X=Number(K[1]),$=Number(K[2]),b=Number(K[3]);return X>=0&&X<=23&&$>=0&&$<=59&&b>=0&&b<=60}function isISO8601(j){if(j?.strict){const H=(J)=>typeof J==="string"&&T(J);return Z({name:"isISO8601",requiresType:W.String,constraints:{format:"date-time",strict:!0},validate:H,emit:(J,K)=>{return`if (!re[${K.addRegex(Y)}].test(${J})) ${K.fail("isISO8601")};
|
|
2
|
+
else {var __iso_ok=true;var dm=${J}.match(/^(\\d{4})-(\\d{2})(?:-(\\d{2}))?/);if(dm){var mo=Number(dm[2]);if(mo<1||mo>12){__iso_ok=false;}else if(dm[3]!==undefined){var da=Number(dm[3]),dy=Number(dm[1]),md=${U("dy","mo")};if(da<1||da>md){__iso_ok=false;}}}if(__iso_ok){var tm=${J}.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)__iso_ok=false;}}if(!__iso_ok)${K.fail("isISO8601")};}`}})}return Q("isISO8601",(H)=>Y.test(H),(H,J)=>{return`if (!re[${J.addRegex(Y)}].test(${H})) ${J.fail("isISO8601")};`},W.String,{format:"date-time",strict:!1})}const B=/^[A-Z]{2}-[A-Z0-9]{3}-\d{2}-\d{5}$|^[A-Z]{2}[A-Z0-9]{3}\d{7}$/;const isISRC=Q("isISRC",(j)=>B.test(j),(j,H)=>{return`if (!re[${H.addRegex(B)}].test(${j})) ${H.fail("isISRC")};`});const isISO31661Alpha2=Z({name:"isISO31661Alpha2",requiresType:W.String,constraints:{},validate:(j)=>typeof j==="string"&&P.has(j.toUpperCase()),emit:(j,H)=>{return`if (!refs[${H.addRef(P)}].has(${j}.toUpperCase())) ${H.fail("isISO31661Alpha2")};`}});const isISO31661Alpha3=Z({name:"isISO31661Alpha3",requiresType:W.String,constraints:{},validate:(j)=>typeof j==="string"&&w.has(j.toUpperCase()),emit:(j,H)=>{return`if (!refs[${H.addRef(w)}].has(${j}.toUpperCase())) ${H.fail("isISO31661Alpha3")};`}});const F=/^[a-zA-Z0-9_-]{20}$/;const isFirebasePushId=Q("isFirebasePushId",(j)=>F.test(j),(j,H)=>{return`if (!re[${H.addRegex(F)}].test(${j})) ${H.fail("isFirebasePushId")};`});const L=/^(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=Q("isSemVer",(j)=>L.test(j),(j,H)=>{return`if (!re[${H.addRegex(L)}].test(${j})) ${H.fail("isSemVer")};`});const f=/^[0-9a-fA-F]{24}$/;const isMongoId=Q("isMongoId",(j)=>f.test(j),(j,H)=>{return`if (!re[${H.addRegex(f)}].test(${j})) ${H.fail("isMongoId")};`});const M=/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;function k(j){if(!M.test(j))return!1;const H=Number(j.slice(0,4)),J=Number(j.slice(5,7)),K=Number(j.slice(8,10)),X=q(H,J);return K>=1&&K<=X}function isDateString(){return Q("isDateString",k,(j,H)=>{return`if (!re[${H.addRegex(M)}].test(${j})) ${H.fail("isDateString")};
|
|
3
|
+
else { var y=Number(${j}.slice(0,4)),m=Number(${j}.slice(5,7)),d=Number(${j}.slice(8,10));var md=${U("y","m")}; if(d<1||d>md)${H.fail("isDateString")}; }`})}const G=/^[0-9A-HJKMNP-TV-Z]{26}$/;function isULID(){return Q("isULID",(j)=>G.test(j),(j,H)=>{return`if (!re[${H.addRegex(G)}].test(${j})) ${H.fail("isULID")};`},W.String,{format:"ulid"})}const V=/^[a-z][0-9a-z]{23,31}$/;function isCUID2(){return Q("isCUID2",(j)=>V.test(j),(j,H)=>{return`if (!re[${H.addRegex(V)}].test(${j})) ${H.fail("isCUID2")};`},W.String,{format:"cuid2"})}export{isISO8601,isISRC,isISO31661Alpha2,isISO31661Alpha3,isFirebasePushId,isSemVer,isMongoId,isDateString,isULID,isCUID2};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { EmitContext, EmittableRule } from './interfaces';
|
|
2
|
+
import { RequiredType } from './enums';
|
|
3
|
+
export declare function makeStringRule(name: string, validate: (v: string) => boolean, buildEmit: (varName: string, ctx: EmitContext) => string, requiresType?: RequiredType | undefined, constraints?: Record<string, unknown>): EmittableRule;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RequiredType as z}from"./enums.js";import{makeRule as A}from"./rule-plan.js";export function makeStringRule(g,h,j,w=z.String,x={}){return A({name:g,requiresType:w,constraints:x,validate:(f)=>typeof f==="string"&&h(f),emit:j})}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const isFullWidth: import("./interfaces").EmittableRule;
|
|
2
|
+
declare const isHalfWidth: import("./interfaces").EmittableRule;
|
|
3
|
+
declare const isVariableWidth: import("./interfaces").EmittableRule;
|
|
4
|
+
declare const isMultibyte: import("./interfaces").EmittableRule;
|
|
5
|
+
declare const isSurrogatePair: import("./interfaces").EmittableRule;
|
|
6
|
+
export { isFullWidth, isHalfWidth, isVariableWidth, isMultibyte, isSurrogatePair };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{makeStringRule as C}from"./string-shared.js";const J=/[^\u0020-\u007E\uFF61-\uFF9F]/;const isFullWidth=C("isFullWidth",(j)=>J.test(j),(j,q)=>{return`if (!re[${q.addRegex(J)}].test(${j})) ${q.fail("isFullWidth")};`});const K=/[\u0020-\u007E\uFF61-\uFF9F]/;const isHalfWidth=C("isHalfWidth",(j)=>K.test(j),(j,q)=>{return`if (!re[${q.addRegex(K)}].test(${j})) ${q.fail("isHalfWidth")};`});const isVariableWidth=C("isVariableWidth",(j)=>J.test(j)&&K.test(j),(j,q)=>{const z=q.addRegex(J),Z=q.addRegex(K);return`if (!re[${z}].test(${j}) || !re[${Z}].test(${j})) ${q.fail("isVariableWidth")};`});const Q=new RegExp(`[^${String.fromCharCode(0)}-${String.fromCharCode(255)}]`);const isMultibyte=C("isMultibyte",(j)=>Q.test(j),(j,q)=>{return`if (!re[${q.addRegex(Q)}].test(${j})) ${q.fail("isMultibyte")};`});const X=/[\uD800-\uDBFF][\uDC00-\uDFFF]/;const isSurrogatePair=C("isSurrogatePair",(j)=>X.test(j),(j,q)=>{return`if (!re[${q.addRegex(X)}].test(${j})) ${q.fail("isSurrogatePair")};`});export{isFullWidth,isHalfWidth,isVariableWidth,isMultibyte,isSurrogatePair};
|
|
@@ -1,110 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
declare const isCorsOrigin: import("../types").InternalRule;
|
|
16
|
-
declare const isBooleanString: import("../types").InternalRule;
|
|
17
|
-
interface IsNumberStringOptions {
|
|
18
|
-
no_symbols?: boolean;
|
|
19
|
-
}
|
|
20
|
-
declare function isNumberString(options?: IsNumberStringOptions): EmittableRule;
|
|
21
|
-
declare function isDecimal(): EmittableRule;
|
|
22
|
-
declare const isFullWidth: EmittableRule;
|
|
23
|
-
declare const isHalfWidth: EmittableRule;
|
|
24
|
-
declare const isVariableWidth: EmittableRule;
|
|
25
|
-
declare const isMultibyte: EmittableRule;
|
|
26
|
-
declare const isSurrogatePair: EmittableRule;
|
|
27
|
-
declare const isHexadecimal: EmittableRule;
|
|
28
|
-
declare const isOctal: EmittableRule;
|
|
29
|
-
declare function isEmail(): EmittableRule;
|
|
30
|
-
interface IsURLOptions {
|
|
31
|
-
protocols?: string[];
|
|
32
|
-
}
|
|
33
|
-
declare function isURL(options?: IsURLOptions): EmittableRule;
|
|
34
|
-
declare function isUUID(version?: 1 | 2 | 3 | 4 | 5 | 'all'): EmittableRule;
|
|
35
|
-
declare function isIP(version?: 4 | 6): EmittableRule;
|
|
36
|
-
declare const isHexColor: EmittableRule;
|
|
37
|
-
declare function isRgbColor(includePercentValues?: boolean): EmittableRule;
|
|
38
|
-
declare const isHSL: EmittableRule;
|
|
39
|
-
interface IsMACAddressOptions {
|
|
40
|
-
no_separators?: boolean;
|
|
41
|
-
}
|
|
42
|
-
declare function isMACAddress(options?: IsMACAddressOptions): EmittableRule;
|
|
43
|
-
declare function isISBN(version?: 10 | 13): EmittableRule;
|
|
44
|
-
declare const isISIN: EmittableRule;
|
|
45
|
-
interface IsISO8601Options {
|
|
46
|
-
strict?: boolean;
|
|
47
|
-
}
|
|
48
|
-
declare function isISO8601(options?: IsISO8601Options): EmittableRule;
|
|
49
|
-
declare const isISRC: EmittableRule;
|
|
50
|
-
interface IsISSNOptions {
|
|
51
|
-
requireHyphen?: boolean;
|
|
52
|
-
}
|
|
53
|
-
declare function isISSN(options?: IsISSNOptions): EmittableRule;
|
|
54
|
-
declare const isJWT: EmittableRule;
|
|
55
|
-
declare function isLatLong(): EmittableRule;
|
|
56
|
-
declare const isLocale: EmittableRule;
|
|
57
|
-
declare const isDataURI: EmittableRule;
|
|
58
|
-
interface IsFQDNOptions {
|
|
59
|
-
require_tld?: boolean;
|
|
60
|
-
allow_underscores?: boolean;
|
|
61
|
-
allow_trailing_dot?: boolean;
|
|
62
|
-
}
|
|
63
|
-
declare function isFQDN(options?: IsFQDNOptions): EmittableRule;
|
|
64
|
-
declare const isPort: EmittableRule;
|
|
65
|
-
declare const isEAN: EmittableRule;
|
|
66
|
-
declare const isISO31661Alpha2: import("../types").InternalRule;
|
|
67
|
-
declare const isISO31661Alpha3: import("../types").InternalRule;
|
|
68
|
-
declare const isBIC: EmittableRule;
|
|
69
|
-
declare const isFirebasePushId: EmittableRule;
|
|
70
|
-
declare const isSemVer: EmittableRule;
|
|
71
|
-
declare const isMongoId: EmittableRule;
|
|
72
|
-
declare const isJSON: import("../types").InternalRule;
|
|
73
|
-
declare function isBase32(): EmittableRule;
|
|
74
|
-
declare const isBase58: EmittableRule;
|
|
75
|
-
interface IsBase64Options {
|
|
76
|
-
urlSafe?: boolean;
|
|
77
|
-
}
|
|
78
|
-
declare function isBase64(options?: IsBase64Options): EmittableRule;
|
|
79
|
-
declare function isDateString(): EmittableRule;
|
|
80
|
-
declare const isMimeType: EmittableRule;
|
|
81
|
-
declare function isCurrency(): EmittableRule;
|
|
82
|
-
declare const isMagnetURI: EmittableRule;
|
|
83
|
-
declare const isCreditCard: import("../types").InternalRule;
|
|
84
|
-
interface IsIBANOptions {
|
|
85
|
-
allowSpaces?: boolean;
|
|
86
|
-
}
|
|
87
|
-
declare function isIBAN(options?: IsIBANOptions): EmittableRule;
|
|
88
|
-
declare function isByteLength(min: number, max?: number): EmittableRule;
|
|
89
|
-
declare function isHash(algorithm: string): EmittableRule;
|
|
90
|
-
declare const isRFC3339: EmittableRule;
|
|
91
|
-
declare const isMilitaryTime: EmittableRule;
|
|
92
|
-
declare const isLatitude: import("../types").InternalRule;
|
|
93
|
-
declare const isLongitude: import("../types").InternalRule;
|
|
94
|
-
declare const isEthereumAddress: EmittableRule;
|
|
95
|
-
declare const isBtcAddress: EmittableRule;
|
|
96
|
-
declare const isISO4217CurrencyCode: EmittableRule;
|
|
97
|
-
declare const isPhoneNumber: EmittableRule;
|
|
98
|
-
interface IsStrongPasswordOptions {
|
|
99
|
-
minLength?: number;
|
|
100
|
-
minLowercase?: number;
|
|
101
|
-
minUppercase?: number;
|
|
102
|
-
minNumbers?: number;
|
|
103
|
-
minSymbols?: number;
|
|
104
|
-
}
|
|
105
|
-
declare function isStrongPassword(options?: IsStrongPasswordOptions): EmittableRule;
|
|
106
|
-
declare function isTaxId(locale: string): EmittableRule;
|
|
107
|
-
declare function isULID(): EmittableRule;
|
|
108
|
-
declare function isCUID2(): EmittableRule;
|
|
109
|
-
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, };
|
|
110
|
-
export type { IsNumberStringOptions, IsURLOptions, IsMACAddressOptions, IsISO8601Options, IsISSNOptions, IsFQDNOptions, IsBase64Options, IsIBANOptions, IsStrongPasswordOptions, };
|
|
1
|
+
export { minLength, maxLength, length, contains, notContains, matches, isLowercase, isUppercase, isAscii, isAlpha, isAlphanumeric, isHttpToken, isOrigin, isCorsOrigin, isBooleanString, isNumberString, isDecimal, } from './string-basic';
|
|
2
|
+
export type { IsNumberStringOptions } from './string-basic';
|
|
3
|
+
export { isFullWidth, isHalfWidth, isVariableWidth, isMultibyte, isSurrogatePair } from './string-width';
|
|
4
|
+
export { isHexadecimal, isOctal, isHexColor, isRgbColor, isHSL, isBase32, isBase58, isBase64 } from './string-encoding';
|
|
5
|
+
export type { IsBase64Options } from './string-encoding';
|
|
6
|
+
export { isEmail, isURL, isUUID, isIP, isMACAddress, isJWT, isLocale, isDataURI, isFQDN, isPort, isJSON, isMimeType, isMagnetURI, isByteLength, isPhoneNumber, isStrongPassword, isTaxId, } from './string-format';
|
|
7
|
+
export type { IsURLOptions, IsMACAddressOptions, IsFQDNOptions, IsStrongPasswordOptions } from './string-format';
|
|
8
|
+
export { isLatLong, isLatitude, isLongitude } from './string-geo';
|
|
9
|
+
export { isEthereumAddress, isBtcAddress, isHash } from './string-crypto';
|
|
10
|
+
export { isRFC3339, isMilitaryTime } from './string-datetime';
|
|
11
|
+
export { isISO8601, isISRC, isISO31661Alpha2, isISO31661Alpha3, isFirebasePushId, isSemVer, isMongoId, isDateString, isULID, isCUID2, } from './string-identifier';
|
|
12
|
+
export type { IsISO8601Options } from './string-identifier';
|
|
13
|
+
export { isISBN, isISIN, isISSN, isEAN, isBIC, isCreditCard, isIBAN, isCurrency, isISO4217CurrencyCode } from './string-finance';
|
|
14
|
+
export type { IsISSNOptions, IsIBANOptions } from './string-finance';
|
package/dist/src/rules/string.js
CHANGED
|
@@ -1,12 +1 @@
|
|
|
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
|
-
else { var isSum=0,isAlt=false;
|
|
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 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
|
-
var cs=${j}.replace(/[\\s-]/g,'');
|
|
8
|
-
if(cs.length===0||!/^\\d+$/.test(cs)){${Z.fail("isCreditCard")}}
|
|
9
|
-
else{var sum=0,alt=false;
|
|
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
|
-
if(sum%10!==0)${Z.fail("isCreditCard")};}
|
|
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
|
+
export{minLength,maxLength,length,contains,notContains,matches,isLowercase,isUppercase,isAscii,isAlpha,isAlphanumeric,isHttpToken,isOrigin,isCorsOrigin,isBooleanString,isNumberString,isDecimal}from"./string-basic.js";export{isFullWidth,isHalfWidth,isVariableWidth,isMultibyte,isSurrogatePair}from"./string-width.js";export{isHexadecimal,isOctal,isHexColor,isRgbColor,isHSL,isBase32,isBase58,isBase64}from"./string-encoding.js";export{isEmail,isURL,isUUID,isIP,isMACAddress,isJWT,isLocale,isDataURI,isFQDN,isPort,isJSON,isMimeType,isMagnetURI,isByteLength,isPhoneNumber,isStrongPassword,isTaxId}from"./string-format.js";export{isLatLong,isLatitude,isLongitude}from"./string-geo.js";export{isEthereumAddress,isBtcAddress,isHash}from"./string-crypto.js";export{isRFC3339,isMilitaryTime}from"./string-datetime.js";export{isISO8601,isISRC,isISO31661Alpha2,isISO31661Alpha3,isFirebasePushId,isSemVer,isMongoId,isDateString,isULID,isCUID2}from"./string-identifier.js";export{isISBN,isISIN,isISSN,isEAN,isBIC,isCreditCard,isIBAN,isCurrency,isISO4217CurrencyCode}from"./string-finance.js";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import type { EmittableRule } from '
|
|
2
|
-
export declare const isString: import("
|
|
1
|
+
import type { EmittableRule } from './interfaces';
|
|
2
|
+
export declare const isString: import("./interfaces").InternalRule;
|
|
3
3
|
export interface IsNumberOptions {
|
|
4
4
|
allowNaN?: boolean;
|
|
5
5
|
allowInfinity?: boolean;
|
|
6
6
|
maxDecimalPlaces?: number;
|
|
7
7
|
}
|
|
8
8
|
export declare function isNumber(options?: IsNumberOptions): EmittableRule;
|
|
9
|
-
export declare const isBoolean: import("
|
|
10
|
-
export declare const isDate: import("
|
|
9
|
+
export declare const isBoolean: import("./interfaces").InternalRule;
|
|
10
|
+
export declare const isDate: import("./interfaces").InternalRule;
|
|
11
11
|
export declare function isEnum(entity: object): EmittableRule;
|
|
12
|
-
export declare const isInt: import("
|
|
13
|
-
export declare const isArray: import("
|
|
14
|
-
export declare const isObject: import("
|
|
15
|
-
export declare const isRegExp: import("
|
|
16
|
-
export declare const isFunction: import("
|
|
17
|
-
export declare const isStatelessRegExp: import("
|
|
12
|
+
export declare const isInt: import("./interfaces").InternalRule;
|
|
13
|
+
export declare const isArray: import("./interfaces").InternalRule;
|
|
14
|
+
export declare const isObject: import("./interfaces").InternalRule;
|
|
15
|
+
export declare const isRegExp: import("./interfaces").InternalRule;
|
|
16
|
+
export declare const isFunction: import("./interfaces").InternalRule;
|
|
17
|
+
export declare const isStatelessRegExp: import("./interfaces").InternalRule;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{RequiredType as
|
|
2
|
-
else `:""}{
|
|
3
|
-
else if (isNaN(${
|
|
4
|
-
else if (${
|
|
5
|
-
else {
|
|
1
|
+
import{RequiredType as L}from"./enums.js";import{makeRule as E}from"./rule-plan.js";function K(b,g,F){return`{ var exp=${b}.toExponential().split('e'); var mant=(exp[0].split('.')[1]||'').length; var exp2=parseInt(exp[1],10); if(Math.max(0,mant-exp2)>${g}) ${F.fail("isNumber")}; }`}export const isString=E({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,F=b?.allowInfinity??!1,A=b?.maxDecimalPlaces,j={};if(b?.allowNaN!==void 0)j.allowNaN=b.allowNaN;if(b?.allowInfinity!==void 0)j.allowInfinity=b.allowInfinity;if(A!==void 0)j.maxDecimalPlaces=A;return E({name:"isNumber",constraints:j,validate:(z)=>{if(typeof z!=="number")return!1;if(isNaN(z))return g;if(!isFinite(z))return F;if(A!==void 0){const B=z.toExponential().split("e"),G=(B[0].split(".")[1]||"").length,H=parseInt(B[1],10);if(Math.max(0,G-H)>A)return!1}return!0},emit:(z,B)=>{if(B.insideTypeGate){let H="";if(!F)H+=`if (${z} === Infinity || ${z} === -Infinity) ${B.fail("isNumber")};`;if(A!==void 0)H+=`${H?`
|
|
2
|
+
else `:""}${K(z,A,B)}`;return H}let G=`if (typeof ${z} !== 'number') ${B.fail("isNumber")};`;if(!g)G+=`
|
|
3
|
+
else if (isNaN(${z})) ${B.fail("isNumber")};`;if(!F)G+=`
|
|
4
|
+
else if (${z} === Infinity || ${z} === -Infinity) ${B.fail("isNumber")};`;if(A!==void 0)G+=`
|
|
5
|
+
else ${K(z,A,B)}`;return G}})}export const isBoolean=E({name:"isBoolean",constraints:{},validate:(b)=>typeof b==="boolean",emit:(b,g)=>`if (typeof ${b} !== 'boolean') ${g.fail("isBoolean")};`});export const isDate=E({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.keys(b).filter((j)=>Number.isNaN(Number(j))).map((j)=>b[j]),F=g.length>=8,A=F?new Set(g):null;return E({name:"isEnum",constraints:{values:g},validate:F?(j)=>A.has(j):(j)=>g.includes(j),emit:(j,J)=>{if(F)return`if (!refs[${J.addRef(A)}].has(${j})) ${J.fail("isEnum")};`;return`if (!refs[${J.addRef(g)}].includes(${j})) ${J.fail("isEnum")};`}})}export const isInt=E({name:"isInt",requiresType:L.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=E({name:"isArray",constraints:{},validate:(b)=>Array.isArray(b),emit:(b,g)=>`if (!Array.isArray(${b})) ${g.fail("isArray")};`});export const isObject=E({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=E({name:"isRegExp",constraints:{},validate:(b)=>b instanceof RegExp,emit:(b,g)=>`if (!(${b} instanceof RegExp)) ${g.fail("isRegExp")};`});export const isFunction=E({name:"isFunction",constraints:{},validate:(b)=>typeof b==="function",emit:(b,g)=>`if (typeof ${b} !== 'function') ${g.fail("isFunction")};`});export const isStatelessRegExp=E({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")};`});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RuleOp, RulePlanCheckKind, RulePlanExprKind } from './enums';
|
|
2
|
+
export type RulePlanExpr = {
|
|
3
|
+
kind: RulePlanExprKind.Value;
|
|
4
|
+
} | {
|
|
5
|
+
kind: RulePlanExprKind.Member;
|
|
6
|
+
property: 'length';
|
|
7
|
+
} | {
|
|
8
|
+
kind: RulePlanExprKind.Call0;
|
|
9
|
+
method: 'getTime';
|
|
10
|
+
} | {
|
|
11
|
+
kind: RulePlanExprKind.Literal;
|
|
12
|
+
value: number;
|
|
13
|
+
};
|
|
14
|
+
export type RulePlanCheck = {
|
|
15
|
+
kind: RulePlanCheckKind.Compare;
|
|
16
|
+
left: RulePlanExpr;
|
|
17
|
+
op: RuleOp;
|
|
18
|
+
right: RulePlanExpr;
|
|
19
|
+
} | {
|
|
20
|
+
kind: RulePlanCheckKind.And | RulePlanCheckKind.Or;
|
|
21
|
+
checks: RulePlanCheck[];
|
|
22
|
+
};
|
|
23
|
+
export type RulePlanCache = {
|
|
24
|
+
length?: string;
|
|
25
|
+
time?: string;
|
|
26
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BakerError as F}from"../common/index.js";import{CALL_OPTION_KEYS as J,SEAL_TIME_KEYS as Q}from"./constants.js";export function checkCallOptions(q){if(q===void 0||q===null)return;if(typeof q!=="object"||Array.isArray(q))throw new F(`Call options must be a plain object. Received: ${Array.isArray(q)?"array":typeof q}.`);const H=Object.getPrototypeOf(q);if(H!==null&&H!==Object.prototype){const x=q.constructor?.name??"unknown";throw new F(`Call options must be a plain object literal. Received instance of ${x}.`)}for(const x of Object.keys(q)){if(x==="groups"){const D=q.groups;if(D!==void 0&&(!Array.isArray(D)||D.some((G)=>typeof G!=="string"))){const G=Array.isArray(D)?"an array with a non-string element":typeof D;throw new F(`Call option 'groups' must be a string[] of group names. Received: ${G}.`)}continue}if(Q.has(x))throw new F(`Option '${x}' is a seal-time setting and cannot be passed per-call. Move it to new Baker({ ${x}: ... }) at app startup. Per-call options: ${[...J].join(", ")}.`);throw new F(`Unknown per-call option '${x}'. Valid per-call options: ${[...J].join(", ")}. Seal-time options go to new Baker({...}).`)}return q}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BAKER_CONFIG_KEYS as b}from"../config/index.js";import{SEAL_OPTION_KEYS as d}from"../seal/index.js";export const CALL_OPTION_KEYS=new Set(["groups"]);export const SEAL_TIME_KEYS=new Set([...b,...d]);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RuntimeOptions, BakerIssueSet } from '../common';
|
|
2
|
+
import type { SealedExecutors } from '../seal';
|
|
3
|
+
declare function runDeserialize<T>(sealed: SealedExecutors<unknown>, input: unknown, options?: RuntimeOptions): T | BakerIssueSet | Promise<T | BakerIssueSet>;
|
|
4
|
+
declare function runDeserializeSync<T>(sealed: SealedExecutors<unknown>, className: string, input: unknown, options?: RuntimeOptions): T | BakerIssueSet;
|
|
5
|
+
declare function runDeserializeAsync<T>(sealed: SealedExecutors<unknown>, input: unknown, options?: RuntimeOptions): Promise<T | BakerIssueSet>;
|
|
6
|
+
export { runDeserialize, runDeserializeSync, runDeserializeAsync };
|