@regle/core 0.0.14 → 0.0.16

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.d.cts DELETED
@@ -1,435 +0,0 @@
1
- import { MaybeRef, ComputedRef, Ref, UnwrapNestedRefs } from 'vue';
2
-
3
- type Maybe<T = any> = T | null | undefined;
4
- type DeepMaybeRef<T extends Record<string, any>> = {
5
- [K in keyof T]: MaybeRef<T[K]>;
6
- };
7
- type ExcludeByType<T, U> = {
8
- [K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
9
- };
10
- type NonPresentKeys<TSource extends Record<string, any>, Target extends Record<string, any>> = Omit<Target, keyof TSource>;
11
-
12
- type ArrayElement<T> = T extends Array<infer U> ? U : never;
13
-
14
- type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
15
- type CreateFn<T extends any[]> = (...args: T) => any;
16
- /**
17
- * Transform normal parameters tuple declaration to a rich tuple declaration
18
- *
19
- * [foo: string, bar?: number] => [foo: MaybeRef<string> | (() => string), bar?: MaybeRef<number | undefined> | (() => number) | undefined]
20
- */
21
- type RegleUniversalParams<T extends any[] = [], F = CreateFn<T>> = [T] extends [[]] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
22
- [K in keyof Args]: ParamDecl<Args[K]>;
23
- }) => any : never>;
24
- type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [T] extends [
25
- [
26
- ]
27
- ] ? [] : Parameters<F extends (...args: infer Args) => any ? (...args: {
28
- [K in keyof Args]: Args[K] extends ParamDecl<infer U> ? U : Args[K];
29
- }) => any : never>;
30
-
31
- /**
32
- * Internal definition of the rule, can be used to reset or patch the rule
33
- */
34
- interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
35
- _validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
36
- _message: string | string[] | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => string | string[]);
37
- _active?: boolean | ((value: Maybe<TValue>, metadata: PossibleRegleRuleMetadataConsumer) => boolean);
38
- _type?: string;
39
- _patched: boolean;
40
- _params?: RegleUniversalParams<TParams>;
41
- _async: TAsync;
42
- }
43
- declare enum InternalRuleType {
44
- Inline = "__inline",
45
- Async = "__async"
46
- }
47
-
48
- /**
49
- * Returned typed of rules created with `createRule`
50
- * */
51
- interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, TFilteredValue extends any = TValue extends Date & File & infer M ? M : TValue> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
52
- validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
53
- message: RegleRuleDefinitionWithMetadataProcessor<TFilteredValue, PossibleRegleRuleMetadataConsumer, string | string[]>;
54
- active: RegleRuleDefinitionWithMetadataProcessor<TFilteredValue, PossibleRegleRuleMetadataConsumer, boolean>;
55
- type?: string;
56
- exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
57
- }
58
- /**
59
- * Rules with params created with `createRules` are callable while being customizable
60
- */
61
- interface RegleRuleWithParamsDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> extends RegleRuleCore<TValue, TParams, TAsync, TMetadata>, RegleInternalRuleDefs<TValue, TParams, TAsync, TMetadata> {
62
- (...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
63
- }
64
- type RegleRuleMetadataExtended = {
65
- $valid: boolean;
66
- [x: string]: any;
67
- };
68
- /**
69
- * Define a rule Metadata definition
70
- */
71
- type RegleRuleMetadataDefinition = RegleRuleMetadataExtended | boolean;
72
- type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid'>;
73
- /**
74
- * Will be used to consumme metadata on related helpers and rule status
75
- */
76
- type RegleRuleMetadataConsumer<TParams extends any[] = [], TMetadata extends RegleRuleMetadataDefinition = boolean> = DefaultMetadataProperties & (TParams extends never ? {} : {
77
- $params: TParams;
78
- }) & (Exclude<TMetadata, boolean> extends RegleRuleMetadataExtended ? TMetadata extends boolean ? Partial<Omit<Exclude<TMetadata, boolean>, '$valid'>> : Omit<Exclude<TMetadata, boolean>, '$valid'> : {});
79
- /**
80
- * Will be used to consumme metadata on related helpers and rule status
81
- */
82
- type PossibleRegleRuleMetadataConsumer = DefaultMetadataProperties & {
83
- $params?: any[];
84
- };
85
- /**
86
- * Generic types for a created RegleRule
87
- */
88
- type RegleRuleRaw<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> | RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
89
- /**
90
- * Process the type of a created rule with `createRule`.
91
- * For a rule with params it will return a function
92
- * Otherwise it will return the rule definition
93
- */
94
- type InferRegleRule<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> = [TParams] extends [[]] ? RegleRuleDefinition<TValue, TParams, TAsync, TMetaData> : RegleRuleWithParamsDefinition<TValue, TParams, TAsync, TMetaData>;
95
- type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
96
- type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = ((value: Maybe<TValue>, metadata: TMetadata) => TReturn) | TReturn;
97
- type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
98
- $each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
99
- }) | {
100
- $each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
101
- };
102
-
103
- /**
104
- * @argument
105
- * createRule arguments options
106
- */
107
- interface RegleRuleInit<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition, TAsync extends boolean = TReturn extends Promise<any> ? true : false> {
108
- type: {
109
- value: TValue;
110
- params: TParams;
111
- };
112
- validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
113
- message: string | string[] | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
114
- active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
115
- }
116
- /**
117
- * @argument
118
- * Rule core
119
- */
120
- interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
121
- validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
122
- message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string | string[]);
123
- active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
124
- type?: string;
125
- }
126
-
127
- type DefaultValidators = {
128
- maxLength: RegleRuleWithParamsDefinition<string, [count: number]>;
129
- required: RegleRuleDefinition<unknown, []>;
130
- alpha: RegleRuleDefinition<string>;
131
- alphaNum: RegleRuleDefinition<string | number>;
132
- between: RegleRuleWithParamsDefinition<number, [min: number, max: number]>;
133
- decimal: RegleRuleDefinition<number | string>;
134
- email: RegleRuleDefinition<string>;
135
- integer: RegleRuleDefinition<number | string>;
136
- maxValue: RegleRuleWithParamsDefinition<number, [count: number]>;
137
- minLength: RegleRuleWithParamsDefinition<string | Record<PropertyKey, any> | any[], [
138
- count: number
139
- ]>;
140
- minValue: RegleRuleWithParamsDefinition<number, [count: number]>;
141
- numeric: RegleRuleDefinition<number | string>;
142
- sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown]>;
143
- url: RegleRuleDefinition<string>;
144
- dateAfter: RegleRuleWithParamsDefinition<Date, [after: Date]>;
145
- dateBefore: RegleRuleWithParamsDefinition<Date, [before: Date]>;
146
- dateBetween: RegleRuleWithParamsDefinition<Date, [before: Date, after: Date]>;
147
- ipAddress: RegleRuleDefinition<string, [], false>;
148
- macAddress: RegleRuleWithParamsDefinition<string, [separator?: string | undefined], false>;
149
- };
150
-
151
- type CustomRulesDeclarationTree = {
152
- [x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
153
- };
154
- type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
155
-
156
- declare global {
157
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
158
- interface SymbolConstructor {
159
- readonly observable: symbol;
160
- }
161
- }
162
-
163
- declare const emptyObjectSymbol: unique symbol;
164
-
165
- /**
166
- Represents a strictly empty plain object, the `{}` value.
167
-
168
- 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)).
169
-
170
- @example
171
- ```
172
- import type {EmptyObject} from 'type-fest';
173
-
174
- // The following illustrates the problem with `{}`.
175
- const foo1: {} = {}; // Pass
176
- const foo2: {} = []; // Pass
177
- const foo3: {} = 42; // Pass
178
- const foo4: {} = {a: 1}; // Pass
179
-
180
- // With `EmptyObject` only the first case is valid.
181
- const bar1: EmptyObject = {}; // Pass
182
- const bar2: EmptyObject = 42; // Fail
183
- const bar3: EmptyObject = []; // Fail
184
- const bar4: EmptyObject = {a: 1}; // Fail
185
- ```
186
-
187
- 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}.
188
-
189
- @category Object
190
- */
191
- type EmptyObject = {[emptyObjectSymbol]?: never};
192
-
193
- interface Regle<TState extends Record<string, any> = EmptyObject, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree> = EmptyObject, TExternal extends RegleExternalErrorTree<TState> = never> {
194
- regle: RegleStatus<TState, TRules>;
195
- /** Show active errors based on your behaviour options (lazy, autoDirty)
196
- * It allow you to skip scouting the `regle` object
197
- */
198
- errors: RegleErrorTree<TRules, TExternal>;
199
- invalid: ComputedRef<boolean>;
200
- resetForm: () => void;
201
- validateForm: () => Promise<false | DeepSafeFormState<TState, TRules>>;
202
- }
203
- type DeepReactiveState<T extends Record<string, any>> = {
204
- [K in keyof T]: MaybeRef<T[K]>;
205
- };
206
- type DeepSafeFormState<TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, CustomRulesDeclarationTree>> = [unknown] extends [TState] ? {} : {
207
- [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? K : never]?: [
208
- SafeProperty<TState[K], TRules[K]>
209
- ] extends [never] ? TState[K] : SafeProperty<TState[K], TRules[K]>;
210
- } & {
211
- [K in keyof TState as [SafeProperty<TState[K], TRules[K]>] extends [never] ? never : K]-?: SafeProperty<TState[K], TRules[K]>;
212
- };
213
- type SafeProperty<TState, TRule extends RegleFormPropertyType<any, any> | undefined = never> = TRule extends RegleCollectionRuleDefinition ? TState extends Array<any> ? SafeProperty<TState[number], TRule['$each']>[] : never : TRule extends ReglePartialValidationTree<any, any> ? TState extends Record<string, any> ? DeepSafeFormState<TState, TRule> : never : TRule extends RegleRuleDecl<any, any> ? unknown extends TRule['required'] ? never : TRule['required'] extends undefined ? never : TRule['required'] extends RegleRuleDefinition<any, infer Params> ? Params extends never[] ? TState : never : never : never;
214
-
215
- interface RegleBehaviourOptions {
216
- /**
217
- * Only display error when calling `validateForm()`
218
- * @default false
219
- */
220
- lazy?: boolean;
221
- /**
222
- * Automaticaly set the dirty set without the need of `$value` or `$touch`
223
- * @default true
224
- */
225
- autoDirty?: boolean;
226
- /**
227
- * The fields will turn valid when they are, but not invalid unless calling `validateForm()`
228
- * @default false
229
- *
230
- * @experimental report any bug
231
- */
232
- rewardEarly?: boolean;
233
- }
234
- interface LocalRegleBehaviourOptions<TState extends Record<string, any>, TExternal extends RegleExternalErrorTree<TState>> {
235
- $externalErrors?: MaybeRef<TExternal>;
236
- }
237
- type FieldRegleBehaviourOptions = AddDollarToOptions<RegleBehaviourOptions> & {
238
- $debounce?: number;
239
- };
240
- type AddDollarToOptions<T extends Record<string, any>> = {
241
- [K in keyof T as `$${string & K}`]: T[K];
242
- };
243
-
244
- /**
245
- * @public
246
- */
247
- type ReglePartialValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
248
- [TKey in keyof TForm]?: RegleFormPropertyType<TForm[TKey], TCustomRules>;
249
- };
250
- /**
251
- * @public
252
- */
253
- type RegleValidationTree<TForm extends Record<string, any>, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = {
254
- [TKey in keyof TForm]: RegleFormPropertyType<TForm[TKey], TCustomRules>;
255
- };
256
- /**
257
- * @public
258
- */
259
- type RegleComputedRules<TForm extends MaybeRef<Record<string, any>>, TCustomRules extends Partial<AllRulesDeclarations> | Regle<any, any> = Partial<AllRulesDeclarations>, TState = TForm extends Ref<infer R> ? R : TForm, TCustom = TCustomRules extends Regle<any, infer R> ? R extends ReglePartialValidationTree<any, infer C> ? C : Partial<AllRulesDeclarations> : TCustomRules> = {
260
- [TKey in keyof TState]?: RegleFormPropertyType<TState[TKey], TCustom extends Partial<AllRulesDeclarations> ? TCustom : {}>;
261
- };
262
- /**
263
- * @public
264
- */
265
- type RegleFormPropertyType<TValue = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue>] extends [never] ? RegleRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Array<any> ? RegleCollectionRuleDecl<TValue, TCustomRules> : NonNullable<TValue> extends Date ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends File ? RegleRuleDecl<NonNullable<TValue>, TCustomRules> : NonNullable<TValue> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue> extends Record<string, any> ? ReglePartialValidationTree<NonNullable<TValue>, TCustomRules> : RegleRuleDecl<NonNullable<TValue>, TCustomRules>;
266
- /**
267
- * @public
268
- * Rule tree for a form property
269
- */
270
- type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = FieldRegleBehaviourOptions & {
271
- [TKey in keyof TCustomRules]?: NonNullable<TCustomRules[TKey]> extends RegleRuleWithParamsDefinition<any, infer TParams> ? RegleRuleDefinition<TValue, TParams, boolean> : NonNullable<TCustomRules[TKey]> extends RegleRuleDefinition<any, any, any, any> ? FormRuleDeclaration<TValue, any> : FormRuleDeclaration<TValue, any> | FieldRegleBehaviourOptions[keyof FieldRegleBehaviourOptions];
272
- };
273
- /**
274
- * @public
275
- */
276
- type RegleCollectionRuleDecl<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
277
- $each?: RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>;
278
- }) | {
279
- $each?: RegleFormPropertyType<ArrayElement<NonNullable<TValue>>, TCustomRules>;
280
- };
281
- /**
282
- * @public
283
- */
284
- type InlineRuleDeclaration<TValue extends any = any, TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
285
- /**
286
- * @public
287
- * Regroup inline and registered rules
288
- * */
289
- type FormRuleDeclaration<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition> = RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = boolean> = InlineRuleDeclaration<TValue, TReturn> | RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
290
-
291
- type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>, TExternal extends RegleExternalErrorTree<Record<string, unknown>> = never> = {
292
- readonly [K in keyof TRules]: RegleValidationErrors<TRules[K], K extends keyof TExternal ? TExternal[K] : never>;
293
- } & {
294
- readonly [K in keyof NonPresentKeys<TRules, TExternal>]: RegleExternalValidationErrorsReport<TExternal[K]>;
295
- };
296
- type RegleValidationErrors<TRule extends RegleFormPropertyType<any, any> | undefined = never, TExternalError extends RegleExternalValidationErrors<any> | undefined = never> = TRule extends RegleCollectionRuleDefinition ? RegleCollectionErrors<TRule['$each'], TExternalError extends RegleExternalCollectionErrors ? ArrayElement<TExternalError['$each']> : never> : TRule extends RegleRuleDecl<any, any> ? string[] : TRule extends ReglePartialValidationTree<any, any> ? RegleErrorTree<TRule, TExternalError extends RegleExternalErrorTree ? TExternalError : never> : string[];
297
- type RegleCollectionErrors<TRule extends RegleFormPropertyType<any, any> | undefined = never, TExternalError extends RegleExternalValidationErrors<any> | undefined = never> = {
298
- readonly $errors: string[];
299
- readonly $each: RegleValidationErrors<TRule, TExternalError>[];
300
- };
301
- type RegleExternalErrorTree<TState extends Record<string, any> = Record<string, any>> = {
302
- [K in keyof TState]?: RegleExternalValidationErrors<TState[K]>;
303
- };
304
- type RegleExternalValidationErrors<TValue extends any> = [NonNullable<TValue>] extends [
305
- never
306
- ] ? string[] : TValue extends Array<infer U> ? RegleExternalCollectionErrors<U> : NonNullable<TValue> extends Date ? string[] : NonNullable<TValue> extends File ? string[] : TValue extends Record<string, any> ? RegleExternalErrorTree<TValue> : string[];
307
- type RegleExternalCollectionErrors<TValue extends any = any> = {
308
- $errors?: string[];
309
- $each?: RegleExternalValidationErrors<TValue>[];
310
- };
311
- type RegleExternalValidationErrorsReport<TExternalError extends RegleExternalValidationErrors<any> | undefined = never> = TExternalError extends RegleExternalCollectionErrors ? RegleCollectionErrors<TExternalError['$each']> : TExternalError extends string[] ? string[] : TExternalError extends RegleExternalErrorTree<any> ? RegleErrorTree<TExternalError> : string[];
312
-
313
- /**
314
- * @public
315
- */
316
- interface RegleStatus<TState extends Record<string, any> = Record<string, any>, TRules extends ReglePartialValidationTree<TState> = Record<string, any>> extends RegleCommonStatus<TState> {
317
- readonly $fields: {
318
- readonly [TKey in keyof TRules]: InferRegleStatusType<NonNullable<TRules[TKey]>, TState, TKey>;
319
- };
320
- }
321
- /**
322
- * @public
323
- */
324
- type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialValidationTree<any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string> = TRule extends RegleCollectionRuleDefinition<any, any> ? NonNullable<TState[TKey]> extends Array<Record<string, any> | any> ? RegleCollectionStatus<TRule['$each'], TState[TKey]> : RegleFieldStatus<TRule, TState, TKey> : TRule extends ReglePartialValidationTree<any> ? NonNullable<TState[TKey]> extends Array<any> ? RegleCommonStatus<TState[TKey]> : NonNullable<TState[TKey]> extends Record<PropertyKey, any> ? RegleStatus<TState[TKey], TRule> : RegleFieldStatus<TRule, TState, TKey> : RegleFieldStatus<TRule, TState, TKey>;
325
- /**
326
- * @public
327
- */
328
- interface RegleFieldStatus<TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TState extends Record<PropertyKey, any> = any, TKey extends PropertyKey = string> extends RegleCommonStatus<TState> {
329
- $value: UnwrapNestedRefs<TState[TKey]>;
330
- readonly $externalErrors?: string[];
331
- readonly $rules: {
332
- readonly [TRuleKey in keyof TRules]: RegleRuleStatus<TState[TKey], TRules[TRuleKey] extends RegleRuleDefinition<any, infer TParams> ? TParams : []>;
333
- };
334
- }
335
- /**
336
- * @public
337
- */
338
- interface RegleCommonStatus<TValue = any> {
339
- readonly $valid: boolean;
340
- readonly $invalid: boolean;
341
- readonly $dirty: boolean;
342
- readonly $anyDirty: boolean;
343
- readonly $pending: boolean;
344
- readonly $error: boolean;
345
- $id?: number;
346
- $value: UnwrapNestedRefs<TValue>;
347
- $touch(): void;
348
- $reset(): void;
349
- $validate(): Promise<boolean>;
350
- $unwatch(): void;
351
- $watch(): void;
352
- $clearExternalErrors(): void;
353
- }
354
- /**
355
- * @public
356
- */
357
- type RegleRuleStatus<TValue = any, TParams extends any[] = any[]> = {
358
- readonly $type: string;
359
- readonly $message: string | string[];
360
- readonly $active: boolean;
361
- readonly $valid: boolean;
362
- readonly $pending: boolean;
363
- readonly $path: string;
364
- $validator: (value: TValue, ...args: TParams) => boolean | Promise<boolean>;
365
- $validate(): Promise<boolean>;
366
- $reset(): void;
367
- } & ([TParams] extends [[]] ? {} : {
368
- readonly $params: TParams;
369
- });
370
- /**
371
- * @public
372
- */
373
- interface RegleCollectionStatus<TRules extends RegleRuleDecl | ReglePartialValidationTree<any>, TState extends any[]> extends RegleFieldStatus<TRules, TState> {
374
- readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, TState, number>>;
375
- }
376
-
377
- /**
378
- * @description
379
- * Create a typed custom rule that can be used like default validators.
380
- * It can also be declared in the global options
381
- *
382
- * It will automatically detect if the rule is async
383
- *
384
- * @typeParam TValue - The input value the rule should receive
385
- * @typeParam TParams - Tuple declaration of the rule parameters (if any)
386
- *
387
- * @param definition - The rule processors object
388
- *
389
- * @returns A rule definition that can be callable depending on params presence
390
- *
391
- * @exemple
392
- *
393
- * ```ts
394
- * // Create a simple rule with no params
395
- * import {ruleHelpers} from '@regle/validators';
396
- *
397
- * export const isFoo = createRule({
398
- * type: defineType<string>('foo'),
399
- * validator(value) {
400
- * if (ruleHelpers.isFilled(value)) {
401
- * return value === 'foo';
402
- * }
403
- * return true
404
- * },
405
- * message: "The value should be 'foo'"
406
- * })
407
- * ```
408
- */
409
- declare function createRule<TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = TReturn extends Promise<infer M> ? M : TReturn, TAsync extends boolean = TReturn extends Promise<any> ? true : false>(definition: RegleRuleInit<TValue, TParams, TReturn, TMetadata, TAsync>): InferRegleRule<TValue, TParams, TAsync, TMetadata>;
410
- declare function defineType<TValue extends any = unknown, TParams extends any[] = []>(ruleName: string): {
411
- value: TValue;
412
- params: TParams;
413
- };
414
-
415
- /**
416
- * Returns a clean list of parameters
417
- * Removing Ref and executing function to return the unwraped value
418
- */
419
- declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
420
-
421
- declare const useRegle: <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations>>, TExternal extends RegleExternalErrorTree<TState>, TValid = keyof TRules extends keyof TState ? true : false>(state: Ref<TState, TState> | DeepReactiveState<TState>, rulesFactory: TValid extends true ? TRules | ComputedRef<TRules> | (() => TRules) : never, options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState, TExternal>) | undefined) => Regle<TState, TRules, TExternal>;
422
-
423
- /**
424
- * Root function that allows you to define project-wise all your custom validators or overwrite default ones
425
- *
426
- * It will return utility functions that let you build type-safe forms
427
- *
428
- * @param customRules
429
- */
430
- declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, options, }: {
431
- rules?: () => TCustomRules;
432
- options?: RegleBehaviourOptions;
433
- }): <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations> & TCustomRules>, TExternal extends RegleExternalErrorTree<TState>, TValid = keyof TRules extends keyof TState ? true : false>(state: Ref<TState, TState> | DeepReactiveState<TState>, rulesFactory: TValid extends true ? TRules | ComputedRef<TRules> | (() => TRules) : never, options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState, TExternal>) | undefined) => Regle<TState, TRules, TExternal>;
434
-
435
- export { type DeepMaybeRef, type FormRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleFieldStatus, type RegleFormPropertyType, type ReglePartialValidationTree, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleWithParamsDefinition, type RegleStatus, type RegleValidationTree, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };