@regle/core 0.4.9 → 0.5.1

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/README.md CHANGED
@@ -11,4 +11,24 @@ It's heavily inspired by Vuelidate.
11
11
 
12
12
  # 📚 Documentation
13
13
 
14
- [![Documentation](https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/redirectDoc.svg)](https://regle.vercel.app/)
14
+ [![Documentation](https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/redirectDoc.svg)](https://regle.vercel.app/)
15
+
16
+ ## 📚 Documentation
17
+
18
+ [![Documentation](https://raw.githubusercontent.com/victorgarciaesgi/regle/refs/heads/main/.github/images/redirectDoc.svg)](https://regle.vercel.app/)
19
+
20
+ ## ðŸŽŪ Play with it
21
+
22
+ | Simple demo | Advanced Demo |
23
+ | ------------- | ------------- |
24
+ | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/simple-example?file=examples/simple-example/src/App.vue&configPath=examples/simple-example) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/~/github.com/victorgarciaesgi/regle-examples/tree/main/examples/advanced-example?file=examples/advanced-example/src/App.vue&configPath=examples/advanced-example) |
25
+
26
+ ## 🧰 Features
27
+ - ✅ Typescript first
28
+ - ðŸĪ– 100% type inference
29
+ - 📖 Model based validation
30
+ - 🊗 Extensible
31
+ - ðŸĶļ‍♂ïļ [Zod](https://zod.dev/) support
32
+ - ðŸĪ– [Valibot](https://valibot.dev/) support
33
+ - ðŸŠķ Light(~7kb gzip) and 0 dependencies
34
+ - 🛒 Collection validation
@@ -2,6 +2,26 @@
2
2
 
3
3
  var vue = require('vue');
4
4
 
5
+ // ../shared/utils/isEmpty.ts
6
+ function isEmpty(value) {
7
+ if (value === void 0 || value === null) {
8
+ return true;
9
+ }
10
+ if (value instanceof Date) {
11
+ return isNaN(value.getTime());
12
+ }
13
+ if (Array.isArray(value)) {
14
+ return false;
15
+ }
16
+ if (typeof value === "object" && value != null) {
17
+ return Object.keys(value).length === 0;
18
+ }
19
+ return !String(value).length;
20
+ }
21
+
22
+ // ../shared/utils/symbol.ts
23
+ var RegleRuleSymbol = Symbol("regle-rule");
24
+
5
25
  // src/types/rules/rule.internal.types.ts
6
26
  var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
7
27
  InternalRuleType2["Inline"] = "__inline";
@@ -120,7 +140,8 @@ function defineRuleProcessors(definition, ...params) {
120
140
  _message_patched: false,
121
141
  _tooltip_patched: false,
122
142
  _async: isAsync,
123
- _params: createReactiveParams(params)
143
+ _params: createReactiveParams(params),
144
+ _brand: RegleRuleSymbol
124
145
  };
125
146
  return processors;
126
147
  }
@@ -380,23 +401,6 @@ function useStorage() {
380
401
  };
381
402
  }
382
403
 
383
- // ../shared/utils/isEmpty.ts
384
- function isEmpty(value) {
385
- if (value === void 0 || value === null) {
386
- return true;
387
- }
388
- if (value instanceof Date) {
389
- return isNaN(value.getTime());
390
- }
391
- if (Array.isArray(value)) {
392
- return false;
393
- }
394
- if (typeof value === "object" && value != null) {
395
- return Object.keys(value).length === 0;
396
- }
397
- return !String(value).length;
398
- }
399
-
400
404
  // src/core/useRegle/guards/ruleDef.guards.ts
401
405
  function isNestedRulesDef(state, rules) {
402
406
  return isObject(state.value) && isObject(rules.value) && !Object.entries(rules.value).some((rule) => isRuleDef(rule));
@@ -798,6 +802,14 @@ function createReactiveFieldStatus({
798
802
  return ruleResult.$validating;
799
803
  });
800
804
  });
805
+ const $silentValue = vue.computed({
806
+ get: () => state.value,
807
+ set(value) {
808
+ $unwatchState();
809
+ state.value = value;
810
+ define$watchState();
811
+ }
812
+ });
801
813
  const $error = vue.computed(() => {
802
814
  return $invalid.value && !$pending.value && $dirty.value;
803
815
  });
@@ -883,6 +895,7 @@ function createReactiveFieldStatus({
883
895
  $dirty,
884
896
  $externalErrors: externalErrors?.value ?? [],
885
897
  $value: state,
898
+ $silentValue,
886
899
  $rules,
887
900
  $error,
888
901
  $pending,
@@ -930,9 +943,22 @@ function createReactiveFieldStatus({
930
943
  $tooltips,
931
944
  $dirty,
932
945
  triggerPunishment,
933
- processShortcuts
946
+ processShortcuts,
947
+ $silentValue
934
948
  };
935
949
  });
950
+ define$watchState();
951
+ $unwatchDirty = vue.watch(scopeState.$dirty, () => {
952
+ storage.setDirtyEntry(path, scopeState.$dirty.value);
953
+ });
954
+ $unwatchValid = vue.watch(scopeState.$valid, (valid) => {
955
+ if (scopeState.$rewardEarly.value && valid) {
956
+ scopeState.triggerPunishment.value = false;
957
+ }
958
+ });
959
+ $unwatchAsync = vue.watch(scopeState.$haveAnyAsyncRule, define$commit);
960
+ }
961
+ function define$watchState() {
936
962
  $unwatchState = vue.watch(
937
963
  state,
938
964
  () => {
@@ -953,15 +979,6 @@ function createReactiveFieldStatus({
953
979
  },
954
980
  { deep: $isArray ? true : isVueSuperiorOrEqualTo3dotFive ? 1 : true }
955
981
  );
956
- $unwatchDirty = vue.watch(scopeState.$dirty, () => {
957
- storage.setDirtyEntry(path, scopeState.$dirty.value);
958
- });
959
- $unwatchValid = vue.watch(scopeState.$valid, (valid) => {
960
- if (scopeState.$rewardEarly.value && valid) {
961
- scopeState.triggerPunishment.value = false;
962
- }
963
- });
964
- $unwatchAsync = vue.watch(scopeState.$haveAnyAsyncRule, define$commit);
965
982
  }
966
983
  function $commitHandler() {
967
984
  Object.values($rules.value).forEach((rule) => {
@@ -1277,7 +1294,7 @@ function createReactiveCollectionStatus({
1277
1294
  $eachStatus.value = [];
1278
1295
  }
1279
1296
  }
1280
- function $watch() {
1297
+ function define$watchState() {
1281
1298
  $unwatchState = vue.watch(
1282
1299
  state,
1283
1300
  () => {
@@ -1289,8 +1306,19 @@ function createReactiveCollectionStatus({
1289
1306
  },
1290
1307
  { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "pre" }
1291
1308
  );
1309
+ }
1310
+ function $watch() {
1311
+ define$watchState();
1292
1312
  scope = vue.effectScope();
1293
1313
  scopeState = scope.run(() => {
1314
+ const $silentValue = vue.computed({
1315
+ get: () => state.value,
1316
+ set(value) {
1317
+ $unwatchState();
1318
+ state.value = value;
1319
+ define$watchState();
1320
+ }
1321
+ });
1294
1322
  const $dirty = vue.computed(() => {
1295
1323
  return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
1296
1324
  return statusOrField.$dirty;
@@ -1348,6 +1376,7 @@ function createReactiveCollectionStatus({
1348
1376
  vue.reactive({
1349
1377
  $dirty,
1350
1378
  $error,
1379
+ $silentValue,
1351
1380
  $pending,
1352
1381
  $invalid,
1353
1382
  $valid,
@@ -1381,7 +1410,8 @@ function createReactiveCollectionStatus({
1381
1410
  $silentErrors,
1382
1411
  $ready,
1383
1412
  $name,
1384
- $shortcuts: $shortcuts2
1413
+ $shortcuts: $shortcuts2,
1414
+ $silentValue
1385
1415
  };
1386
1416
  });
1387
1417
  if (immediateScopeState.isPrimitiveArray.value) {
@@ -1600,8 +1630,20 @@ function createReactiveNestedStatus({
1600
1630
  );
1601
1631
  }
1602
1632
  }
1633
+ function define$watchState() {
1634
+ $unwatchState = vue.watch(
1635
+ state,
1636
+ () => {
1637
+ $unwatch();
1638
+ createReactiveFieldsStatus();
1639
+ $touch(true, true);
1640
+ },
1641
+ { flush: "sync" }
1642
+ );
1643
+ }
1603
1644
  function $watch() {
1604
1645
  if (rootRules) {
1646
+ $unwatchRules?.();
1605
1647
  $unwatchRules = vue.watch(
1606
1648
  rootRules,
1607
1649
  () => {
@@ -1612,17 +1654,17 @@ function createReactiveNestedStatus({
1612
1654
  );
1613
1655
  define$WatchExternalErrors();
1614
1656
  }
1615
- $unwatchState = vue.watch(
1616
- state,
1617
- () => {
1618
- $unwatch();
1619
- createReactiveFieldsStatus();
1620
- $touch(true, true);
1621
- },
1622
- { flush: "sync" }
1623
- );
1657
+ define$watchState();
1624
1658
  scope = vue.effectScope();
1625
1659
  scopeState = scope.run(() => {
1660
+ const $silentValue = vue.computed({
1661
+ get: () => state.value,
1662
+ set(value) {
1663
+ $unwatch();
1664
+ state.value = value;
1665
+ createReactiveFieldsStatus();
1666
+ }
1667
+ });
1626
1668
  const $dirty = vue.computed({
1627
1669
  get: () => {
1628
1670
  return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([key, statusOrField]) => {
@@ -1723,6 +1765,7 @@ function createReactiveNestedStatus({
1723
1765
  vue.reactive({
1724
1766
  $dirty,
1725
1767
  $value: state,
1768
+ $silentValue,
1726
1769
  $error,
1727
1770
  $pending,
1728
1771
  $invalid,
@@ -1789,7 +1832,8 @@ function createReactiveNestedStatus({
1789
1832
  $ready,
1790
1833
  $name,
1791
1834
  $shortcuts: $shortcuts2,
1792
- $groups
1835
+ $groups,
1836
+ $silentValue
1793
1837
  };
1794
1838
  });
1795
1839
  }
@@ -373,6 +373,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
373
373
  _tooltip_patched: boolean;
374
374
  _params?: RegleUniversalParams<TParams>;
375
375
  _async: TAsync;
376
+ readonly _brand: symbol;
376
377
  }
377
378
  declare enum InternalRuleType {
378
379
  Inline = "__inline",
@@ -642,6 +643,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
642
643
  */
643
644
  type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
644
645
  $value: Maybe<UnwrapNestedRefs<TState>>;
646
+ $silentValue: Maybe<UnwrapNestedRefs<TState>>;
645
647
  readonly $errors: string[];
646
648
  readonly $silentErrors: string[];
647
649
  readonly $externalErrors: string[];
@@ -668,6 +670,7 @@ interface RegleCommonStatus<TValue = any> {
668
670
  readonly $name: string;
669
671
  $id?: string;
670
672
  $value: UnwrapNestedRefs<TValue>;
673
+ $silentValue: UnwrapNestedRefs<TValue>;
671
674
  $touch(runCommit?: boolean, withConditions?: boolean): void;
672
675
  $reset(): void;
673
676
  $resetAll: () => void;
@@ -700,6 +703,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
700
703
  */
701
704
  type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleCommonStatus<TState>, '$value'> & {
702
705
  $value: Maybe<TState>;
706
+ $silentValue: Maybe<TState>;
703
707
  readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
704
708
  readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
705
709
  readonly $errors: RegleCollectionErrors<TState>;
@@ -728,11 +732,11 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
728
732
  *
729
733
  * ```ts
730
734
  * // Create a simple rule with no params
731
- * import {ruleHelpers} from '@regle/rules';
735
+ * import {isFilled} from '@regle/rules';
732
736
  *
733
737
  * export const isFoo = createRule({
734
738
  * validator(value: string) {
735
- * if (ruleHelpers.isFilled(value)) {
739
+ * if (isFilled(value)) {
736
740
  * return value === 'foo';
737
741
  * }
738
742
  * return true
@@ -373,6 +373,7 @@ interface RegleInternalRuleDefs<TValue extends any = any, TParams extends any[]
373
373
  _tooltip_patched: boolean;
374
374
  _params?: RegleUniversalParams<TParams>;
375
375
  _async: TAsync;
376
+ readonly _brand: symbol;
376
377
  }
377
378
  declare enum InternalRuleType {
378
379
  Inline = "__inline",
@@ -642,6 +643,7 @@ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl
642
643
  */
643
644
  type RegleFieldStatus<TState extends any = any, TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState>, '$value'> & {
644
645
  $value: Maybe<UnwrapNestedRefs<TState>>;
646
+ $silentValue: Maybe<UnwrapNestedRefs<TState>>;
645
647
  readonly $errors: string[];
646
648
  readonly $silentErrors: string[];
647
649
  readonly $externalErrors: string[];
@@ -668,6 +670,7 @@ interface RegleCommonStatus<TValue = any> {
668
670
  readonly $name: string;
669
671
  $id?: string;
670
672
  $value: UnwrapNestedRefs<TValue>;
673
+ $silentValue: UnwrapNestedRefs<TValue>;
671
674
  $touch(runCommit?: boolean, withConditions?: boolean): void;
672
675
  $reset(): void;
673
676
  $resetAll: () => void;
@@ -700,6 +703,7 @@ type RegleRuleStatus<TValue = any, TParams extends any[] = any[], TMetadata exte
700
703
  */
701
704
  type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePartialRuleTree<ArrayElement<TState>> = Record<string, any>, TFieldRule extends RegleCollectionRuleDecl<any, any> = never, TShortcuts extends RegleShortcutDefinition = {}> = Omit<RegleCommonStatus<TState>, '$value'> & {
702
705
  $value: Maybe<TState>;
706
+ $silentValue: Maybe<TState>;
703
707
  readonly $each: Array<InferRegleStatusType<NonNullable<TRules>, NonNullable<TState>, number, TShortcuts>>;
704
708
  readonly $field: RegleFieldStatus<TState, TFieldRule, TShortcuts>;
705
709
  readonly $errors: RegleCollectionErrors<TState>;
@@ -728,11 +732,11 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
728
732
  *
729
733
  * ```ts
730
734
  * // Create a simple rule with no params
731
- * import {ruleHelpers} from '@regle/rules';
735
+ * import {isFilled} from '@regle/rules';
732
736
  *
733
737
  * export const isFoo = createRule({
734
738
  * validator(value: string) {
735
- * if (ruleHelpers.isFilled(value)) {
739
+ * if (isFilled(value)) {
736
740
  * return value === 'foo';
737
741
  * }
738
742
  * return true
@@ -1,2 +1,2 @@
1
- 'use strict';var vue=require('vue');var Ee=(t=>(t.Inline="__inline",t.Async="__async",t))(Ee||{});function Qe(e,r){return e.some(t=>t[r])}function Xe(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function W(e){try{return e.map(r=>vue.toValue(r))}catch{return []}}function Ze(e){return e.map(r=>r instanceof Function?vue.computed(r):vue.isRef(r)?r:vue.toRef(()=>r))}function Ke(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(m=>m.trim()).filter(m=>m.length>0).length:0}function De(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...W(h.length?h:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:W(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:W(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:W(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let h=e.validator(d,...W(r)),g;return h instanceof Promise?h.then(C=>(g=C,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=h,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:Ze(r)}}function xe(e){if(typeof e.validator=="function"){let t=De(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ke(e.validator)>1){let l=function(...p){return De(e,...p)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function X(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function et(e){return e.value instanceof Date||e.value instanceof File?!1:X(e.value)}function U(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>U(n)))),t=="Map"&&(r=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,Et(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=U(e[n]);}return r}function Et(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ce(e,r,t){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function ye(e,r,t){let n,l=(...p)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...p])).then(m);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function xt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let p=Number(t[l]),m=Number(n[l]);if(p>m)return 1;if(m>p)return -1;if(!isNaN(p)&&isNaN(m))return 1;if(isNaN(p)&&!isNaN(m))return -1}return 0}var ve=xt(vue.version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function ge(){return typeof window>"u"?Ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ie(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),p=vue.shallowRef(new Map);function m(o){let c=r.value.get(o);if(c)return c;{let f=vue.ref({});return r.value.set(o,f),f}}function d(o){let c=t.value.get(o);if(c)return c;{let f=vue.ref([]);return t.value.set(o,f),f}}function h(o,c,f){p.value.set(`${o}-${c}`,f);}function g(o,c){return p.value.get(`${o}-${c}`)}function C(o,c){o&&c!=null&&p.value.delete(`${o}-${c}`);}function F(o,c){n.value.set(o,c);}function O(o){return n.value.get(o)??!1}function a(o,c){e.value.set(o,c);}function x(o,c){let f=e.value.get(o);return f?P(c,f)?{valid:!0}:{valid:!1}:void 0}function P(o,c){let f=Object.keys(c),M=Object.keys(o);return M.length!==f.length||!M.every(w=>f.includes(w))?!1:M.every(w=>{let _=o[w],E=c[w];return !E||!_||typeof _=="function"||typeof E=="function"||typeof _=="number"||typeof _=="boolean"?!1:_._params?_._params?.every((v,b)=>{if(typeof E=="number"||typeof E=="boolean")return !0;{let k=W(E._params),V=W(_._params);return k?.[b]===V?.[b]}}):!0})}function j(o){let c=l.value.get(o);if(c)return c;{let f=vue.ref(!1),M=vue.ref(!0),N=vue.ref({}),w=vue.ref(!1);return l.value.set(o,{$pending:f,$valid:M,$metadata:N,$validating:w}),{$pending:f,$valid:M,$metadata:N,$validating:w}}}return vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),p.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:x,getDirtyState:O,trySetRuleStatusRef:j,getFieldsEntry:m,getCollectionsEntry:d,getArrayStatus:g,addArrayStatus:h,deleteArrayStatus:C,arrayStatusStorage:p}}function L(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function tt(e,r){return X(e.value)&&X(r.value)&&!Object.entries(r.value).some(t=>ue(t))}function rt(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function nt(e){return !!e.value&&X(e.value)}function ue(e){return X(e)&&"_validator"in e}function ce(e){return typeof e.value!="function"}function at(e){return X(e)&&"$fields"in e}function Pe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function lt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ot({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:p,storage:m,$debounce:d,modifiers:h}){let g=vue.effectScope(),C={},F,O=vue.ref(!1),{$pending:a,$valid:x,$metadata:P,$validating:j}=m.trySetRuleStatusRef(`${p}.${n}`);function o(){g=vue.effectScope(),C=g.run(()=>{let E=vue.computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:x.value,$invalid:!x.value,$pending:a.value},$params:I.value,...P.value})),v=vue.computed(()=>ce(t)?typeof t.value.active=="function"?t.value.active(E.value):!!t.value.active:!0);function b(i){let $="",u=r?r[n]?.[i]:void 0;if(u&&(typeof u=="function"?$=u(E.value):$=u),ce(t)){let S=`_${i}_patched`;u&&!t.value[S]||(typeof t.value[i]=="function"?$=t.value[i](E.value):$=t.value[i]??"");}return $}let k=vue.computed(()=>{let i=b("message");return L(i)&&(i="This field is not valid"),i}),V=vue.computed(()=>b("tooltip")),Y=vue.computed(()=>ce(t)&&t.value.type?t.value.type:n),D=vue.computed(()=>ce(t)?t.value.validator:t.value),I=vue.computed(()=>typeof t.value=="function"?[]:W(t.value._params??[])),s=vue.computed(()=>`${p}.${Y.value}`);return {$active:v,$message:k,$type:Y,$validator:D,$params:I,$path:s,$tooltip:V}}),F=vue.watch(C?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&N();});}o();function c(){x.value=!0,e.$dirty.value&&(a.value=!0);}async function f(){let E=!1;try{let v=C.$validator.value,b=v(l.value,...C.$params.value),k=l.value;c();let V;if(b instanceof Promise?V=await b:V=b,l.value!==k)return !0;if(typeof V=="boolean")E=V;else {let{$valid:Y,...D}=V;E=Y,P.value=D;}}catch{E=!1;}finally{a.value=!1;}return E}let M=ye(f,d??200);async function N(){try{j.value=!0;let E=!1;if(ue(t.value)&&t.value._async)E=await M();else {let v=C.$validator.value,b=v(l.value,...C.$params.value);if(b instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(b!=null)if(typeof b=="boolean")E=b;else {let{$valid:k,...V}=b;E=k,P.value=V;}}return x.value=E,E}catch{return !1}finally{j.value=!1;}}function w(){x.value=!0,P.value={},a.value=!1,j.value=!1,o();}function _(){F(),g.stop(),g=vue.effectScope();}return vue.reactive({...C,$pending:a,$valid:x,$metadata:P,$haveAsync:O,$validating:j,$validate:N,$unwatch:_,$watch:o,$reset:w})}function Se({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:p,options:m,externalErrors:d,onUnwatch:h,$isArray:g,initialState:C,shortcuts:F}){let O=vue.effectScope(),a,x=[],P,j,o,c,f=()=>{};function M(){let y=r.value,T=p.checkRuleDeclEntry(n,y);b.value=Object.fromEntries(Object.entries(y).filter(([R])=>R.startsWith("$"))),_(),v.value=Object.fromEntries(Object.entries(r.value).filter(([R])=>!R.startsWith("$")).map(([R,A])=>{if(A){let z=vue.toRef(()=>A);return [R,ot({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:z,ruleKey:R,state:e,path:n,storage:p,$debounce:b.value.$debounce})]}return []}).filter(R=>!!R.length)),a.processShortcuts(),N(),T?.valid!=null&&(a.$dirty.value=p.getDirtyState(n),a.$dirty.value&&f()),p.addRuleDeclEntry(n,y);}function N(){f=a.$debounce.value?ye(E,a.$debounce.value??a.$haveAnyAsyncRule?100:0):E;}function w(){v.value&&Object.entries(v.value).forEach(([y,T])=>{T.$unwatch();}),o(),a.$dirty.value&&p.setDirtyEntry(n,a.$dirty.value),P?.(),j?.(),O.stop(),O=vue.effectScope(),x.forEach(y=>y.stop()),x=[],h?.(),c?.();}function _(){v.value&&Object.entries(v.value).forEach(([y,T])=>{T.$watch();}),a=O.run(()=>{let y=vue.ref(!1),T=vue.ref(!1),R=vue.computed(()=>y.value),A=vue.computed(()=>b.value.$debounce),z=vue.computed(()=>b.value.$lazy!=null?b.value.$lazy:vue.unref(m.lazy)),te=vue.computed(()=>ke.value===!0?!1:b.value.$rewardEarly!=null?b.value.$rewardEarly:vue.unref(m.rewardEarly)),yt=vue.computed(()=>b.value.$clearExternalErrorsOnChange!=null?b.value.$clearExternalErrorsOnChange:vue.unref(m.clearExternalErrorsOnChange)),ke=vue.computed(()=>b.value.$autoDirty!=null?b.value.$autoDirty:vue.unref(m.autoDirty)),We=vue.computed(()=>Object.entries(v.value).some(([Q,Z])=>Z.$validating)),be=vue.computed(()=>me.value&&!de.value&&y.value),Ue=vue.computed(()=>be.value?Pe({field:{$dirty:y.value,$externalErrors:d?.value,$rules:v.value}}):[]),Be=vue.computed(()=>lt({field:{$rules:v.value}})),He=vue.computed(()=>Pe({field:{$dirty:y.value,$externalErrors:d?.value,$rules:v.value},silent:!0})),Le=vue.computed(()=>!(me.value||de.value)),de=vue.computed(()=>T.value||!te.value?Object.entries(v.value).some(([Q,Z])=>Z.$pending):!1),me=vue.computed(()=>d?.value?.length?!0:L(v.value)?!1:!te.value||te.value&&T.value?Object.entries(v.value).some(([Q,Z])=>!Z.$valid):!1),qe=vue.computed(()=>l),Te=vue.computed(()=>d?.value?.length||L(v.value)?!1:y.value&&!L(e.value)&&!We.value?Object.values(v.value).every(Q=>Q.$valid&&Q.$active):!1),vt=vue.computed(()=>Object.entries(v.value).some(([Q,Z])=>Z.$haveAsync));function gt(){F?.fields&&Object.entries(F.fields).forEach(([Q,Z])=>{let Je=vue.effectScope();ze[Q]=Je.run(()=>{let Ye=vue.ref();return vue.watchEffect(()=>{Ye.value=Z(vue.reactive({$dirty:y,$externalErrors:d?.value??[],$value:e,$rules:v,$error:be,$pending:de,$invalid:me,$valid:Te,$errors:Ue,$ready:Le,$silentErrors:He,$anyDirty:R,$tooltips:Be,$name:qe}));}),Ye}),x.push(Je);});}let ze={};return vue.watch(Te,Q=>{Q&&(T.value=!1);}),{$error:be,$pending:de,$invalid:me,$valid:Te,$debounce:A,$lazy:z,$errors:Ue,$ready:Le,$silentErrors:He,$rewardEarly:te,$autoDirty:ke,$clearExternalErrorsOnChange:yt,$anyDirty:R,$name:qe,$haveAnyAsyncRule:vt,$shortcuts:ze,$validating:We,$tooltips:Be,$dirty:y,triggerPunishment:T,processShortcuts:gt}}),P=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&M(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&f(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&s();},{deep:g?!0:ve?1:!0}),o=vue.watch(a.$dirty,()=>{p.setDirtyEntry(n,a.$dirty.value);}),j=vue.watch(a.$valid,y=>{a.$rewardEarly.value&&y&&(a.triggerPunishment.value=!1);}),c=vue.watch(a.$haveAnyAsyncRule,N);}function E(){Object.values(v.value).forEach(y=>{y.$validate();});}let v=vue.ref({}),b=vue.ref({});M();function k(){s(),a.$dirty.value=!1,p.setDirtyEntry(n,!1),Object.entries(v.value).forEach(([y,T])=>{T.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(v.value).forEach(y=>y.$validate());}function V(y=!0,T=!1){a.$dirty.value||(a.$dirty.value=!0),T&&y?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&f():y&&f();}async function Y(){try{let y=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:y};return L(v.value)?{result:!0,data:y}:{result:(await Promise.allSettled(Object.entries(v.value).map(([A,z])=>z.$validate()))).every(A=>A.status==="fulfilled"?A.value===!0:!1),data:y}}catch{return {result:!1,data:e.value}}}function D(){w(),e.value=U(C),k();}function I(y=!0){return a.$dirty.value?e.value:y?{_null:!0}:null}function s(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&f();let{$shortcuts:i,$validating:$,$autoDirty:u,$rewardEarly:S,$clearExternalErrorsOnChange:q,$haveAnyAsyncRule:H,$debounce:K,$lazy:ie,...ne}=a;return vue.reactive({...ne,$externalErrors:d,$value:e,$rules:v,...i,$reset:k,$touch:V,$validate:Y,$unwatch:w,$watch:_,$resetAll:D,$extractDirtyFields:I,$clearExternalErrors:s})}function Ae({$id:e,path:r,index:t,options:n,storage:l,stateValue:p,customMessages:m,rules:d,externalErrors:h,initialState:g,shortcuts:C,fieldName:F}){let O=d.$key?d.$key:ge(),a=`${r}.${String(O)}`;typeof p.value=="object"&&p.value!=null&&(p.value.$id?a=`${r}.${p.value.$id}`:Object.defineProperties(p.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let x=pe({state:p,rulesDef:vue.toRef(()=>d),customMessages:m,path:a,storage:l,options:n,externalErrors:vue.toRef(h?.value??[],t),initialState:g?.[t],shortcuts:C,fieldName:F});if(x){let P=p.value?.$id;x.$id=P??String(O),l.addArrayStatus(e,x.$id,x);}return x}function ct({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:p,externalErrors:m,initialState:d,shortcuts:h,fieldName:g}){let C=vue.effectScope(),F,O=vue.effectScope(),a,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let P=vue.ref(),j=vue.ref(e.value),o,c=vue.ref({}),f=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(i=>ue(i)):!1)})),M(),w();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(P.value=ge(),Object.defineProperties(e.value,{$id:{value:P.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(P.value=e.value.$id)),!a.isPrimitiveArray.value&&(j.value=c.value.$value,Array.isArray(e.value)?f.value=e.value.map((s,i)=>{let{scope:$,unwrapped:u}=Ce(r.value.$each,vue.toRef(()=>s),i);$&&x.push($);let S=Ae({$id:P.value,path:n,customMessages:t,rules:u??{},stateValue:vue.toRef(()=>s),index:i,options:p,storage:l,externalErrors:vue.toRef(m?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:g});return S||null}).filter(s=>!!s):f.value=[],c.value=Se({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:p,externalErrors:vue.toRef(m?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:g}));}function N(){if(Array.isArray(e.value)){let s=U(f.value);f.value=e.value.map((i,$)=>{let u=vue.toRef(()=>i);if(i.$id&&f.value.find(S=>S.$id===i.$id)){let S=l.getArrayStatus(P.value,i.$id);return S?(S.$value=u,S):null}else {let{scope:S,unwrapped:q}=Ce(r.value.$each,u,$);if(S&&x.push(S),q){let H=Ae({$id:P.value,path:n,customMessages:t,rules:q,stateValue:u,index:$,options:p,storage:l,externalErrors:vue.toRef(m?.value??{},"$each"),initialState:d?.[$],shortcuts:h,fieldName:g});return H||null}}}).filter(i=>!!i),s.filter(i=>!e.value.find($=>i.$id===$.$id)).forEach((i,$)=>{l.deleteArrayStatus(P.value,$.toString());});}else f.value=[];}function w(){o=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():N();},{deep:ve?1:!0,flush:"pre"}),C=vue.effectScope(),F=C.run(()=>{let s=vue.computed(()=>c.value.$dirty&&f.value.every(R=>R.$dirty)),i=vue.computed(()=>c.value.$anyDirty||f.value.some(R=>R.$dirty)),$=vue.computed(()=>c.value.$invalid||f.value.some(R=>R.$invalid)),u=vue.computed(()=>(L(c.value.$rules)?!0:c.value.$valid)&&f.value.every(R=>R.$valid)),S=vue.computed(()=>c.value.$error||f.value.some(R=>R.$error)),q=vue.computed(()=>!($.value||H.value)),H=vue.computed(()=>c.value.$pending||f.value.some(R=>R.$pending)),K=vue.computed(()=>({$self:c.value.$errors,$each:f.value.map(R=>R.$errors)})),ie=vue.computed(()=>({$self:c.value.$silentErrors,$each:f.value.map(R=>R.$silentErrors)})),ne=vue.computed(()=>g);function y(){h?.collections&&Object.entries(h?.collections).forEach(([R,A])=>{let z=vue.effectScope();T[R]=z.run(()=>{let te=vue.ref();return vue.watchEffect(()=>{te.value=A(vue.reactive({$dirty:s,$error:S,$pending:H,$invalid:$,$valid:u,$errors:K,$ready:q,$silentErrors:ie,$anyDirty:i,$name:ne,$each:f,$field:c,$value:e}));}),te}),x.push(z);});}let T={};return y(),{$dirty:s,$anyDirty:i,$invalid:$,$valid:u,$error:S,$pending:H,$errors:K,$silentErrors:ie,$ready:q,$name:ne,$shortcuts:T}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),o());}function _(){o&&o(),c.value&&c.value.$unwatch(),f.value&&f.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),C.stop(),C=vue.effectScope(),O.stop(),O=vue.effectScope(!0),x.forEach(s=>s.stop()),x=[];}function E(s=!0,i=!1){c.value.$touch(s,i),f.value.forEach($=>{$.$touch(s,i);});}function v(){c.value.$reset(),f.value.forEach(s=>{s.$reset();});}async function b(){let s=e.value;try{return {result:(await Promise.allSettled([c.value.$validate(),...f.value.map(u=>u.$validate())])).every(u=>u.status==="fulfilled"?u.value.result===!0:!1),data:s}}catch{return {result:!1,data:s}}}function k(){c.value.$clearExternalErrors(),f.value.forEach(s=>{s.$clearExternalErrors();});}function V(s=!0){let i=f.value.map($=>{if(at($))return $.$extractDirtyFields(s)});return s&&i.every($=>L($))&&(i=[]),i}function Y(){_(),e.value=U(d),v();}let{$shortcuts:D,...I}=F;return vue.reactive({$field:c,...I,...D,$each:f,$value:e,$validate:b,$unwatch:_,$watch:w,$touch:E,$reset:v,$resetAll:Y,$extractDirtyFields:V,$clearExternalErrors:k})}function je({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:p,initialState:m,fieldName:d,...h}){let g=vue.effectScope(),C,F=[],O=null,a=null,x=null;async function j(D=!0){let I=Object.entries(e.value),s=Object.fromEntries(I.filter(([u,S])=>!!S).map(([u,S])=>{if(S){let q=vue.toRef(r.value,u),H=vue.toRef(()=>S),K=vue.toRef(l?.value??{},u);return [u,pe({state:q,rulesDef:H,path:t?`${t}.${u}`:u,externalErrors:K,initialState:m?.[u],fieldName:u,...h})]}return []})),i=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([u,S])=>!(u in e.value)&&!!S).map(([u])=>{let S=vue.toRef(r.value,u);return [u,pe({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${u}`:u,externalErrors:vue.toRef(l?.value??{},u),initialState:m?.[u],fieldName:u,...h})]})),$=Object.fromEntries(Object.entries(r.value).filter(([u])=>!(u in e.value)&&!(u in(i.value??{}))).map(([u])=>{let S=vue.toRef(r.value,u);return [u,pe({state:S,rulesDef:vue.computed(()=>({})),path:t?`${t}.${u}`:u,externalErrors:vue.toRef(l?.value??{},u),initialState:m?.[u],fieldName:u,...h})]}));o.value={...s,...i,...$},D&&N();}let o=h.storage.getFieldsEntry(t);j();function c(){a?.(),Object.values(o.value).forEach(D=>{D.$reset();}),M();}function f(D=!0,I=!1){Object.values(o.value).forEach(s=>{s.$touch(D,I);});}function M(){l?.value&&(a=vue.watch(l,()=>{w(),j();},{deep:!0}));}function N(){n&&(O=vue.watch(n,()=>{w(),j();},{deep:!0,flush:"post"}),M()),x=vue.watch(r,()=>{w(),j(),f(!0,!0);},{flush:"sync"}),g=vue.effectScope(),C=g.run(()=>{let D=vue.computed({get:()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([T,R])=>R?.$dirty),set(){}}),I=vue.computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$dirty),set(){}}),s=vue.computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$invalid),set(){}}),i=vue.computed({get:()=>Object.entries(o.value).every(([T,R])=>R?.$valid),set(){}}),$=vue.computed({get:()=>I.value&&!S.value&&s.value,set(){}}),u=vue.computed({get:()=>vue.unref(h.options.autoDirty)?I.value&&!(s.value||S.value):!(s.value||S.value),set(){}}),S=vue.computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$pending),set(){}}),q=vue.computed({get:()=>Object.fromEntries(Object.entries(o.value).map(([T,R])=>[T,R?.$errors])),set(){}}),H=vue.computed({get:()=>Object.fromEntries(Object.entries(o.value).map(([T,R])=>[T,R?.$silentErrors])),set(){}}),K=vue.computed({get:()=>d,set(){}});function ie(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([T,R])=>{let A=vue.effectScope();y[T]=A.run(()=>{let z=vue.ref();return vue.watchEffect(()=>{z.value=R(vue.reactive({$dirty:D,$value:r,$error:$,$pending:S,$invalid:s,$valid:i,$ready:u,$anyDirty:I,$name:K,$silentErrors:H,$errors:q,$fields:o}));}),z}),F.push(A);});}let ne=vue.computed({get:()=>p?Object.fromEntries(Object.entries(p?.(o.value)??{}).map(([T,R])=>R.length?[T,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(A=>[A,Qe(R,A)])),...Object.fromEntries(["$errors","$silentErrors"].map(A=>[A,Xe(R,A)]))}]:[])):{},set(){}}),y={};return ie(),{$dirty:D,$anyDirty:I,$invalid:s,$valid:i,$error:$,$pending:S,$errors:q,$silentErrors:H,$ready:u,$name:K,$shortcuts:y,$groups:ne}});}function w(){O?.(),a?.(),x?.(),F.forEach(D=>D.stop()),F=[],g.stop(),o.value&&Object.entries(o.value).forEach(([D,I])=>{I.$unwatch();});}function _(){Object.entries(o.value).forEach(([D,I])=>{I.$clearExternalErrors();});}async function E(){w(),r.value=U({...m??{}}),c(),j();}function v(D){return D.filter(([I,s])=>X(s)?!(s&&typeof s=="object"&&"_null"in s)&&!L(s):Array.isArray(s)?s.length:!0)}function b(D=!0){let I=Object.entries(o.value).map(([s,i])=>[s,i.$extractDirtyFields(D)]);return D&&(I=v(I)),Object.fromEntries(I)}async function k(){try{let D=r.value;return {result:(await Promise.allSettled(Object.values(o.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:D}}catch{return {result:!1,data:r.value}}}let{$shortcuts:V,...Y}=C;return vue.reactive({...Y,...V,$fields:o,$value:r,$resetAll:E,$reset:c,$touch:f,$validate:k,$unwatch:w,$watch:N,$clearExternalErrors:_,$extractDirtyFields:b})}function pe({rulesDef:e,externalErrors:r,...t}){return rt(e,t.state)?ct({rulesDef:e,externalErrors:r,...t}):tt(t.state,e)&&et(t.state)?je({rulesDef:e,externalErrors:r,...t}):nt(e)?Se({rulesDef:e,externalErrors:r,...t}):null}function _e({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:p}){let m=Ie(),d=vue.ref();return d.value=je({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:m,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:p,fieldName:"root",path:""}),vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function Ve(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(p,m,d){let h=vue.isRef(m)?m:vue.computed(typeof m=="function"?m:()=>m),g={...n,...d},C=vue.isRef(p)?p:vue.ref(p),F={...U(C.value)};return {r$:_e({scopeRules:h,state:C,options:g,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var dt=Ve();function Ge(){function e(r,t){return t}return e}var Ne=Ge();function mt({rules:e,modifiers:r,shortcuts:t}){let n=Ve(e,r,t),l=Ge();return {useRegle:n,inferRules:l}}
2
- exports.InternalRuleType=Ee;exports.createRule=xe;exports.defineRegleConfig=mt;exports.inferRules=Ne;exports.unwrapRuleParameters=W;exports.useRegle=dt;
1
+ 'use strict';var vue=require('vue');function z(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Ke=Symbol("regle-rule");var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function et(e,r){return e.some(t=>t[r])}function tt(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function B(e){try{return e.map(r=>vue.toValue(r))}catch{return []}}function rt(e){return e.map(r=>r instanceof Function?vue.computed(r):vue.isRef(r)?r:vue.toRef(()=>r))}function nt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Ce(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...S){return e.validator(d,...B(S.length?S:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:B(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:B(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:B(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let S=e.validator(d,...B(r)),$;return S instanceof Promise?S.then(x=>($=x,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=S,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:rt(r),_brand:Ke}}function Ie(e){if(typeof e.validator=="function"){let t=Ce(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(nt(e.validator)>1){let l=function(...R){return Ce(e,...R)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function at(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function L(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>L(n)))),t=="Map"&&(r=new Map([...e].map(n=>[L(n[0]),L(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,Ct(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=L(e[n]);}return r}function Ct(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Pe(e,r,t){let n=vue.effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function $e(e,r,t){let n,l=(...R)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...R])).then(y);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Pt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let R=Number(t[l]),y=Number(n[l]);if(R>y)return 1;if(y>R)return -1;if(!isNaN(R)&&isNaN(y))return 1;if(isNaN(R)&&!isNaN(y))return -1}return 0}var ge=Pt(vue.version,"3.5.0")!==-1;function wt(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?wt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function we(){let e=vue.shallowRef(new Map),r=vue.shallowRef(new Map),t=vue.shallowRef(new Map),n=vue.shallowRef(new Map),l=vue.shallowRef(new Map),R=vue.shallowRef(new Map);function y(u){let s=r.value.get(u);if(s)return s;{let c=vue.ref({});return r.value.set(u,c),c}}function d(u){let s=t.value.get(u);if(s)return s;{let c=vue.ref([]);return t.value.set(u,c),c}}function S(u,s,c){R.value.set(`${u}-${s}`,c);}function $(u,s){return R.value.get(`${u}-${s}`)}function x(u,s){u&&s!=null&&R.value.delete(`${u}-${s}`);}function F(u,s){n.value.set(u,s);}function O(u){return n.value.get(u)??!1}function a(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),j=Object.keys(u);return j.length!==c.length||!j.every(_=>c.includes(_))?!1:j.every(_=>{let P=u[_],b=s[_];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((W,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=B(b._params),V=B(P._params);return I?.[m]===V?.[m]}}):!0})}function M(u){let s=l.value.get(u);if(s)return s;{let c=vue.ref(!1),j=vue.ref(!0),k=vue.ref({}),_=vue.ref(!1);return l.value.set(u,{$pending:c,$valid:j,$metadata:k,$validating:_}),{$pending:c,$valid:j,$metadata:k,$validating:_}}}return vue.onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),R.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:E,getDirtyState:O,trySetRuleStatusRef:M,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:S,deleteArrayStatus:x,arrayStatusStorage:R}}function lt(e,r){return Z(e.value)&&Z(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function ot(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function ut(e){return !!e.value&&Z(e.value)}function ce(e){return Z(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function it(e){return Z(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function st({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ct({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:R,storage:y,$debounce:d,modifiers:S}){let $=vue.effectScope(),x={},F,O=vue.ref(!1),{$pending:a,$valid:E,$metadata:C,$validating:M}=y.trySetRuleStatusRef(`${R}.${n}`);function u(){$=vue.effectScope(),x=$.run(()=>{let b=vue.computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:a.value},$params:D.value,...C.value})),W=vue.computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function m(o){let i="",g=r?r[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),fe(t)){let f=`_${o}_patched`;g&&!t.value[f]||(typeof t.value[o]=="function"?i=t.value[o](b.value):i=t.value[o]??"");}return i}let I=vue.computed(()=>{let o=m("message");return z(o)&&(o="This field is not valid"),o}),V=vue.computed(()=>m("tooltip")),Q=vue.computed(()=>fe(t)&&t.value.type?t.value.type:n),K=vue.computed(()=>fe(t)?t.value.validator:t.value),D=vue.computed(()=>typeof t.value=="function"?[]:B(t.value._params??[])),w=vue.computed(()=>`${R}.${Q.value}`);return {$active:W,$message:I,$type:Q,$validator:K,$params:D,$path:w,$tooltip:V}}),F=vue.watch(x?.$params,()=>{(S.$autoDirty.value||S.$rewardEarly.value&&e.$error.value)&&k();});}u();function s(){E.value=!0,e.$dirty.value&&(a.value=!0);}async function c(){let b=!1;try{let W=x.$validator.value,m=W(l.value,...x.$params.value),I=l.value;s();let V;if(m instanceof Promise?V=await m:V=m,l.value!==I)return !0;if(typeof V=="boolean")b=V;else {let{$valid:Q,...K}=V;b=Q,C.value=K;}}catch{b=!1;}finally{a.value=!1;}return b}let j=$e(c,d??200);async function k(){try{M.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await j();else {let W=x.$validator.value,m=W(l.value,...x.$params.value);if(m instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...V}=m;b=I,C.value=V;}}return E.value=b,b}catch{return !1}finally{M.value=!1;}}function _(){E.value=!0,C.value={},a.value=!1,M.value=!1,u();}function P(){F(),$.stop(),$=vue.effectScope();}return vue.reactive({...x,$pending:a,$valid:E,$metadata:C,$haveAsync:O,$validating:M,$validate:k,$unwatch:P,$watch:u,$reset:_})}function be({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:R,options:y,externalErrors:d,onUnwatch:S,$isArray:$,initialState:x,shortcuts:F}){let O=vue.effectScope(),a,E=[],C,M,u,s,c=()=>{};function j(){let v=r.value,A=R.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([h])=>h.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(r.value).filter(([h])=>!h.startsWith("$")).map(([h,p])=>{if(p){let N=vue.toRef(()=>p);return [h,ct({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:N,ruleKey:h,state:e,path:n,storage:R,$debounce:I.value.$debounce})]}return []}).filter(h=>!!h.length)),a.processShortcuts(),k(),A?.valid!=null&&(a.$dirty.value=R.getDirtyState(n),a.$dirty.value&&c()),R.addRuleDeclEntry(n,v);}function k(){c=a.$debounce.value?$e(W,a.$debounce.value??a.$haveAnyAsyncRule?100:0):W;}function _(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$unwatch();}),u(),a.$dirty.value&&R.setDirtyEntry(n,a.$dirty.value),C?.(),M?.(),O.stop(),O=vue.effectScope(),E.forEach(v=>v.stop()),E=[],S?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$watch();}),a=O.run(()=>{let v=vue.ref(!1),A=vue.ref(!1),h=vue.computed(()=>v.value),p=vue.computed(()=>I.value.$debounce),N=vue.computed(()=>I.value.$lazy!=null?I.value.$lazy:vue.unref(y.lazy)),X=vue.computed(()=>Ue.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:vue.unref(y.rewardEarly)),me=vue.computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:vue.unref(y.clearExternalErrorsOnChange)),Ue=vue.computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:vue.unref(y.autoDirty)),Be=vue.computed(()=>Object.entries(m.value).some(([q,te])=>te.$validating)),He=vue.computed({get:()=>e.value,set(q){C(),e.value=q,b();}}),Ee=vue.computed(()=>ve.value&&!ye.value&&v.value),Le=vue.computed(()=>Ee.value?Oe({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),qe=vue.computed(()=>st({field:{$rules:m.value}})),ze=vue.computed(()=>Oe({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Je=vue.computed(()=>!(ve.value||ye.value)),ye=vue.computed(()=>A.value||!X.value?Object.entries(m.value).some(([q,te])=>te.$pending):!1),ve=vue.computed(()=>d?.value?.length?!0:z(m.value)?!1:!X.value||X.value&&A.value?Object.entries(m.value).some(([q,te])=>!te.$valid):!1),Ye=vue.computed(()=>l),De=vue.computed(()=>d?.value?.length||z(m.value)?!1:v.value&&!z(e.value)&&!Be.value?Object.values(m.value).every(q=>q.$valid&&q.$active):!1),St=vue.computed(()=>Object.entries(m.value).some(([q,te])=>te.$haveAsync));function ht(){F?.fields&&Object.entries(F.fields).forEach(([q,te])=>{let Xe=vue.effectScope();Qe[q]=Xe.run(()=>{let Ze=vue.ref();return vue.watchEffect(()=>{Ze.value=te(vue.reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ee,$pending:ye,$invalid:ve,$valid:De,$errors:Le,$ready:Je,$silentErrors:ze,$anyDirty:h,$tooltips:qe,$name:Ye}));}),Ze}),E.push(Xe);});}let Qe={};return vue.watch(De,q=>{q&&(A.value=!1);}),{$error:Ee,$pending:ye,$invalid:ve,$valid:De,$debounce:p,$lazy:N,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:Ue,$clearExternalErrorsOnChange:me,$anyDirty:h,$name:Ye,$haveAnyAsyncRule:St,$shortcuts:Qe,$validating:Be,$tooltips:qe,$dirty:v,triggerPunishment:A,processShortcuts:ht,$silentValue:He}}),b(),u=vue.watch(a.$dirty,()=>{R.setDirtyEntry(n,a.$dirty.value);}),M=vue.watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),s=vue.watch(a.$haveAnyAsyncRule,k);}function b(){C=vue.watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&j(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:ge?1:!0});}function W(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=vue.ref({}),I=vue.ref({});j();function V(){o(),a.$dirty.value=!1,R.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:v};return z(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,N])=>N.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function D(){_(),e.value=L(x),V();}function w(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:f,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=a;return vue.reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:V,$touch:Q,$validate:K,$unwatch:_,$watch:P,$resetAll:D,$extractDirtyFields:w,$clearExternalErrors:o})}function Me({$id:e,path:r,index:t,options:n,storage:l,stateValue:R,customMessages:y,rules:d,externalErrors:S,initialState:$,shortcuts:x,fieldName:F}){let O=d.$key?d.$key:Se(),a=`${r}.${String(O)}`;typeof R.value=="object"&&R.value!=null&&(R.value.$id?a=`${r}.${R.value.$id}`:Object.defineProperties(R.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let E=de({state:R,rulesDef:vue.toRef(()=>d),customMessages:y,path:a,storage:l,options:n,externalErrors:vue.toRef(S?.value??[],t),initialState:$?.[t],shortcuts:x,fieldName:F});if(E){let C=R.value?.$id;E.$id=C??String(O),l.addArrayStatus(e,E.$id,E);}return E}function dt({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:y,initialState:d,shortcuts:S,fieldName:$}){let x=vue.effectScope(),F,O=vue.effectScope(),a,E=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let C=vue.ref(),M=vue.ref(e.value),u,s=vue.ref({}),c=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(i=>ce(i)):!1)})),j(),P();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=Se(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!a.isPrimitiveArray.value&&(M.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:f}=Pe(r.value.$each,vue.toRef(()=>o),i);g&&E.push(g);let T=Me({$id:C.value,path:n,customMessages:t,rules:f??{},stateValue:vue.toRef(()=>o),index:i,options:R,storage:l,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:S,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=be({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:vue.toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:S,fieldName:$}));}function k(){if(Array.isArray(e.value)){let o=L(c.value);c.value=e.value.map((i,g)=>{let f=vue.toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=l.getArrayStatus(C.value,i.$id);return T?(T.$value=f,T):null}else {let{scope:T,unwrapped:U}=Pe(r.value.$each,f,g);if(T&&E.push(T),U){let Y=Me({$id:C.value,path:n,customMessages:t,rules:U,stateValue:f,index:g,options:R,storage:l,externalErrors:vue.toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:S,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function _(){u=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():k();},{deep:ge?1:!0,flush:"pre"});}function P(){_(),x=vue.effectScope(),F=x.run(()=>{let o=vue.computed({get:()=>e.value,set(p){u(),e.value=p,_();}}),i=vue.computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=vue.computed(()=>s.value.$anyDirty||c.value.some(p=>p.$dirty)),f=vue.computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=vue.computed(()=>(z(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=vue.computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=vue.computed(()=>!(f.value||ee.value)),ee=vue.computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=vue.computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=vue.computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=vue.computed(()=>$);function A(){S?.collections&&Object.entries(S?.collections).forEach(([p,N])=>{let X=vue.effectScope();h[p]=X.run(()=>{let me=vue.ref();return vue.watchEffect(()=>{me.value=N(vue.reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:f,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),me}),E.push(X);});}let h={};return A(),{$dirty:i,$anyDirty:g,$invalid:f,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:h,$silentValue:o}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),x.stop(),x=vue.effectScope(),O.stop(),O=vue.effectScope(!0),E.forEach(o=>o.stop()),E=[];}function W(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(f=>f.$validate())])).every(f=>f.status==="fulfilled"?f.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function V(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(it(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>z(g))&&(i=[]),i}function K(){b(),e.value=L(d),m();}let{$shortcuts:D,...w}=F;return vue.reactive({$field:s,...w,...D,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:W,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:V})}function Ve({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:R,initialState:y,fieldName:d,...S}){let $=vue.effectScope(),x,F=[],O=null,a=null,E=null;async function M(D=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([f,T])=>!!T).map(([f,T])=>{if(T){let U=vue.toRef(r.value,f),Y=vue.toRef(()=>T),ee=vue.toRef(l?.value??{},f);return [f,de({state:U,rulesDef:Y,path:t?`${t}.${f}`:f,externalErrors:ee,initialState:y?.[f],fieldName:f,...S})]}return []})),i=Object.fromEntries(Object.entries(vue.unref(l)??{}).filter(([f,T])=>!(f in e.value)&&!!T).map(([f])=>{let T=vue.toRef(r.value,f);return [f,de({state:T,rulesDef:vue.computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:vue.toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]})),g=Object.fromEntries(Object.entries(r.value).filter(([f])=>!(f in e.value)&&!(f in(i.value??{}))).map(([f])=>{let T=vue.toRef(r.value,f);return [f,de({state:T,rulesDef:vue.computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:vue.toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]}));u.value={...o,...i,...g},D&&_();}let u=S.storage.getFieldsEntry(t);M();function s(){a?.(),Object.values(u.value).forEach(D=>{D.$reset();}),j();}function c(D=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(D,w);});}function j(){l?.value&&(a=vue.watch(l,()=>{P(),M();},{deep:!0}));}function k(){E=vue.watch(r,()=>{P(),M(),c(!0,!0);},{flush:"sync"});}function _(){n&&(O?.(),O=vue.watch(n,()=>{P(),M();},{deep:!0,flush:"post"}),j()),k(),$=vue.effectScope(),x=$.run(()=>{let D=vue.computed({get:()=>r.value,set(h){P(),r.value=h,M();}}),w=vue.computed({get:()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([h,p])=>p?.$dirty),set(){}}),o=vue.computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$dirty),set(){}}),i=vue.computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$invalid),set(){}}),g=vue.computed({get:()=>Object.entries(u.value).every(([h,p])=>p?.$valid),set(){}}),f=vue.computed({get:()=>o.value&&!U.value&&i.value,set(){}}),T=vue.computed({get:()=>vue.unref(S.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value),set(){}}),U=vue.computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$pending),set(){}}),Y=vue.computed({get:()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$errors])),set(){}}),ee=vue.computed({get:()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$silentErrors])),set(){}}),ae=vue.computed({get:()=>d,set(){}});function le(){S.shortcuts?.nested&&Object.entries(S.shortcuts.nested).forEach(([h,p])=>{let N=vue.effectScope();A[h]=N.run(()=>{let X=vue.ref();return vue.watchEffect(()=>{X.value=p(vue.reactive({$dirty:w,$value:r,$silentValue:D,$error:f,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),F.push(N);});}let v=vue.computed({get:()=>R?Object.fromEntries(Object.entries(R?.(u.value)??{}).map(([h,p])=>p.length?[h,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(N=>[N,et(p,N)])),...Object.fromEntries(["$errors","$silentErrors"].map(N=>[N,tt(p,N)]))}]:[])):{},set(){}}),A={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:f,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:A,$groups:v,$silentValue:D}});}function P(){O?.(),a?.(),E?.(),F.forEach(D=>D.stop()),F=[],$.stop(),u.value&&Object.entries(u.value).forEach(([D,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([D,w])=>{w.$clearExternalErrors();});}async function W(){P(),r.value=L({...y??{}}),s(),M();}function m(D){return D.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!z(o):Array.isArray(o)?o.length:!0)}function I(D=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(D)]);return D&&(w=m(w)),Object.fromEntries(w)}async function V(){try{let D=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:D}}catch{return {result:!1,data:r.value}}}let{$shortcuts:Q,...K}=x;return vue.reactive({...K,...Q,$fields:u,$value:r,$resetAll:W,$reset:s,$touch:c,$validate:V,$unwatch:P,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return ot(e,t.state)?dt({rulesDef:e,externalErrors:r,...t}):lt(t.state,e)&&at(t.state)?Ve({rulesDef:e,externalErrors:r,...t}):ut(e)?be({rulesDef:e,externalErrors:r,...t}):null}function Ge({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:R}){let y=we(),d=vue.ref();return d.value=Ve({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:y,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:R,fieldName:"root",path:""}),vue.onScopeDispose(()=>{d.value?.$unwatch();}),vue.reactive({regle:d})}function Ne(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(R,y,d){let S=vue.isRef(y)?y:vue.computed(typeof y=="function"?y:()=>y),$={...n,...d},x=vue.isRef(R)?R:vue.ref(R),F={...L(x.value)};return {r$:Ge({scopeRules:S,state:x,options:$,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var $t=Ne();function ke(){function e(r,t){return t}return e}var We=ke();function gt({rules:e,modifiers:r,shortcuts:t}){let n=Ne(e,r,t),l=ke();return {useRegle:n,inferRules:l}}
2
+ exports.InternalRuleType=xe;exports.createRule=Ie;exports.defineRegleConfig=gt;exports.inferRules=We;exports.unwrapRuleParameters=B;exports.useRegle=$t;
@@ -1,2 +1,2 @@
1
- import {toValue,version,computed,isRef,toRef,ref,onScopeDispose,reactive,shallowRef,effectScope,unref,watch,watchEffect}from'vue';var Ee=(t=>(t.Inline="__inline",t.Async="__async",t))(Ee||{});function Qe(e,r){return e.some(t=>t[r])}function Xe(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function W(e){try{return e.map(r=>toValue(r))}catch{return []}}function Ze(e){return e.map(r=>r instanceof Function?computed(r):isRef(r)?r:toRef(()=>r))}function Ke(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(m=>m.trim()).filter(m=>m.length>0).length:0}function De(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...h){return e.validator(d,...W(h.length?h:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:W(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:W(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:W(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let h=e.validator(d,...W(r)),g;return h instanceof Promise?h.then(C=>(g=C,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)):(g=h,typeof g=="object"&&"$valid"in g?g.$valid:typeof g=="boolean"?g:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:Ze(r)}}function xe(e){if(typeof e.validator=="function"){let t=De(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ke(e.validator)>1){let l=function(...p){return De(e,...p)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function X(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function et(e){return e.value instanceof Date||e.value instanceof File?!1:X(e.value)}function U(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>U(n)))),t=="Map"&&(r=new Map([...e].map(n=>[U(n[0]),U(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,Et(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=U(e[n]);}return r}function Et(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Ce(e,r,t){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function ye(e,r,t){let n,l=(...p)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...p])).then(m);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function xt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let p=Number(t[l]),m=Number(n[l]);if(p>m)return 1;if(m>p)return -1;if(!isNaN(p)&&isNaN(m))return 1;if(isNaN(p)&&!isNaN(m))return -1}return 0}var ve=xt(version,"3.5.0")!==-1;function Ct(){return Math.floor(Math.random()*Date.now()).toString()}function ge(){return typeof window>"u"?Ct():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Ie(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),p=shallowRef(new Map);function m(o){let c=r.value.get(o);if(c)return c;{let f=ref({});return r.value.set(o,f),f}}function d(o){let c=t.value.get(o);if(c)return c;{let f=ref([]);return t.value.set(o,f),f}}function h(o,c,f){p.value.set(`${o}-${c}`,f);}function g(o,c){return p.value.get(`${o}-${c}`)}function C(o,c){o&&c!=null&&p.value.delete(`${o}-${c}`);}function F(o,c){n.value.set(o,c);}function O(o){return n.value.get(o)??!1}function a(o,c){e.value.set(o,c);}function x(o,c){let f=e.value.get(o);return f?P(c,f)?{valid:!0}:{valid:!1}:void 0}function P(o,c){let f=Object.keys(c),M=Object.keys(o);return M.length!==f.length||!M.every(w=>f.includes(w))?!1:M.every(w=>{let _=o[w],E=c[w];return !E||!_||typeof _=="function"||typeof E=="function"||typeof _=="number"||typeof _=="boolean"?!1:_._params?_._params?.every((v,b)=>{if(typeof E=="number"||typeof E=="boolean")return !0;{let k=W(E._params),V=W(_._params);return k?.[b]===V?.[b]}}):!0})}function j(o){let c=l.value.get(o);if(c)return c;{let f=ref(!1),M=ref(!0),N=ref({}),w=ref(!1);return l.value.set(o,{$pending:f,$valid:M,$metadata:N,$validating:w}),{$pending:f,$valid:M,$metadata:N,$validating:w}}}return onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),p.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:x,getDirtyState:O,trySetRuleStatusRef:j,getFieldsEntry:m,getCollectionsEntry:d,getArrayStatus:g,addArrayStatus:h,deleteArrayStatus:C,arrayStatusStorage:p}}function L(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}function tt(e,r){return X(e.value)&&X(r.value)&&!Object.entries(r.value).some(t=>ue(t))}function rt(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function nt(e){return !!e.value&&X(e.value)}function ue(e){return X(e)&&"_validator"in e}function ce(e){return typeof e.value!="function"}function at(e){return X(e)&&"$fields"in e}function Pe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function lt({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ot({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:p,storage:m,$debounce:d,modifiers:h}){let g=effectScope(),C={},F,O=ref(!1),{$pending:a,$valid:x,$metadata:P,$validating:j}=m.trySetRuleStatusRef(`${p}.${n}`);function o(){g=effectScope(),C=g.run(()=>{let E=computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:x.value,$invalid:!x.value,$pending:a.value},$params:I.value,...P.value})),v=computed(()=>ce(t)?typeof t.value.active=="function"?t.value.active(E.value):!!t.value.active:!0);function b(i){let $="",u=r?r[n]?.[i]:void 0;if(u&&(typeof u=="function"?$=u(E.value):$=u),ce(t)){let S=`_${i}_patched`;u&&!t.value[S]||(typeof t.value[i]=="function"?$=t.value[i](E.value):$=t.value[i]??"");}return $}let k=computed(()=>{let i=b("message");return L(i)&&(i="This field is not valid"),i}),V=computed(()=>b("tooltip")),Y=computed(()=>ce(t)&&t.value.type?t.value.type:n),D=computed(()=>ce(t)?t.value.validator:t.value),I=computed(()=>typeof t.value=="function"?[]:W(t.value._params??[])),s=computed(()=>`${p}.${Y.value}`);return {$active:v,$message:k,$type:Y,$validator:D,$params:I,$path:s,$tooltip:V}}),F=watch(C?.$params,()=>{(h.$autoDirty.value||h.$rewardEarly.value&&e.$error.value)&&N();});}o();function c(){x.value=!0,e.$dirty.value&&(a.value=!0);}async function f(){let E=!1;try{let v=C.$validator.value,b=v(l.value,...C.$params.value),k=l.value;c();let V;if(b instanceof Promise?V=await b:V=b,l.value!==k)return !0;if(typeof V=="boolean")E=V;else {let{$valid:Y,...D}=V;E=Y,P.value=D;}}catch{E=!1;}finally{a.value=!1;}return E}let M=ye(f,d??200);async function N(){try{j.value=!0;let E=!1;if(ue(t.value)&&t.value._async)E=await M();else {let v=C.$validator.value,b=v(l.value,...C.$params.value);if(b instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(b!=null)if(typeof b=="boolean")E=b;else {let{$valid:k,...V}=b;E=k,P.value=V;}}return x.value=E,E}catch{return !1}finally{j.value=!1;}}function w(){x.value=!0,P.value={},a.value=!1,j.value=!1,o();}function _(){F(),g.stop(),g=effectScope();}return reactive({...C,$pending:a,$valid:x,$metadata:P,$haveAsync:O,$validating:j,$validate:N,$unwatch:_,$watch:o,$reset:w})}function Se({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:p,options:m,externalErrors:d,onUnwatch:h,$isArray:g,initialState:C,shortcuts:F}){let O=effectScope(),a,x=[],P,j,o,c,f=()=>{};function M(){let y=r.value,T=p.checkRuleDeclEntry(n,y);b.value=Object.fromEntries(Object.entries(y).filter(([R])=>R.startsWith("$"))),_(),v.value=Object.fromEntries(Object.entries(r.value).filter(([R])=>!R.startsWith("$")).map(([R,A])=>{if(A){let z=toRef(()=>A);return [R,ot({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:z,ruleKey:R,state:e,path:n,storage:p,$debounce:b.value.$debounce})]}return []}).filter(R=>!!R.length)),a.processShortcuts(),N(),T?.valid!=null&&(a.$dirty.value=p.getDirtyState(n),a.$dirty.value&&f()),p.addRuleDeclEntry(n,y);}function N(){f=a.$debounce.value?ye(E,a.$debounce.value??a.$haveAnyAsyncRule?100:0):E;}function w(){v.value&&Object.entries(v.value).forEach(([y,T])=>{T.$unwatch();}),o(),a.$dirty.value&&p.setDirtyEntry(n,a.$dirty.value),P?.(),j?.(),O.stop(),O=effectScope(),x.forEach(y=>y.stop()),x=[],h?.(),c?.();}function _(){v.value&&Object.entries(v.value).forEach(([y,T])=>{T.$watch();}),a=O.run(()=>{let y=ref(!1),T=ref(!1),R=computed(()=>y.value),A=computed(()=>b.value.$debounce),z=computed(()=>b.value.$lazy!=null?b.value.$lazy:unref(m.lazy)),te=computed(()=>ke.value===!0?!1:b.value.$rewardEarly!=null?b.value.$rewardEarly:unref(m.rewardEarly)),yt=computed(()=>b.value.$clearExternalErrorsOnChange!=null?b.value.$clearExternalErrorsOnChange:unref(m.clearExternalErrorsOnChange)),ke=computed(()=>b.value.$autoDirty!=null?b.value.$autoDirty:unref(m.autoDirty)),We=computed(()=>Object.entries(v.value).some(([Q,Z])=>Z.$validating)),be=computed(()=>me.value&&!de.value&&y.value),Ue=computed(()=>be.value?Pe({field:{$dirty:y.value,$externalErrors:d?.value,$rules:v.value}}):[]),Be=computed(()=>lt({field:{$rules:v.value}})),He=computed(()=>Pe({field:{$dirty:y.value,$externalErrors:d?.value,$rules:v.value},silent:!0})),Le=computed(()=>!(me.value||de.value)),de=computed(()=>T.value||!te.value?Object.entries(v.value).some(([Q,Z])=>Z.$pending):!1),me=computed(()=>d?.value?.length?!0:L(v.value)?!1:!te.value||te.value&&T.value?Object.entries(v.value).some(([Q,Z])=>!Z.$valid):!1),qe=computed(()=>l),Te=computed(()=>d?.value?.length||L(v.value)?!1:y.value&&!L(e.value)&&!We.value?Object.values(v.value).every(Q=>Q.$valid&&Q.$active):!1),vt=computed(()=>Object.entries(v.value).some(([Q,Z])=>Z.$haveAsync));function gt(){F?.fields&&Object.entries(F.fields).forEach(([Q,Z])=>{let Je=effectScope();ze[Q]=Je.run(()=>{let Ye=ref();return watchEffect(()=>{Ye.value=Z(reactive({$dirty:y,$externalErrors:d?.value??[],$value:e,$rules:v,$error:be,$pending:de,$invalid:me,$valid:Te,$errors:Ue,$ready:Le,$silentErrors:He,$anyDirty:R,$tooltips:Be,$name:qe}));}),Ye}),x.push(Je);});}let ze={};return watch(Te,Q=>{Q&&(T.value=!1);}),{$error:be,$pending:de,$invalid:me,$valid:Te,$debounce:A,$lazy:z,$errors:Ue,$ready:Le,$silentErrors:He,$rewardEarly:te,$autoDirty:ke,$clearExternalErrorsOnChange:yt,$anyDirty:R,$name:qe,$haveAnyAsyncRule:vt,$shortcuts:ze,$validating:We,$tooltips:Be,$dirty:y,triggerPunishment:T,processShortcuts:gt}}),P=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&M(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&f(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&s();},{deep:g?!0:ve?1:!0}),o=watch(a.$dirty,()=>{p.setDirtyEntry(n,a.$dirty.value);}),j=watch(a.$valid,y=>{a.$rewardEarly.value&&y&&(a.triggerPunishment.value=!1);}),c=watch(a.$haveAnyAsyncRule,N);}function E(){Object.values(v.value).forEach(y=>{y.$validate();});}let v=ref({}),b=ref({});M();function k(){s(),a.$dirty.value=!1,p.setDirtyEntry(n,!1),Object.entries(v.value).forEach(([y,T])=>{T.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(v.value).forEach(y=>y.$validate());}function V(y=!0,T=!1){a.$dirty.value||(a.$dirty.value=!0),T&&y?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&f():y&&f();}async function Y(){try{let y=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:y};return L(v.value)?{result:!0,data:y}:{result:(await Promise.allSettled(Object.entries(v.value).map(([A,z])=>z.$validate()))).every(A=>A.status==="fulfilled"?A.value===!0:!1),data:y}}catch{return {result:!1,data:e.value}}}function D(){w(),e.value=U(C),k();}function I(y=!0){return a.$dirty.value?e.value:y?{_null:!0}:null}function s(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&f();let{$shortcuts:i,$validating:$,$autoDirty:u,$rewardEarly:S,$clearExternalErrorsOnChange:q,$haveAnyAsyncRule:H,$debounce:K,$lazy:ie,...ne}=a;return reactive({...ne,$externalErrors:d,$value:e,$rules:v,...i,$reset:k,$touch:V,$validate:Y,$unwatch:w,$watch:_,$resetAll:D,$extractDirtyFields:I,$clearExternalErrors:s})}function Ae({$id:e,path:r,index:t,options:n,storage:l,stateValue:p,customMessages:m,rules:d,externalErrors:h,initialState:g,shortcuts:C,fieldName:F}){let O=d.$key?d.$key:ge(),a=`${r}.${String(O)}`;typeof p.value=="object"&&p.value!=null&&(p.value.$id?a=`${r}.${p.value.$id}`:Object.defineProperties(p.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let x=pe({state:p,rulesDef:toRef(()=>d),customMessages:m,path:a,storage:l,options:n,externalErrors:toRef(h?.value??[],t),initialState:g?.[t],shortcuts:C,fieldName:F});if(x){let P=p.value?.$id;x.$id=P??String(O),l.addArrayStatus(e,x.$id,x);}return x}function ct({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:p,externalErrors:m,initialState:d,shortcuts:h,fieldName:g}){let C=effectScope(),F,O=effectScope(),a,x=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let P=ref(),j=ref(e.value),o,c=ref({}),f=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(i=>ue(i)):!1)})),M(),w();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(P.value=ge(),Object.defineProperties(e.value,{$id:{value:P.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(P.value=e.value.$id)),!a.isPrimitiveArray.value&&(j.value=c.value.$value,Array.isArray(e.value)?f.value=e.value.map((s,i)=>{let{scope:$,unwrapped:u}=Ce(r.value.$each,toRef(()=>s),i);$&&x.push($);let S=Ae({$id:P.value,path:n,customMessages:t,rules:u??{},stateValue:toRef(()=>s),index:i,options:p,storage:l,externalErrors:toRef(m?.value??{},"$each"),initialState:d?.[i],shortcuts:h,fieldName:g});return S||null}).filter(s=>!!s):f.value=[],c.value=Se({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:p,externalErrors:toRef(m?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:h,fieldName:g}));}function N(){if(Array.isArray(e.value)){let s=U(f.value);f.value=e.value.map((i,$)=>{let u=toRef(()=>i);if(i.$id&&f.value.find(S=>S.$id===i.$id)){let S=l.getArrayStatus(P.value,i.$id);return S?(S.$value=u,S):null}else {let{scope:S,unwrapped:q}=Ce(r.value.$each,u,$);if(S&&x.push(S),q){let H=Ae({$id:P.value,path:n,customMessages:t,rules:q,stateValue:u,index:$,options:p,storage:l,externalErrors:toRef(m?.value??{},"$each"),initialState:d?.[$],shortcuts:h,fieldName:g});return H||null}}}).filter(i=>!!i),s.filter(i=>!e.value.find($=>i.$id===$.$id)).forEach((i,$)=>{l.deleteArrayStatus(P.value,$.toString());});}else f.value=[];}function w(){o=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():N();},{deep:ve?1:!0,flush:"pre"}),C=effectScope(),F=C.run(()=>{let s=computed(()=>c.value.$dirty&&f.value.every(R=>R.$dirty)),i=computed(()=>c.value.$anyDirty||f.value.some(R=>R.$dirty)),$=computed(()=>c.value.$invalid||f.value.some(R=>R.$invalid)),u=computed(()=>(L(c.value.$rules)?!0:c.value.$valid)&&f.value.every(R=>R.$valid)),S=computed(()=>c.value.$error||f.value.some(R=>R.$error)),q=computed(()=>!($.value||H.value)),H=computed(()=>c.value.$pending||f.value.some(R=>R.$pending)),K=computed(()=>({$self:c.value.$errors,$each:f.value.map(R=>R.$errors)})),ie=computed(()=>({$self:c.value.$silentErrors,$each:f.value.map(R=>R.$silentErrors)})),ne=computed(()=>g);function y(){h?.collections&&Object.entries(h?.collections).forEach(([R,A])=>{let z=effectScope();T[R]=z.run(()=>{let te=ref();return watchEffect(()=>{te.value=A(reactive({$dirty:s,$error:S,$pending:H,$invalid:$,$valid:u,$errors:K,$ready:q,$silentErrors:ie,$anyDirty:i,$name:ne,$each:f,$field:c,$value:e}));}),te}),x.push(z);});}let T={};return y(),{$dirty:s,$anyDirty:i,$invalid:$,$valid:u,$error:S,$pending:H,$errors:K,$silentErrors:ie,$ready:q,$name:ne,$shortcuts:T}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),o());}function _(){o&&o(),c.value&&c.value.$unwatch(),f.value&&f.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),C.stop(),C=effectScope(),O.stop(),O=effectScope(!0),x.forEach(s=>s.stop()),x=[];}function E(s=!0,i=!1){c.value.$touch(s,i),f.value.forEach($=>{$.$touch(s,i);});}function v(){c.value.$reset(),f.value.forEach(s=>{s.$reset();});}async function b(){let s=e.value;try{return {result:(await Promise.allSettled([c.value.$validate(),...f.value.map(u=>u.$validate())])).every(u=>u.status==="fulfilled"?u.value.result===!0:!1),data:s}}catch{return {result:!1,data:s}}}function k(){c.value.$clearExternalErrors(),f.value.forEach(s=>{s.$clearExternalErrors();});}function V(s=!0){let i=f.value.map($=>{if(at($))return $.$extractDirtyFields(s)});return s&&i.every($=>L($))&&(i=[]),i}function Y(){_(),e.value=U(d),v();}let{$shortcuts:D,...I}=F;return reactive({$field:c,...I,...D,$each:f,$value:e,$validate:b,$unwatch:_,$watch:w,$touch:E,$reset:v,$resetAll:Y,$extractDirtyFields:V,$clearExternalErrors:k})}function je({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:p,initialState:m,fieldName:d,...h}){let g=effectScope(),C,F=[],O=null,a=null,x=null;async function j(D=!0){let I=Object.entries(e.value),s=Object.fromEntries(I.filter(([u,S])=>!!S).map(([u,S])=>{if(S){let q=toRef(r.value,u),H=toRef(()=>S),K=toRef(l?.value??{},u);return [u,pe({state:q,rulesDef:H,path:t?`${t}.${u}`:u,externalErrors:K,initialState:m?.[u],fieldName:u,...h})]}return []})),i=Object.fromEntries(Object.entries(unref(l)??{}).filter(([u,S])=>!(u in e.value)&&!!S).map(([u])=>{let S=toRef(r.value,u);return [u,pe({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${u}`:u,externalErrors:toRef(l?.value??{},u),initialState:m?.[u],fieldName:u,...h})]})),$=Object.fromEntries(Object.entries(r.value).filter(([u])=>!(u in e.value)&&!(u in(i.value??{}))).map(([u])=>{let S=toRef(r.value,u);return [u,pe({state:S,rulesDef:computed(()=>({})),path:t?`${t}.${u}`:u,externalErrors:toRef(l?.value??{},u),initialState:m?.[u],fieldName:u,...h})]}));o.value={...s,...i,...$},D&&N();}let o=h.storage.getFieldsEntry(t);j();function c(){a?.(),Object.values(o.value).forEach(D=>{D.$reset();}),M();}function f(D=!0,I=!1){Object.values(o.value).forEach(s=>{s.$touch(D,I);});}function M(){l?.value&&(a=watch(l,()=>{w(),j();},{deep:!0}));}function N(){n&&(O=watch(n,()=>{w(),j();},{deep:!0,flush:"post"}),M()),x=watch(r,()=>{w(),j(),f(!0,!0);},{flush:"sync"}),g=effectScope(),C=g.run(()=>{let D=computed({get:()=>!!Object.entries(o.value).length&&Object.entries(o.value).every(([T,R])=>R?.$dirty),set(){}}),I=computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$dirty),set(){}}),s=computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$invalid),set(){}}),i=computed({get:()=>Object.entries(o.value).every(([T,R])=>R?.$valid),set(){}}),$=computed({get:()=>I.value&&!S.value&&s.value,set(){}}),u=computed({get:()=>unref(h.options.autoDirty)?I.value&&!(s.value||S.value):!(s.value||S.value),set(){}}),S=computed({get:()=>Object.entries(o.value).some(([T,R])=>R?.$pending),set(){}}),q=computed({get:()=>Object.fromEntries(Object.entries(o.value).map(([T,R])=>[T,R?.$errors])),set(){}}),H=computed({get:()=>Object.fromEntries(Object.entries(o.value).map(([T,R])=>[T,R?.$silentErrors])),set(){}}),K=computed({get:()=>d,set(){}});function ie(){h.shortcuts?.nested&&Object.entries(h.shortcuts.nested).forEach(([T,R])=>{let A=effectScope();y[T]=A.run(()=>{let z=ref();return watchEffect(()=>{z.value=R(reactive({$dirty:D,$value:r,$error:$,$pending:S,$invalid:s,$valid:i,$ready:u,$anyDirty:I,$name:K,$silentErrors:H,$errors:q,$fields:o}));}),z}),F.push(A);});}let ne=computed({get:()=>p?Object.fromEntries(Object.entries(p?.(o.value)??{}).map(([T,R])=>R.length?[T,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(A=>[A,Qe(R,A)])),...Object.fromEntries(["$errors","$silentErrors"].map(A=>[A,Xe(R,A)]))}]:[])):{},set(){}}),y={};return ie(),{$dirty:D,$anyDirty:I,$invalid:s,$valid:i,$error:$,$pending:S,$errors:q,$silentErrors:H,$ready:u,$name:K,$shortcuts:y,$groups:ne}});}function w(){O?.(),a?.(),x?.(),F.forEach(D=>D.stop()),F=[],g.stop(),o.value&&Object.entries(o.value).forEach(([D,I])=>{I.$unwatch();});}function _(){Object.entries(o.value).forEach(([D,I])=>{I.$clearExternalErrors();});}async function E(){w(),r.value=U({...m??{}}),c(),j();}function v(D){return D.filter(([I,s])=>X(s)?!(s&&typeof s=="object"&&"_null"in s)&&!L(s):Array.isArray(s)?s.length:!0)}function b(D=!0){let I=Object.entries(o.value).map(([s,i])=>[s,i.$extractDirtyFields(D)]);return D&&(I=v(I)),Object.fromEntries(I)}async function k(){try{let D=r.value;return {result:(await Promise.allSettled(Object.values(o.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:D}}catch{return {result:!1,data:r.value}}}let{$shortcuts:V,...Y}=C;return reactive({...Y,...V,$fields:o,$value:r,$resetAll:E,$reset:c,$touch:f,$validate:k,$unwatch:w,$watch:N,$clearExternalErrors:_,$extractDirtyFields:b})}function pe({rulesDef:e,externalErrors:r,...t}){return rt(e,t.state)?ct({rulesDef:e,externalErrors:r,...t}):tt(t.state,e)&&et(t.state)?je({rulesDef:e,externalErrors:r,...t}):nt(e)?Se({rulesDef:e,externalErrors:r,...t}):null}function _e({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:p}){let m=Ie(),d=ref();return d.value=je({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:m,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:p,fieldName:"root",path:""}),onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function Ve(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(p,m,d){let h=isRef(m)?m:computed(typeof m=="function"?m:()=>m),g={...n,...d},C=isRef(p)?p:ref(p),F={...U(C.value)};return {r$:_e({scopeRules:h,state:C,options:g,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var dt=Ve();function Ge(){function e(r,t){return t}return e}var Ne=Ge();function mt({rules:e,modifiers:r,shortcuts:t}){let n=Ve(e,r,t),l=Ge();return {useRegle:n,inferRules:l}}
2
- export{Ee as InternalRuleType,xe as createRule,mt as defineRegleConfig,Ne as inferRules,W as unwrapRuleParameters,dt as useRegle};
1
+ import {toValue,version,computed,isRef,toRef,ref,onScopeDispose,reactive,shallowRef,effectScope,unref,watch,watchEffect}from'vue';function z(e){return e==null?!0:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?!1:typeof e=="object"&&e!=null?Object.keys(e).length===0:!String(e).length}var Ke=Symbol("regle-rule");var xe=(t=>(t.Inline="__inline",t.Async="__async",t))(xe||{});function et(e,r){return e.some(t=>t[r])}function tt(e,r){return e.reduce((t,n)=>{let l=n[r]||[];return t.concat(l)},[])}function B(e){try{return e.map(r=>toValue(r))}catch{return []}}function rt(e){return e.map(r=>r instanceof Function?computed(r):isRef(r)?r:toRef(()=>r))}function nt(e){let n=e.toString().replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return n?(n[0]||n[1]||n[2]||n[3]||n[4]||"").split(",").map(y=>y.trim()).filter(y=>y.length>0).length:0}function Ce(e,...r){let{validator:t,type:n}=e,l=n==="__async"||t.constructor.name==="AsyncFunction";return {...{validator(d,...S){return e.validator(d,...B(S.length?S:r))},message(d){return typeof e.message=="function"?e.message({...d,$params:B(d?.$params?.length?d.$params:r)}):e.message},active(d){return typeof e.active=="function"?e.active({...d,$params:B(d?.$params?.length?d.$params:r)}):e.active??!0},tooltip(d){return typeof e.tooltip=="function"?e.tooltip({...d,$params:B(d?.$params?.length?d.$params:r)}):e.tooltip??[]},exec(d){let S=e.validator(d,...B(r)),$;return S instanceof Promise?S.then(x=>($=x,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)):($=S,typeof $=="object"&&"$valid"in $?$.$valid:typeof $=="boolean"?$:!1)}},_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:l,_params:rt(r),_brand:Ke}}function Ie(e){if(typeof e.validator=="function"){let t=Ce(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(nt(e.validator)>1){let l=function(...R){return Ce(e,...R)};return l.validator=t.validator,l.message=t.message,l.active=t.active,l.tooltip=t.tooltip,l.type=t.type,l.exec=t.exec,l._validator=t.validator,l._message=t.message,l._active=t.active,l._tooltip=t.tooltip,l._type=e.type,l._message_pacthed=!1,l._tooltip_pacthed=!1,l._async=n,l}else return t}throw new Error("Validator must be a function")}function Z(e){return e instanceof Date||e instanceof File?!1:typeof e=="object"&&e!==null&&!Array.isArray(e)}function at(e){return e.value instanceof Date||e.value instanceof File?!1:Z(e.value)}function L(e){let r=e,t={}.toString.call(e).slice(8,-1);if(t=="Set"&&(r=new Set([...e].map(n=>L(n)))),t=="Map"&&(r=new Map([...e].map(n=>[L(n[0]),L(n[1])]))),t=="Date"&&(r=new Date(e.getTime())),t=="RegExp"&&(r=RegExp(e.source,Ct(e))),t=="Array"||t=="Object"){r=Array.isArray(e)?[]:{};for(let n in e)r[n]=L(e[n]);}return r}function Ct(e){if(typeof e.source.flags=="string")return e.source.flags;{let r=[];return e.global&&r.push("g"),e.ignoreCase&&r.push("i"),e.multiline&&r.push("m"),e.sticky&&r.push("y"),e.unicode&&r.push("u"),r.join("")}}function Pe(e,r,t){let n=effectScope(),l;return e instanceof Function?l=n.run(()=>e(r,t??0)):l=e,{scope:n,unwrapped:l}}function $e(e,r,t){let n,l=(...R)=>new Promise(y=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...R])).then(y);},r);});return l.cancel=()=>{clearTimeout(n),n=void 0;},l}function Pt(e,r){let t=String(e).split("."),n=String(r).split(".");for(let l=0;l<Math.min(t.length,n.length);l++){let R=Number(t[l]),y=Number(n[l]);if(R>y)return 1;if(y>R)return -1;if(!isNaN(R)&&isNaN(y))return 1;if(isNaN(R)&&!isNaN(y))return -1}return 0}var ge=Pt(version,"3.5.0")!==-1;function wt(){return Math.floor(Math.random()*Date.now()).toString()}function Se(){return typeof window>"u"?wt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function we(){let e=shallowRef(new Map),r=shallowRef(new Map),t=shallowRef(new Map),n=shallowRef(new Map),l=shallowRef(new Map),R=shallowRef(new Map);function y(u){let s=r.value.get(u);if(s)return s;{let c=ref({});return r.value.set(u,c),c}}function d(u){let s=t.value.get(u);if(s)return s;{let c=ref([]);return t.value.set(u,c),c}}function S(u,s,c){R.value.set(`${u}-${s}`,c);}function $(u,s){return R.value.get(`${u}-${s}`)}function x(u,s){u&&s!=null&&R.value.delete(`${u}-${s}`);}function F(u,s){n.value.set(u,s);}function O(u){return n.value.get(u)??!1}function a(u,s){e.value.set(u,s);}function E(u,s){let c=e.value.get(u);return c?C(s,c)?{valid:!0}:{valid:!1}:void 0}function C(u,s){let c=Object.keys(s),j=Object.keys(u);return j.length!==c.length||!j.every(_=>c.includes(_))?!1:j.every(_=>{let P=u[_],b=s[_];return !b||!P||typeof P=="function"||typeof b=="function"||typeof P=="number"||typeof P=="boolean"?!1:P._params?P._params?.every((W,m)=>{if(typeof b=="number"||typeof b=="boolean")return !0;{let I=B(b._params),V=B(P._params);return I?.[m]===V?.[m]}}):!0})}function M(u){let s=l.value.get(u);if(s)return s;{let c=ref(!1),j=ref(!0),k=ref({}),_=ref(!1);return l.value.set(u,{$pending:c,$valid:j,$metadata:k,$validating:_}),{$pending:c,$valid:j,$metadata:k,$validating:_}}}return onScopeDispose(()=>{e.value.clear(),r.value.clear(),t.value.clear(),n.value.clear(),l.value.clear(),R.value.clear();}),{addRuleDeclEntry:a,setDirtyEntry:F,checkRuleDeclEntry:E,getDirtyState:O,trySetRuleStatusRef:M,getFieldsEntry:y,getCollectionsEntry:d,getArrayStatus:$,addArrayStatus:S,deleteArrayStatus:x,arrayStatusStorage:R}}function lt(e,r){return Z(e.value)&&Z(r.value)&&!Object.entries(r.value).some(t=>ce(t))}function ot(e,r){return !!e.value&&"$each"in e.value||Array.isArray(r.value)}function ut(e){return !!e.value&&Z(e.value)}function ce(e){return Z(e)&&"_validator"in e}function fe(e){return typeof e.value!="function"}function it(e){return Z(e)&&"$fields"in e}function Oe({field:e,silent:r=!1}){return Object.entries(e.$rules??{}).map(([t,n])=>r||!n.$valid&&e.$dirty&&!n.$validating?n.$message:null).filter(t=>!!t).reduce((t,n)=>typeof n=="string"?t?.concat([n]):t?.concat(n),[]).concat(e.$dirty?e.$externalErrors??[]:[])}function st({field:e}){return Object.entries(e.$rules??{}).map(([r,t])=>t.$tooltip).filter(r=>!!r).reduce((r,t)=>typeof t=="string"?r?.concat([t]):r?.concat(t),[])}function ct({fieldProperties:e,customMessages:r,rule:t,ruleKey:n,state:l,path:R,storage:y,$debounce:d,modifiers:S}){let $=effectScope(),x={},F,O=ref(!1),{$pending:a,$valid:E,$metadata:C,$validating:M}=y.trySetRuleStatusRef(`${R}.${n}`);function u(){$=effectScope(),x=$.run(()=>{let b=computed(()=>({$value:l.value,$error:e.$error.value,$dirty:e.$dirty.value,$pending:e.$pending.value,$valid:e.$valid.value,$invalid:e.$invalid.value,$rule:{$valid:E.value,$invalid:!E.value,$pending:a.value},$params:D.value,...C.value})),W=computed(()=>fe(t)?typeof t.value.active=="function"?t.value.active(b.value):!!t.value.active:!0);function m(o){let i="",g=r?r[n]?.[o]:void 0;if(g&&(typeof g=="function"?i=g(b.value):i=g),fe(t)){let f=`_${o}_patched`;g&&!t.value[f]||(typeof t.value[o]=="function"?i=t.value[o](b.value):i=t.value[o]??"");}return i}let I=computed(()=>{let o=m("message");return z(o)&&(o="This field is not valid"),o}),V=computed(()=>m("tooltip")),Q=computed(()=>fe(t)&&t.value.type?t.value.type:n),K=computed(()=>fe(t)?t.value.validator:t.value),D=computed(()=>typeof t.value=="function"?[]:B(t.value._params??[])),w=computed(()=>`${R}.${Q.value}`);return {$active:W,$message:I,$type:Q,$validator:K,$params:D,$path:w,$tooltip:V}}),F=watch(x?.$params,()=>{(S.$autoDirty.value||S.$rewardEarly.value&&e.$error.value)&&k();});}u();function s(){E.value=!0,e.$dirty.value&&(a.value=!0);}async function c(){let b=!1;try{let W=x.$validator.value,m=W(l.value,...x.$params.value),I=l.value;s();let V;if(m instanceof Promise?V=await m:V=m,l.value!==I)return !0;if(typeof V=="boolean")b=V;else {let{$valid:Q,...K}=V;b=Q,C.value=K;}}catch{b=!1;}finally{a.value=!1;}return b}let j=$e(c,d??200);async function k(){try{M.value=!0;let b=!1;if(ce(t.value)&&t.value._async)b=await j();else {let W=x.$validator.value,m=W(l.value,...x.$params.value);if(m instanceof Promise)console.warn('You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper');else if(m!=null)if(typeof m=="boolean")b=m;else {let{$valid:I,...V}=m;b=I,C.value=V;}}return E.value=b,b}catch{return !1}finally{M.value=!1;}}function _(){E.value=!0,C.value={},a.value=!1,M.value=!1,u();}function P(){F(),$.stop(),$=effectScope();}return reactive({...x,$pending:a,$valid:E,$metadata:C,$haveAsync:O,$validating:M,$validate:k,$unwatch:P,$watch:u,$reset:_})}function be({state:e,rulesDef:r,customMessages:t,path:n,fieldName:l,storage:R,options:y,externalErrors:d,onUnwatch:S,$isArray:$,initialState:x,shortcuts:F}){let O=effectScope(),a,E=[],C,M,u,s,c=()=>{};function j(){let v=r.value,A=R.checkRuleDeclEntry(n,v);I.value=Object.fromEntries(Object.entries(v).filter(([h])=>h.startsWith("$"))),P(),m.value=Object.fromEntries(Object.entries(r.value).filter(([h])=>!h.startsWith("$")).map(([h,p])=>{if(p){let N=toRef(()=>p);return [h,ct({fieldProperties:{$dirty:a.$dirty,$error:a.$error,$invalid:a.$invalid,$pending:a.$pending,$valid:a.$valid},modifiers:{$autoDirty:a.$autoDirty,$rewardEarly:a.$rewardEarly},customMessages:t,rule:N,ruleKey:h,state:e,path:n,storage:R,$debounce:I.value.$debounce})]}return []}).filter(h=>!!h.length)),a.processShortcuts(),k(),A?.valid!=null&&(a.$dirty.value=R.getDirtyState(n),a.$dirty.value&&c()),R.addRuleDeclEntry(n,v);}function k(){c=a.$debounce.value?$e(W,a.$debounce.value??a.$haveAnyAsyncRule?100:0):W;}function _(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$unwatch();}),u(),a.$dirty.value&&R.setDirtyEntry(n,a.$dirty.value),C?.(),M?.(),O.stop(),O=effectScope(),E.forEach(v=>v.stop()),E=[],S?.(),s?.();}function P(){m.value&&Object.entries(m.value).forEach(([v,A])=>{A.$watch();}),a=O.run(()=>{let v=ref(!1),A=ref(!1),h=computed(()=>v.value),p=computed(()=>I.value.$debounce),N=computed(()=>I.value.$lazy!=null?I.value.$lazy:unref(y.lazy)),X=computed(()=>Ue.value===!0?!1:I.value.$rewardEarly!=null?I.value.$rewardEarly:unref(y.rewardEarly)),me=computed(()=>I.value.$clearExternalErrorsOnChange!=null?I.value.$clearExternalErrorsOnChange:unref(y.clearExternalErrorsOnChange)),Ue=computed(()=>I.value.$autoDirty!=null?I.value.$autoDirty:unref(y.autoDirty)),Be=computed(()=>Object.entries(m.value).some(([q,te])=>te.$validating)),He=computed({get:()=>e.value,set(q){C(),e.value=q,b();}}),Ee=computed(()=>ve.value&&!ye.value&&v.value),Le=computed(()=>Ee.value?Oe({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value}}):[]),qe=computed(()=>st({field:{$rules:m.value}})),ze=computed(()=>Oe({field:{$dirty:v.value,$externalErrors:d?.value,$rules:m.value},silent:!0})),Je=computed(()=>!(ve.value||ye.value)),ye=computed(()=>A.value||!X.value?Object.entries(m.value).some(([q,te])=>te.$pending):!1),ve=computed(()=>d?.value?.length?!0:z(m.value)?!1:!X.value||X.value&&A.value?Object.entries(m.value).some(([q,te])=>!te.$valid):!1),Ye=computed(()=>l),De=computed(()=>d?.value?.length||z(m.value)?!1:v.value&&!z(e.value)&&!Be.value?Object.values(m.value).every(q=>q.$valid&&q.$active):!1),St=computed(()=>Object.entries(m.value).some(([q,te])=>te.$haveAsync));function ht(){F?.fields&&Object.entries(F.fields).forEach(([q,te])=>{let Xe=effectScope();Qe[q]=Xe.run(()=>{let Ze=ref();return watchEffect(()=>{Ze.value=te(reactive({$dirty:v,$externalErrors:d?.value??[],$value:e,$silentValue:He,$rules:m,$error:Ee,$pending:ye,$invalid:ve,$valid:De,$errors:Le,$ready:Je,$silentErrors:ze,$anyDirty:h,$tooltips:qe,$name:Ye}));}),Ze}),E.push(Xe);});}let Qe={};return watch(De,q=>{q&&(A.value=!1);}),{$error:Ee,$pending:ye,$invalid:ve,$valid:De,$debounce:p,$lazy:N,$errors:Le,$ready:Je,$silentErrors:ze,$rewardEarly:X,$autoDirty:Ue,$clearExternalErrorsOnChange:me,$anyDirty:h,$name:Ye,$haveAnyAsyncRule:St,$shortcuts:Qe,$validating:Be,$tooltips:qe,$dirty:v,triggerPunishment:A,processShortcuts:ht,$silentValue:He}}),b(),u=watch(a.$dirty,()=>{R.setDirtyEntry(n,a.$dirty.value);}),M=watch(a.$valid,v=>{a.$rewardEarly.value&&v&&(a.triggerPunishment.value=!1);}),s=watch(a.$haveAnyAsyncRule,k);}function b(){C=watch(e,()=>{a.$autoDirty.value&&(a.$dirty.value||(a.$dirty.value=!0)),r.value instanceof Function&&j(),(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c(),a.$rewardEarly.value!==!0&&a.$clearExternalErrorsOnChange.value&&o();},{deep:$?!0:ge?1:!0});}function W(){Object.values(m.value).forEach(v=>{v.$validate();});}let m=ref({}),I=ref({});j();function V(){o(),a.$dirty.value=!1,R.setDirtyEntry(n,!1),Object.entries(m.value).forEach(([v,A])=>{A.$reset();}),!a.$lazy.value&&a.$autoDirty.value&&Object.values(m.value).forEach(v=>v.$validate());}function Q(v=!0,A=!1){a.$dirty.value||(a.$dirty.value=!0),A&&v?(a.$autoDirty.value||a.$rewardEarly.value&&a.$error.value)&&c():v&&c();}async function K(){try{let v=e.value;if(a.triggerPunishment.value=!0,!a.$dirty.value)a.$dirty.value=!0;else if(a.$autoDirty.value&&a.$dirty.value&&!a.$pending.value)return {result:!a.$error.value,data:v};return z(m.value)?{result:!0,data:v}:{result:(await Promise.allSettled(Object.entries(m.value).map(([p,N])=>N.$validate()))).every(p=>p.status==="fulfilled"?p.value===!0:!1),data:v}}catch{return {result:!1,data:e.value}}}function D(){_(),e.value=L(x),V();}function w(v=!0){return a.$dirty.value?e.value:v?{_null:!0}:null}function o(){d?.value?.length&&(d.value=[]);}!a.$lazy.value&&!a.$dirty.value&&a.$autoDirty.value&&c();let{$shortcuts:i,$validating:g,$autoDirty:f,$rewardEarly:T,$clearExternalErrorsOnChange:U,$haveAnyAsyncRule:Y,$debounce:ee,$lazy:ae,...le}=a;return reactive({...le,$externalErrors:d,$value:e,$rules:m,...i,$reset:V,$touch:Q,$validate:K,$unwatch:_,$watch:P,$resetAll:D,$extractDirtyFields:w,$clearExternalErrors:o})}function Me({$id:e,path:r,index:t,options:n,storage:l,stateValue:R,customMessages:y,rules:d,externalErrors:S,initialState:$,shortcuts:x,fieldName:F}){let O=d.$key?d.$key:Se(),a=`${r}.${String(O)}`;typeof R.value=="object"&&R.value!=null&&(R.value.$id?a=`${r}.${R.value.$id}`:Object.defineProperties(R.value,{$id:{value:O,enumerable:!1,configurable:!1,writable:!1}}));let E=de({state:R,rulesDef:toRef(()=>d),customMessages:y,path:a,storage:l,options:n,externalErrors:toRef(S?.value??[],t),initialState:$?.[t],shortcuts:x,fieldName:F});if(E){let C=R.value?.$id;E.$id=C??String(O),l.addArrayStatus(e,E.$id,E);}return E}function dt({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:y,initialState:d,shortcuts:S,fieldName:$}){let x=effectScope(),F,O=effectScope(),a,E=[];if(!Array.isArray(e.value)&&!r.value.$each)return null;let C=ref(),M=ref(e.value),u,s=ref({}),c=l.getCollectionsEntry(n);a=O.run(()=>({isPrimitiveArray:computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(i=>typeof i!="object"):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(i=>ce(i)):!1)})),j(),P();function j(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(C.value=Se(),Object.defineProperties(e.value,{$id:{value:C.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(C.value=e.value.$id)),!a.isPrimitiveArray.value&&(M.value=s.value.$value,Array.isArray(e.value)?c.value=e.value.map((o,i)=>{let{scope:g,unwrapped:f}=Pe(r.value.$each,toRef(()=>o),i);g&&E.push(g);let T=Me({$id:C.value,path:n,customMessages:t,rules:f??{},stateValue:toRef(()=>o),index:i,options:R,storage:l,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[i],shortcuts:S,fieldName:$});return T||null}).filter(o=>!!o):c.value=[],s.value=be({state:e,rulesDef:r,customMessages:t,path:n,storage:l,options:R,externalErrors:toRef(y?.value??{},"$self"),$isArray:!0,initialState:d,shortcuts:S,fieldName:$}));}function k(){if(Array.isArray(e.value)){let o=L(c.value);c.value=e.value.map((i,g)=>{let f=toRef(()=>i);if(i.$id&&c.value.find(T=>T.$id===i.$id)){let T=l.getArrayStatus(C.value,i.$id);return T?(T.$value=f,T):null}else {let{scope:T,unwrapped:U}=Pe(r.value.$each,f,g);if(T&&E.push(T),U){let Y=Me({$id:C.value,path:n,customMessages:t,rules:U,stateValue:f,index:g,options:R,storage:l,externalErrors:toRef(y?.value??{},"$each"),initialState:d?.[g],shortcuts:S,fieldName:$});return Y||null}}}).filter(i=>!!i),o.filter(i=>!e.value.find(g=>i.$id===g.$id)).forEach((i,g)=>{l.deleteArrayStatus(C.value,g.toString());});}else c.value=[];}function _(){u=watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?j():k();},{deep:ge?1:!0,flush:"pre"});}function P(){_(),x=effectScope(),F=x.run(()=>{let o=computed({get:()=>e.value,set(p){u(),e.value=p,_();}}),i=computed(()=>s.value.$dirty&&c.value.every(p=>p.$dirty)),g=computed(()=>s.value.$anyDirty||c.value.some(p=>p.$dirty)),f=computed(()=>s.value.$invalid||c.value.some(p=>p.$invalid)),T=computed(()=>(z(s.value.$rules)?!0:s.value.$valid)&&c.value.every(p=>p.$valid)),U=computed(()=>s.value.$error||c.value.some(p=>p.$error)),Y=computed(()=>!(f.value||ee.value)),ee=computed(()=>s.value.$pending||c.value.some(p=>p.$pending)),ae=computed(()=>({$self:s.value.$errors,$each:c.value.map(p=>p.$errors)})),le=computed(()=>({$self:s.value.$silentErrors,$each:c.value.map(p=>p.$silentErrors)})),v=computed(()=>$);function A(){S?.collections&&Object.entries(S?.collections).forEach(([p,N])=>{let X=effectScope();h[p]=X.run(()=>{let me=ref();return watchEffect(()=>{me.value=N(reactive({$dirty:i,$error:U,$silentValue:o,$pending:ee,$invalid:f,$valid:T,$errors:ae,$ready:Y,$silentErrors:le,$anyDirty:g,$name:v,$each:c,$field:s,$value:e}));}),me}),E.push(X);});}let h={};return A(),{$dirty:i,$anyDirty:g,$invalid:f,$valid:T,$error:U,$pending:ee,$errors:ae,$silentErrors:le,$ready:Y,$name:v,$shortcuts:h,$silentValue:o}}),a.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),u());}function b(){u&&u(),s.value&&s.value.$unwatch(),c.value&&c.value.forEach(o=>{"$dirty"in o&&o.$unwatch();}),x.stop(),x=effectScope(),O.stop(),O=effectScope(!0),E.forEach(o=>o.stop()),E=[];}function W(o=!0,i=!1){s.value.$touch(o,i),c.value.forEach(g=>{g.$touch(o,i);});}function m(){s.value.$reset(),c.value.forEach(o=>{o.$reset();});}async function I(){let o=e.value;try{return {result:(await Promise.allSettled([s.value.$validate(),...c.value.map(f=>f.$validate())])).every(f=>f.status==="fulfilled"?f.value.result===!0:!1),data:o}}catch{return {result:!1,data:o}}}function V(){s.value.$clearExternalErrors(),c.value.forEach(o=>{o.$clearExternalErrors();});}function Q(o=!0){let i=c.value.map(g=>{if(it(g))return g.$extractDirtyFields(o)});return o&&i.every(g=>z(g))&&(i=[]),i}function K(){b(),e.value=L(d),m();}let{$shortcuts:D,...w}=F;return reactive({$field:s,...w,...D,$each:c,$value:e,$validate:I,$unwatch:b,$watch:P,$touch:W,$reset:m,$resetAll:K,$extractDirtyFields:Q,$clearExternalErrors:V})}function Ve({rulesDef:e,state:r,path:t="",rootRules:n,externalErrors:l,validationGroups:R,initialState:y,fieldName:d,...S}){let $=effectScope(),x,F=[],O=null,a=null,E=null;async function M(D=!0){let w=Object.entries(e.value),o=Object.fromEntries(w.filter(([f,T])=>!!T).map(([f,T])=>{if(T){let U=toRef(r.value,f),Y=toRef(()=>T),ee=toRef(l?.value??{},f);return [f,de({state:U,rulesDef:Y,path:t?`${t}.${f}`:f,externalErrors:ee,initialState:y?.[f],fieldName:f,...S})]}return []})),i=Object.fromEntries(Object.entries(unref(l)??{}).filter(([f,T])=>!(f in e.value)&&!!T).map(([f])=>{let T=toRef(r.value,f);return [f,de({state:T,rulesDef:computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]})),g=Object.fromEntries(Object.entries(r.value).filter(([f])=>!(f in e.value)&&!(f in(i.value??{}))).map(([f])=>{let T=toRef(r.value,f);return [f,de({state:T,rulesDef:computed(()=>({})),path:t?`${t}.${f}`:f,externalErrors:toRef(l?.value??{},f),initialState:y?.[f],fieldName:f,...S})]}));u.value={...o,...i,...g},D&&_();}let u=S.storage.getFieldsEntry(t);M();function s(){a?.(),Object.values(u.value).forEach(D=>{D.$reset();}),j();}function c(D=!0,w=!1){Object.values(u.value).forEach(o=>{o.$touch(D,w);});}function j(){l?.value&&(a=watch(l,()=>{P(),M();},{deep:!0}));}function k(){E=watch(r,()=>{P(),M(),c(!0,!0);},{flush:"sync"});}function _(){n&&(O?.(),O=watch(n,()=>{P(),M();},{deep:!0,flush:"post"}),j()),k(),$=effectScope(),x=$.run(()=>{let D=computed({get:()=>r.value,set(h){P(),r.value=h,M();}}),w=computed({get:()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([h,p])=>p?.$dirty),set(){}}),o=computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$dirty),set(){}}),i=computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$invalid),set(){}}),g=computed({get:()=>Object.entries(u.value).every(([h,p])=>p?.$valid),set(){}}),f=computed({get:()=>o.value&&!U.value&&i.value,set(){}}),T=computed({get:()=>unref(S.options.autoDirty)?o.value&&!(i.value||U.value):!(i.value||U.value),set(){}}),U=computed({get:()=>Object.entries(u.value).some(([h,p])=>p?.$pending),set(){}}),Y=computed({get:()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$errors])),set(){}}),ee=computed({get:()=>Object.fromEntries(Object.entries(u.value).map(([h,p])=>[h,p?.$silentErrors])),set(){}}),ae=computed({get:()=>d,set(){}});function le(){S.shortcuts?.nested&&Object.entries(S.shortcuts.nested).forEach(([h,p])=>{let N=effectScope();A[h]=N.run(()=>{let X=ref();return watchEffect(()=>{X.value=p(reactive({$dirty:w,$value:r,$silentValue:D,$error:f,$pending:U,$invalid:i,$valid:g,$ready:T,$anyDirty:o,$name:ae,$silentErrors:ee,$errors:Y,$fields:u}));}),X}),F.push(N);});}let v=computed({get:()=>R?Object.fromEntries(Object.entries(R?.(u.value)??{}).map(([h,p])=>p.length?[h,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(N=>[N,et(p,N)])),...Object.fromEntries(["$errors","$silentErrors"].map(N=>[N,tt(p,N)]))}]:[])):{},set(){}}),A={};return le(),{$dirty:w,$anyDirty:o,$invalid:i,$valid:g,$error:f,$pending:U,$errors:Y,$silentErrors:ee,$ready:T,$name:ae,$shortcuts:A,$groups:v,$silentValue:D}});}function P(){O?.(),a?.(),E?.(),F.forEach(D=>D.stop()),F=[],$.stop(),u.value&&Object.entries(u.value).forEach(([D,w])=>{w.$unwatch();});}function b(){Object.entries(u.value).forEach(([D,w])=>{w.$clearExternalErrors();});}async function W(){P(),r.value=L({...y??{}}),s(),M();}function m(D){return D.filter(([w,o])=>Z(o)?!(o&&typeof o=="object"&&"_null"in o)&&!z(o):Array.isArray(o)?o.length:!0)}function I(D=!0){let w=Object.entries(u.value).map(([o,i])=>[o,i.$extractDirtyFields(D)]);return D&&(w=m(w)),Object.fromEntries(w)}async function V(){try{let D=r.value;return {result:(await Promise.allSettled(Object.values(u.value).map(i=>i.$validate()))).every(i=>i.status==="fulfilled"?i.value.result===!0:!1),data:D}}catch{return {result:!1,data:r.value}}}let{$shortcuts:Q,...K}=x;return reactive({...K,...Q,$fields:u,$value:r,$resetAll:W,$reset:s,$touch:c,$validate:V,$unwatch:P,$watch:_,$clearExternalErrors:b,$extractDirtyFields:I})}function de({rulesDef:e,externalErrors:r,...t}){return ot(e,t.state)?dt({rulesDef:e,externalErrors:r,...t}):lt(t.state,e)&&at(t.state)?Ve({rulesDef:e,externalErrors:r,...t}):ut(e)?be({rulesDef:e,externalErrors:r,...t}):null}function Ge({initialState:e,options:r,scopeRules:t,state:n,customRules:l,shortcuts:R}){let y=we(),d=ref();return d.value=Ve({rootRules:t,rulesDef:t,state:n,customMessages:l?.(),storage:y,options:r,externalErrors:r.externalErrors,validationGroups:r.validationGroups,initialState:e,shortcuts:R,fieldName:"root",path:""}),onScopeDispose(()=>{d.value?.$unwatch();}),reactive({regle:d})}function Ne(e,r,t){let n={autoDirty:r?.autoDirty??!0,lazy:r?.lazy??!1,rewardEarly:r?.rewardEarly??!1,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange??!0};function l(R,y,d){let S=isRef(y)?y:computed(typeof y=="function"?y:()=>y),$={...n,...d},x=isRef(R)?R:ref(R),F={...L(x.value)};return {r$:Ge({scopeRules:S,state:x,options:$,initialState:F,customRules:e,shortcuts:t}).regle}}return l}var $t=Ne();function ke(){function e(r,t){return t}return e}var We=ke();function gt({rules:e,modifiers:r,shortcuts:t}){let n=Ne(e,r,t),l=ke();return {useRegle:n,inferRules:l}}
2
+ export{xe as InternalRuleType,Ie as createRule,gt as defineRegleConfig,We as inferRules,B as unwrapRuleParameters,$t as useRegle};
@@ -1,5 +1,25 @@
1
1
  import { toValue, version, computed, isRef, toRef, ref, onScopeDispose, reactive, shallowRef, effectScope, unref, watch, watchEffect } from 'vue';
2
2
 
3
+ // ../shared/utils/isEmpty.ts
4
+ function isEmpty(value) {
5
+ if (value === void 0 || value === null) {
6
+ return true;
7
+ }
8
+ if (value instanceof Date) {
9
+ return isNaN(value.getTime());
10
+ }
11
+ if (Array.isArray(value)) {
12
+ return false;
13
+ }
14
+ if (typeof value === "object" && value != null) {
15
+ return Object.keys(value).length === 0;
16
+ }
17
+ return !String(value).length;
18
+ }
19
+
20
+ // ../shared/utils/symbol.ts
21
+ var RegleRuleSymbol = Symbol("regle-rule");
22
+
3
23
  // src/types/rules/rule.internal.types.ts
4
24
  var InternalRuleType = /* @__PURE__ */ ((InternalRuleType2) => {
5
25
  InternalRuleType2["Inline"] = "__inline";
@@ -118,7 +138,8 @@ function defineRuleProcessors(definition, ...params) {
118
138
  _message_patched: false,
119
139
  _tooltip_patched: false,
120
140
  _async: isAsync,
121
- _params: createReactiveParams(params)
141
+ _params: createReactiveParams(params),
142
+ _brand: RegleRuleSymbol
122
143
  };
123
144
  return processors;
124
145
  }
@@ -378,23 +399,6 @@ function useStorage() {
378
399
  };
379
400
  }
380
401
 
381
- // ../shared/utils/isEmpty.ts
382
- function isEmpty(value) {
383
- if (value === void 0 || value === null) {
384
- return true;
385
- }
386
- if (value instanceof Date) {
387
- return isNaN(value.getTime());
388
- }
389
- if (Array.isArray(value)) {
390
- return false;
391
- }
392
- if (typeof value === "object" && value != null) {
393
- return Object.keys(value).length === 0;
394
- }
395
- return !String(value).length;
396
- }
397
-
398
402
  // src/core/useRegle/guards/ruleDef.guards.ts
399
403
  function isNestedRulesDef(state, rules) {
400
404
  return isObject(state.value) && isObject(rules.value) && !Object.entries(rules.value).some((rule) => isRuleDef(rule));
@@ -796,6 +800,14 @@ function createReactiveFieldStatus({
796
800
  return ruleResult.$validating;
797
801
  });
798
802
  });
803
+ const $silentValue = computed({
804
+ get: () => state.value,
805
+ set(value) {
806
+ $unwatchState();
807
+ state.value = value;
808
+ define$watchState();
809
+ }
810
+ });
799
811
  const $error = computed(() => {
800
812
  return $invalid.value && !$pending.value && $dirty.value;
801
813
  });
@@ -881,6 +893,7 @@ function createReactiveFieldStatus({
881
893
  $dirty,
882
894
  $externalErrors: externalErrors?.value ?? [],
883
895
  $value: state,
896
+ $silentValue,
884
897
  $rules,
885
898
  $error,
886
899
  $pending,
@@ -928,9 +941,22 @@ function createReactiveFieldStatus({
928
941
  $tooltips,
929
942
  $dirty,
930
943
  triggerPunishment,
931
- processShortcuts
944
+ processShortcuts,
945
+ $silentValue
932
946
  };
933
947
  });
948
+ define$watchState();
949
+ $unwatchDirty = watch(scopeState.$dirty, () => {
950
+ storage.setDirtyEntry(path, scopeState.$dirty.value);
951
+ });
952
+ $unwatchValid = watch(scopeState.$valid, (valid) => {
953
+ if (scopeState.$rewardEarly.value && valid) {
954
+ scopeState.triggerPunishment.value = false;
955
+ }
956
+ });
957
+ $unwatchAsync = watch(scopeState.$haveAnyAsyncRule, define$commit);
958
+ }
959
+ function define$watchState() {
934
960
  $unwatchState = watch(
935
961
  state,
936
962
  () => {
@@ -951,15 +977,6 @@ function createReactiveFieldStatus({
951
977
  },
952
978
  { deep: $isArray ? true : isVueSuperiorOrEqualTo3dotFive ? 1 : true }
953
979
  );
954
- $unwatchDirty = watch(scopeState.$dirty, () => {
955
- storage.setDirtyEntry(path, scopeState.$dirty.value);
956
- });
957
- $unwatchValid = watch(scopeState.$valid, (valid) => {
958
- if (scopeState.$rewardEarly.value && valid) {
959
- scopeState.triggerPunishment.value = false;
960
- }
961
- });
962
- $unwatchAsync = watch(scopeState.$haveAnyAsyncRule, define$commit);
963
980
  }
964
981
  function $commitHandler() {
965
982
  Object.values($rules.value).forEach((rule) => {
@@ -1275,7 +1292,7 @@ function createReactiveCollectionStatus({
1275
1292
  $eachStatus.value = [];
1276
1293
  }
1277
1294
  }
1278
- function $watch() {
1295
+ function define$watchState() {
1279
1296
  $unwatchState = watch(
1280
1297
  state,
1281
1298
  () => {
@@ -1287,8 +1304,19 @@ function createReactiveCollectionStatus({
1287
1304
  },
1288
1305
  { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "pre" }
1289
1306
  );
1307
+ }
1308
+ function $watch() {
1309
+ define$watchState();
1290
1310
  scope = effectScope();
1291
1311
  scopeState = scope.run(() => {
1312
+ const $silentValue = computed({
1313
+ get: () => state.value,
1314
+ set(value) {
1315
+ $unwatchState();
1316
+ state.value = value;
1317
+ define$watchState();
1318
+ }
1319
+ });
1292
1320
  const $dirty = computed(() => {
1293
1321
  return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
1294
1322
  return statusOrField.$dirty;
@@ -1346,6 +1374,7 @@ function createReactiveCollectionStatus({
1346
1374
  reactive({
1347
1375
  $dirty,
1348
1376
  $error,
1377
+ $silentValue,
1349
1378
  $pending,
1350
1379
  $invalid,
1351
1380
  $valid,
@@ -1379,7 +1408,8 @@ function createReactiveCollectionStatus({
1379
1408
  $silentErrors,
1380
1409
  $ready,
1381
1410
  $name,
1382
- $shortcuts: $shortcuts2
1411
+ $shortcuts: $shortcuts2,
1412
+ $silentValue
1383
1413
  };
1384
1414
  });
1385
1415
  if (immediateScopeState.isPrimitiveArray.value) {
@@ -1598,8 +1628,20 @@ function createReactiveNestedStatus({
1598
1628
  );
1599
1629
  }
1600
1630
  }
1631
+ function define$watchState() {
1632
+ $unwatchState = watch(
1633
+ state,
1634
+ () => {
1635
+ $unwatch();
1636
+ createReactiveFieldsStatus();
1637
+ $touch(true, true);
1638
+ },
1639
+ { flush: "sync" }
1640
+ );
1641
+ }
1601
1642
  function $watch() {
1602
1643
  if (rootRules) {
1644
+ $unwatchRules?.();
1603
1645
  $unwatchRules = watch(
1604
1646
  rootRules,
1605
1647
  () => {
@@ -1610,17 +1652,17 @@ function createReactiveNestedStatus({
1610
1652
  );
1611
1653
  define$WatchExternalErrors();
1612
1654
  }
1613
- $unwatchState = watch(
1614
- state,
1615
- () => {
1616
- $unwatch();
1617
- createReactiveFieldsStatus();
1618
- $touch(true, true);
1619
- },
1620
- { flush: "sync" }
1621
- );
1655
+ define$watchState();
1622
1656
  scope = effectScope();
1623
1657
  scopeState = scope.run(() => {
1658
+ const $silentValue = computed({
1659
+ get: () => state.value,
1660
+ set(value) {
1661
+ $unwatch();
1662
+ state.value = value;
1663
+ createReactiveFieldsStatus();
1664
+ }
1665
+ });
1624
1666
  const $dirty = computed({
1625
1667
  get: () => {
1626
1668
  return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([key, statusOrField]) => {
@@ -1721,6 +1763,7 @@ function createReactiveNestedStatus({
1721
1763
  reactive({
1722
1764
  $dirty,
1723
1765
  $value: state,
1766
+ $silentValue,
1724
1767
  $error,
1725
1768
  $pending,
1726
1769
  $invalid,
@@ -1787,7 +1830,8 @@ function createReactiveNestedStatus({
1787
1830
  $ready,
1788
1831
  $name,
1789
1832
  $shortcuts: $shortcuts2,
1790
- $groups
1833
+ $groups,
1834
+ $silentValue
1791
1835
  };
1792
1836
  });
1793
1837
  }
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "0.4.9",
3
+ "version": "0.5.1",
4
4
  "description": "Typescript-first model-based form validation library for Vue 3",
5
5
  "peerDependencies": {
6
6
  "vue": "^3.3.0"
7
7
  },
8
8
  "devDependencies": {
9
9
  "@total-typescript/ts-reset": "0.6.1",
10
- "@types/node": "22.9.3",
11
- "@typescript-eslint/eslint-plugin": "8.18.0",
12
- "@typescript-eslint/parser": "8.18.0",
10
+ "@types/node": "22.10.2",
11
+ "@typescript-eslint/eslint-plugin": "8.18.1",
12
+ "@typescript-eslint/parser": "8.18.1",
13
13
  "@vue/test-utils": "2.4.6",
14
- "bumpp": "9.9.0",
14
+ "bumpp": "9.9.2",
15
15
  "changelogithub": "0.13.11",
16
16
  "cross-env": "7.0.3",
17
17
  "eslint": "9.15.0",
@@ -19,7 +19,7 @@
19
19
  "eslint-plugin-vue": "9.31.0",
20
20
  "prettier": "3.3.3",
21
21
  "tsup": "8.3.5",
22
- "type-fest": "4.30.0",
22
+ "type-fest": "4.30.2",
23
23
  "typescript": "5.6.3",
24
24
  "vitest": "2.1.8",
25
25
  "vue": "3.5.13",