@regle/rules 0.2.13 → 0.3.1-beta.4

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var core=require('@regle/core'),vue=require('vue');function $(e,t){let n,o,l,u;typeof e=="function"&&!("_validator"in e)?(n=core.InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u}=e;let f=core.createRule({type:n,validator:o,active:l,message:t}),a=[...u??[]];if(f._params=a,f._patched=!0,typeof f=="function"){let s=f(...a);return s._patched=!0,s}else return f}function v(e,t){let n=async(l,...u)=>e(l,...u),o=core.createRule({type:core.InternalRuleType.Async,validator:n,message:""});return o._params=o._params?.concat(t),o(...t??[])}function N(e,t){let n=(l,...u)=>e(l,...u),o=core.createRule({type:core.InternalRuleType.Inline,validator:n,message:""});return o._params=o._params?.concat(t),o(...t)}function E(e,t){let n,o,l=[],u="";typeof t=="function"?(n=core.InternalRuleType.Inline,o=t,l=[e]):({_type:n,validator:o,_message:u}=t,l=t._params?.concat([e]));function f(i){let[m]=core.unwrapRuleParameters([e]);return m?o(i,m):!0}function a(i,m){let[R]=core.unwrapRuleParameters([e]);return R}let s=core.createRule({type:n,validator:f,active:a,message:u});return s._params=l,s}function y(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function b(e){return !y(typeof e=="string"?e.trim():e)}function x(e){return e==null||typeof e!="number"?!1:!isNaN(e)}function D(e,...t){if(y(e))return !0;let n=typeof e=="number"?e.toString():e;return t.every(o=>(o.lastIndex=0,o.test(n)))}function T(e){let t=vue.unref(e);return Array.isArray(t)?t.length:typeof t=="object"?Object.keys(t).length:typeof t=="number"?isNaN(t)?0:t:String(t).length}function M(e){if(y(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let n=new Date(e);if(n.toString()==="Invalid Date")return !1;t=n;}return !!t}catch{return !1}}function h(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function d(e){return typeof e=="number"?e:e!=null?typeof e=="string"?e.trim()!==e?NaN:+e:NaN:NaN}var r={isEmpty:y,isFilled:b,size:T,regex:D,isNumber:x,isDate:M,toDate:h,toNumber:d};function z(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>{if(typeof a=="function")return null;{let s=a._params;return s?.length?s:[null]}}).flat().filter(a=>!!a);function o(a,s,...i){let m=[],R=0;for(let p of a)if(typeof p=="function")m.push(p(s)),R++;else {let g=p._params?.length??0;m.push(p.validator(s,...i.slice(R,g))),g&&(R+=g);}return m}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.every(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:R,...p}=m;return {...i,...p}},{})}:a.every(i=>!!i)}let u;e.length?u=t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)}:u=a=>!1;let f=core.createRule({type:"and",validator:u,message:"The value does not match all of the provided validators"});return f._params=n,f}function C(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>typeof a=="function"?null:a._params).flat().filter(a=>!!a);function o(a,s,...i){let m=[],R=0;for(let p of a)if(typeof p=="function")m.push(p(s)),R++;else {let g=p._params?.length??0;m.push(p.validator(s,...i.slice(R,g))),g&&(R+=g);}return m}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.some(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:R,...p}=m;return {...i,...p}},{})}:a.some(i=>!!i)}let f=core.createRule({type:"or",validator:t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)},message:"The value does not match any of the provided validators"});return f._params=n,f}function j(e,t){let n,o,l,u,f;typeof e=="function"?(o=e,f=e.constructor.name==="AsyncFunction"):({_type:n,validator:o,_params:u}=e,f=e._async),f?l=async(s,...i)=>r.isFilled(s)?!await o(s,...i):!0:l=(s,...i)=>r.isFilled(s)?!o(s,...i):!0;let a=core.createRule({type:"not",validator:l,message:t??"Error"});return a._params=u,a}var Dt=core.createRule({type:"required",validator:e=>r.isFilled(e),message:"This field is required"});var Pt=core.createRule({type:"maxLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)<=t:(console.warn(`[maxLength] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have maximum ${t} items`:`The maximum length allowed is ${t}`});var At=core.createRule({type:"required",validator(e,t){return t?r.isFilled(e):!0},message:"This field is required",active(e,{$params:[t]}){return t}});var O=/^[a-zA-Z]*$/,Nt=core.createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,O)},message:"The value is not alphabetical"});var Z=/^[a-zA-Z0-9]*$/,It=core.createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Z)},message:"The value must be alpha-numeric"});var Ct=core.createRule({type:"between",validator:(e,t,n)=>{if(r.isFilled(e)&&r.isFilled(t)&&r.isFilled(n)){let o=r.toNumber(e),l=r.toNumber(t),u=r.toNumber(n);return r.isNumber(o)&&r.isNumber(l)&&r.isNumber(u)?o>=l&&o<=u:(console.warn(`[between] Value or parameters aren't numbers, got value: ${e}, min: ${t}, max: ${n}`),!1)}return !0},message:(e,{$params:[t,n]})=>`The value must be between ${t} and ${n}`});var X=/^[-]?\d*(\.\d+)?$/,St=core.createRule({type:"decimal",validator(e){return r.isEmpty(e)?!0:r.regex(e,X)},message:"Value must be decimal"});var ee=/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i,Bt=core.createRule({type:"email",validator(e){return r.isEmpty(e)?!0:r.regex(e,ee)},message:"Value must be an valid email address"});var re=/(^[0-9]*$)|(^-[0-9]+$)/,Xt=core.createRule({type:"integer",validator(e){return r.isEmpty(e)?!0:r.regex(e,re)},message:"Value must be an integer"});var ar=core.createRule({type:"maxValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)<=t:(console.warn(`[maxValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The maximum value allowed is ${t}`});var sr=core.createRule({type:"minLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)>=t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have at least ${t} items`:`This field should be at least ${t} characters long`});var pr=core.createRule({type:"minValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)>=t:(console.warn(`[minValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The minimum value allowed is ${t}`});var gr=core.createRule({type:"exactLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)===t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`This field should be exactly ${t} characters long`});var le=/^\d*(\.\d+)?$/,Dr=core.createRule({type:"numeric",validator(e){return r.isEmpty(e)?!0:r.regex(e,le)},message:"This field must be numeric"});var Pr=core.createRule({type:"required",validator(e,t){return t?!0:r.isFilled(e)},message:"This field is required",active(e,{$params:[t]}){return !t}});var Ar=core.createRule({type:"sameAs",validator(e,t,n="other"){return r.isEmpty(e)?!0:e===t},message(e,{$params:[t,n]}){return `Value must be equal to the ${n} value`}});var pe=/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i,Nr=core.createRule({type:"url",validator(e){return r.isEmpty(e)?!0:r.regex(e,pe)},message:"The value is not a valid URL address"});var Ir=core.createRule({type:"dateAfter",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()>r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-after"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t]})=>`The date must be after ${t}`});var Cr=core.createRule({type:"dateBefore",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()<r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-before"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The fields must be Dates":`The date must be before ${t}`});var Sr=core.createRule({type:"dateBetween",validator:(e,t,n)=>r.isDate(e)&&r.isDate(t)&&r.isDate(n)?r.toDate(e).getTime()>r.toDate(t).getTime()&&r.toDate(e).getTime()<r.toDate(n).getTime():!0,message:(e,{$params:[t,n]})=>`The date must be between ${t} and ${n}`});function ce(e){if(e.length>3||e.length===0||e[0]==="0"&&e!=="0"||!e.match(/^\d+$/))return !1;let t=+e|0;return t>=0&&t<=255}var Br=core.createRule({type:"ipAddress",validator(e){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let t=e.split(".");return t.length===4&&t.every(ce)},message:"The value is not a valid IP address"});var Xr=core.createRule({type:"macAddress",validator(e,t=":"){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let n=typeof t=="string"&&t!==""?e.split(t):e.length===12||e.length===16?e.match(/.{2}/g):null;return n!==null&&(n.length===6||n.length===8)&&n.every(xe)},message:"The value is not a valid MAC Address"}),xe=e=>e.toLowerCase().match(/^[0-9a-f]{2}$/);var ra=core.createRule({type:"checked",validator:e=>r.isFilled(e)?e===!0:!0,message:"This field must be checked"});var oa=core.createRule({type:"contains",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.includes(t):!0},message(e,{$params:[t]}){return `Field must contain ${t}`}});var ma=core.createRule({type:"startsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.startsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var ya=core.createRule({type:"endsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.endsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var ba=core.createRule({type:"regex",validator(e,...t){return r.isFilled(e)?r.regex(e,...t):!0},message:"This field does not match the required pattern"});exports.alpha=Nt;exports.alphaNum=It;exports.and=z;exports.applyIf=E;exports.between=Ct;exports.checked=ra;exports.contains=oa;exports.dateAfter=Ir;exports.dateBefore=Cr;exports.dateBetween=Sr;exports.decimal=St;exports.email=Bt;exports.endsWith=ya;exports.exactLength=gr;exports.integer=Xt;exports.ipAddress=Br;exports.macAddress=Xr;exports.maxLength=Pt;exports.maxValue=ar;exports.minLength=sr;exports.minValue=pr;exports.not=j;exports.numeric=Dr;exports.or=C;exports.regex=ba;exports.required=Dt;exports.requiredIf=At;exports.requiredUnless=Pr;exports.ruleHelpers=r;exports.sameAs=Ar;exports.startsWith=ma;exports.url=Nr;exports.withAsync=v;exports.withMessage=$;exports.withParams=N;
1
+ 'use strict';var core=require('@regle/core'),vue=require('vue');function v(e,t){let n,o,l,u;typeof e=="function"&&!("_validator"in e)?(n=core.InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u}=e;let m=core.createRule({type:n,validator:o,active:l,message:t}),a=[...u??[]];if(m._params=a,m._patched=!0,typeof m=="function"){let s=m(...a);return s._patched=!0,s}else return m}function V(e,t){let n,o,l,u,m;typeof e=="function"&&!("_validator"in e)?(n=core.InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u,_message:m}=e;let a=core.createRule({type:n,validator:o,active:l,message:m,tooltip:t}),s=[...u??[]];return a._params=s,typeof a=="function"?a(...s):a}function N(e,t){let n=async(l,...u)=>e(l,...u),o=core.createRule({type:core.InternalRuleType.Async,validator:n,message:""});return o._params=o._params?.concat(t),o(...t??[])}function E(e,t){let n=(l,...u)=>e(l,...u),o=core.createRule({type:core.InternalRuleType.Inline,validator:n,message:""});return o._params=o._params?.concat(t),o(...t)}function C(e,t){let n,o,l=[],u="";typeof t=="function"?(n=core.InternalRuleType.Inline,o=t,l=[e]):({_type:n,validator:o,_message:u}=t,l=t._params?.concat([e]));function m(i){let[f]=core.unwrapRuleParameters([e]);return f?o(i,f):!0}function a(i,f){let[p]=core.unwrapRuleParameters([e]);return p}let s=core.createRule({type:n,validator:m,active:a,message:u});return s._params=l,s}function y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function x(e){return !y(typeof e=="string"?e.trim():e)}function b(e){return e==null||typeof e!="number"?!1:!isNaN(e)}function D(e,...t){if(y(e))return !0;let n=typeof e=="number"?e.toString():e;return t.every(o=>(o.lastIndex=0,o.test(n)))}function M(e){let t=vue.unref(e);return Array.isArray(t)?t.length:typeof t=="object"?Object.keys(t).length:typeof t=="number"?isNaN(t)?0:t:String(t).length}function h(e){if(y(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let n=new Date(e);if(n.toString()==="Invalid Date")return !1;t=n;}return !!t}catch{return !1}}function P(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function d(e){return typeof e=="number"?e:e!=null?typeof e=="string"?e.trim()!==e?NaN:+e:NaN:NaN}var r={isEmpty:y,isFilled:x,size:M,regex:D,isNumber:b,isDate:h,toDate:P,toNumber:d};function j(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>{if(typeof a=="function")return null;{let s=a._params;return s?.length?s:[null]}}).flat().filter(a=>!!a);function o(a,s,...i){let f=[],p=0;for(let R of a)if(typeof R=="function")f.push(R(s)),p++;else {let g=R._params?.length??0;f.push(R.validator(s,...i.slice(p,g))),g&&(p+=g);}return f}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.every(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,f)=>{if(typeof f=="boolean")return i;let{$valid:p,...R}=f;return {...i,...R}},{})}:a.every(i=>!!i)}let u;e.length?u=t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)}:u=a=>!1;let m=core.createRule({type:"and",validator:u,message:"The value does not match all of the provided validators"});return m._params=n,m}function S(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>typeof a=="function"?null:a._params).flat().filter(a=>!!a);function o(a,s,...i){let f=[],p=0;for(let R of a)if(typeof R=="function")f.push(R(s)),p++;else {let g=R._params?.length??0;f.push(R.validator(s,...i.slice(p,g))),g&&(p+=g);}return f}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.some(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,f)=>{if(typeof f=="boolean")return i;let{$valid:p,...R}=f;return {...i,...R}},{})}:a.some(i=>!!i)}let m=core.createRule({type:"or",validator:t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)},message:"The value does not match any of the provided validators"});return m._params=n,m}function K(e,t){let n,o,l,u,m;typeof e=="function"?(o=e,m=e.constructor.name==="AsyncFunction"):({_type:n,validator:o,_params:u}=e,m=e._async),m?l=async(s,...i)=>r.isFilled(s)?!await o(s,...i):!0:l=(s,...i)=>r.isFilled(s)?!o(s,...i):!0;let a=core.createRule({type:"not",validator:l,message:t??"Error"});return a._params=u,a}var Ft=core.createRule({type:"required",validator:e=>r.isFilled(e),message:"This field is required"});var Ht=core.createRule({type:"maxLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)<=t:(console.warn(`[maxLength] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have maximum ${t} items`:`The maximum length allowed is ${t}`});var Ct=core.createRule({type:"required",validator(e,t){return t?r.isFilled(e):!0},message:"This field is required",active(e,{$params:[t]}){return t}});var Q=/^[a-zA-Z]*$/,qt=core.createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Q)},message:"The value is not alphabetical"});var Y=/^[a-zA-Z0-9]*$/,Ot=core.createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Y)},message:"The value must be alpha-numeric"});var Qt=core.createRule({type:"between",validator:(e,t,n)=>{if(r.isFilled(e)&&r.isFilled(t)&&r.isFilled(n)){let o=r.toNumber(e),l=r.toNumber(t),u=r.toNumber(n);return r.isNumber(o)&&r.isNumber(l)&&r.isNumber(u)?o>=l&&o<=u:(console.warn(`[between] Value or parameters aren't numbers, got value: ${e}, min: ${t}, max: ${n}`),!1)}return !0},message:(e,{$params:[t,n]})=>`The value must be between ${t} and ${n}`});var re=/^[-]?\d*(\.\d+)?$/,tr=core.createRule({type:"decimal",validator(e){return r.isEmpty(e)?!0:r.regex(e,re)},message:"Value must be decimal"});var ne=/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i,ir=core.createRule({type:"email",validator(e){return r.isEmpty(e)?!0:r.regex(e,ne)},message:"Value must be an valid email address"});var oe=/(^[0-9]*$)|(^-[0-9]+$)/,ur=core.createRule({type:"integer",validator(e){return r.isEmpty(e)?!0:r.regex(e,oe)},message:"Value must be an integer"});var yr=core.createRule({type:"maxValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)<=t:(console.warn(`[maxValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The maximum value allowed is ${t}`});var Tr=core.createRule({type:"minLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)>=t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have at least ${t} items`:`This field should be at least ${t} characters long`});var hr=core.createRule({type:"minValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)>=t:(console.warn(`[minValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The minimum value allowed is ${t}`});var vr=core.createRule({type:"exactLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)===t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`This field should be exactly ${t} characters long`});var Re=/^\d*(\.\d+)?$/,Fr=core.createRule({type:"numeric",validator(e){return r.isEmpty(e)?!0:r.regex(e,Re)},message:"This field must be numeric"});var Hr=core.createRule({type:"required",validator(e,t){return t?!0:r.isFilled(e)},message:"This field is required",active(e,{$params:[t]}){return !t}});var Cr=core.createRule({type:"sameAs",validator(e,t,n="other"){return r.isEmpty(e)?!0:e===t},message(e,{$params:[t,n]}){return `Value must be equal to the ${n} value`}});var ge=/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i,qr=core.createRule({type:"url",validator(e){return r.isEmpty(e)?!0:r.regex(e,ge)},message:"The value is not a valid URL address"});function ce(){return navigator.languages!=null?navigator.languages[0]:navigator.language}function c(e){return e?new Intl.DateTimeFormat(ce(),{dateStyle:"short"}).format(new Date(e)):"?"}var Zr=core.createRule({type:"dateAfter",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()>r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-after"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The inputs must be Dates":`The date must be after ${c(t)}`});var ea=core.createRule({type:"dateBefore",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()<r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-before"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The fields must be Dates":`The date must be before ${c(t)}`});var ia=core.createRule({type:"dateBetween",validator:(e,t,n)=>r.isDate(e)&&r.isDate(t)&&r.isDate(n)?r.toDate(e).getTime()>r.toDate(t).getTime()&&r.toDate(e).getTime()<r.toDate(n).getTime():!0,message:(e,{$params:[t,n]})=>`The date must be between ${c(t)} and ${c(n)}`});function Me(e){if(e.length>3||e.length===0||e[0]==="0"&&e!=="0"||!e.match(/^\d+$/))return !1;let t=+e|0;return t>=0&&t<=255}var ua=core.createRule({type:"ipAddress",validator(e){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let t=e.split(".");return t.length===4&&t.every(Me)},message:"The value is not a valid IP address"});var pa=core.createRule({type:"macAddress",validator(e,t=":"){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let n=typeof t=="string"&&t!==""?e.split(t):e.length===12||e.length===16?e.match(/.{2}/g):null;return n!==null&&(n.length===6||n.length===8)&&n.every(Pe)},message:"The value is not a valid MAC Address"}),Pe=e=>e.toLowerCase().match(/^[0-9a-f]{2}$/);var ca=core.createRule({type:"checked",validator:e=>r.isFilled(e)?e===!0:!0,message:"This field must be checked"});var Da=core.createRule({type:"contains",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.includes(t):!0},message(e,{$params:[t]}){return `Field must contain ${t}`}});var wa=core.createRule({type:"startsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.startsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var Aa=core.createRule({type:"endsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.endsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var Na=core.createRule({type:"regex",validator(e,...t){return r.isFilled(e)?r.regex(e,...t):!0},message:"This field does not match the required pattern"});exports.alpha=qt;exports.alphaNum=Ot;exports.and=j;exports.applyIf=C;exports.between=Qt;exports.checked=ca;exports.contains=Da;exports.dateAfter=Zr;exports.dateBefore=ea;exports.dateBetween=ia;exports.decimal=tr;exports.email=ir;exports.endsWith=Aa;exports.exactLength=vr;exports.integer=ur;exports.ipAddress=ua;exports.macAddress=pa;exports.maxLength=Ht;exports.maxValue=yr;exports.minLength=Tr;exports.minValue=hr;exports.not=K;exports.numeric=Fr;exports.or=S;exports.regex=Na;exports.required=Ft;exports.requiredIf=Ct;exports.requiredUnless=Hr;exports.ruleHelpers=r;exports.sameAs=Cr;exports.startsWith=wa;exports.url=qr;exports.withAsync=N;exports.withMessage=v;exports.withParams=E;exports.withTooltip=V;
package/dist/index.d.cts CHANGED
@@ -5,12 +5,33 @@ declare function withMessage<TValue extends any, TParams extends any[], TReturn
5
5
  declare function withMessage<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleWithParamsDefinition<TValue, TParams, TAsync>;
6
6
  declare function withMessage<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
7
7
 
8
+ declare function withTooltip<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TReturn extends Promise<infer M> ? M : TReturn>, string | string[]>): InferRegleRule<TValue, TParams, TAsync, TReturn extends Promise<infer M> ? M : TReturn>;
9
+ declare function withTooltip<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleWithParamsDefinition<TValue, TParams, TAsync>;
10
+ declare function withTooltip<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
11
+
8
12
  declare function withAsync<TValue, TParams extends (Ref<unknown> | (() => unknown))[] = [], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, depsArray?: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, true, TMetadata>;
9
13
 
10
14
  declare function withParams<TValue, TParams extends (Ref<unknown> | (() => unknown))[] = [], TReturn extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, depsArray: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, TAsync, TMetadata>;
11
15
 
12
16
  declare function applyIf<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(_condition: ParamDecl<boolean>, rule: InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>): RegleRuleDefinition<TValue, [...TParams, condition: boolean], TAsync, TMetadata>;
13
17
 
18
+ declare function isFilled<T extends unknown>(value: T): value is NonNullable<T>;
19
+
20
+ declare function isNumber(value: unknown): value is number;
21
+
22
+ declare function regex$1(_value: string | number | null | undefined, ...expr: RegExp[]): boolean;
23
+
24
+ declare function size(value: MaybeRef<string | any[] | Record<string, any> | number>): number;
25
+
26
+ declare function isDate(value: unknown): value is Date;
27
+
28
+ declare function toDate(argument: Maybe<Date | number | string>): Date;
29
+
30
+ /**
31
+ * @returns ⚠️ Warning, returned value can be NaN
32
+ */
33
+ declare function toNumber<T extends number | string | undefined>(argument: T): number;
34
+
14
35
  declare global {
15
36
  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
16
37
  interface SymbolConstructor {
@@ -18,7 +39,7 @@ declare global {
18
39
  }
19
40
  }
20
41
 
21
- declare const emptyObjectSymbol: unique symbol;
42
+ declare const emptyObjectSymbol$1: unique symbol;
22
43
 
23
44
  /**
24
45
  Represents a strictly empty plain object, the `{}` value.
@@ -46,26 +67,9 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
46
67
 
47
68
  @category Object
48
69
  */
49
- type EmptyObject = {[emptyObjectSymbol]?: never};
50
-
51
- declare function isEmpty(value: unknown): value is null | undefined | [] | EmptyObject;
52
-
53
- declare function isFilled<T extends unknown>(value: T): value is NonNullable<T>;
54
-
55
- declare function isNumber(value: unknown): value is number;
56
-
57
- declare function regex$1(_value: string | number | null | undefined, ...expr: RegExp[]): boolean;
58
-
59
- declare function size(value: MaybeRef<string | any[] | Record<string, any> | number>): number;
60
-
61
- declare function isDate(value: unknown): value is Date;
62
-
63
- declare function toDate(argument: Maybe<Date | number | string>): Date;
70
+ type EmptyObject$1 = {[emptyObjectSymbol$1]?: never};
64
71
 
65
- /**
66
- * @returns ⚠️ Warning, returned value can be NaN
67
- */
68
- declare function toNumber<T extends number | string | undefined>(argument: T): number;
72
+ declare function isEmpty(value: unknown): value is null | undefined | [] | EmptyObject$1;
69
73
 
70
74
  declare const ruleHelpers: {
71
75
  isEmpty: typeof isEmpty;
@@ -78,6 +82,43 @@ declare const ruleHelpers: {
78
82
  toNumber: typeof toNumber;
79
83
  };
80
84
 
85
+ declare global {
86
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
87
+ interface SymbolConstructor {
88
+ readonly observable: symbol;
89
+ }
90
+ }
91
+
92
+ declare const emptyObjectSymbol: unique symbol;
93
+
94
+ /**
95
+ Represents a strictly empty plain object, the `{}` value.
96
+
97
+ When you annotate something as the type `{}`, it can be anything except `null` and `undefined`. This means that you cannot use `{}` to represent an empty plain object ([read more](https://stackoverflow.com/questions/47339869/typescript-empty-object-and-any-difference/52193484#52193484)).
98
+
99
+ @example
100
+ ```
101
+ import type {EmptyObject} from 'type-fest';
102
+
103
+ // The following illustrates the problem with `{}`.
104
+ const foo1: {} = {}; // Pass
105
+ const foo2: {} = []; // Pass
106
+ const foo3: {} = 42; // Pass
107
+ const foo4: {} = {a: 1}; // Pass
108
+
109
+ // With `EmptyObject` only the first case is valid.
110
+ const bar1: EmptyObject = {}; // Pass
111
+ const bar2: EmptyObject = 42; // Fail
112
+ const bar3: EmptyObject = []; // Fail
113
+ const bar4: EmptyObject = {a: 1}; // Fail
114
+ ```
115
+
116
+ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<never, never>` do not work. See {@link https://github.com/sindresorhus/type-fest/issues/395 #395}.
117
+
118
+ @category Object
119
+ */
120
+ type EmptyObject = {[emptyObjectSymbol]?: never};
121
+
81
122
  type ExtractValueFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<infer V, any, any, any> ? [V, ...ExtractValueFromRules<R>] : F extends InlineRuleDeclaration<infer V, any> ? [V, ...ExtractValueFromRules<R>] : [F, ...ExtractValueFromRules<R>] : [];
82
123
  type ExtractAsyncStatesFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<any, any, infer A, any> ? [A, ...ExtractValueFromRules<R>] : F extends InlineRuleDeclaration<any, any> ? [ReturnType<F> extends Promise<any> ? true : false, ...ExtractValueFromRules<R>] : [F, ...ExtractValueFromRules<R>] : [];
83
124
  type ExtractAsync<T extends [...any[]]> = T extends [infer F, ...infer R] ? F extends true ? true : F extends false ? ExtractAsync<R> : false : false;
@@ -202,4 +243,4 @@ declare const regex: RegleRuleWithParamsDefinition<string | number, [
202
243
  ...regexp: RegExp[]
203
244
  ], false, boolean>;
204
245
 
205
- export { alpha, alphaNum, and, applyIf, between, checked, contains, dateAfter, dateBefore, dateBetween, decimal, email, endsWith, exactLength, integer, ipAddress, macAddress, maxLength, maxValue, minLength, minValue, not, numeric, or, regex, required, requiredIf, requiredUnless, ruleHelpers, sameAs, startsWith, url, withAsync, withMessage, withParams };
246
+ export { alpha, alphaNum, and, applyIf, between, checked, contains, dateAfter, dateBefore, dateBetween, decimal, email, endsWith, exactLength, integer, ipAddress, macAddress, maxLength, maxValue, minLength, minValue, not, numeric, or, regex, required, requiredIf, requiredUnless, ruleHelpers, sameAs, startsWith, url, withAsync, withMessage, withParams, withTooltip };
package/dist/index.d.ts CHANGED
@@ -5,12 +5,33 @@ declare function withMessage<TValue extends any, TParams extends any[], TReturn
5
5
  declare function withMessage<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleWithParamsDefinition<TValue, TParams, TAsync>;
6
6
  declare function withMessage<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
7
7
 
8
+ declare function withTooltip<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TReturn extends Promise<infer M> ? M : TReturn>, string | string[]>): InferRegleRule<TValue, TParams, TAsync, TReturn extends Promise<infer M> ? M : TReturn>;
9
+ declare function withTooltip<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleWithParamsDefinition<TValue, TParams, TAsync>;
10
+ declare function withTooltip<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
11
+
8
12
  declare function withAsync<TValue, TParams extends (Ref<unknown> | (() => unknown))[] = [], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, depsArray?: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, true, TMetadata>;
9
13
 
10
14
  declare function withParams<TValue, TParams extends (Ref<unknown> | (() => unknown))[] = [], TReturn extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: InlineRuleDeclaration<TValue, TParams, TReturn>, depsArray: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, TAsync, TMetadata>;
11
15
 
12
16
  declare function applyIf<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(_condition: ParamDecl<boolean>, rule: InlineRuleDeclaration<TValue, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>): RegleRuleDefinition<TValue, [...TParams, condition: boolean], TAsync, TMetadata>;
13
17
 
18
+ declare function isFilled<T extends unknown>(value: T): value is NonNullable<T>;
19
+
20
+ declare function isNumber(value: unknown): value is number;
21
+
22
+ declare function regex$1(_value: string | number | null | undefined, ...expr: RegExp[]): boolean;
23
+
24
+ declare function size(value: MaybeRef<string | any[] | Record<string, any> | number>): number;
25
+
26
+ declare function isDate(value: unknown): value is Date;
27
+
28
+ declare function toDate(argument: Maybe<Date | number | string>): Date;
29
+
30
+ /**
31
+ * @returns ⚠️ Warning, returned value can be NaN
32
+ */
33
+ declare function toNumber<T extends number | string | undefined>(argument: T): number;
34
+
14
35
  declare global {
15
36
  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
16
37
  interface SymbolConstructor {
@@ -18,7 +39,7 @@ declare global {
18
39
  }
19
40
  }
20
41
 
21
- declare const emptyObjectSymbol: unique symbol;
42
+ declare const emptyObjectSymbol$1: unique symbol;
22
43
 
23
44
  /**
24
45
  Represents a strictly empty plain object, the `{}` value.
@@ -46,26 +67,9 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
46
67
 
47
68
  @category Object
48
69
  */
49
- type EmptyObject = {[emptyObjectSymbol]?: never};
50
-
51
- declare function isEmpty(value: unknown): value is null | undefined | [] | EmptyObject;
52
-
53
- declare function isFilled<T extends unknown>(value: T): value is NonNullable<T>;
54
-
55
- declare function isNumber(value: unknown): value is number;
56
-
57
- declare function regex$1(_value: string | number | null | undefined, ...expr: RegExp[]): boolean;
58
-
59
- declare function size(value: MaybeRef<string | any[] | Record<string, any> | number>): number;
60
-
61
- declare function isDate(value: unknown): value is Date;
62
-
63
- declare function toDate(argument: Maybe<Date | number | string>): Date;
70
+ type EmptyObject$1 = {[emptyObjectSymbol$1]?: never};
64
71
 
65
- /**
66
- * @returns ⚠️ Warning, returned value can be NaN
67
- */
68
- declare function toNumber<T extends number | string | undefined>(argument: T): number;
72
+ declare function isEmpty(value: unknown): value is null | undefined | [] | EmptyObject$1;
69
73
 
70
74
  declare const ruleHelpers: {
71
75
  isEmpty: typeof isEmpty;
@@ -78,6 +82,43 @@ declare const ruleHelpers: {
78
82
  toNumber: typeof toNumber;
79
83
  };
80
84
 
85
+ declare global {
86
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
87
+ interface SymbolConstructor {
88
+ readonly observable: symbol;
89
+ }
90
+ }
91
+
92
+ declare const emptyObjectSymbol: unique symbol;
93
+
94
+ /**
95
+ Represents a strictly empty plain object, the `{}` value.
96
+
97
+ When you annotate something as the type `{}`, it can be anything except `null` and `undefined`. This means that you cannot use `{}` to represent an empty plain object ([read more](https://stackoverflow.com/questions/47339869/typescript-empty-object-and-any-difference/52193484#52193484)).
98
+
99
+ @example
100
+ ```
101
+ import type {EmptyObject} from 'type-fest';
102
+
103
+ // The following illustrates the problem with `{}`.
104
+ const foo1: {} = {}; // Pass
105
+ const foo2: {} = []; // Pass
106
+ const foo3: {} = 42; // Pass
107
+ const foo4: {} = {a: 1}; // Pass
108
+
109
+ // With `EmptyObject` only the first case is valid.
110
+ const bar1: EmptyObject = {}; // Pass
111
+ const bar2: EmptyObject = 42; // Fail
112
+ const bar3: EmptyObject = []; // Fail
113
+ const bar4: EmptyObject = {a: 1}; // Fail
114
+ ```
115
+
116
+ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<never, never>` do not work. See {@link https://github.com/sindresorhus/type-fest/issues/395 #395}.
117
+
118
+ @category Object
119
+ */
120
+ type EmptyObject = {[emptyObjectSymbol]?: never};
121
+
81
122
  type ExtractValueFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<infer V, any, any, any> ? [V, ...ExtractValueFromRules<R>] : F extends InlineRuleDeclaration<infer V, any> ? [V, ...ExtractValueFromRules<R>] : [F, ...ExtractValueFromRules<R>] : [];
82
123
  type ExtractAsyncStatesFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<any, any, infer A, any> ? [A, ...ExtractValueFromRules<R>] : F extends InlineRuleDeclaration<any, any> ? [ReturnType<F> extends Promise<any> ? true : false, ...ExtractValueFromRules<R>] : [F, ...ExtractValueFromRules<R>] : [];
83
124
  type ExtractAsync<T extends [...any[]]> = T extends [infer F, ...infer R] ? F extends true ? true : F extends false ? ExtractAsync<R> : false : false;
@@ -202,4 +243,4 @@ declare const regex: RegleRuleWithParamsDefinition<string | number, [
202
243
  ...regexp: RegExp[]
203
244
  ], false, boolean>;
204
245
 
205
- export { alpha, alphaNum, and, applyIf, between, checked, contains, dateAfter, dateBefore, dateBetween, decimal, email, endsWith, exactLength, integer, ipAddress, macAddress, maxLength, maxValue, minLength, minValue, not, numeric, or, regex, required, requiredIf, requiredUnless, ruleHelpers, sameAs, startsWith, url, withAsync, withMessage, withParams };
246
+ export { alpha, alphaNum, and, applyIf, between, checked, contains, dateAfter, dateBefore, dateBetween, decimal, email, endsWith, exactLength, integer, ipAddress, macAddress, maxLength, maxValue, minLength, minValue, not, numeric, or, regex, required, requiredIf, requiredUnless, ruleHelpers, sameAs, startsWith, url, withAsync, withMessage, withParams, withTooltip };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {createRule,InternalRuleType,unwrapRuleParameters}from'@regle/core';import {unref}from'vue';function $(e,t){let n,o,l,u;typeof e=="function"&&!("_validator"in e)?(n=InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u}=e;let f=createRule({type:n,validator:o,active:l,message:t}),a=[...u??[]];if(f._params=a,f._patched=!0,typeof f=="function"){let s=f(...a);return s._patched=!0,s}else return f}function v(e,t){let n=async(l,...u)=>e(l,...u),o=createRule({type:InternalRuleType.Async,validator:n,message:""});return o._params=o._params?.concat(t),o(...t??[])}function N(e,t){let n=(l,...u)=>e(l,...u),o=createRule({type:InternalRuleType.Inline,validator:n,message:""});return o._params=o._params?.concat(t),o(...t)}function E(e,t){let n,o,l=[],u="";typeof t=="function"?(n=InternalRuleType.Inline,o=t,l=[e]):({_type:n,validator:o,_message:u}=t,l=t._params?.concat([e]));function f(i){let[m]=unwrapRuleParameters([e]);return m?o(i,m):!0}function a(i,m){let[R]=unwrapRuleParameters([e]);return R}let s=createRule({type:n,validator:f,active:a,message:u});return s._params=l,s}function y(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function b(e){return !y(typeof e=="string"?e.trim():e)}function x(e){return e==null||typeof e!="number"?!1:!isNaN(e)}function D(e,...t){if(y(e))return !0;let n=typeof e=="number"?e.toString():e;return t.every(o=>(o.lastIndex=0,o.test(n)))}function T(e){let t=unref(e);return Array.isArray(t)?t.length:typeof t=="object"?Object.keys(t).length:typeof t=="number"?isNaN(t)?0:t:String(t).length}function M(e){if(y(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let n=new Date(e);if(n.toString()==="Invalid Date")return !1;t=n;}return !!t}catch{return !1}}function h(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function d(e){return typeof e=="number"?e:e!=null?typeof e=="string"?e.trim()!==e?NaN:+e:NaN:NaN}var r={isEmpty:y,isFilled:b,size:T,regex:D,isNumber:x,isDate:M,toDate:h,toNumber:d};function z(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>{if(typeof a=="function")return null;{let s=a._params;return s?.length?s:[null]}}).flat().filter(a=>!!a);function o(a,s,...i){let m=[],R=0;for(let p of a)if(typeof p=="function")m.push(p(s)),R++;else {let g=p._params?.length??0;m.push(p.validator(s,...i.slice(R,g))),g&&(R+=g);}return m}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.every(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:R,...p}=m;return {...i,...p}},{})}:a.every(i=>!!i)}let u;e.length?u=t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)}:u=a=>!1;let f=createRule({type:"and",validator:u,message:"The value does not match all of the provided validators"});return f._params=n,f}function C(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>typeof a=="function"?null:a._params).flat().filter(a=>!!a);function o(a,s,...i){let m=[],R=0;for(let p of a)if(typeof p=="function")m.push(p(s)),R++;else {let g=p._params?.length??0;m.push(p.validator(s,...i.slice(R,g))),g&&(R+=g);}return m}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.some(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:R,...p}=m;return {...i,...p}},{})}:a.some(i=>!!i)}let f=createRule({type:"or",validator:t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)},message:"The value does not match any of the provided validators"});return f._params=n,f}function j(e,t){let n,o,l,u,f;typeof e=="function"?(o=e,f=e.constructor.name==="AsyncFunction"):({_type:n,validator:o,_params:u}=e,f=e._async),f?l=async(s,...i)=>r.isFilled(s)?!await o(s,...i):!0:l=(s,...i)=>r.isFilled(s)?!o(s,...i):!0;let a=createRule({type:"not",validator:l,message:t??"Error"});return a._params=u,a}var Dt=createRule({type:"required",validator:e=>r.isFilled(e),message:"This field is required"});var Pt=createRule({type:"maxLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)<=t:(console.warn(`[maxLength] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have maximum ${t} items`:`The maximum length allowed is ${t}`});var At=createRule({type:"required",validator(e,t){return t?r.isFilled(e):!0},message:"This field is required",active(e,{$params:[t]}){return t}});var O=/^[a-zA-Z]*$/,Nt=createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,O)},message:"The value is not alphabetical"});var Z=/^[a-zA-Z0-9]*$/,It=createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Z)},message:"The value must be alpha-numeric"});var Ct=createRule({type:"between",validator:(e,t,n)=>{if(r.isFilled(e)&&r.isFilled(t)&&r.isFilled(n)){let o=r.toNumber(e),l=r.toNumber(t),u=r.toNumber(n);return r.isNumber(o)&&r.isNumber(l)&&r.isNumber(u)?o>=l&&o<=u:(console.warn(`[between] Value or parameters aren't numbers, got value: ${e}, min: ${t}, max: ${n}`),!1)}return !0},message:(e,{$params:[t,n]})=>`The value must be between ${t} and ${n}`});var X=/^[-]?\d*(\.\d+)?$/,St=createRule({type:"decimal",validator(e){return r.isEmpty(e)?!0:r.regex(e,X)},message:"Value must be decimal"});var ee=/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i,Bt=createRule({type:"email",validator(e){return r.isEmpty(e)?!0:r.regex(e,ee)},message:"Value must be an valid email address"});var re=/(^[0-9]*$)|(^-[0-9]+$)/,Xt=createRule({type:"integer",validator(e){return r.isEmpty(e)?!0:r.regex(e,re)},message:"Value must be an integer"});var ar=createRule({type:"maxValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)<=t:(console.warn(`[maxValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The maximum value allowed is ${t}`});var sr=createRule({type:"minLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)>=t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have at least ${t} items`:`This field should be at least ${t} characters long`});var pr=createRule({type:"minValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)>=t:(console.warn(`[minValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The minimum value allowed is ${t}`});var gr=createRule({type:"exactLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)===t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`This field should be exactly ${t} characters long`});var le=/^\d*(\.\d+)?$/,Dr=createRule({type:"numeric",validator(e){return r.isEmpty(e)?!0:r.regex(e,le)},message:"This field must be numeric"});var Pr=createRule({type:"required",validator(e,t){return t?!0:r.isFilled(e)},message:"This field is required",active(e,{$params:[t]}){return !t}});var Ar=createRule({type:"sameAs",validator(e,t,n="other"){return r.isEmpty(e)?!0:e===t},message(e,{$params:[t,n]}){return `Value must be equal to the ${n} value`}});var pe=/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i,Nr=createRule({type:"url",validator(e){return r.isEmpty(e)?!0:r.regex(e,pe)},message:"The value is not a valid URL address"});var Ir=createRule({type:"dateAfter",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()>r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-after"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t]})=>`The date must be after ${t}`});var Cr=createRule({type:"dateBefore",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()<r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-before"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The fields must be Dates":`The date must be before ${t}`});var Sr=createRule({type:"dateBetween",validator:(e,t,n)=>r.isDate(e)&&r.isDate(t)&&r.isDate(n)?r.toDate(e).getTime()>r.toDate(t).getTime()&&r.toDate(e).getTime()<r.toDate(n).getTime():!0,message:(e,{$params:[t,n]})=>`The date must be between ${t} and ${n}`});function ce(e){if(e.length>3||e.length===0||e[0]==="0"&&e!=="0"||!e.match(/^\d+$/))return !1;let t=+e|0;return t>=0&&t<=255}var Br=createRule({type:"ipAddress",validator(e){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let t=e.split(".");return t.length===4&&t.every(ce)},message:"The value is not a valid IP address"});var Xr=createRule({type:"macAddress",validator(e,t=":"){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let n=typeof t=="string"&&t!==""?e.split(t):e.length===12||e.length===16?e.match(/.{2}/g):null;return n!==null&&(n.length===6||n.length===8)&&n.every(xe)},message:"The value is not a valid MAC Address"}),xe=e=>e.toLowerCase().match(/^[0-9a-f]{2}$/);var ra=createRule({type:"checked",validator:e=>r.isFilled(e)?e===!0:!0,message:"This field must be checked"});var oa=createRule({type:"contains",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.includes(t):!0},message(e,{$params:[t]}){return `Field must contain ${t}`}});var ma=createRule({type:"startsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.startsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var ya=createRule({type:"endsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.endsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var ba=createRule({type:"regex",validator(e,...t){return r.isFilled(e)?r.regex(e,...t):!0},message:"This field does not match the required pattern"});export{Nt as alpha,It as alphaNum,z as and,E as applyIf,Ct as between,ra as checked,oa as contains,Ir as dateAfter,Cr as dateBefore,Sr as dateBetween,St as decimal,Bt as email,ya as endsWith,gr as exactLength,Xt as integer,Br as ipAddress,Xr as macAddress,Pt as maxLength,ar as maxValue,sr as minLength,pr as minValue,j as not,Dr as numeric,C as or,ba as regex,Dt as required,At as requiredIf,Pr as requiredUnless,r as ruleHelpers,Ar as sameAs,ma as startsWith,Nr as url,v as withAsync,$ as withMessage,N as withParams};
1
+ import {createRule,InternalRuleType,unwrapRuleParameters}from'@regle/core';import {unref}from'vue';function v(e,t){let n,o,l,u;typeof e=="function"&&!("_validator"in e)?(n=InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u}=e;let m=createRule({type:n,validator:o,active:l,message:t}),a=[...u??[]];if(m._params=a,m._patched=!0,typeof m=="function"){let s=m(...a);return s._patched=!0,s}else return m}function V(e,t){let n,o,l,u,m;typeof e=="function"&&!("_validator"in e)?(n=InternalRuleType.Inline,o=e):{_type:n,validator:o,_active:l,_params:u,_message:m}=e;let a=createRule({type:n,validator:o,active:l,message:m,tooltip:t}),s=[...u??[]];return a._params=s,typeof a=="function"?a(...s):a}function N(e,t){let n=async(l,...u)=>e(l,...u),o=createRule({type:InternalRuleType.Async,validator:n,message:""});return o._params=o._params?.concat(t),o(...t??[])}function E(e,t){let n=(l,...u)=>e(l,...u),o=createRule({type:InternalRuleType.Inline,validator:n,message:""});return o._params=o._params?.concat(t),o(...t)}function C(e,t){let n,o,l=[],u="";typeof t=="function"?(n=InternalRuleType.Inline,o=t,l=[e]):({_type:n,validator:o,_message:u}=t,l=t._params?.concat([e]));function m(i){let[f]=unwrapRuleParameters([e]);return f?o(i,f):!0}function a(i,f){let[p]=unwrapRuleParameters([e]);return p}let s=createRule({type:n,validator:m,active:a,message:u});return s._params=l,s}function y(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function x(e){return !y(typeof e=="string"?e.trim():e)}function b(e){return e==null||typeof e!="number"?!1:!isNaN(e)}function D(e,...t){if(y(e))return !0;let n=typeof e=="number"?e.toString():e;return t.every(o=>(o.lastIndex=0,o.test(n)))}function M(e){let t=unref(e);return Array.isArray(t)?t.length:typeof t=="object"?Object.keys(t).length:typeof t=="number"?isNaN(t)?0:t:String(t).length}function h(e){if(y(e))return !1;try{let t=null;if(e instanceof Date)t=e;else if(typeof e=="number"&&!isNaN(e))t=new Date(e);else if(typeof e=="string"){let n=new Date(e);if(n.toString()==="Invalid Date")return !1;t=n;}return !!t}catch{return !1}}function P(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function d(e){return typeof e=="number"?e:e!=null?typeof e=="string"?e.trim()!==e?NaN:+e:NaN:NaN}var r={isEmpty:y,isFilled:x,size:M,regex:D,isNumber:b,isDate:h,toDate:P,toNumber:d};function j(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>{if(typeof a=="function")return null;{let s=a._params;return s?.length?s:[null]}}).flat().filter(a=>!!a);function o(a,s,...i){let f=[],p=0;for(let R of a)if(typeof R=="function")f.push(R(s)),p++;else {let g=R._params?.length??0;f.push(R.validator(s,...i.slice(p,g))),g&&(p+=g);}return f}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.every(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,f)=>{if(typeof f=="boolean")return i;let{$valid:p,...R}=f;return {...i,...R}},{})}:a.every(i=>!!i)}let u;e.length?u=t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)}:u=a=>!1;let m=createRule({type:"and",validator:u,message:"The value does not match all of the provided validators"});return m._params=n,m}function S(...e){let t=e.some(a=>typeof a=="function"?a.constructor.name==="AsyncFunction":a._async),n=e.map(a=>typeof a=="function"?null:a._params).flat().filter(a=>!!a);function o(a,s,...i){let f=[],p=0;for(let R of a)if(typeof R=="function")f.push(R(s)),p++;else {let g=R._params?.length??0;f.push(R.validator(s,...i.slice(p,g))),g&&(p+=g);}return f}function l(a){return a.some(i=>typeof i!="boolean")?{$valid:a.some(i=>typeof i=="boolean"?!!i:i.$valid),...a.reduce((i,f)=>{if(typeof f=="boolean")return i;let{$valid:p,...R}=f;return {...i,...R}},{})}:a.some(i=>!!i)}let m=createRule({type:"or",validator:t?async(a,...s)=>{let i=await Promise.all(o(e,a,...s));return l(i)}:(a,...s)=>{let i=o(e,a,...s);return l(i)},message:"The value does not match any of the provided validators"});return m._params=n,m}function K(e,t){let n,o,l,u,m;typeof e=="function"?(o=e,m=e.constructor.name==="AsyncFunction"):({_type:n,validator:o,_params:u}=e,m=e._async),m?l=async(s,...i)=>r.isFilled(s)?!await o(s,...i):!0:l=(s,...i)=>r.isFilled(s)?!o(s,...i):!0;let a=createRule({type:"not",validator:l,message:t??"Error"});return a._params=u,a}var Ft=createRule({type:"required",validator:e=>r.isFilled(e),message:"This field is required"});var Ht=createRule({type:"maxLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)<=t:(console.warn(`[maxLength] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have maximum ${t} items`:`The maximum length allowed is ${t}`});var Ct=createRule({type:"required",validator(e,t){return t?r.isFilled(e):!0},message:"This field is required",active(e,{$params:[t]}){return t}});var Q=/^[a-zA-Z]*$/,qt=createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Q)},message:"The value is not alphabetical"});var Y=/^[a-zA-Z0-9]*$/,Ot=createRule({type:"alpha",validator(e){return r.isEmpty(e)?!0:r.regex(e,Y)},message:"The value must be alpha-numeric"});var Qt=createRule({type:"between",validator:(e,t,n)=>{if(r.isFilled(e)&&r.isFilled(t)&&r.isFilled(n)){let o=r.toNumber(e),l=r.toNumber(t),u=r.toNumber(n);return r.isNumber(o)&&r.isNumber(l)&&r.isNumber(u)?o>=l&&o<=u:(console.warn(`[between] Value or parameters aren't numbers, got value: ${e}, min: ${t}, max: ${n}`),!1)}return !0},message:(e,{$params:[t,n]})=>`The value must be between ${t} and ${n}`});var re=/^[-]?\d*(\.\d+)?$/,tr=createRule({type:"decimal",validator(e){return r.isEmpty(e)?!0:r.regex(e,re)},message:"Value must be decimal"});var ne=/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i,ir=createRule({type:"email",validator(e){return r.isEmpty(e)?!0:r.regex(e,ne)},message:"Value must be an valid email address"});var oe=/(^[0-9]*$)|(^-[0-9]+$)/,ur=createRule({type:"integer",validator(e){return r.isEmpty(e)?!0:r.regex(e,oe)},message:"Value must be an integer"});var yr=createRule({type:"maxValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)<=t:(console.warn(`[maxValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The maximum value allowed is ${t}`});var Tr=createRule({type:"minLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)>=t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>Array.isArray(e)?`This list should have at least ${t} items`:`This field should be at least ${t} characters long`});var hr=createRule({type:"minValue",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&!isNaN(d(e))?d(e)>=t:(console.warn(`[minValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!0):!0,message:(e,{$params:[t]})=>`The minimum value allowed is ${t}`});var vr=createRule({type:"exactLength",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)?r.size(e)===t:(console.warn(`[minLength] Parameter isn't a number, got parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`This field should be exactly ${t} characters long`});var Re=/^\d*(\.\d+)?$/,Fr=createRule({type:"numeric",validator(e){return r.isEmpty(e)?!0:r.regex(e,Re)},message:"This field must be numeric"});var Hr=createRule({type:"required",validator(e,t){return t?!0:r.isFilled(e)},message:"This field is required",active(e,{$params:[t]}){return !t}});var Cr=createRule({type:"sameAs",validator(e,t,n="other"){return r.isEmpty(e)?!0:e===t},message(e,{$params:[t,n]}){return `Value must be equal to the ${n} value`}});var ge=/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i,qr=createRule({type:"url",validator(e){return r.isEmpty(e)?!0:r.regex(e,ge)},message:"The value is not a valid URL address"});function ce(){return navigator.languages!=null?navigator.languages[0]:navigator.language}function c(e){return e?new Intl.DateTimeFormat(ce(),{dateStyle:"short"}).format(new Date(e)):"?"}var Zr=createRule({type:"dateAfter",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()>r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-after"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The inputs must be Dates":`The date must be after ${c(t)}`});var ea=createRule({type:"dateBefore",validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()<r.toDate(t).getTime()?!0:{$valid:!1,error:"date-not-before"}:{$valid:!1,error:"value-or-paramater-not-a-date"}:!0,message:(e,{$params:[t],error:n})=>n==="value-or-paramater-not-a-date"?"The fields must be Dates":`The date must be before ${c(t)}`});var ia=createRule({type:"dateBetween",validator:(e,t,n)=>r.isDate(e)&&r.isDate(t)&&r.isDate(n)?r.toDate(e).getTime()>r.toDate(t).getTime()&&r.toDate(e).getTime()<r.toDate(n).getTime():!0,message:(e,{$params:[t,n]})=>`The date must be between ${c(t)} and ${c(n)}`});function Me(e){if(e.length>3||e.length===0||e[0]==="0"&&e!=="0"||!e.match(/^\d+$/))return !1;let t=+e|0;return t>=0&&t<=255}var ua=createRule({type:"ipAddress",validator(e){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let t=e.split(".");return t.length===4&&t.every(Me)},message:"The value is not a valid IP address"});var pa=createRule({type:"macAddress",validator(e,t=":"){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let n=typeof t=="string"&&t!==""?e.split(t):e.length===12||e.length===16?e.match(/.{2}/g):null;return n!==null&&(n.length===6||n.length===8)&&n.every(Pe)},message:"The value is not a valid MAC Address"}),Pe=e=>e.toLowerCase().match(/^[0-9a-f]{2}$/);var ca=createRule({type:"checked",validator:e=>r.isFilled(e)?e===!0:!0,message:"This field must be checked"});var Da=createRule({type:"contains",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.includes(t):!0},message(e,{$params:[t]}){return `Field must contain ${t}`}});var wa=createRule({type:"startsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.startsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var Aa=createRule({type:"endsWith",validator(e,t){return r.isFilled(e)&&r.isFilled(t)?e.endsWith(t):!0},message(e,{$params:[t]}){return `Field must end with ${t}`}});var Na=createRule({type:"regex",validator(e,...t){return r.isFilled(e)?r.regex(e,...t):!0},message:"This field does not match the required pattern"});export{qt as alpha,Ot as alphaNum,j as and,C as applyIf,Qt as between,ca as checked,Da as contains,Zr as dateAfter,ea as dateBefore,ia as dateBetween,tr as decimal,ir as email,Aa as endsWith,vr as exactLength,ur as integer,ua as ipAddress,pa as macAddress,Ht as maxLength,yr as maxValue,Tr as minLength,hr as minValue,K as not,Fr as numeric,S as or,Na as regex,Ft as required,Ct as requiredIf,Hr as requiredUnless,r as ruleHelpers,Cr as sameAs,wa as startsWith,qr as url,N as withAsync,v as withMessage,E as withParams,V as withTooltip};
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@regle/rules",
3
- "version": "0.2.13",
3
+ "version": "0.3.1-beta.4",
4
4
  "description": "Collection of rules and helpers for Regle",
5
5
  "dependencies": {
6
- "@regle/core": "0.2.13"
6
+ "@regle/core": "0.3.1-beta.4"
7
7
  },
8
8
  "devDependencies": {
9
- "@typescript-eslint/eslint-plugin": "8.15.0",
10
- "@typescript-eslint/parser": "8.15.0",
9
+ "@typescript-eslint/eslint-plugin": "8.18.0",
10
+ "@typescript-eslint/parser": "8.18.0",
11
+ "@vue/reactivity": "3.5.13",
11
12
  "@vue/test-utils": "2.4.6",
12
- "bumpp": "9.8.1",
13
+ "bumpp": "9.9.0",
13
14
  "changelogithub": "0.13.11",
14
15
  "cross-env": "7.0.3",
15
- "type-fest": "4.28.0",
16
- "vitest": "2.1.5",
17
16
  "eslint": "9.15.0",
18
17
  "eslint-config-prettier": "9.1.0",
19
18
  "eslint-plugin-vue": "9.31.0",
20
19
  "prettier": "3.3.3",
21
20
  "tsup": "8.3.5",
21
+ "type-fest": "4.30.0",
22
22
  "typescript": "5.6.3",
23
- "vue": "3.5.11",
24
- "@vue/reactivity": "3.5.11",
23
+ "vitest": "2.1.8",
24
+ "vue": "3.5.13",
25
25
  "vue-eslint-parser": "9.4.3",
26
26
  "vue-tsc": "2.1.10"
27
27
  },
@@ -54,7 +54,6 @@
54
54
  "scripts": {
55
55
  "lint": "eslint --ext .ts --ext .vue .",
56
56
  "typecheck": "tsc --noEmit",
57
- "release": "pnpm publish --report-summary",
58
57
  "build": "tsup --minify",
59
58
  "build:sourcemaps": "tsup --clean false --sourcemap inline",
60
59
  "dev": "tsup --config=tsup.dev.ts --watch",