@lucas-barake/effect-form 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/Form/package.json +6 -0
  2. package/FormAtoms/package.json +6 -0
  3. package/LICENSE +21 -0
  4. package/Mode/package.json +6 -0
  5. package/README.md +5 -0
  6. package/Validation/package.json +6 -0
  7. package/dist/cjs/Form.js +299 -0
  8. package/dist/cjs/Form.js.map +1 -0
  9. package/dist/cjs/FormAtoms.js +266 -0
  10. package/dist/cjs/FormAtoms.js.map +1 -0
  11. package/dist/cjs/Mode.js +64 -0
  12. package/dist/cjs/Mode.js.map +1 -0
  13. package/dist/cjs/Validation.js +69 -0
  14. package/dist/cjs/Validation.js.map +1 -0
  15. package/dist/cjs/index.js +35 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/internal/dirty.js +101 -0
  18. package/dist/cjs/internal/dirty.js.map +1 -0
  19. package/dist/cjs/internal/path.js +96 -0
  20. package/dist/cjs/internal/path.js.map +1 -0
  21. package/dist/cjs/internal/weak-registry.js +52 -0
  22. package/dist/cjs/internal/weak-registry.js.map +1 -0
  23. package/dist/dts/Form.d.ts +317 -0
  24. package/dist/dts/Form.d.ts.map +1 -0
  25. package/dist/dts/FormAtoms.d.ts +145 -0
  26. package/dist/dts/FormAtoms.d.ts.map +1 -0
  27. package/dist/dts/Mode.d.ts +55 -0
  28. package/dist/dts/Mode.d.ts.map +1 -0
  29. package/dist/dts/Validation.d.ts +23 -0
  30. package/dist/dts/Validation.d.ts.map +1 -0
  31. package/dist/dts/index.d.ts +26 -0
  32. package/dist/dts/index.d.ts.map +1 -0
  33. package/dist/dts/internal/dirty.d.ts +13 -0
  34. package/dist/dts/internal/dirty.d.ts.map +1 -0
  35. package/dist/dts/internal/path.d.ts +32 -0
  36. package/dist/dts/internal/path.d.ts.map +1 -0
  37. package/dist/dts/internal/weak-registry.d.ts +7 -0
  38. package/dist/dts/internal/weak-registry.d.ts.map +1 -0
  39. package/dist/esm/Form.js +263 -0
  40. package/dist/esm/Form.js.map +1 -0
  41. package/dist/esm/FormAtoms.js +238 -0
  42. package/dist/esm/FormAtoms.js.map +1 -0
  43. package/dist/esm/Mode.js +36 -0
  44. package/dist/esm/Mode.js.map +1 -0
  45. package/dist/esm/Validation.js +40 -0
  46. package/dist/esm/Validation.js.map +1 -0
  47. package/dist/esm/index.js +26 -0
  48. package/dist/esm/index.js.map +1 -0
  49. package/dist/esm/internal/dirty.js +72 -0
  50. package/dist/esm/internal/dirty.js.map +1 -0
  51. package/dist/esm/internal/path.js +86 -0
  52. package/dist/esm/internal/path.js.map +1 -0
  53. package/dist/esm/internal/weak-registry.js +45 -0
  54. package/dist/esm/internal/weak-registry.js.map +1 -0
  55. package/dist/esm/package.json +4 -0
  56. package/package.json +64 -0
  57. package/src/Form.ts +522 -0
  58. package/src/FormAtoms.ts +485 -0
  59. package/src/Mode.ts +59 -0
  60. package/src/Validation.ts +43 -0
  61. package/src/index.ts +28 -0
  62. package/src/internal/dirty.ts +96 -0
  63. package/src/internal/path.ts +93 -0
  64. package/src/internal/weak-registry.ts +60 -0
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parse = void 0;
7
+ var Duration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Duration"));
8
+ function _interopRequireWildcard(e, t) {
9
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
10
+ n = new WeakMap();
11
+ return (_interopRequireWildcard = function (e, t) {
12
+ if (!t && e && e.__esModule) return e;
13
+ var o,
14
+ i,
15
+ f = {
16
+ __proto__: null,
17
+ default: e
18
+ };
19
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
20
+ if (o = t ? n : r) {
21
+ if (o.has(e)) return o.get(e);
22
+ o.set(e, f);
23
+ }
24
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
25
+ return f;
26
+ })(e, t);
27
+ }
28
+ /**
29
+ * Form validation mode configuration.
30
+ *
31
+ * @since 1.0.0
32
+ */
33
+
34
+ /**
35
+ * Parses a FormMode into a normalized ParsedMode.
36
+ *
37
+ * @since 1.0.0
38
+ * @category Parsing
39
+ */
40
+ const parse = (mode = "onSubmit") => {
41
+ if (typeof mode === "string") {
42
+ return {
43
+ validation: mode,
44
+ debounce: null,
45
+ autoSubmit: false
46
+ };
47
+ }
48
+ if ("onBlur" in mode) {
49
+ return {
50
+ validation: "onBlur",
51
+ debounce: null,
52
+ autoSubmit: true
53
+ };
54
+ }
55
+ const debounceMs = Duration.toMillis(mode.onChange.debounce);
56
+ const autoSubmit = mode.onChange.autoSubmit === true;
57
+ return {
58
+ validation: "onChange",
59
+ debounce: debounceMs,
60
+ autoSubmit
61
+ };
62
+ };
63
+ exports.parse = parse;
64
+ //# sourceMappingURL=Mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mode.js","names":["Duration","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","parse","mode","validation","debounce","autoSubmit","debounceMs","toMillis","onChange","exports"],"sources":["../../src/Mode.ts"],"sourcesContent":[null],"mappings":";;;;;;AAKA,IAAAA,QAAA,gBAAAC,uBAAA,cAAAC,OAAA;AAA2C,SAAAD,wBAAAE,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA;MAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA;AAL3C;;;;;;AA0CA;;;;;;AAMO,MAAMkB,KAAK,GAAGA,CAACC,IAAA,GAAiB,UAAU,KAAgB;EAC/D,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO;MAAEC,UAAU,EAAED,IAAI;MAAEE,QAAQ,EAAE,IAAI;MAAEC,UAAU,EAAE;IAAK,CAAE;EAChE;EACA,IAAI,QAAQ,IAAIH,IAAI,EAAE;IACpB,OAAO;MAAEC,UAAU,EAAE,QAAQ;MAAEC,QAAQ,EAAE,IAAI;MAAEC,UAAU,EAAE;IAAI,CAAE;EACnE;EACA,MAAMC,UAAU,GAAG3B,QAAQ,CAAC4B,QAAQ,CAACL,IAAI,CAACM,QAAQ,CAACJ,QAAQ,CAAC;EAC5D,MAAMC,UAAU,GAAGH,IAAI,CAACM,QAAQ,CAACH,UAAU,KAAK,IAAI;EACpD,OAAO;IAAEF,UAAU,EAAE,UAAU;IAAEC,QAAQ,EAAEE,UAAU;IAAED;EAAU,CAAE;AACrE,CAAC;AAAAI,OAAA,CAAAR,KAAA,GAAAA,KAAA","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.routeErrors = exports.extractFirstError = void 0;
7
+ var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
8
+ var ParseResult = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/ParseResult"));
9
+ var _path = /*#__PURE__*/require("./internal/path.js");
10
+ function _interopRequireWildcard(e, t) {
11
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
12
+ n = new WeakMap();
13
+ return (_interopRequireWildcard = function (e, t) {
14
+ if (!t && e && e.__esModule) return e;
15
+ var o,
16
+ i,
17
+ f = {
18
+ __proto__: null,
19
+ default: e
20
+ };
21
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
22
+ if (o = t ? n : r) {
23
+ if (o.has(e)) return o.get(e);
24
+ o.set(e, f);
25
+ }
26
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
27
+ return f;
28
+ })(e, t);
29
+ }
30
+ /**
31
+ * Validation utilities for form error handling.
32
+ *
33
+ * @since 1.0.0
34
+ */
35
+
36
+ /**
37
+ * Extracts the first error message from a ParseError.
38
+ *
39
+ * @since 1.0.0
40
+ * @category Error Handling
41
+ */
42
+ const extractFirstError = error => {
43
+ const issues = ParseResult.ArrayFormatter.formatErrorSync(error);
44
+ if (issues.length === 0) {
45
+ return Option.none();
46
+ }
47
+ return Option.some(issues[0].message);
48
+ };
49
+ /**
50
+ * Routes validation errors from a ParseError to a map of field paths to error messages.
51
+ * Used for cross-field validation where schema errors need to be displayed on specific fields.
52
+ *
53
+ * @since 1.0.0
54
+ * @category Error Handling
55
+ */
56
+ exports.extractFirstError = extractFirstError;
57
+ const routeErrors = error => {
58
+ const result = new Map();
59
+ const issues = ParseResult.ArrayFormatter.formatErrorSync(error);
60
+ for (const issue of issues) {
61
+ const fieldPath = (0, _path.schemaPathToFieldPath)(issue.path);
62
+ if (fieldPath && !result.has(fieldPath)) {
63
+ result.set(fieldPath, issue.message);
64
+ }
65
+ }
66
+ return result;
67
+ };
68
+ exports.routeErrors = routeErrors;
69
+ //# sourceMappingURL=Validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validation.js","names":["Option","_interopRequireWildcard","require","ParseResult","_path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extractFirstError","error","issues","ArrayFormatter","formatErrorSync","length","none","some","message","exports","routeErrors","result","Map","issue","fieldPath","schemaPathToFieldPath","path"],"sources":["../../src/Validation.ts"],"sourcesContent":[null],"mappings":";;;;;;AAKA,IAAAA,MAAA,gBAAAC,uBAAA,cAAAC,OAAA;AACA,IAAAC,WAAA,gBAAAF,uBAAA,cAAAC,OAAA;AACA,IAAAE,KAAA,gBAAAF,OAAA;AAA0D,SAAAD,wBAAAI,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA;MAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA;AAP1D;;;;;;AASA;;;;;;AAMO,MAAMkB,iBAAiB,GAAIC,KAA6B,IAA2B;EACxF,MAAMC,MAAM,GAAGvB,WAAW,CAACwB,cAAc,CAACC,eAAe,CAACH,KAAK,CAAC;EAChE,IAAIC,MAAM,CAACG,MAAM,KAAK,CAAC,EAAE;IACvB,OAAO7B,MAAM,CAAC8B,IAAI,EAAE;EACtB;EACA,OAAO9B,MAAM,CAAC+B,IAAI,CAACL,MAAM,CAAC,CAAC,CAAC,CAACM,OAAO,CAAC;AACvC,CAAC;AAED;;;;;;;AAAAC,OAAA,CAAAT,iBAAA,GAAAA,iBAAA;AAOO,MAAMU,WAAW,GAAIT,KAA6B,IAAyB;EAChF,MAAMU,MAAM,GAAG,IAAIC,GAAG,EAAkB;EACxC,MAAMV,MAAM,GAAGvB,WAAW,CAACwB,cAAc,CAACC,eAAe,CAACH,KAAK,CAAC;EAEhE,KAAK,MAAMY,KAAK,IAAIX,MAAM,EAAE;IAC1B,MAAMY,SAAS,GAAG,IAAAlC,KAAA,CAAAmC,qBAAqB,EAACF,KAAK,CAACG,IAAI,CAAC;IACnD,IAAIF,SAAS,IAAI,CAACH,MAAM,CAACnB,GAAG,CAACsB,SAAS,CAAC,EAAE;MACvCH,MAAM,CAACjB,GAAG,CAACoB,SAAS,EAAED,KAAK,CAACL,OAAO,CAAC;IACtC;EACF;EAEA,OAAOG,MAAM;AACf,CAAC;AAAAF,OAAA,CAAAC,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Validation = exports.Mode = exports.FormAtoms = exports.Form = void 0;
7
+ var _Form = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Form.js"));
8
+ exports.Form = _Form;
9
+ var _FormAtoms = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./FormAtoms.js"));
10
+ exports.FormAtoms = _FormAtoms;
11
+ var _Mode = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Mode.js"));
12
+ exports.Mode = _Mode;
13
+ var _Validation = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Validation.js"));
14
+ exports.Validation = _Validation;
15
+ function _interopRequireWildcard(e, t) {
16
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
17
+ n = new WeakMap();
18
+ return (_interopRequireWildcard = function (e, t) {
19
+ if (!t && e && e.__esModule) return e;
20
+ var o,
21
+ i,
22
+ f = {
23
+ __proto__: null,
24
+ default: e
25
+ };
26
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
27
+ if (o = t ? n : r) {
28
+ if (o.has(e)) return o.get(e);
29
+ o.set(e, f);
30
+ }
31
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
32
+ return f;
33
+ })(e, t);
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"","ignoreList":[]}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.recalculateDirtySubtree = exports.recalculateDirtyFieldsForArray = void 0;
7
+ var Equal = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Equal"));
8
+ var Utils = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Utils"));
9
+ var _path = /*#__PURE__*/require("./path.js");
10
+ function _interopRequireWildcard(e, t) {
11
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
12
+ n = new WeakMap();
13
+ return (_interopRequireWildcard = function (e, t) {
14
+ if (!t && e && e.__esModule) return e;
15
+ var o,
16
+ i,
17
+ f = {
18
+ __proto__: null,
19
+ default: e
20
+ };
21
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
22
+ if (o = t ? n : r) {
23
+ if (o.has(e)) return o.get(e);
24
+ o.set(e, f);
25
+ }
26
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
27
+ return f;
28
+ })(e, t);
29
+ }
30
+ /**
31
+ * Internal dirty tracking algorithms.
32
+ *
33
+ * @internal
34
+ */
35
+
36
+ /**
37
+ * Recalculates dirty fields for an array after mutation.
38
+ * Clears all paths under the array and re-evaluates each item.
39
+ */
40
+ const recalculateDirtyFieldsForArray = (dirtyFields, initialValues, arrayPath, newItems) => {
41
+ const nextDirty = new Set(Array.from(dirtyFields).filter(path => path !== arrayPath && !path.startsWith(arrayPath + ".") && !path.startsWith(arrayPath + "[")));
42
+ const initialItems = (0, _path.getNestedValue)(initialValues, arrayPath) ?? [];
43
+ const loopLength = Math.max(newItems.length, initialItems.length);
44
+ for (let i = 0; i < loopLength; i++) {
45
+ const itemPath = `${arrayPath}[${i}]`;
46
+ const newItem = newItems[i];
47
+ const initialItem = initialItems[i];
48
+ const isEqual = Utils.structuralRegion(() => Equal.equals(newItem, initialItem));
49
+ if (!isEqual) {
50
+ nextDirty.add(itemPath);
51
+ }
52
+ }
53
+ if (newItems.length !== initialItems.length) {
54
+ nextDirty.add(arrayPath);
55
+ } else {
56
+ nextDirty.delete(arrayPath);
57
+ }
58
+ return nextDirty;
59
+ };
60
+ /**
61
+ * Recalculates dirty fields for a subtree after value change.
62
+ * Clears the rootPath and all children, then re-evaluates recursively.
63
+ *
64
+ * @param rootPath - Empty string for full form, or a specific path for targeted update
65
+ */
66
+ exports.recalculateDirtyFieldsForArray = recalculateDirtyFieldsForArray;
67
+ const recalculateDirtySubtree = (currentDirty, allInitial, allValues, rootPath = "") => {
68
+ const nextDirty = new Set(currentDirty);
69
+ if (rootPath === "") {
70
+ nextDirty.clear();
71
+ } else {
72
+ for (const path of nextDirty) {
73
+ if (path === rootPath || path.startsWith(rootPath + ".") || path.startsWith(rootPath + "[")) {
74
+ nextDirty.delete(path);
75
+ }
76
+ }
77
+ }
78
+ const targetValue = rootPath ? (0, _path.getNestedValue)(allValues, rootPath) : allValues;
79
+ const targetInitial = rootPath ? (0, _path.getNestedValue)(allInitial, rootPath) : allInitial;
80
+ const recurse = (current, initial, path) => {
81
+ if (Array.isArray(current)) {
82
+ const initialArr = initial ?? [];
83
+ for (let i = 0; i < Math.max(current.length, initialArr.length); i++) {
84
+ recurse(current[i], initialArr[i], path ? `${path}[${i}]` : `[${i}]`);
85
+ }
86
+ } else if (current !== null && typeof current === "object") {
87
+ const initialObj = initial ?? {};
88
+ const allKeys = new Set([...Object.keys(current), ...Object.keys(initialObj)]);
89
+ for (const key of allKeys) {
90
+ recurse(current[key], initialObj[key], path ? `${path}.${key}` : key);
91
+ }
92
+ } else {
93
+ const isEqual = Utils.structuralRegion(() => Equal.equals(current, initial));
94
+ if (!isEqual && path) nextDirty.add(path);
95
+ }
96
+ };
97
+ recurse(targetValue, targetInitial, rootPath);
98
+ return nextDirty;
99
+ };
100
+ exports.recalculateDirtySubtree = recalculateDirtySubtree;
101
+ //# sourceMappingURL=dirty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dirty.js","names":["Equal","_interopRequireWildcard","require","Utils","_path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","recalculateDirtyFieldsForArray","dirtyFields","initialValues","arrayPath","newItems","nextDirty","Set","Array","from","filter","path","startsWith","initialItems","getNestedValue","loopLength","Math","max","length","itemPath","newItem","initialItem","isEqual","structuralRegion","equals","add","delete","exports","recalculateDirtySubtree","currentDirty","allInitial","allValues","rootPath","clear","targetValue","targetInitial","recurse","current","initial","isArray","initialArr","initialObj","allKeys","keys","key"],"sources":["../../../src/internal/dirty.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setNestedValue = exports.schemaPathToFieldPath = exports.isPathOrParentDirty = exports.getNestedValue = void 0;
7
+ /**
8
+ * Internal path utilities for form field operations.
9
+ *
10
+ * @internal
11
+ */
12
+ const BRACKET_NOTATION_REGEX = /\[(\d+)\]/g;
13
+ /**
14
+ * Converts a schema path array to a dot/bracket notation string.
15
+ *
16
+ * @example
17
+ * schemaPathToFieldPath(["items", 0, "name"]) // "items[0].name"
18
+ */
19
+ const schemaPathToFieldPath = path => {
20
+ if (path.length === 0) return "";
21
+ let result = String(path[0]);
22
+ for (let i = 1; i < path.length; i++) {
23
+ const segment = path[i];
24
+ if (typeof segment === "number") {
25
+ result += `[${segment}]`;
26
+ } else {
27
+ result += `.${String(segment)}`;
28
+ }
29
+ }
30
+ return result;
31
+ };
32
+ /**
33
+ * Checks if a field path or any of its parent paths are in the dirty set.
34
+ */
35
+ exports.schemaPathToFieldPath = schemaPathToFieldPath;
36
+ const isPathOrParentDirty = (dirtyFields, path) => {
37
+ if (dirtyFields.has(path)) return true;
38
+ let parent = path;
39
+ while (true) {
40
+ const lastDot = parent.lastIndexOf(".");
41
+ const lastBracket = parent.lastIndexOf("[");
42
+ const splitIndex = Math.max(lastDot, lastBracket);
43
+ if (splitIndex === -1) break;
44
+ parent = parent.substring(0, splitIndex);
45
+ if (dirtyFields.has(parent)) return true;
46
+ }
47
+ return false;
48
+ };
49
+ /**
50
+ * Gets a nested value from an object using dot/bracket notation path.
51
+ *
52
+ * @example
53
+ * getNestedValue({ items: [{ name: "A" }] }, "items[0].name") // "A"
54
+ */
55
+ exports.isPathOrParentDirty = isPathOrParentDirty;
56
+ const getNestedValue = (obj, path) => {
57
+ if (path === "") return obj;
58
+ const parts = path.replace(BRACKET_NOTATION_REGEX, ".$1").split(".");
59
+ let current = obj;
60
+ for (const part of parts) {
61
+ if (current == null || typeof current !== "object") return undefined;
62
+ current = current[part];
63
+ }
64
+ return current;
65
+ };
66
+ /**
67
+ * Sets a nested value in an object immutably using dot/bracket notation path.
68
+ *
69
+ * @example
70
+ * setNestedValue({ items: [{ name: "A" }] }, "items[0].name", "B")
71
+ * // { items: [{ name: "B" }] }
72
+ */
73
+ exports.getNestedValue = getNestedValue;
74
+ const setNestedValue = (obj, path, value) => {
75
+ if (path === "") return value;
76
+ const parts = path.replace(BRACKET_NOTATION_REGEX, ".$1").split(".");
77
+ const result = {
78
+ ...obj
79
+ };
80
+ let current = result;
81
+ for (let i = 0; i < parts.length - 1; i++) {
82
+ const part = parts[i];
83
+ if (Array.isArray(current[part])) {
84
+ current[part] = [...current[part]];
85
+ } else {
86
+ current[part] = {
87
+ ...current[part]
88
+ };
89
+ }
90
+ current = current[part];
91
+ }
92
+ current[parts[parts.length - 1]] = value;
93
+ return result;
94
+ };
95
+ exports.setNestedValue = setNestedValue;
96
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","names":["BRACKET_NOTATION_REGEX","schemaPathToFieldPath","path","length","result","String","i","segment","exports","isPathOrParentDirty","dirtyFields","has","parent","lastDot","lastIndexOf","lastBracket","splitIndex","Math","max","substring","getNestedValue","obj","parts","replace","split","current","part","undefined","setNestedValue","value","Array","isArray"],"sources":["../../../src/internal/path.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createWeakRegistry = void 0;
7
+ /**
8
+ * Internal WeakRef-based registry for caching atoms.
9
+ *
10
+ * @internal
11
+ */
12
+ /**
13
+ * Creates a WeakRef-based registry with automatic cleanup via FinalizationRegistry.
14
+ * Falls back to a regular Map in environments without WeakRef support.
15
+ *
16
+ * @internal
17
+ */
18
+ const createWeakRegistry = () => {
19
+ if (typeof WeakRef === "undefined" || typeof FinalizationRegistry === "undefined") {
20
+ const map = new Map();
21
+ return {
22
+ get: key => map.get(key),
23
+ set: (key, value) => {
24
+ map.set(key, value);
25
+ },
26
+ delete: key => map.delete(key),
27
+ clear: () => map.clear(),
28
+ values: () => map.values()
29
+ };
30
+ }
31
+ const map = new Map();
32
+ const registry = new FinalizationRegistry(key => {
33
+ map.delete(key);
34
+ });
35
+ return {
36
+ get: key => map.get(key)?.deref(),
37
+ set: (key, value) => {
38
+ map.set(key, new WeakRef(value));
39
+ registry.register(value, key);
40
+ },
41
+ delete: key => map.delete(key),
42
+ clear: () => map.clear(),
43
+ *values() {
44
+ for (const ref of map.values()) {
45
+ const value = ref.deref();
46
+ if (value !== undefined) yield value;
47
+ }
48
+ }
49
+ };
50
+ };
51
+ exports.createWeakRegistry = createWeakRegistry;
52
+ //# sourceMappingURL=weak-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weak-registry.js","names":["createWeakRegistry","WeakRef","FinalizationRegistry","map","Map","get","key","set","value","delete","clear","values","registry","deref","register","ref","undefined","exports"],"sources":["../../../src/internal/weak-registry.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA;;;;;AAmBA;;;;;;AAMO,MAAMA,kBAAkB,GAAGA,CAAA,KAAwC;EACxE,IAAI,OAAOC,OAAO,KAAK,WAAW,IAAI,OAAOC,oBAAoB,KAAK,WAAW,EAAE;IACjF,MAAMC,GAAG,GAAG,IAAIC,GAAG,EAAa;IAChC,OAAO;MACLC,GAAG,EAAGC,GAAG,IAAKH,GAAG,CAACE,GAAG,CAACC,GAAG,CAAC;MAC1BC,GAAG,EAAEA,CAACD,GAAG,EAAEE,KAAK,KAAI;QAClBL,GAAG,CAACI,GAAG,CAACD,GAAG,EAAEE,KAAK,CAAC;MACrB,CAAC;MACDC,MAAM,EAAGH,GAAG,IAAKH,GAAG,CAACM,MAAM,CAACH,GAAG,CAAC;MAChCI,KAAK,EAAEA,CAAA,KAAMP,GAAG,CAACO,KAAK,EAAE;MACxBC,MAAM,EAAEA,CAAA,KAAMR,GAAG,CAACQ,MAAM;KACzB;EACH;EAEA,MAAMR,GAAG,GAAG,IAAIC,GAAG,EAAsB;EACzC,MAAMQ,QAAQ,GAAG,IAAIV,oBAAoB,CAAUI,GAAG,IAAI;IACxDH,GAAG,CAACM,MAAM,CAACH,GAAG,CAAC;EACjB,CAAC,CAAC;EAEF,OAAO;IACLD,GAAG,EAAGC,GAAG,IAAKH,GAAG,CAACE,GAAG,CAACC,GAAG,CAAC,EAAEO,KAAK,EAAE;IACnCN,GAAG,EAAEA,CAACD,GAAG,EAAEE,KAAK,KAAI;MAClBL,GAAG,CAACI,GAAG,CAACD,GAAG,EAAE,IAAIL,OAAO,CAACO,KAAK,CAAC,CAAC;MAChCI,QAAQ,CAACE,QAAQ,CAACN,KAAK,EAAEF,GAAG,CAAC;IAC/B,CAAC;IACDG,MAAM,EAAGH,GAAG,IAAKH,GAAG,CAACM,MAAM,CAACH,GAAG,CAAC;IAChCI,KAAK,EAAEA,CAAA,KAAMP,GAAG,CAACO,KAAK,EAAE;IACxB,CAACC,MAAMA,CAAA;MACL,KAAK,MAAMI,GAAG,IAAIZ,GAAG,CAACQ,MAAM,EAAE,EAAE;QAC9B,MAAMH,KAAK,GAAGO,GAAG,CAACF,KAAK,EAAE;QACzB,IAAIL,KAAK,KAAKQ,SAAS,EAAE,MAAMR,KAAK;MACtC;IACF;GACD;AACH,CAAC;AAAAS,OAAA,CAAAjB,kBAAA,GAAAA,kBAAA","ignoreList":[]}