@regle/rules 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Victor Garcia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
File without changes
@@ -0,0 +1,177 @@
1
+ import { RegleRuleMetadataDefinition, InlineRuleDeclaration, RegleRuleDefinitionWithMetadataProcessor, RegleRuleMetadataConsumer, RegleRuleDefinition, RegleRuleWithParamsDefinition, UnwrapRegleUniversalParams, ParamDecl, FormRuleDeclaration, Maybe } from '@regle/core';
2
+ import { Ref, MaybeRef } from 'vue';
3
+
4
+ declare function withMessage<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(rule: InlineRuleDeclaration<TValue, TReturn>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TReturn extends Promise<infer M> ? M : TReturn>, string | string[]>): RegleRuleDefinition<TValue, [], TAsync, TReturn extends Promise<infer M> ? M : TReturn>;
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>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleWithParamsDefinition<TValue, TParams, TAsync>;
6
+ declare function withMessage<TValue extends any, TParams extends any[], TMetadata extends RegleRuleMetadataDefinition, TReturn extends TMetadata | Promise<TMetadata>, TAsync extends boolean = boolean>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>, newMessage: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
7
+
8
+ 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, TReturn>, depsArray?: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, true, TMetadata>;
9
+
10
+ declare function withParams<TValue, TParams extends (Ref<unknown> | (() => unknown))[] = [], TReturn extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn>(rule: InlineRuleDeclaration<TValue, TReturn>, depsArray: [...TParams]): RegleRuleDefinition<TValue, UnwrapRegleUniversalParams<TParams>, true, TMetadata>;
11
+
12
+ 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, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>): RegleRuleDefinition<TValue, [], TAsync, TMetadata>;
13
+
14
+ declare function isEmpty(value: unknown): value is null | undefined;
15
+
16
+ declare function isFilled<T extends unknown>(value: T): value is NonNullable<T>;
17
+
18
+ declare function isNumber(value: unknown): value is number;
19
+
20
+ declare function regex(_value: string | number | null | undefined, ...expr: RegExp[]): boolean;
21
+
22
+ declare function size(value: MaybeRef<string | any[] | Record<string, any> | number>): number;
23
+
24
+ declare function isDate(value: unknown): value is Date;
25
+
26
+ declare function toDate(argument: Date): Date;
27
+
28
+ declare function toNumber(argument: number | string): number | null;
29
+
30
+ declare const ruleHelpers: {
31
+ isEmpty: typeof isEmpty;
32
+ isFilled: typeof isFilled;
33
+ size: typeof size;
34
+ regex: typeof regex;
35
+ isNumber: typeof isNumber;
36
+ isDate: typeof isDate;
37
+ toDate: typeof toDate;
38
+ toNumber: typeof toNumber;
39
+ };
40
+
41
+ declare global {
42
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
43
+ interface SymbolConstructor {
44
+ readonly observable: symbol;
45
+ }
46
+ }
47
+
48
+ declare const emptyObjectSymbol: unique symbol;
49
+
50
+ /**
51
+ Represents a strictly empty plain object, the `{}` value.
52
+
53
+ 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)).
54
+
55
+ @example
56
+ ```
57
+ import type {EmptyObject} from 'type-fest';
58
+
59
+ // The following illustrates the problem with `{}`.
60
+ const foo1: {} = {}; // Pass
61
+ const foo2: {} = []; // Pass
62
+ const foo3: {} = 42; // Pass
63
+ const foo4: {} = {a: 1}; // Pass
64
+
65
+ // With `EmptyObject` only the first case is valid.
66
+ const bar1: EmptyObject = {}; // Pass
67
+ const bar2: EmptyObject = 42; // Fail
68
+ const bar3: EmptyObject = []; // Fail
69
+ const bar4: EmptyObject = {a: 1}; // Fail
70
+ ```
71
+
72
+ 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}.
73
+
74
+ @category Object
75
+ */
76
+ type EmptyObject = {[emptyObjectSymbol]?: never};
77
+
78
+ 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>] : [];
79
+ 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>] : [];
80
+ type ExtractAsync<T extends [...any[]]> = T extends [infer F, ...infer R] ? F extends true ? true : F extends false ? ExtractAsync<R> : false : false;
81
+ type GuessAsyncFromRules<T extends any[]> = ExtractAsync<ExtractAsyncStatesFromRules<T>>;
82
+ type ExtractParamsFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<any, infer P, any, any> ? [P, ...ExtractParamsFromRules<R>] : [F, ...ExtractParamsFromRules<R>] : [];
83
+ type MetadataBase = {
84
+ $valid: boolean;
85
+ [x: string]: any;
86
+ };
87
+ type ExtractMetaDataFromRules<T extends any[]> = T extends [infer F, ...infer R] ? F extends RegleRuleDefinition<any, any, any, infer M extends MetadataBase> ? [M, ...ExtractMetaDataFromRules<R>] : F extends InlineRuleDeclaration<any, infer M extends MetadataBase | Promise<MetadataBase>> ? [M, ...ExtractMetaDataFromRules<R>] : [...ExtractMetaDataFromRules<R>] : [];
88
+ type ExtractMetadata<T extends [...any[]]> = T extends [infer F, ...infer R] ? F & ExtractMetadata<R> : {};
89
+ type GuessMetadataFromRules<T extends any[], TMeta = ExtractMetadata<ExtractMetaDataFromRules<T>>> = TMeta extends EmptyObject ? boolean : TMeta;
90
+ type CreateFn<T extends any[]> = (...args: T) => any;
91
+ type FilterTuple<T extends any[]> = T extends [infer F, ...infer R] ? [F] extends [[]] ? [...FilterTuple<R>] : [F, ...FilterTuple<R>] : [];
92
+ type UnwrapTuplesRaw<T extends any[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
93
+ [K in keyof Args]: Args[K] extends Array<infer U> ? U : never;
94
+ }) => any : never>;
95
+ type UnwrapTuples<T extends any[]> = FilterTuple<UnwrapTuplesRaw<T>>;
96
+
97
+ declare function and<TRules extends FormRuleDeclaration<any, any>[]>(...rules: [...TRules]): RegleRuleDefinition<ExtractValueFromRules<TRules>[number], UnwrapTuples<ExtractParamsFromRules<TRules>>, GuessAsyncFromRules<TRules>, GuessMetadataFromRules<TRules>>;
98
+
99
+ declare function or<TRules extends FormRuleDeclaration<any, any>[]>(...rules: [...TRules]): RegleRuleDefinition<ExtractValueFromRules<TRules>[number], UnwrapTuples<ExtractParamsFromRules<TRules>>, GuessAsyncFromRules<TRules>, GuessMetadataFromRules<TRules>>;
100
+
101
+ declare function not<TValue, TParams extends any[] = 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>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> | InlineRuleDeclaration<TValue, TReturn>, message?: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
102
+
103
+ declare const required: RegleRuleDefinition<unknown, [], false, boolean, unknown>;
104
+
105
+ declare const maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
106
+ count: number
107
+ ], false, boolean>;
108
+
109
+ declare const requiredIf: RegleRuleWithParamsDefinition<unknown, [
110
+ condition: boolean
111
+ ], false, boolean>;
112
+
113
+ declare const alpha: RegleRuleDefinition<string, [], false, boolean, string>;
114
+
115
+ declare const alphaNum: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
116
+
117
+ declare const between: RegleRuleWithParamsDefinition<number, [
118
+ min: number,
119
+ max: number
120
+ ], false, boolean>;
121
+
122
+ declare const decimal: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
123
+
124
+ declare const email: RegleRuleDefinition<string, [], false, boolean, string>;
125
+
126
+ declare const integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
127
+
128
+ declare const maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
129
+
130
+ declare const minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
131
+ count: number
132
+ ], false, boolean>;
133
+
134
+ declare const minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
135
+
136
+ declare const exactLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
137
+ count: number
138
+ ], false, boolean>;
139
+
140
+ declare const numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
141
+
142
+ declare const requiredUnless: RegleRuleWithParamsDefinition<unknown, [
143
+ condition: boolean
144
+ ], false, boolean>;
145
+
146
+ declare const sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown], false, boolean>;
147
+
148
+ declare const url: RegleRuleDefinition<string, [], false, boolean, string>;
149
+
150
+ declare const dateAfter: RegleRuleWithParamsDefinition<string | Date, [
151
+ after: Maybe<string | Date>
152
+ ], false, boolean>;
153
+
154
+ declare const dateBefore: RegleRuleWithParamsDefinition<string | Date, [
155
+ before: Maybe<string | Date>
156
+ ], false, true | {
157
+ $valid: false;
158
+ error: 'date-not-before';
159
+ } | {
160
+ $valid: false;
161
+ error: 'value-or-paramater-not-a-date';
162
+ }>;
163
+
164
+ declare const dateBetween: RegleRuleWithParamsDefinition<string | Date, [
165
+ before: Maybe<string | Date>,
166
+ after: Maybe<string | Date>
167
+ ], false, boolean>;
168
+
169
+ declare const ipAddress: RegleRuleDefinition<string, [], false, boolean, string>;
170
+
171
+ declare const macAddress: RegleRuleWithParamsDefinition<string, [
172
+ separator?: string | undefined
173
+ ], false, boolean>;
174
+
175
+ declare const checked: RegleRuleDefinition<boolean, [], false, boolean, boolean>;
176
+
177
+ export { alpha, alphaNum, and, applyIf, between, checked, dateAfter, dateBefore, dateBetween, decimal, email, exactLength, integer, ipAddress, macAddress, maxLength, maxValue, minLength, minValue, not, numeric, or, required, requiredIf, requiredUnless, ruleHelpers, sameAs, url, withAsync, withMessage, withParams };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import {createRule,defineType,InternalRuleType,unwrapRuleParameters}from'@regle/core';import {unref}from'vue';function $(e,t){let a,o,s,u;typeof e=="function"&&!("_validator"in e)?(a=InternalRuleType.Inline,o=e):{_type:a,validator:o,_active:s,_params:u}=e;let f=createRule({type:a,validator:o,active:s,message:t});return f._params=u,f._patched=!0,f}function v(e,t){let a=async s=>e(s),o=createRule({type:defineType(InternalRuleType.Async),validator:a,message:""});return o._params=t,o}function H(e,t){let a=async s=>e(s),o=createRule({type:defineType(InternalRuleType.Inline),validator:a,message:""});return o._params=t,o}function k(e,t){let a,o,s,u="";typeof t=="function"?(a=InternalRuleType.Inline,o=t):({_type:a,validator:o,_params:s,_message:u}=t,s?.push(e));function f(i,...m){let[p]=unwrapRuleParameters([e]);return p?o(i,...m):!0}function n(i,m){let[p]=unwrapRuleParameters([e]);return p}let l=createRule({type:a,validator:f,active:n,message:u});return l._params=s,l}function d(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function c(e){return !d(e)}function T(e){return e==null||typeof e!="number"?!1:!isNaN(e)}function x(e,...t){if(d(e))return !0;let a=typeof e=="number"?e.toString():e;return t.every(o=>(o.lastIndex=0,o.test(a)))}function D(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 b(e){if(d(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 a=new Date(e);if(a.toString()==="Invalid Date")return !1;t=a;}return !!t}catch{return !1}}function h(e){let t=Object.prototype.toString.call(e);return 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 P(e){return typeof e=="number"?e:e.trim()!==e?null:+e}var r={isEmpty:d,isFilled:c,size:D,regex:x,isNumber:T,isDate:b,toDate:h,toNumber:P};function L(...e){let t=e.some(n=>typeof n=="function"?n.constructor.name==="AsyncFunction":n._async),a=e.map(n=>{if(typeof n=="function")return null;{let l=n._params;return l?.length?l:[null]}}).flat().filter(n=>!!n);function o(n,l,...i){let m=[],p=0;for(let R of n)if(typeof R=="function")m.push(R(l)),p++;else {let y=R._params?.length??0;m.push(R.validator(l,...i.slice(p,y))),y&&(p+=y);}return m}function s(n){return n.some(i=>typeof i!="boolean")?{$valid:n.every(i=>typeof i=="boolean"?!!i:i.$valid),...n.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:p,...R}=m;return {...i,...R}},{})}:n.every(i=>!!i)}let u;e.length?u=t?async(n,...l)=>{let i=await Promise.all(o(e,n,...l));return s(i)}:(n,...l)=>{let i=o(e,n,...l);return s(i)}:u=n=>!1;let f=createRule({type:defineType("and"),validator:u,message:"The value does not match all of the provided validators"});return f._params=a,f}function j(...e){let t=e.some(n=>typeof n=="function"?n.constructor.name==="AsyncFunction":n._async),a=e.map(n=>typeof n=="function"?null:n._params).flat().filter(n=>!!n);function o(n,l,...i){let m=[],p=0;for(let R of n)if(typeof R=="function")m.push(R(l)),p++;else {let y=R._params?.length??0;m.push(R.validator(l,...i.slice(p,y))),y&&(p+=y);}return m}function s(n){return n.some(i=>typeof i!="boolean")?{$valid:n.some(i=>typeof i=="boolean"?!!i:i.$valid),...n.reduce((i,m)=>{if(typeof m=="boolean")return i;let{$valid:p,...R}=m;return {...i,...R}},{})}:n.some(i=>!!i)}let u=t?async(n,...l)=>{let i=await Promise.all(o(e,n,...l));return s(i)}:(n,...l)=>{let i=o(e,n,...l);return s(i)},f=createRule({type:defineType("or"),validator:u,message:"The value does not match any of the provided validators"});return f._params=a,f}function B(e,t){let a,o,s,u,f;typeof e=="function"?(o=e,f=e.constructor.name==="AsyncFunction"):({_type:a,validator:o,_params:u}=e,f=e._async),f?s=async(l,...i)=>r.isFilled(l)?!await o(l,...i):!0:s=(l,...i)=>r.isFilled(l)?!o(l,...i):!0;let n=createRule({type:defineType("not"),validator:s,message:t??"Error"});return n._params=u,n}var qt=createRule({type:defineType("required"),validator:e=>r.isFilled(typeof e=="string"?e.trim():e),message:"This field is required"});var Kt=createRule({type:defineType("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]})=>`The maximum length allowed is ${t}`});var Jt=createRule({type:defineType("required"),validator(e,t){return t?r.isFilled(typeof e=="string"?e.trim():e):!0},message:"This field is required",active(e,{$params:[t]}){return t}});var re=/^[a-zA-Z]*$/,er=createRule({type:defineType("alpha"),validator(e){return r.isEmpty(e)?!0:r.regex(e,re)},message:"The value is not alphabetical"});var ie=/^[a-zA-Z0-9]*$/,ar=createRule({type:defineType("alpha"),validator(e){return r.isEmpty(e)?!0:r.regex(e,ie)},message:"The value must be alpha-numeric"});var sr=createRule({type:defineType("between"),validator:(e,t,a)=>{if(r.isFilled(e)&&r.isFilled(t)&&r.isFilled(a)){let o=r.toNumber(e),s=r.toNumber(t),u=r.toNumber(a);return r.isNumber(o)&&r.isNumber(s)&&r.isNumber(u)?o>=s&&o<=u:(console.warn(`[between] Value or parameters aren't numbers, got value: ${e}, min: ${t}, max: ${a}`),!1)}return !0},message:(e,{$params:[t,a]})=>`The value must be between ${t} and ${a}`});var me=/^[-]?\d*(\.\d+)?$/,pr=createRule({type:defineType("decimal"),validator(e){return r.isEmpty(e)?!0:r.regex(e,me)},message:"Value must be decimal"});var Re=/^(?:[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,gr=createRule({type:defineType("email"),validator(e){return r.isEmpty(e)?!0:r.regex(e,Re)},message:"Value must be an valid email address"});var ge=/(^[0-9]*$)|(^-[0-9]+$)/,Dr=createRule({type:defineType("integer"),validator(e){return r.isEmpty(e)?!0:r.regex(e,ge)},message:"Value must be an integer"});var Mr=createRule({type:defineType("maxValue"),validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&r.isNumber(e)?e<=t:(console.warn(`[maxValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`The maximum value allowed is ${t}`});var Vr=createRule({type:defineType("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]})=>`This field should be at least ${t} characters long`});var _r=createRule({type:defineType("minValue"),validator:(e,t)=>r.isFilled(e)&&r.isFilled(t)?r.isNumber(t)&&r.isNumber(e)?e>=t:(console.warn(`[minValue] Value or parameter isn't a number, got value: ${e}, parameter: ${t}`),!1):!0,message:(e,{$params:[t]})=>`The minimum value allowed is ${t}`});var Er=createRule({type:defineType("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 Ae=/^\d*(\.\d+)?$/,Cr=createRule({type:defineType("numeric"),validator(e){return r.isEmpty(e)?!0:r.regex(e,Ae)},message:"This field must be numeric"});var jr=createRule({type:defineType("required"),validator(e,t){return t?!0:r.isFilled(typeof e=="string"?e.trim():e)},message:"This field is required",active(e,{$params:[t]}){return !t}});var Or=createRule({type:defineType("sameAs"),validator(e,t){return r.isEmpty(e)?!0:e===t},message(e,{$params:[t]}){return `Value must be equal to "${t}"`}});var He=/^(?:(?:(?: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,Xr=createRule({type:defineType("url"),validator(e){return r.isEmpty(e)?!0:r.regex(e,He)},message:"The value is not a valid URL address"});var rn=createRule({type:defineType("dateAfter"),validator:(e,t)=>r.isDate(e)&&r.isDate(t)?r.toDate(e).getTime()>r.toDate(t).getTime():!0,message:(e,{$params:[t]})=>`The date must be after ${t}`});var ln=createRule({type:defineType("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:a})=>a==="value-or-paramater-not-a-date"?"The inputs must be Dates":`The date must be before ${t}`});var fn=createRule({type:defineType("dateBetween"),validator:(e,t,a)=>r.isDate(e)&&r.isDate(t)&&r.isDate(a)?r.toDate(e).getTime()>r.toDate(t).getTime()&&r.toDate(e).getTime()<r.toDate(a).getTime():!0,message:(e,{$params:[t,a]})=>`The date must be between ${t} and ${a}`});function Se(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 yn=createRule({type:defineType("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(Se)},message:"The value is not a valid IP address"});var xn=createRule({type:defineType("macAddress"),validator(e,t=":"){if(r.isEmpty(e))return !0;if(typeof e!="string")return !1;let a=typeof t=="string"&&t!==""?e.split(t):e.length===12||e.length===16?e.match(/.{2}/g):null;return a!==null&&(a.length===6||a.length===8)&&a.every(Ke)},message:"The value is not a valid MAC Address"}),Ke=e=>e.toLowerCase().match(/^[0-9a-f]{2}$/);var hn=createRule({type:defineType("checked"),validator:e=>e===!0,message:"This field must be checked"});export{er as alpha,ar as alphaNum,L as and,k as applyIf,sr as between,hn as checked,rn as dateAfter,ln as dateBefore,fn as dateBetween,pr as decimal,gr as email,Er as exactLength,Dr as integer,yn as ipAddress,xn as macAddress,Kt as maxLength,Mr as maxValue,Vr as minLength,_r as minValue,B as not,Cr as numeric,j as or,qt as required,Jt as requiredIf,jr as requiredUnless,r as ruleHelpers,Or as sameAs,Xr as url,v as withAsync,$ as withMessage,H as withParams};
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@regle/rules",
3
+ "version": "0.1.0",
4
+ "description": "Collection of rules and helpers for Regle",
5
+ "dependencies": {
6
+ "@regle/core": "0.1.0"
7
+ },
8
+ "devDependencies": {
9
+ "@types/prettier": "3.0.0",
10
+ "@typescript-eslint/eslint-plugin": "8.14.0",
11
+ "@typescript-eslint/parser": "8.14.0",
12
+ "@vue/test-utils": "2.4.6",
13
+ "bumpp": "9.8.1",
14
+ "changelogithub": "0.13.11",
15
+ "cross-env": "7.0.3",
16
+ "eslint": "9.14.0",
17
+ "eslint-config-prettier": "9.1.0",
18
+ "eslint-plugin-vue": "9.30.0",
19
+ "prettier": "3.3.3",
20
+ "tsup": "8.3.5",
21
+ "type-fest": "4.26.1",
22
+ "typescript": "5.6.3",
23
+ "vitest": "2.1.4",
24
+ "vue": "3.5.12",
25
+ "vue-eslint-parser": "9.4.3",
26
+ "vue-tsc": "2.1.10"
27
+ },
28
+ "type": "module",
29
+ "exports": {
30
+ ".": {
31
+ "import": "./dist/index.js",
32
+ "require": "./dist/index.cjs"
33
+ }
34
+ },
35
+ "main": "./dist/index.cjs",
36
+ "types": "./dist/index.d.ts",
37
+ "files": [
38
+ "dist"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "author": {
44
+ "name": "Victor Garcia",
45
+ "url": "https://github.com/victorgarciaesgi"
46
+ },
47
+ "license": "MIT",
48
+ "scripts": {
49
+ "lint": "eslint --ext .ts --ext .vue .",
50
+ "typecheck": "tsc --noEmit && vitest run --typecheck",
51
+ "release": "pnpm publish --report-summary",
52
+ "build": "tsup --minify",
53
+ "build:local": "tsup --clean false",
54
+ "dev": "tsup --config=tsup.dev.ts --watch",
55
+ "test": "vitest run"
56
+ }
57
+ }