@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 +21 -0
- package/README.md +0 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.js +1 -0
- package/package.json +57 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|