@regle/core 0.0.6 → 0.0.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.
- package/dist/index.cjs +83 -30
- package/dist/index.d.cts +175 -74
- package/dist/index.d.ts +175 -74
- package/dist/index.js +94 -43
- package/package.json +21 -19
package/dist/index.cjs
CHANGED
|
@@ -22,8 +22,10 @@ var src_exports = {};
|
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
InternalRuleType: () => InternalRuleType,
|
|
24
24
|
createRule: () => createRule,
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
defineRegleConfig: () => defineRegleConfig,
|
|
26
|
+
defineType: () => defineType,
|
|
27
|
+
unwrapRuleParameters: () => unwrapRuleParameters,
|
|
28
|
+
useRegle: () => useRegle
|
|
27
29
|
});
|
|
28
30
|
module.exports = __toCommonJS(src_exports);
|
|
29
31
|
|
|
@@ -47,29 +49,47 @@ function createReactiveParams(params) {
|
|
|
47
49
|
return (0, import_vue.toRef)(() => param);
|
|
48
50
|
});
|
|
49
51
|
}
|
|
52
|
+
function getFunctionParametersLength(func) {
|
|
53
|
+
const funcStr = func.toString();
|
|
54
|
+
const params = funcStr.slice(funcStr.indexOf("(") + 1, funcStr.indexOf(")")).split(",").map((param) => param.trim());
|
|
55
|
+
const defaults = params.filter((param) => param.includes("="));
|
|
56
|
+
return defaults.length + func.length;
|
|
57
|
+
}
|
|
50
58
|
|
|
51
59
|
// src/core/createRule/defineRuleProcessors.ts
|
|
52
60
|
function defineRuleProcessors(definition, ...params) {
|
|
53
61
|
const { message, validator, active, ...properties } = definition;
|
|
54
62
|
const isAsync = validator.constructor.name === "AsyncFunction";
|
|
55
|
-
const
|
|
56
|
-
|
|
63
|
+
const defaultProcessors = {
|
|
64
|
+
validator(value, ...args) {
|
|
65
|
+
return definition.validator(value, ...unwrapRuleParameters(args.length ? args : params));
|
|
66
|
+
},
|
|
67
|
+
message(value, metadata) {
|
|
57
68
|
if (typeof definition.message === "function") {
|
|
58
|
-
return definition.message(value,
|
|
69
|
+
return definition.message(value, {
|
|
70
|
+
...metadata,
|
|
71
|
+
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
72
|
+
});
|
|
59
73
|
} else {
|
|
60
74
|
return definition.message;
|
|
61
75
|
}
|
|
62
76
|
},
|
|
63
|
-
|
|
64
|
-
return definition.validator(value, ...args.length ? args : params);
|
|
65
|
-
},
|
|
66
|
-
active(value, ...args) {
|
|
77
|
+
active(value, metadata) {
|
|
67
78
|
if (typeof definition.active === "function") {
|
|
68
|
-
return definition.active(value,
|
|
79
|
+
return definition.active(value, {
|
|
80
|
+
...metadata,
|
|
81
|
+
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
82
|
+
});
|
|
69
83
|
} else {
|
|
70
84
|
return definition.active ?? true;
|
|
71
85
|
}
|
|
72
86
|
},
|
|
87
|
+
exec(value) {
|
|
88
|
+
return definition.validator(value, ...unwrapRuleParameters(params));
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const processors = {
|
|
92
|
+
...defaultProcessors,
|
|
73
93
|
...properties,
|
|
74
94
|
...{
|
|
75
95
|
_validator: definition.validator,
|
|
@@ -90,7 +110,7 @@ function createRule(definition) {
|
|
|
90
110
|
let fakeParams = [];
|
|
91
111
|
const staticProcessors = defineRuleProcessors(definition, ...fakeParams);
|
|
92
112
|
const isAsync = definition.validator.constructor.name === "AsyncFunction";
|
|
93
|
-
if (definition.validator
|
|
113
|
+
if (getFunctionParametersLength(definition.validator) > 1) {
|
|
94
114
|
const ruleFactory = function(...params) {
|
|
95
115
|
return defineRuleProcessors(definition, ...params);
|
|
96
116
|
};
|
|
@@ -98,9 +118,10 @@ function createRule(definition) {
|
|
|
98
118
|
ruleFactory.message = staticProcessors.message;
|
|
99
119
|
ruleFactory.active = staticProcessors.active;
|
|
100
120
|
ruleFactory.type = staticProcessors.type;
|
|
101
|
-
ruleFactory.
|
|
102
|
-
ruleFactory.
|
|
103
|
-
ruleFactory.
|
|
121
|
+
ruleFactory.exec = staticProcessors.exec;
|
|
122
|
+
ruleFactory._validator = staticProcessors.validator;
|
|
123
|
+
ruleFactory._message = staticProcessors.message;
|
|
124
|
+
ruleFactory._active = staticProcessors.active;
|
|
104
125
|
ruleFactory._type = definition.type;
|
|
105
126
|
ruleFactory._patched = false;
|
|
106
127
|
ruleFactory._async = isAsync;
|
|
@@ -111,6 +132,9 @@ function createRule(definition) {
|
|
|
111
132
|
}
|
|
112
133
|
throw new Error("Validator must be a function");
|
|
113
134
|
}
|
|
135
|
+
function defineType(ruleName) {
|
|
136
|
+
return ruleName;
|
|
137
|
+
}
|
|
114
138
|
|
|
115
139
|
// src/core/useRegle/useRegle.ts
|
|
116
140
|
var import_vue10 = require("vue");
|
|
@@ -208,10 +232,19 @@ function useStorage() {
|
|
|
208
232
|
} else {
|
|
209
233
|
const $pending = (0, import_vue2.ref)(false);
|
|
210
234
|
const $valid = (0, import_vue2.ref)(true);
|
|
211
|
-
|
|
212
|
-
|
|
235
|
+
const $metadata = (0, import_vue2.ref)({});
|
|
236
|
+
ruleStatusStorage.value.set(path, { $pending, $valid, $metadata });
|
|
237
|
+
return { $pending, $valid, $metadata };
|
|
213
238
|
}
|
|
214
239
|
}
|
|
240
|
+
(0, import_vue2.onScopeDispose)(() => {
|
|
241
|
+
ruleDeclStorage.value.clear();
|
|
242
|
+
fieldsStorage.value.clear();
|
|
243
|
+
collectionsStorage.value.clear();
|
|
244
|
+
dirtyStorage.value.clear();
|
|
245
|
+
ruleStatusStorage.value.clear();
|
|
246
|
+
arrayStatusStorage.value.clear();
|
|
247
|
+
});
|
|
215
248
|
return {
|
|
216
249
|
addRuleDeclEntry,
|
|
217
250
|
setDirtyEntry,
|
|
@@ -394,13 +427,18 @@ function createReactiveRuleStatus({
|
|
|
394
427
|
}) {
|
|
395
428
|
let scope = (0, import_vue5.effectScope)();
|
|
396
429
|
let scopeState;
|
|
397
|
-
const { $pending, $valid } = storage.trySetRuleStatusRef(`${path}.${ruleKey}`);
|
|
430
|
+
const { $pending, $valid, $metadata } = storage.trySetRuleStatusRef(`${path}.${ruleKey}`);
|
|
398
431
|
function $watch() {
|
|
399
432
|
scopeState = scope.run(() => {
|
|
433
|
+
const $defaultMetadata = (0, import_vue5.computed)(() => ({
|
|
434
|
+
$invalid: !$valid.value,
|
|
435
|
+
$params: $params.value,
|
|
436
|
+
...$metadata.value
|
|
437
|
+
}));
|
|
400
438
|
const $active = (0, import_vue5.computed)(() => {
|
|
401
439
|
if (isFormRuleDefinition(rule)) {
|
|
402
440
|
if (typeof rule.value.active === "function") {
|
|
403
|
-
return rule.value.active(state.value,
|
|
441
|
+
return rule.value.active(state.value, $defaultMetadata.value);
|
|
404
442
|
} else {
|
|
405
443
|
return rule.value.active;
|
|
406
444
|
}
|
|
@@ -413,7 +451,7 @@ function createReactiveRuleStatus({
|
|
|
413
451
|
const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
|
|
414
452
|
if (customMessageRule) {
|
|
415
453
|
if (typeof customMessageRule === "function") {
|
|
416
|
-
message = customMessageRule(state.value,
|
|
454
|
+
message = customMessageRule(state.value, $defaultMetadata.value);
|
|
417
455
|
} else {
|
|
418
456
|
message = customMessageRule;
|
|
419
457
|
}
|
|
@@ -421,7 +459,7 @@ function createReactiveRuleStatus({
|
|
|
421
459
|
if (isFormRuleDefinition(rule)) {
|
|
422
460
|
if (!(customMessageRule && !rule.value._patched)) {
|
|
423
461
|
if (typeof rule.value.message === "function") {
|
|
424
|
-
message = rule.value.message(state.value,
|
|
462
|
+
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
425
463
|
} else {
|
|
426
464
|
message = rule.value.message;
|
|
427
465
|
}
|
|
@@ -434,7 +472,7 @@ function createReactiveRuleStatus({
|
|
|
434
472
|
return message;
|
|
435
473
|
});
|
|
436
474
|
const $type = (0, import_vue5.computed)(() => {
|
|
437
|
-
if (isFormRuleDefinition(rule)) {
|
|
475
|
+
if (isFormRuleDefinition(rule) && rule.value.type) {
|
|
438
476
|
return Object.values(InternalRuleType).includes(rule.value.type) ? ruleKey : rule.value.type;
|
|
439
477
|
} else {
|
|
440
478
|
return ruleKey;
|
|
@@ -478,7 +516,13 @@ function createReactiveRuleStatus({
|
|
|
478
516
|
$valid.value = true;
|
|
479
517
|
$pending.value = true;
|
|
480
518
|
const promiseResult = await resultOrPromise;
|
|
481
|
-
|
|
519
|
+
if (typeof promiseResult === "boolean") {
|
|
520
|
+
ruleResult = promiseResult;
|
|
521
|
+
} else {
|
|
522
|
+
const { $valid: $valid2, ...rest } = promiseResult;
|
|
523
|
+
ruleResult = $valid2;
|
|
524
|
+
$metadata.value = rest;
|
|
525
|
+
}
|
|
482
526
|
} catch (e) {
|
|
483
527
|
ruleResult = false;
|
|
484
528
|
} finally {
|
|
@@ -486,7 +530,15 @@ function createReactiveRuleStatus({
|
|
|
486
530
|
}
|
|
487
531
|
}
|
|
488
532
|
} else {
|
|
489
|
-
|
|
533
|
+
if (resultOrPromise != null) {
|
|
534
|
+
if (typeof resultOrPromise === "boolean") {
|
|
535
|
+
ruleResult = resultOrPromise;
|
|
536
|
+
} else {
|
|
537
|
+
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
538
|
+
ruleResult = $valid2;
|
|
539
|
+
$metadata.value = rest;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
490
542
|
}
|
|
491
543
|
$valid.value = ruleResult;
|
|
492
544
|
if (options.$externalErrors) {
|
|
@@ -577,7 +629,6 @@ function createReactiveFieldStatus({
|
|
|
577
629
|
$commit();
|
|
578
630
|
}
|
|
579
631
|
$externalErrors.value = [];
|
|
580
|
-
console.log($externalErrors.value);
|
|
581
632
|
});
|
|
582
633
|
function $unwatch() {
|
|
583
634
|
if ($rules.value) {
|
|
@@ -711,7 +762,7 @@ function createCollectionElement({
|
|
|
711
762
|
});
|
|
712
763
|
}
|
|
713
764
|
const $state = (0, import_vue7.toRefs)(value);
|
|
714
|
-
const $externalErrors = (0, import_vue7.
|
|
765
|
+
const $externalErrors = (0, import_vue7.toRef)(() => externalErrors.value?.[index]);
|
|
715
766
|
const $status = createReactiveChildrenStatus({
|
|
716
767
|
state: $state[index],
|
|
717
768
|
rulesDef: (0, import_vue7.toRef)(() => rules),
|
|
@@ -719,7 +770,7 @@ function createCollectionElement({
|
|
|
719
770
|
path: $path,
|
|
720
771
|
storage,
|
|
721
772
|
options,
|
|
722
|
-
externalErrors: $externalErrors
|
|
773
|
+
externalErrors: $externalErrors
|
|
723
774
|
});
|
|
724
775
|
if ($status) {
|
|
725
776
|
$status.$id = value[index].$id ?? $id;
|
|
@@ -1151,8 +1202,8 @@ function createUseRegleComposable(customRules, options) {
|
|
|
1151
1202
|
}
|
|
1152
1203
|
var useRegle = createUseRegleComposable();
|
|
1153
1204
|
|
|
1154
|
-
// src/core/
|
|
1155
|
-
function
|
|
1205
|
+
// src/core/defineRegleConfig.ts
|
|
1206
|
+
function defineRegleConfig({
|
|
1156
1207
|
rules,
|
|
1157
1208
|
options
|
|
1158
1209
|
}) {
|
|
@@ -1163,6 +1214,8 @@ function defineRegleOptions({
|
|
|
1163
1214
|
0 && (module.exports = {
|
|
1164
1215
|
InternalRuleType,
|
|
1165
1216
|
createRule,
|
|
1166
|
-
|
|
1167
|
-
|
|
1217
|
+
defineRegleConfig,
|
|
1218
|
+
defineType,
|
|
1219
|
+
unwrapRuleParameters,
|
|
1220
|
+
useRegle
|
|
1168
1221
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { MaybeRef, Ref, ComputedRef } from 'vue';
|
|
3
3
|
import { DeepMaybeRef as DeepMaybeRef$1 } from 'types/utils';
|
|
4
|
+
import { DeepReactiveState as DeepReactiveState$1 } from 'types/core/useRegle.types';
|
|
4
5
|
|
|
5
6
|
type ArrayElement<T> = T extends Array<infer U> ? U : never;
|
|
6
7
|
type ExcludeFromTuple<T extends readonly any[], E> = T extends [infer F, ...infer R] ? [NonNullable<F>] extends [E] ? ExcludeFromTuple<R, E> : [Exclude<F, E>, ...ExcludeFromTuple<R, E>] : [];
|
|
@@ -11,40 +12,11 @@ type MaybeNull<T> = T | null;
|
|
|
11
12
|
type DeepMaybeRef<T extends Record<string, any>> = {
|
|
12
13
|
[K in keyof T]: MaybeRef<T[K]>;
|
|
13
14
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* @argument
|
|
17
|
-
* createRule arguments options
|
|
18
|
-
*/
|
|
19
|
-
interface RegleRuleInit<TValue extends any, TParams extends any[] = [], TType extends string = string> {
|
|
20
|
-
validator: (value: Maybe<TValue>, ...args: TParams) => boolean | Promise<boolean>;
|
|
21
|
-
message: string | ((value: Maybe<TValue>, ...args: TParams) => string);
|
|
22
|
-
active?: boolean | ((value: Maybe<TValue>, ...args: TParams) => boolean);
|
|
23
|
-
type: TType;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
type DefaultValidators = {
|
|
27
|
-
maxLength: RegleRuleWithParamsDefinition<string, [count: number]>;
|
|
28
|
-
required: RegleRuleDefinition<unknown, []>;
|
|
29
|
-
requiredIf: RegleRuleWithParamsDefinition<unknown, [condition: boolean]>;
|
|
30
|
-
alpha: RegleRuleDefinition<string>;
|
|
31
|
-
alphaNum: RegleRuleDefinition<string | number>;
|
|
32
|
-
between: RegleRuleWithParamsDefinition<number, [min: number, max: number]>;
|
|
33
|
-
decimal: RegleRuleDefinition<number | string>;
|
|
34
|
-
email: RegleRuleDefinition<string>;
|
|
35
|
-
integer: RegleRuleDefinition<number | string>;
|
|
36
|
-
maxValue: RegleRuleWithParamsDefinition<number, [count: number]>;
|
|
37
|
-
minLength: RegleRuleWithParamsDefinition<string | Record<PropertyKey, any> | any[], [
|
|
38
|
-
count: number
|
|
39
|
-
]>;
|
|
40
|
-
minValue: RegleRuleWithParamsDefinition<number, [count: number]>;
|
|
41
|
-
numeric: RegleRuleDefinition<number | string>;
|
|
42
|
-
requireUnless: RegleRuleWithParamsDefinition<unknown, [condition: boolean]>;
|
|
43
|
-
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown]>;
|
|
44
|
-
url: RegleRuleDefinition<string>;
|
|
15
|
+
type ExcludeByType<T, U> = {
|
|
16
|
+
[K in keyof T as T[K] extends U ? never : K]: T[K] extends U ? never : T[K];
|
|
45
17
|
};
|
|
46
18
|
|
|
47
|
-
type ParamDecl<T = any> = MaybeRef<T
|
|
19
|
+
type ParamDecl<T = any> = MaybeRef<Maybe<T>> | (() => Maybe<T>);
|
|
48
20
|
type CreateFn<T extends any[]> = (...args: T) => any;
|
|
49
21
|
/**
|
|
50
22
|
* Transform normal parameters tuple declaration to a rich tuple declaration
|
|
@@ -64,14 +36,14 @@ type UnwrapRegleUniversalParams<T extends ParamDecl[] = [], F = CreateFn<T>> = [
|
|
|
64
36
|
/**
|
|
65
37
|
* Internal definition of the rule, can be used to reset or patch the rule
|
|
66
38
|
*/
|
|
67
|
-
interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = []> {
|
|
68
|
-
_validator: (value: Maybe<TValue>, ...args: TParams) =>
|
|
69
|
-
_message: string | ((value: Maybe<TValue>,
|
|
70
|
-
_active?: boolean | ((value: Maybe<TValue>,
|
|
71
|
-
_type
|
|
39
|
+
interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
40
|
+
_validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
41
|
+
_message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
42
|
+
_active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
43
|
+
_type?: string;
|
|
72
44
|
_patched: boolean;
|
|
73
45
|
_params?: RegleUniversalParams<TParams>;
|
|
74
|
-
_async:
|
|
46
|
+
_async: TAsync;
|
|
75
47
|
}
|
|
76
48
|
declare enum InternalRuleType {
|
|
77
49
|
Inline = "__inline",
|
|
@@ -81,39 +53,130 @@ declare enum InternalRuleType {
|
|
|
81
53
|
/**
|
|
82
54
|
* Returned typed of rules created with `createRule`
|
|
83
55
|
* */
|
|
84
|
-
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = []> extends RegleInternalRuleDefs<TValue, TParams> {
|
|
85
|
-
validator: RegleRuleDefinitionProcessor<TValue, TParams,
|
|
86
|
-
message:
|
|
87
|
-
active:
|
|
88
|
-
type
|
|
56
|
+
interface RegleRuleDefinition<TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean> extends RegleInternalRuleDefs<TValue, TParams, TAsync, TMetaData> {
|
|
57
|
+
validator: RegleRuleDefinitionProcessor<TValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
|
|
58
|
+
message: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, string>;
|
|
59
|
+
active: RegleRuleDefinitionWithMetadataProcessor<TValue, RegleRuleMetadataConsumer<TParams, TMetaData>, boolean>;
|
|
60
|
+
type?: string;
|
|
61
|
+
exec: (value: Maybe<TValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @internal
|
|
65
|
+
* */
|
|
66
|
+
interface $InternalRegleRuleDefinition extends RegleInternalRuleDefs<any, any, any> {
|
|
67
|
+
validator: RegleRuleDefinitionProcessor;
|
|
68
|
+
message: RegleRuleDefinitionWithMetadataProcessor<any, any, any>;
|
|
69
|
+
active: RegleRuleDefinitionWithMetadataProcessor<any, any, any>;
|
|
70
|
+
type?: string;
|
|
71
|
+
exec: (value: any) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
89
72
|
}
|
|
90
73
|
/**
|
|
91
74
|
* Rules with params created with `createRules` are callable while being customizable
|
|
92
75
|
*/
|
|
93
|
-
interface RegleRuleWithParamsDefinition<TValue extends any = any, TParams extends any[] = []> extends
|
|
94
|
-
(...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TValue, TParams>;
|
|
76
|
+
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> {
|
|
77
|
+
(...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TValue, TParams, TAsync, TMetadata>;
|
|
95
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Define a rule Metadata definition
|
|
81
|
+
*/
|
|
82
|
+
type RegleRuleMetadataDefinition = {
|
|
83
|
+
$valid: boolean;
|
|
84
|
+
[x: string]: any;
|
|
85
|
+
} | boolean;
|
|
86
|
+
type DefaultMetadataProperties = Pick<ExcludeByType<RegleCommonStatus, Function>, '$invalid'>;
|
|
87
|
+
/**
|
|
88
|
+
* Will be used to consumme metadata on related helpers and rule status
|
|
89
|
+
*/
|
|
90
|
+
type RegleRuleMetadataConsumer<TParams extends any[] = [], TMetadata extends RegleRuleMetadataDefinition = boolean> = DefaultMetadataProperties & (TParams extends never ? {} : {
|
|
91
|
+
$params: TParams;
|
|
92
|
+
}) & (TMetadata extends boolean ? {} : Omit<TMetadata, '$valid'>);
|
|
93
|
+
/**
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
type $InternalRegleRuleMetadataConsumer = DefaultMetadataProperties & {
|
|
97
|
+
$params?: any[];
|
|
98
|
+
[x: string]: any;
|
|
99
|
+
};
|
|
96
100
|
/**
|
|
97
101
|
* Generic types for a created RegleRule
|
|
98
102
|
*/
|
|
99
|
-
type RegleRuleRaw<TValue extends any = any, TParams extends any[] = []> = RegleRuleDefinition<TValue, TParams> | RegleRuleWithParamsDefinition<TValue, TParams>;
|
|
103
|
+
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>;
|
|
100
104
|
/**
|
|
101
105
|
* Process the type of a created rule with `createRule`.
|
|
102
106
|
* For a rule with params it will return a function
|
|
103
107
|
* Otherwise it will return the rule definition
|
|
104
108
|
*/
|
|
105
|
-
type InferRegleRule<TValue extends any = any, TParams extends any[] = []> = [
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
109
|
+
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>;
|
|
110
|
+
type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
|
|
111
|
+
type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<any, any>, TReturn = any> = (value: Maybe<TValue>, metadata: TMetadata) => TReturn;
|
|
109
112
|
type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules> & {
|
|
110
113
|
$each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
|
|
111
114
|
}) | {
|
|
112
115
|
$each: RegleFormPropertyType<ArrayElement<TValue>, TCustomRules>;
|
|
113
116
|
};
|
|
114
117
|
|
|
118
|
+
/**
|
|
119
|
+
* @argument
|
|
120
|
+
* createRule arguments options
|
|
121
|
+
*/
|
|
122
|
+
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> {
|
|
123
|
+
type: {
|
|
124
|
+
value: TValue;
|
|
125
|
+
params: TParams;
|
|
126
|
+
};
|
|
127
|
+
validator: (value: Maybe<TValue>, ...args: TParams) => TReturn;
|
|
128
|
+
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
129
|
+
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @argument
|
|
133
|
+
* Rule core
|
|
134
|
+
*/
|
|
135
|
+
interface RegleRuleCore<TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
|
|
136
|
+
validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
|
|
137
|
+
message: string | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => string);
|
|
138
|
+
active?: boolean | ((value: Maybe<TValue>, metadata: RegleRuleMetadataConsumer<TParams, TMetadata>) => boolean);
|
|
139
|
+
type?: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @internal
|
|
143
|
+
* createRule arguments options
|
|
144
|
+
*/
|
|
145
|
+
interface $InternalRegleRuleInit {
|
|
146
|
+
validator: (value: any, ...args: any[]) => RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
147
|
+
message: string | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => string);
|
|
148
|
+
active?: boolean | ((value: any, metadata: $InternalRegleRuleMetadataConsumer) => boolean);
|
|
149
|
+
type?: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
type DefaultValidators = {
|
|
153
|
+
maxLength: RegleRuleWithParamsDefinition<string, [count: number]>;
|
|
154
|
+
required: RegleRuleDefinition<unknown, []>;
|
|
155
|
+
requiredIf: RegleRuleWithParamsDefinition<unknown, [condition: boolean]>;
|
|
156
|
+
requiredUnless: RegleRuleWithParamsDefinition<unknown, [condition: boolean]>;
|
|
157
|
+
alpha: RegleRuleDefinition<string>;
|
|
158
|
+
alphaNum: RegleRuleDefinition<string | number>;
|
|
159
|
+
between: RegleRuleWithParamsDefinition<number, [min: number, max: number]>;
|
|
160
|
+
decimal: RegleRuleDefinition<number | string>;
|
|
161
|
+
email: RegleRuleDefinition<string>;
|
|
162
|
+
integer: RegleRuleDefinition<number | string>;
|
|
163
|
+
maxValue: RegleRuleWithParamsDefinition<number, [count: number]>;
|
|
164
|
+
minLength: RegleRuleWithParamsDefinition<string | Record<PropertyKey, any> | any[], [
|
|
165
|
+
count: number
|
|
166
|
+
]>;
|
|
167
|
+
minValue: RegleRuleWithParamsDefinition<number, [count: number]>;
|
|
168
|
+
numeric: RegleRuleDefinition<number | string>;
|
|
169
|
+
sameAs: RegleRuleWithParamsDefinition<unknown, [target: unknown]>;
|
|
170
|
+
url: RegleRuleDefinition<string>;
|
|
171
|
+
dateAfter: RegleRuleWithParamsDefinition<Date, [after: Date]>;
|
|
172
|
+
dateBefore: RegleRuleWithParamsDefinition<Date, [before: Date]>;
|
|
173
|
+
dateBetween: RegleRuleWithParamsDefinition<Date, [before: Date, after: Date]>;
|
|
174
|
+
ipAddress: RegleRuleDefinition<string, [], false>;
|
|
175
|
+
macAddress: RegleRuleWithParamsDefinition<string, [separator?: string | undefined], false>;
|
|
176
|
+
};
|
|
177
|
+
|
|
115
178
|
type CustomRulesDeclarationTree = {
|
|
116
|
-
[x: string]: RegleRuleRaw<any, any> | undefined;
|
|
179
|
+
[x: string]: RegleRuleRaw<any, any, boolean, any> | undefined;
|
|
117
180
|
};
|
|
118
181
|
type AllRulesDeclarations = CustomRulesDeclarationTree & DefaultValidators;
|
|
119
182
|
|
|
@@ -170,12 +233,16 @@ type $InternalRegleCollectionRuleDecl = $InternalRegleRuleDecl & {
|
|
|
170
233
|
/**
|
|
171
234
|
* @public
|
|
172
235
|
*/
|
|
173
|
-
type InlineRuleDeclaration<TValue extends any = any> = (value: Maybe<TValue>, ...args: any[]) =>
|
|
236
|
+
type InlineRuleDeclaration<TValue extends any = any, TMetadata extends RegleRuleMetadataDefinition = boolean, TReturn extends TMetadata | Promise<TMetadata> = TMetadata, TAsync extends boolean = TReturn extends Promise<any> ? true : false> = (value: Maybe<TValue>, ...args: any[]) => TReturn;
|
|
237
|
+
/**
|
|
238
|
+
* @public
|
|
239
|
+
*/
|
|
240
|
+
type InlinePromiseRuleDeclaration<TValue extends any = any, TMetadata extends RegleRuleMetadataDefinition = boolean> = (value: Maybe<TValue>, ...args: any[]) => Promise<TMetadata>;
|
|
174
241
|
/**
|
|
175
242
|
* @public
|
|
176
243
|
* Regroup inline and registered rules
|
|
177
244
|
* */
|
|
178
|
-
type FormRuleDeclaration<TValue extends any, TParams extends any[] = []> = InlineRuleDeclaration<TValue> | RegleRuleDefinition<TValue, TParams>;
|
|
245
|
+
type FormRuleDeclaration<TValue extends any, TParams extends any[] = [], TMetadata extends RegleRuleMetadataDefinition = boolean> = InlineRuleDeclaration<TValue, TMetadata> | RegleRuleDefinition<TValue, TParams, boolean, TMetadata>;
|
|
179
246
|
|
|
180
247
|
type RegleErrorTree<TRules extends ReglePartialValidationTree<any, any>> = {
|
|
181
248
|
readonly [K in keyof TRules]: RegleValidationErrors<TRules[K]>;
|
|
@@ -294,11 +361,10 @@ interface $InternalRegleRuleStatus {
|
|
|
294
361
|
$path: string;
|
|
295
362
|
$externalErrors?: string[];
|
|
296
363
|
$params?: any[];
|
|
297
|
-
$validator(value: any, ...args: any[]):
|
|
364
|
+
$validator(value: any, ...args: any[]): RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>;
|
|
298
365
|
$validate(): Promise<boolean>;
|
|
299
366
|
$unwatch(): void;
|
|
300
367
|
$watch(): void;
|
|
301
|
-
$clearExternalErrors(): void;
|
|
302
368
|
}
|
|
303
369
|
/**
|
|
304
370
|
* @public
|
|
@@ -343,9 +409,9 @@ declare global {
|
|
|
343
409
|
}
|
|
344
410
|
|
|
345
411
|
/**
|
|
346
|
-
Matches any primitive, `Date`, or `RegExp` value.
|
|
412
|
+
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
347
413
|
*/
|
|
348
|
-
type BuiltIns = Primitive | Date | RegExp;
|
|
414
|
+
type BuiltIns = Primitive | void | Date | RegExp;
|
|
349
415
|
|
|
350
416
|
/**
|
|
351
417
|
Test if the given function has multiple call signatures.
|
|
@@ -421,7 +487,7 @@ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
|
|
|
421
487
|
@category Set
|
|
422
488
|
@category Map
|
|
423
489
|
*/
|
|
424
|
-
type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIns
|
|
490
|
+
type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIns | (((...arguments_: any[]) => unknown)) | (new (...arguments_: any[]) => unknown)
|
|
425
491
|
? T
|
|
426
492
|
: T extends Map<infer KeyType, infer ValueType>
|
|
427
493
|
? PartialMapDeep<KeyType, ValueType, Options>
|
|
@@ -431,19 +497,17 @@ type PartialDeep<T, Options extends PartialDeepOptions = {}> = T extends BuiltIn
|
|
|
431
497
|
? PartialReadonlyMapDeep<KeyType, ValueType, Options>
|
|
432
498
|
: T extends ReadonlySet<infer ItemType>
|
|
433
499
|
? PartialReadonlySetDeep<ItemType, Options>
|
|
434
|
-
: T extends
|
|
435
|
-
? T
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
: PartialObjectDeep<T, Options>
|
|
446
|
-
: unknown;
|
|
500
|
+
: T extends object
|
|
501
|
+
? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
|
|
502
|
+
? Options['recurseIntoArrays'] extends true
|
|
503
|
+
? ItemType[] extends T // Test for arrays (non-tuples) specifically
|
|
504
|
+
? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
|
|
505
|
+
? ReadonlyArray<PartialDeep<ItemType | undefined, Options>>
|
|
506
|
+
: Array<PartialDeep<ItemType | undefined, Options>>
|
|
507
|
+
: PartialObjectDeep<T, Options> // Tuples behave properly
|
|
508
|
+
: T // If they don't opt into array testing, just use the original type
|
|
509
|
+
: PartialObjectDeep<T, Options>
|
|
510
|
+
: unknown;
|
|
447
511
|
|
|
448
512
|
/**
|
|
449
513
|
Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
|
|
@@ -595,7 +659,42 @@ interface LocalRegleBehaviourOptions<TState extends Record<string, any>> {
|
|
|
595
659
|
}
|
|
596
660
|
type ResolvedRegleBehaviourOptions = DeepMaybeRef$1<RequiredDeep<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<Record<string, any>>;
|
|
597
661
|
|
|
598
|
-
|
|
662
|
+
/**
|
|
663
|
+
* @description
|
|
664
|
+
* Create a typed custom rule that can be used like default validators.
|
|
665
|
+
* It can also be declared in the global options
|
|
666
|
+
*
|
|
667
|
+
* It will automatically detect if the rule is async
|
|
668
|
+
*
|
|
669
|
+
* @typeParam TValue - The input value the rule should receive
|
|
670
|
+
* @typeParam TParams - Tuple declaration of the rule parameters (if any)
|
|
671
|
+
*
|
|
672
|
+
* @param definition - The rule processors object
|
|
673
|
+
*
|
|
674
|
+
* @returns A rule definition that can be callable depending on params presence
|
|
675
|
+
*
|
|
676
|
+
* @exemple
|
|
677
|
+
*
|
|
678
|
+
* ```ts
|
|
679
|
+
* // Create a simple rule with no params
|
|
680
|
+
* import {ruleHelpers} from '@regle/validators';
|
|
681
|
+
*
|
|
682
|
+
* export const isFoo = createRule<string>({
|
|
683
|
+
* validator(value) {
|
|
684
|
+
* if (ruleHelpers.isFilled(value)) {
|
|
685
|
+
* return value === 'foo';
|
|
686
|
+
* }
|
|
687
|
+
* return true
|
|
688
|
+
* },
|
|
689
|
+
* message: "The value should be 'foo'"
|
|
690
|
+
* })
|
|
691
|
+
* ```
|
|
692
|
+
*/
|
|
693
|
+
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>;
|
|
694
|
+
declare function defineType<TValue extends any = unknown, TParams extends any[] = []>(ruleName: string): {
|
|
695
|
+
value: TValue;
|
|
696
|
+
params: TParams;
|
|
697
|
+
};
|
|
599
698
|
|
|
600
699
|
/**
|
|
601
700
|
* Returns a clean list of parameters
|
|
@@ -603,6 +702,8 @@ declare function createRule<TValue extends any, TParams extends any[] = [], TTyp
|
|
|
603
702
|
*/
|
|
604
703
|
declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]): TParams;
|
|
605
704
|
|
|
705
|
+
declare const useRegle: <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations>>>(state: Ref<TState> | DeepReactiveState$1<TState>, rulesFactory: ComputedRef<TRules> | (() => TRules), options?: (Partial<DeepMaybeRef$1<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState>) | undefined) => Regle<TState, TRules>;
|
|
706
|
+
|
|
606
707
|
/**
|
|
607
708
|
* Root function that allows you to define project-wise all your custom validators or overwrite default ones
|
|
608
709
|
*
|
|
@@ -610,9 +711,9 @@ declare function unwrapRuleParameters<TParams extends any[]>(params: ParamDecl[]
|
|
|
610
711
|
*
|
|
611
712
|
* @param customRules
|
|
612
713
|
*/
|
|
613
|
-
declare function
|
|
714
|
+
declare function defineRegleConfig<TCustomRules extends Partial<AllRulesDeclarations>>({ rules, options, }: {
|
|
614
715
|
rules?: () => TCustomRules;
|
|
615
716
|
options?: RegleBehaviourOptions;
|
|
616
717
|
}): <TState extends Record<string, any>, TRules extends ReglePartialValidationTree<TState, Partial<AllRulesDeclarations> & TCustomRules>>(state: vue.Ref<TState> | DeepReactiveState<TState>, rulesFactory: vue.ComputedRef<TRules> | (() => TRules), options?: (Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<TState>) | undefined) => Regle<TState, TRules>;
|
|
617
718
|
|
|
618
|
-
export { $InternalExternalRegleErrors, $InternalFormPropertyTypes, $InternalRegleCollectionRuleDecl, $InternalRegleCollectionStatus, $InternalRegleErrors, $InternalRegleFieldStatus, $InternalReglePartialValidationTree, $InternalRegleRuleDecl, $InternalRegleRuleStatus, $InternalRegleStatus, $InternalRegleStatusType, AllRulesDeclarations, ArrayElement, CustomRulesDeclarationTree, DataType, DeepMaybeRef, ExcludeFromTuple, FormRuleDeclaration, InferRegleRule, InferRegleStatusType, InlineRuleDeclaration, InternalRuleType, LocalRegleBehaviourOptions, Maybe, MaybeNull, ParamDecl, Regle, RegleBehaviourOptions, RegleCollectionErrors, RegleCollectionRuleDecl, RegleCollectionRuleDefinition, RegleCollectionStatus, RegleCommonStatus, RegleErrorTree, RegleExternalCollectionErrors, RegleExternalErrorTree, RegleExternalValidationErrors, RegleFieldStatus, RegleFormPropertyType, RegleInternalRuleDefs, ReglePartialValidationTree, RegleRuleDecl, RegleRuleDefinition, RegleRuleDefinitionProcessor, RegleRuleInit, RegleRuleRaw, RegleRuleStatus, RegleRuleWithParamsDefinition, RegleStatus, RegleUniversalParams, RegleValidationErrors, ResolvedRegleBehaviourOptions, UnrefTuple, UnwrapRegleUniversalParams, createRule,
|
|
719
|
+
export { type $InternalExternalRegleErrors, type $InternalFormPropertyTypes, type $InternalRegleCollectionRuleDecl, type $InternalRegleCollectionStatus, type $InternalRegleErrors, type $InternalRegleFieldStatus, type $InternalReglePartialValidationTree, type $InternalRegleRuleDecl, type $InternalRegleRuleDefinition, type $InternalRegleRuleInit, type $InternalRegleRuleMetadataConsumer, type $InternalRegleRuleStatus, type $InternalRegleStatus, type $InternalRegleStatusType, type AllRulesDeclarations, type ArrayElement, type CustomRulesDeclarationTree, type DataType, type DeepMaybeRef, type ExcludeByType, type ExcludeFromTuple, type FormRuleDeclaration, type InferRegleRule, type InferRegleStatusType, type InlinePromiseRuleDeclaration, type InlineRuleDeclaration, InternalRuleType, type LocalRegleBehaviourOptions, type Maybe, type MaybeNull, type ParamDecl, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalValidationErrors, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, 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 RegleUniversalParams, type RegleValidationErrors, type ResolvedRegleBehaviourOptions, type UnrefTuple, type UnwrapRegleUniversalParams, createRule, defineRegleConfig, defineType, unwrapRuleParameters, useRegle };
|