@regle/rules 0.1.5 → 0.1.7

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.
@@ -0,0 +1,202 @@
1
+ import { RegleRuleMetadataDefinition, InlineRuleDeclaration, RegleRuleDefinitionWithMetadataProcessor, RegleRuleMetadataConsumer, RegleRuleDefinition, RegleRuleWithParamsDefinition, UnwrapRegleUniversalParams, ParamDecl, Maybe, FormRuleDeclaration } 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, TParams, 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, TMetadata>, 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>(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, TParams, 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, TParams, 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, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>): RegleRuleDefinition<TValue, [], TAsync, TMetadata>;
13
+
14
+ declare global {
15
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
16
+ interface SymbolConstructor {
17
+ readonly observable: symbol;
18
+ }
19
+ }
20
+
21
+ declare const emptyObjectSymbol: unique symbol;
22
+
23
+ /**
24
+ Represents a strictly empty plain object, the `{}` value.
25
+
26
+ 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)).
27
+
28
+ @example
29
+ ```
30
+ import type {EmptyObject} from 'type-fest';
31
+
32
+ // The following illustrates the problem with `{}`.
33
+ const foo1: {} = {}; // Pass
34
+ const foo2: {} = []; // Pass
35
+ const foo3: {} = 42; // Pass
36
+ const foo4: {} = {a: 1}; // Pass
37
+
38
+ // With `EmptyObject` only the first case is valid.
39
+ const bar1: EmptyObject = {}; // Pass
40
+ const bar2: EmptyObject = 42; // Fail
41
+ const bar3: EmptyObject = []; // Fail
42
+ const bar4: EmptyObject = {a: 1}; // Fail
43
+ ```
44
+
45
+ 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}.
46
+
47
+ @category Object
48
+ */
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;
64
+
65
+ /**
66
+ * @returns ⚠️ Warning, returned value can be NaN
67
+ */
68
+ declare function toNumber<T extends number | string | undefined>(argument: T): number;
69
+
70
+ declare const ruleHelpers: {
71
+ isEmpty: typeof isEmpty;
72
+ isFilled: typeof isFilled;
73
+ size: typeof size;
74
+ regex: typeof regex$1;
75
+ isNumber: typeof isNumber;
76
+ isDate: typeof isDate;
77
+ toDate: typeof toDate;
78
+ toNumber: typeof toNumber;
79
+ };
80
+
81
+ 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
+ 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
+ type ExtractAsync<T extends [...any[]]> = T extends [infer F, ...infer R] ? F extends true ? true : F extends false ? ExtractAsync<R> : false : false;
84
+ type GuessAsyncFromRules<T extends any[]> = ExtractAsync<ExtractAsyncStatesFromRules<T>>;
85
+ 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>] : [];
86
+ type MetadataBase = {
87
+ $valid: boolean;
88
+ [x: string]: any;
89
+ };
90
+ 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, any[], infer M extends MetadataBase | Promise<MetadataBase>> ? [M, ...ExtractMetaDataFromRules<R>] : [...ExtractMetaDataFromRules<R>] : [];
91
+ type ExtractMetadata<T extends [...any[]]> = T extends [infer F, ...infer R] ? F & ExtractMetadata<R> : {};
92
+ type GuessMetadataFromRules<T extends any[], TMeta = ExtractMetadata<ExtractMetaDataFromRules<T>>> = TMeta extends EmptyObject ? boolean : TMeta;
93
+ type CreateFn<T extends any[]> = (...args: T) => any;
94
+ type FilterTuple<T extends any[]> = T extends [infer F, ...infer R] ? [F] extends [[]] ? [...FilterTuple<R>] : [F, ...FilterTuple<R>] : [];
95
+ type UnwrapTuplesRaw<T extends any[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
96
+ [K in keyof Args]: Args[K] extends Array<infer U> ? U : never;
97
+ }) => any : never>;
98
+ type UnwrapTuples<T extends any[]> = FilterTuple<UnwrapTuplesRaw<T>>;
99
+
100
+ declare function and<TRules extends FormRuleDeclaration<any, any>[]>(...rules: [...TRules]): RegleRuleDefinition<ExtractValueFromRules<TRules>[number], UnwrapTuples<ExtractParamsFromRules<TRules>>, GuessAsyncFromRules<TRules>, GuessMetadataFromRules<TRules>>;
101
+
102
+ declare function or<TRules extends FormRuleDeclaration<any, any>[]>(...rules: [...TRules]): RegleRuleDefinition<ExtractValueFromRules<TRules>[number], UnwrapTuples<ExtractParamsFromRules<TRules>>, GuessAsyncFromRules<TRules>, GuessMetadataFromRules<TRules>>;
103
+
104
+ declare function not<TValue, 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>(rule: RegleRuleDefinition<TValue, TParams, TAsync, TMetadata> | InlineRuleDeclaration<TValue, TParams, TReturn>, message?: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetadata>, string | string[]>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
105
+
106
+ declare const required: RegleRuleDefinition<unknown, [], false, boolean, unknown>;
107
+
108
+ declare const maxLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
109
+ count: number
110
+ ], false, boolean>;
111
+
112
+ declare const requiredIf: RegleRuleWithParamsDefinition<unknown, [
113
+ condition: boolean
114
+ ], false, boolean>;
115
+
116
+ declare const alpha: RegleRuleDefinition<string, [], false, boolean, string>;
117
+
118
+ declare const alphaNum: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
119
+
120
+ declare const between: RegleRuleWithParamsDefinition<number, [
121
+ min: number,
122
+ max: number
123
+ ], false, boolean>;
124
+
125
+ declare const decimal: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
126
+
127
+ declare const email: RegleRuleDefinition<string, [], false, boolean, string>;
128
+
129
+ declare const integer: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
130
+
131
+ declare const maxValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
132
+
133
+ declare const minLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
134
+ count: number
135
+ ], false, boolean>;
136
+
137
+ declare const minValue: RegleRuleWithParamsDefinition<number, [count: number], false, boolean>;
138
+
139
+ declare const exactLength: RegleRuleWithParamsDefinition<string | any[] | Record<PropertyKey, any>, [
140
+ count: number
141
+ ], false, boolean>;
142
+
143
+ declare const numeric: RegleRuleDefinition<string | number, [], false, boolean, string | number>;
144
+
145
+ declare const requiredUnless: RegleRuleWithParamsDefinition<unknown, [
146
+ condition: boolean
147
+ ], false, boolean>;
148
+
149
+ declare const sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown], false, boolean>;
150
+
151
+ declare const url: RegleRuleDefinition<string, [], false, boolean, string>;
152
+
153
+ declare const dateAfter: RegleRuleWithParamsDefinition<string | Date, [
154
+ after: Maybe<string | Date>
155
+ ], false, true | {
156
+ $valid: false;
157
+ error: 'date-not-after';
158
+ } | {
159
+ $valid: false;
160
+ error: 'value-or-paramater-not-a-date';
161
+ }>;
162
+
163
+ declare const dateBefore: RegleRuleWithParamsDefinition<string | Date, [
164
+ before: Maybe<string | Date>
165
+ ], false, true | {
166
+ $valid: false;
167
+ error: 'date-not-before';
168
+ } | {
169
+ $valid: false;
170
+ error: 'value-or-paramater-not-a-date';
171
+ }>;
172
+
173
+ declare const dateBetween: RegleRuleWithParamsDefinition<string | Date, [
174
+ before: Maybe<string | Date>,
175
+ after: Maybe<string | Date>
176
+ ], false, boolean>;
177
+
178
+ declare const ipAddress: RegleRuleDefinition<string, [], false, boolean, string>;
179
+
180
+ declare const macAddress: RegleRuleWithParamsDefinition<string, [
181
+ separator?: string | undefined
182
+ ], false, boolean>;
183
+
184
+ declare const checked: RegleRuleDefinition<boolean, [], false, boolean, boolean>;
185
+
186
+ declare const contains: RegleRuleWithParamsDefinition<string, [
187
+ part: Maybe<string>
188
+ ], false, boolean>;
189
+
190
+ declare const startsWith: RegleRuleWithParamsDefinition<string, [
191
+ part: Maybe<string>
192
+ ], false, boolean>;
193
+
194
+ declare const endsWith: RegleRuleWithParamsDefinition<string, [
195
+ part: Maybe<string>
196
+ ], false, boolean>;
197
+
198
+ declare const regex: RegleRuleWithParamsDefinition<string | number, [
199
+ regexp: RegExp
200
+ ], false, boolean>;
201
+
202
+ 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 };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { RegleRuleMetadataDefinition, InlineRuleDeclaration, RegleRuleDefinitionWithMetadataProcessor, RegleRuleMetadataConsumer, RegleRuleDefinition, RegleRuleWithParamsDefinition, UnwrapRegleUniversalParams, ParamDecl, FormRuleDeclaration, Maybe } from '@regle/core';
1
+ import { RegleRuleMetadataDefinition, InlineRuleDeclaration, RegleRuleDefinitionWithMetadataProcessor, RegleRuleMetadataConsumer, RegleRuleDefinition, RegleRuleWithParamsDefinition, UnwrapRegleUniversalParams, ParamDecl, Maybe, FormRuleDeclaration } from '@regle/core';
2
2
  import { Ref, MaybeRef } from 'vue';
3
3
 
4
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, TParams, 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>;
@@ -11,33 +11,6 @@ declare function withParams<TValue, TParams extends (Ref<unknown> | (() => unkno
11
11
 
12
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, TParams, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>): RegleRuleDefinition<TValue, [], TAsync, TMetadata>;
13
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
14
  declare global {
42
15
  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
43
16
  interface SymbolConstructor {
@@ -75,6 +48,36 @@ Unfortunately, `Record<string, never>`, `Record<keyof any, never>` and `Record<n
75
48
  */
76
49
  type EmptyObject = {[emptyObjectSymbol]?: never};
77
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;
64
+
65
+ /**
66
+ * @returns ⚠️ Warning, returned value can be NaN
67
+ */
68
+ declare function toNumber<T extends number | string | undefined>(argument: T): number;
69
+
70
+ declare const ruleHelpers: {
71
+ isEmpty: typeof isEmpty;
72
+ isFilled: typeof isFilled;
73
+ size: typeof size;
74
+ regex: typeof regex$1;
75
+ isNumber: typeof isNumber;
76
+ isDate: typeof isDate;
77
+ toDate: typeof toDate;
78
+ toNumber: typeof toNumber;
79
+ };
80
+
78
81
  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
82
  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
83
  type ExtractAsync<T extends [...any[]]> = T extends [infer F, ...infer R] ? F extends true ? true : F extends false ? ExtractAsync<R> : false : false;
@@ -192,4 +195,8 @@ declare const endsWith: RegleRuleWithParamsDefinition<string, [
192
195
  part: Maybe<string>
193
196
  ], false, boolean>;
194
197
 
195
- 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, required, requiredIf, requiredUnless, ruleHelpers, sameAs, startsWith, url, withAsync, withMessage, withParams };
198
+ declare const regex: RegleRuleWithParamsDefinition<string | number, [
199
+ regexp: RegExp
200
+ ], false, boolean>;
201
+
202
+ 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 };