palistor 0.0.25 → 0.0.26

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 (255) hide show
  1. package/README.md +574 -542
  2. package/README.ru.md +979 -0
  3. package/dist/index.d.ts +16 -27
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +17 -28
  6. package/dist/index.js.map +1 -1
  7. package/dist/react/createTrackingProxy.d.ts +27 -27
  8. package/dist/react/createTrackingProxy.d.ts.map +1 -1
  9. package/dist/react/createTrackingProxy.js +54 -53
  10. package/dist/react/createTrackingProxy.js.map +1 -1
  11. package/dist/react/useForm.d.ts +42 -43
  12. package/dist/react/useForm.d.ts.map +1 -1
  13. package/dist/react/useForm.js +38 -38
  14. package/dist/react/useForm.js.map +1 -1
  15. package/dist/react/usePersist.d.ts +14 -14
  16. package/dist/react/usePersist.js +18 -18
  17. package/dist/react/usePersist.js.map +1 -1
  18. package/dist/react/useStoreContext.d.ts +11 -11
  19. package/dist/react/useStoreContext.js +11 -11
  20. package/dist/react/useTranslator.d.ts +12 -12
  21. package/dist/react/useTranslator.js +12 -12
  22. package/dist/store/applyPatch/applyPatch.d.ts +8 -8
  23. package/dist/store/applyPatch/applyPatch.js +12 -12
  24. package/dist/store/applyPatch/applyPatch.js.map +1 -1
  25. package/dist/store/buildProxy/buildEntityProjectionProxy.js +6 -6
  26. package/dist/store/buildProxy/buildEntityProjectionProxy.js.map +1 -1
  27. package/dist/store/buildProxy/buildListProxy.d.ts +8 -8
  28. package/dist/store/buildProxy/buildListProxy.js +30 -30
  29. package/dist/store/buildProxy/buildListProxy.js.map +1 -1
  30. package/dist/store/buildProxy/buildProxy.d.ts +8 -8
  31. package/dist/store/buildProxy/buildProxy.js +39 -39
  32. package/dist/store/buildProxy/buildProxy.js.map +1 -1
  33. package/dist/store/buildProxy/computeProxyKeys.d.ts +8 -8
  34. package/dist/store/buildProxy/computeProxyKeys.js +9 -9
  35. package/dist/store/buildProxy/computeProxyKeys.js.map +1 -1
  36. package/dist/store/buildProxy/handleLazyResolve.d.ts +3 -3
  37. package/dist/store/buildProxy/handleLazyResolve.js +3 -3
  38. package/dist/store/buildProxy/initProxyCaches.d.ts +5 -5
  39. package/dist/store/buildProxy/initProxyCaches.js +5 -5
  40. package/dist/store/compute/computeFieldState.d.ts +3 -3
  41. package/dist/store/compute/computeFieldState.js +8 -8
  42. package/dist/store/compute/computeFieldState.js.map +1 -1
  43. package/dist/store/compute/fieldStateChanged.d.ts +1 -1
  44. package/dist/store/compute/fieldStateChanged.js +1 -1
  45. package/dist/store/compute/recompute/collectGroupComputeNodes.d.ts +4 -4
  46. package/dist/store/compute/recompute/collectGroupComputeNodes.js +7 -7
  47. package/dist/store/compute/recompute/collectGroupComputeNodes.js.map +1 -1
  48. package/dist/store/compute/recompute/recomputeAndNotify.d.ts +3 -3
  49. package/dist/store/compute/recompute/recomputeAndNotify.js +3 -3
  50. package/dist/store/compute/recompute/recomputeLeaves.d.ts +11 -10
  51. package/dist/store/compute/recompute/recomputeLeaves.d.ts.map +1 -1
  52. package/dist/store/compute/recompute/recomputeLeaves.js +26 -27
  53. package/dist/store/compute/recompute/recomputeLeaves.js.map +1 -1
  54. package/dist/store/compute/recompute/recomputeTargeted.d.ts +7 -7
  55. package/dist/store/compute/recompute/recomputeTargeted.js +12 -12
  56. package/dist/store/compute/recompute/recomputeTargeted.js.map +1 -1
  57. package/dist/store/compute/recompute/topologicalSortComputed.d.ts +4 -4
  58. package/dist/store/compute/recompute/topologicalSortComputed.d.ts.map +1 -1
  59. package/dist/store/compute/recompute/topologicalSortComputed.js +11 -13
  60. package/dist/store/compute/recompute/topologicalSortComputed.js.map +1 -1
  61. package/dist/store/compute/recompute/types.d.ts +4 -4
  62. package/dist/store/compute/resolveFlag.d.ts +2 -2
  63. package/dist/store/compute/resolveFlag.js +2 -2
  64. package/dist/store/compute/resolveString.d.ts +5 -5
  65. package/dist/store/compute/resolveString.js +6 -6
  66. package/dist/store/compute/resolveString.js.map +1 -1
  67. package/dist/store/compute/types.d.ts +3 -3
  68. package/dist/store/constants.d.ts +48 -48
  69. package/dist/store/constants.d.ts.map +1 -1
  70. package/dist/store/constants.js +45 -45
  71. package/dist/store/defineFieldMapping.d.ts +21 -19
  72. package/dist/store/defineFieldMapping.d.ts.map +1 -1
  73. package/dist/store/defineFieldMapping.js +21 -19
  74. package/dist/store/defineFieldMapping.js.map +1 -1
  75. package/dist/store/dirtyTracking/collectInitialSnapshot.js +1 -1
  76. package/dist/store/dirtyTracking/collectInitialSnapshot.js.map +1 -1
  77. package/dist/store/dirtyTracking/recomputeDirtyTargeted.d.ts +3 -3
  78. package/dist/store/dirtyTracking/recomputeDirtyTargeted.js +11 -11
  79. package/dist/store/dirtyTracking/recomputeDirtyTargeted.js.map +1 -1
  80. package/dist/store/dirtyTracking/setGroupRevalidate.d.ts +6 -6
  81. package/dist/store/dirtyTracking/setGroupRevalidate.js +7 -7
  82. package/dist/store/dirtyTracking/setGroupRevalidate.js.map +1 -1
  83. package/dist/store/entityRegistry/entityRegistry.d.ts +72 -72
  84. package/dist/store/entityRegistry/entityRegistry.d.ts.map +1 -1
  85. package/dist/store/entityRegistry/entityRegistry.js +91 -91
  86. package/dist/store/entityRegistry/entityRegistry.js.map +1 -1
  87. package/dist/store/entityRegistry/generateId.d.ts +3 -3
  88. package/dist/store/entityRegistry/generateId.js +3 -3
  89. package/dist/store/entityRegistry/types.d.ts +17 -17
  90. package/dist/store/entityRegistry/types.d.ts.map +1 -1
  91. package/dist/store/flow/buildFlowStepsProxy.d.ts +9 -9
  92. package/dist/store/flow/buildFlowStepsProxy.js +13 -13
  93. package/dist/store/flow/buildFlowStepsProxy.js.map +1 -1
  94. package/dist/store/flow/defineFlow.d.ts +27 -25
  95. package/dist/store/flow/defineFlow.d.ts.map +1 -1
  96. package/dist/store/flow/defineFlow.js +15 -13
  97. package/dist/store/flow/defineFlow.js.map +1 -1
  98. package/dist/store/flow/flowApi.d.ts +3 -2
  99. package/dist/store/flow/flowApi.d.ts.map +1 -1
  100. package/dist/store/flow/flowApi.js +1 -1
  101. package/dist/store/flow/flowApi.js.map +1 -1
  102. package/dist/store/flow/flowNavigation.d.ts +65 -63
  103. package/dist/store/flow/flowNavigation.d.ts.map +1 -1
  104. package/dist/store/flow/flowNavigation.js +74 -72
  105. package/dist/store/flow/flowNavigation.js.map +1 -1
  106. package/dist/store/flow/flowState.d.ts +16 -16
  107. package/dist/store/flow/flowState.d.ts.map +1 -1
  108. package/dist/store/flow/flowState.js +5 -5
  109. package/dist/store/flow/flowState.js.map +1 -1
  110. package/dist/store/groupDeps/createGroupDeps.d.ts +3 -3
  111. package/dist/store/groupDeps/createGroupDeps.js +6 -6
  112. package/dist/store/groupDeps/createGroupDeps.js.map +1 -1
  113. package/dist/store/groupDeps/createTrackingValues.d.ts +9 -9
  114. package/dist/store/groupDeps/createTrackingValues.js +11 -11
  115. package/dist/store/groupDeps/createTrackingValues.js.map +1 -1
  116. package/dist/store/groupDeps/getNodeGroupPath.d.ts +3 -3
  117. package/dist/store/groupDeps/getNodeGroupPath.js +5 -5
  118. package/dist/store/groupDeps/getNodeGroupPath.js.map +1 -1
  119. package/dist/store/groupDeps/getRecipientGroups.d.ts +1 -1
  120. package/dist/store/groupDeps/getRecipientGroups.js +1 -1
  121. package/dist/store/groupDeps/groupDeps.d.ts +7 -7
  122. package/dist/store/groupDeps/groupDeps.js +7 -7
  123. package/dist/store/groupDeps/pairKey.d.ts +3 -3
  124. package/dist/store/groupDeps/pairKey.d.ts.map +1 -1
  125. package/dist/store/groupDeps/pairKey.js +4 -4
  126. package/dist/store/groupDeps/pairKey.js.map +1 -1
  127. package/dist/store/groupDeps/resolveGroupByPath.d.ts +3 -3
  128. package/dist/store/groupDeps/resolveGroupByPath.js +3 -3
  129. package/dist/store/init/createNotificationHub.d.ts +31 -31
  130. package/dist/store/init/createNotificationHub.d.ts.map +1 -1
  131. package/dist/store/init/createNotificationHub.js +36 -37
  132. package/dist/store/init/createNotificationHub.js.map +1 -1
  133. package/dist/store/init/createResolveManager.d.ts +72 -69
  134. package/dist/store/init/createResolveManager.d.ts.map +1 -1
  135. package/dist/store/init/createResolveManager.js +101 -98
  136. package/dist/store/init/createResolveManager.js.map +1 -1
  137. package/dist/store/init/initGroupSubmitting.d.ts +2 -2
  138. package/dist/store/init/initGroupSubmitting.js +4 -4
  139. package/dist/store/init/initGroupSubmitting.js.map +1 -1
  140. package/dist/store/normalizeConfig.d.ts +20 -18
  141. package/dist/store/normalizeConfig.d.ts.map +1 -1
  142. package/dist/store/normalizeConfig.js +31 -29
  143. package/dist/store/normalizeConfig.js.map +1 -1
  144. package/dist/store/onChangePipeline/computeFieldKey.d.ts +2 -2
  145. package/dist/store/onChangePipeline/computeFieldKey.js +2 -2
  146. package/dist/store/onChangePipeline/findOnChangeAncestors.d.ts +2 -2
  147. package/dist/store/onChangePipeline/findOnChangeAncestors.js +4 -4
  148. package/dist/store/onChangePipeline/findOnChangeAncestors.js.map +1 -1
  149. package/dist/store/onChangePipeline/onChangePipeline.d.ts +13 -12
  150. package/dist/store/onChangePipeline/onChangePipeline.d.ts.map +1 -1
  151. package/dist/store/onChangePipeline/onChangePipeline.js +14 -13
  152. package/dist/store/onChangePipeline/onChangePipeline.js.map +1 -1
  153. package/dist/store/persist/drivers.d.ts +7 -7
  154. package/dist/store/persist/drivers.js +8 -8
  155. package/dist/store/persist/drivers.js.map +1 -1
  156. package/dist/store/persist/index.d.ts +1 -1
  157. package/dist/store/persist/persistManager.d.ts +23 -23
  158. package/dist/store/persist/persistManager.d.ts.map +1 -1
  159. package/dist/store/persist/persistManager.js +51 -51
  160. package/dist/store/persist/persistManager.js.map +1 -1
  161. package/dist/store/persist/types.d.ts +23 -23
  162. package/dist/store/persist/types.d.ts.map +1 -1
  163. package/dist/store/persist/types.js +4 -4
  164. package/dist/store/resetPipeline/buildResetPatch.d.ts +5 -5
  165. package/dist/store/resetPipeline/buildResetPatch.js +5 -5
  166. package/dist/store/resetPipeline/collectDefaults.d.ts +5 -5
  167. package/dist/store/resetPipeline/collectDefaults.js +6 -6
  168. package/dist/store/resetPipeline/collectDefaults.js.map +1 -1
  169. package/dist/store/resetPipeline/resetPipeline.d.ts +7 -7
  170. package/dist/store/resetPipeline/resetPipeline.js +15 -15
  171. package/dist/store/resetPipeline/resetPipeline.js.map +1 -1
  172. package/dist/store/resolvePipeline/applyPendingWrites.d.ts +10 -10
  173. package/dist/store/resolvePipeline/applyPendingWrites.d.ts.map +1 -1
  174. package/dist/store/resolvePipeline/applyPendingWrites.js +35 -38
  175. package/dist/store/resolvePipeline/applyPendingWrites.js.map +1 -1
  176. package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts +8 -7
  177. package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts.map +1 -1
  178. package/dist/store/resolvePipeline/createContextTrackingProxy.js +6 -5
  179. package/dist/store/resolvePipeline/createContextTrackingProxy.js.map +1 -1
  180. package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts +43 -43
  181. package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts.map +1 -1
  182. package/dist/store/resolvePipeline/createValuesTrackingProxy.js +70 -70
  183. package/dist/store/resolvePipeline/createValuesTrackingProxy.js.map +1 -1
  184. package/dist/store/resolvePipeline/executeListResolve.d.ts +14 -14
  185. package/dist/store/resolvePipeline/executeListResolve.js +27 -27
  186. package/dist/store/resolvePipeline/executeListResolve.js.map +1 -1
  187. package/dist/store/resolvePipeline/executeResolve.d.ts +15 -15
  188. package/dist/store/resolvePipeline/executeResolve.js +46 -46
  189. package/dist/store/resolvePipeline/executeResolve.js.map +1 -1
  190. package/dist/store/store/NodeRegistry/nodeRegistry.d.ts +61 -61
  191. package/dist/store/store/NodeRegistry/nodeRegistry.d.ts.map +1 -1
  192. package/dist/store/store/NodeRegistry/nodeRegistry.js +85 -86
  193. package/dist/store/store/NodeRegistry/nodeRegistry.js.map +1 -1
  194. package/dist/store/store/NodeRegistry/nodeUtils.d.ts +5 -5
  195. package/dist/store/store/NodeRegistry/nodeUtils.d.ts.map +1 -1
  196. package/dist/store/store/NodeRegistry/nodeUtils.js +5 -5
  197. package/dist/store/store/NodeRegistry/nodeUtils.js.map +1 -1
  198. package/dist/store/store/groupDepsMap.d.ts +23 -23
  199. package/dist/store/store/groupDepsMap.d.ts.map +1 -1
  200. package/dist/store/store/groupDepsMap.js +35 -34
  201. package/dist/store/store/groupDepsMap.js.map +1 -1
  202. package/dist/store/store/hasComputedProps.d.ts +2 -2
  203. package/dist/store/store/hasComputedProps.js +2 -2
  204. package/dist/store/store/nodeMap.d.ts +5 -5
  205. package/dist/store/store/nodeMap.js +7 -7
  206. package/dist/store/store/nodeMap.js.map +1 -1
  207. package/dist/store/store/palistor.d.ts +80 -80
  208. package/dist/store/store/palistor.d.ts.map +1 -1
  209. package/dist/store/store/palistor.js +149 -169
  210. package/dist/store/store/palistor.js.map +1 -1
  211. package/dist/store/store/registerNodes.d.ts +10 -10
  212. package/dist/store/store/registerNodes.js +15 -15
  213. package/dist/store/store/registerNodes.js.map +1 -1
  214. package/dist/store/store/serviceRegistry.d.ts +8 -8
  215. package/dist/store/store/serviceRegistry.d.ts.map +1 -1
  216. package/dist/store/store/serviceRegistry.js +8 -8
  217. package/dist/store/store/serviceRegistry.js.map +1 -1
  218. package/dist/store/store/types.d.ts +236 -234
  219. package/dist/store/store/types.d.ts.map +1 -1
  220. package/dist/store/submitPipeline/applyLeafBeforeSubmit.d.ts +2 -2
  221. package/dist/store/submitPipeline/applyLeafBeforeSubmit.js +2 -2
  222. package/dist/store/submitPipeline/collectLeafStates.d.ts +2 -2
  223. package/dist/store/submitPipeline/collectLeafStates.js +2 -2
  224. package/dist/store/submitPipeline/submitPipeline.d.ts +8 -8
  225. package/dist/store/submitPipeline/submitPipeline.js +12 -12
  226. package/dist/store/submitPipeline/submitPipeline.js.map +1 -1
  227. package/dist/store/submitPipeline/types.d.ts +1 -1
  228. package/dist/store/submitPipeline/types.d.ts.map +1 -1
  229. package/dist/store/traversal/nodeClassifier.d.ts +9 -9
  230. package/dist/store/traversal/nodeClassifier.d.ts.map +1 -1
  231. package/dist/store/traversal/nodeClassifier.js +11 -11
  232. package/dist/store/traversal/nodeClassifier.js.map +1 -1
  233. package/dist/store/traversal/walkFull.d.ts +14 -14
  234. package/dist/store/traversal/walkFull.js +2 -2
  235. package/dist/store/valuesCache/valuesCache.d.ts +9 -9
  236. package/dist/store/valuesCache/valuesCache.d.ts.map +1 -1
  237. package/dist/store/valuesCache/valuesCache.js +6 -6
  238. package/dist/store/writePipeline/formatPatch.d.ts +5 -5
  239. package/dist/store/writePipeline/formatPatch.js +7 -7
  240. package/dist/store/writePipeline/formatPatch.js.map +1 -1
  241. package/dist/store/writePipeline/formatValue.d.ts +5 -5
  242. package/dist/store/writePipeline/formatValue.js +5 -5
  243. package/dist/store/writePipeline/mergeChanged.d.ts +4 -4
  244. package/dist/store/writePipeline/mergeChanged.js +4 -4
  245. package/dist/store/writePipeline/runSetter.d.ts +6 -6
  246. package/dist/store/writePipeline/runSetter.js +8 -8
  247. package/dist/store/writePipeline/storeValue.d.ts +3 -3
  248. package/dist/store/writePipeline/storeValue.js +3 -3
  249. package/dist/store/writePipeline/types.d.ts +4 -4
  250. package/dist/store/writePipeline/types.d.ts.map +1 -1
  251. package/dist/store/writePipeline/writePipeline.d.ts +7 -7
  252. package/dist/store/writePipeline/writePipeline.d.ts.map +1 -1
  253. package/dist/store/writePipeline/writePipeline.js +15 -15
  254. package/dist/store/writePipeline/writePipeline.js.map +1 -1
  255. package/package.json +11 -4
package/dist/index.d.ts CHANGED
@@ -1,40 +1,29 @@
1
1
  /**
2
- * Palistor - State Manager для форм
2
+ * Palistor reactive form state manager for React.
3
3
  *
4
- * Архитектура: createForm + useForm(id)
5
- *
6
- * createForm() вызывается на уровне модуля задаёт статическую конфигурацию.
7
- * useForm(id) вызывается в React-компоненте — привязывает к экземпляру.
4
+ * A store is created from a declarative config (`new Palistor({ config })`)
5
+ * and consumed in React through `useForm(store)`, which returns a tracking
6
+ * proxy: components re-render only when a field they actually read changes.
8
7
  *
9
8
  * @example
10
9
  * ```ts
11
- * // config/orderForm.ts — модульный уровень
12
- * import { createForm } from 'palistor';
13
- * import { useTranslations } from 'next-intl';
14
- *
15
- * export const { useForm } = createForm<OrderValues>({
16
- * config: orderConfig,
17
- * defaults: orderDefaults,
18
- * translateFunction: useTranslations,
19
- * type: "Order",
10
+ * // config/orderForm.ts — module level
11
+ * import { Palistor } from "palistor";
12
+ *
13
+ * export const orderStore = new Palistor({
14
+ * config: {
15
+ * name: { value: "", isRequired: true },
16
+ * email: { value: "", validate: (v) => (!v.includes("@") ? "Invalid email" : undefined) },
17
+ * },
20
18
  * });
21
19
  * ```
22
20
  *
23
21
  * ```tsx
24
- * // Корневой компонент передаёт initial и колбэки
25
- * const { getFieldProps, submit } = useForm(order?.id ?? "NewOrder", {
26
- * initial: order,
27
- * onSubmit: async (values) => { await api.saveOrder(values); },
28
- * });
29
- *
30
- * return <Input {...getFieldProps("name")} />;
31
- * ```
32
- *
33
- * ```tsx
34
- * // Вложенный компонент — подключается к существующему store
35
- * const { getFieldProps } = useForm(orderId);
22
+ * // Componentsubscribes via useForm
23
+ * import { useForm } from "palistor";
36
24
  *
37
- * return <Input {...getFieldProps("name")} />;
25
+ * const form = useForm(orderStore);
26
+ * return <input value={form.name.value} onChange={(e) => form.name.onValueChange(e.target.value)} />;
38
27
  * ```
39
28
  */
40
29
  export type { PersistDriver, PersistOptions } from "./store/persist/types";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAMH,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAMnF,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAMnF,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,40 +1,29 @@
1
1
  /**
2
- * Palistor - State Manager для форм
2
+ * Palistor reactive form state manager for React.
3
3
  *
4
- * Архитектура: createForm + useForm(id)
5
- *
6
- * createForm() вызывается на уровне модуля задаёт статическую конфигурацию.
7
- * useForm(id) вызывается в React-компоненте — привязывает к экземпляру.
4
+ * A store is created from a declarative config (`new Palistor({ config })`)
5
+ * and consumed in React through `useForm(store)`, which returns a tracking
6
+ * proxy: components re-render only when a field they actually read changes.
8
7
  *
9
8
  * @example
10
9
  * ```ts
11
- * // config/orderForm.ts — модульный уровень
12
- * import { createForm } from 'palistor';
13
- * import { useTranslations } from 'next-intl';
14
- *
15
- * export const { useForm } = createForm<OrderValues>({
16
- * config: orderConfig,
17
- * defaults: orderDefaults,
18
- * translateFunction: useTranslations,
19
- * type: "Order",
10
+ * // config/orderForm.ts — module level
11
+ * import { Palistor } from "palistor";
12
+ *
13
+ * export const orderStore = new Palistor({
14
+ * config: {
15
+ * name: { value: "", isRequired: true },
16
+ * email: { value: "", validate: (v) => (!v.includes("@") ? "Invalid email" : undefined) },
17
+ * },
20
18
  * });
21
19
  * ```
22
20
  *
23
21
  * ```tsx
24
- * // Корневой компонент передаёт initial и колбэки
25
- * const { getFieldProps, submit } = useForm(order?.id ?? "NewOrder", {
26
- * initial: order,
27
- * onSubmit: async (values) => { await api.saveOrder(values); },
28
- * });
29
- *
30
- * return <Input {...getFieldProps("name")} />;
31
- * ```
32
- *
33
- * ```tsx
34
- * // Вложенный компонент — подключается к существующему store
35
- * const { getFieldProps } = useForm(orderId);
22
+ * // Componentsubscribes via useForm
23
+ * import { useForm } from "palistor";
36
24
  *
37
- * return <Input {...getFieldProps("name")} />;
25
+ * const form = useForm(orderStore);
26
+ * return <input value={form.name.value} onChange={(e) => form.name.onValueChange(e.target.value)} />;
38
27
  * ```
39
28
  */
40
29
  export { localStorageDriver, sessionStorageDriver } from "./store/persist/drivers";
@@ -56,7 +45,7 @@ export { defineList } from "./store/defineList";
56
45
  // ============================================================================
57
46
  export { defineFlow, defineStep } from "./store/flow/defineFlow";
58
47
  // ============================================================================
59
- // defineFieldMapping — typed fieldMapping helper (сохраняет литералы)
48
+ // defineFieldMapping — typed fieldMapping helper (preserves literals)
60
49
  // ============================================================================
61
50
  export { defineFieldMapping } from "./store/defineFieldMapping";
62
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAQH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAyCnF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAWjE,+EAA+E;AAC/E,sEAAsE;AACtE,+EAA+E;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAyCnF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAWjE,+EAA+E;AAC/E,sEAAsE;AACtE,+EAA+E;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,55 +1,55 @@
1
1
  /**
2
- * createTrackingProxy — оборачивает store.proxy во второй слой Proxy,
3
- * который записывает, какие config-ноды были прочитаны компонентом.
2
+ * createTrackingProxy — wraps store.proxy in a second Proxy layer that
3
+ * records which config nodes a component has read.
4
4
  *
5
- * Каждый `useForm` вызов создаёт свой tracking proxy → свой tracked set.
6
- * Это позволяет `getSnapshot` проверять версии только прочитанных нод
7
- * и не вызывать re-render, если изменились поля, которые компонент не читает.
5
+ * Every `useForm` call creates its own tracking proxy → its own tracked set.
6
+ * This lets `getSnapshot` check the versions of only the nodes that were
7
+ * read, avoiding re-renders when fields the component never reads change.
8
8
  *
9
- * Tracking работает на уровне ноды: чтение ЛЮБОГО свойства
10
- * (value, label, isVisible…) добавляет всю ноду в tracked set.
9
+ * Tracking is node-level: reading ANY property (value, label, isVisible…)
10
+ * adds the whole node to the tracked set.
11
11
  *
12
- * Списки: `items`, `map`, `length`, `loading`, `dirty` на list-proxy добавляют
13
- * объект `ListState` (бренд LIST_STATE, единый для root и per-entity) в tracked
14
- * set. Мутация/resolve бампает версию этого ListState → getSnapshot детектирует
15
- * изменение → re-render только списка. `map` → entity-прокси оборачиваются в
16
- * tracking proxy для per-leaf отслеживания строк.
12
+ * Lists: `items`, `map`, `length`, `loading`, `dirty` on a list proxy add the
13
+ * `ListState` object (the LIST_STATE brand, shared by root and per-entity) to
14
+ * the tracked set. A mutation/resolve bumps that ListState's version
15
+ * getSnapshot detects the change only the list re-renders. `map` → entity
16
+ * proxies are wrapped in tracking proxies for per-leaf row tracking.
17
17
  */
18
18
  import type { ProxyStore } from "../store/store";
19
19
  export interface TrackingRefs {
20
- /** Набор config-нод, прочитанных компонентом. Только растёт (accumulate). */
20
+ /** Set of config nodes the component has read. Only grows (accumulates). */
21
21
  accessed: Set<object>;
22
- /** Версия каждой ноды на момент первого трекинга для предотвращения
23
- * ложных re-render сразу после добавления ноды в tracked set. */
22
+ /** Each node's version at first trackingprevents spurious re-renders
23
+ * right after a node is added to the tracked set. */
24
24
  lastVersions: Map<object, number>;
25
25
  /**
26
- * Компонент обращался к дочерним ключам (form.email, form.passport),
27
- * но не читал FIELD_STATE_PROPS. Позволяет различить:
28
- * - «навигация без чтения» (Parent передаёт поддерево пропсом) → стабильный snapshot
29
- * - «ничего не трогал» (renderHook без JSX) → fallback на глобальную версию
26
+ * The component accessed child keys (form.email, form.passport) without
27
+ * reading FIELD_STATE_PROPS. Distinguishes:
28
+ * - "navigation without reads" (Parent passes a subtree as a prop) → stable snapshot
29
+ * - "touched nothing" (renderHook without JSX) → fallback to the global version
30
30
  */
31
31
  hasNavigated: boolean;
32
32
  }
33
33
  /**
34
- * Проверить, является ли объект tracking proxy (имеет SOURCE_PROXY символ).
34
+ * Check whether an object is a tracking proxy (carries the SOURCE_PROXY symbol).
35
35
  */
36
36
  export declare function isTrackingProxy(obj: unknown): boolean;
37
37
  /**
38
- * Извлечь source proxy и store из tracking proxy.
39
- * Возвращает null если объект не является tracking proxy.
38
+ * Extract the source proxy and store from a tracking proxy.
39
+ * Returns null when the object is not a tracking proxy.
40
40
  */
41
41
  export declare function unwrapTrackingProxy<TConfig extends Record<string, any>>(obj: unknown): {
42
42
  sourceProxy: any;
43
43
  store: ProxyStore<TConfig>;
44
44
  } | null;
45
45
  /**
46
- * Создать tracking proxy поверх source proxy.
47
- * Кэшируется по source proxy объектам (один tracking proxy на вложенный узел).
46
+ * Create a tracking proxy on top of a source proxy.
47
+ * Cached by source-proxy object (one tracking proxy per nested node).
48
48
  *
49
- * @param sourceProxy — базовый Proxy из store.proxy (или его дочерний узел)
49
+ * @param sourceProxy — the base Proxy from store.proxy (or its child node)
50
50
  * @param refs — per-component tracking state (accessed, lastVersions)
51
- * @param store — ProxyStore, для чтения текущих версий нод
52
- * @param cache — WeakMap для кэширования tracking прокси объектов
51
+ * @param store — the ProxyStore, for reading current node versions
52
+ * @param cache — WeakMap caching tracking proxy objects
53
53
  */
54
54
  export declare function createTrackingProxy<TConfig extends Record<string, any>>(sourceProxy: any, refs: TrackingRefs, store: ProxyStore<TConfig>, cache: WeakMap<object, object>): any;
55
55
  //# sourceMappingURL=createTrackingProxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createTrackingProxy.d.ts","sourceRoot":"","sources":["../../react/createTrackingProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAmBjD,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB;sEACkE;IAClE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,GAAG,EAAE,OAAO,GACX;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CA2JL"}
1
+ {"version":3,"file":"createTrackingProxy.d.ts","sourceRoot":"","sources":["../../react/createTrackingProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAmBjD,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB;0DACsD;IACtD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,GAAG,EAAE,OAAO,GACX;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CA4JL"}
@@ -1,25 +1,25 @@
1
1
  /**
2
- * createTrackingProxy — оборачивает store.proxy во второй слой Proxy,
3
- * который записывает, какие config-ноды были прочитаны компонентом.
2
+ * createTrackingProxy — wraps store.proxy in a second Proxy layer that
3
+ * records which config nodes a component has read.
4
4
  *
5
- * Каждый `useForm` вызов создаёт свой tracking proxy → свой tracked set.
6
- * Это позволяет `getSnapshot` проверять версии только прочитанных нод
7
- * и не вызывать re-render, если изменились поля, которые компонент не читает.
5
+ * Every `useForm` call creates its own tracking proxy → its own tracked set.
6
+ * This lets `getSnapshot` check the versions of only the nodes that were
7
+ * read, avoiding re-renders when fields the component never reads change.
8
8
  *
9
- * Tracking работает на уровне ноды: чтение ЛЮБОГО свойства
10
- * (value, label, isVisible…) добавляет всю ноду в tracked set.
9
+ * Tracking is node-level: reading ANY property (value, label, isVisible…)
10
+ * adds the whole node to the tracked set.
11
11
  *
12
- * Списки: `items`, `map`, `length`, `loading`, `dirty` на list-proxy добавляют
13
- * объект `ListState` (бренд LIST_STATE, единый для root и per-entity) в tracked
14
- * set. Мутация/resolve бампает версию этого ListState → getSnapshot детектирует
15
- * изменение → re-render только списка. `map` → entity-прокси оборачиваются в
16
- * tracking proxy для per-leaf отслеживания строк.
12
+ * Lists: `items`, `map`, `length`, `loading`, `dirty` on a list proxy add the
13
+ * `ListState` object (the LIST_STATE brand, shared by root and per-entity) to
14
+ * the tracked set. A mutation/resolve bumps that ListState's version
15
+ * getSnapshot detects the change only the list re-renders. `map` → entity
16
+ * proxies are wrapped in tracking proxies for per-leaf row tracking.
17
17
  */
18
18
  import { FIELD_STATE_PROPS, CONFIG_NODE, SOURCE_PROXY, STORE_REF, ENTITY_ID_LEAF, LIST_STATE, FLOW_STATE } from "../store/constants";
19
19
  /**
20
- * Ключи flow-/step-proxy, реактивные через версию объекта FlowState
21
- * (навигация бампает её). Проверка бренда FLOW_STATE выполняется только
22
- * при совпадении ключанулевой оверхед для не-flow узлов на прочих ключах.
20
+ * Flow-/step-proxy keys that are reactive through the FlowState object's
21
+ * version (navigation bumps it). The FLOW_STATE brand check runs only when
22
+ * the key matcheszero overhead for non-flow nodes on other keys.
23
23
  */
24
24
  const FLOW_TRACKED_KEYS = new Set([
25
25
  "currentStepKey",
@@ -33,14 +33,14 @@ const FLOW_TRACKED_KEYS = new Set([
33
33
  "loading",
34
34
  ]);
35
35
  /**
36
- * Проверить, является ли объект tracking proxy (имеет SOURCE_PROXY символ).
36
+ * Check whether an object is a tracking proxy (carries the SOURCE_PROXY symbol).
37
37
  */
38
38
  export function isTrackingProxy(obj) {
39
39
  return !!obj && typeof obj === "object" && !!obj[SOURCE_PROXY];
40
40
  }
41
41
  /**
42
- * Извлечь source proxy и store из tracking proxy.
43
- * Возвращает null если объект не является tracking proxy.
42
+ * Extract the source proxy and store from a tracking proxy.
43
+ * Returns null when the object is not a tracking proxy.
44
44
  */
45
45
  export function unwrapTrackingProxy(obj) {
46
46
  if (!isTrackingProxy(obj))
@@ -51,41 +51,41 @@ export function unwrapTrackingProxy(obj) {
51
51
  };
52
52
  }
53
53
  /**
54
- * Создать tracking proxy поверх source proxy.
55
- * Кэшируется по source proxy объектам (один tracking proxy на вложенный узел).
54
+ * Create a tracking proxy on top of a source proxy.
55
+ * Cached by source-proxy object (one tracking proxy per nested node).
56
56
  *
57
- * @param sourceProxy — базовый Proxy из store.proxy (или его дочерний узел)
57
+ * @param sourceProxy — the base Proxy from store.proxy (or its child node)
58
58
  * @param refs — per-component tracking state (accessed, lastVersions)
59
- * @param store — ProxyStore, для чтения текущих версий нод
60
- * @param cache — WeakMap для кэширования tracking прокси объектов
59
+ * @param store — the ProxyStore, for reading current node versions
60
+ * @param cache — WeakMap caching tracking proxy objects
61
61
  */
62
62
  export function createTrackingProxy(sourceProxy, refs, store, cache) {
63
63
  if (cache.has(sourceProxy))
64
64
  return cache.get(sourceProxy);
65
65
  const tracked = new Proxy(sourceProxy, {
66
66
  get(target, key) {
67
- // CONFIG_NODE — пробрасываем, tracking proxy прозрачен для этого символа
67
+ // CONFIG_NODE — forwarded; the tracking proxy is transparent to this symbol
68
68
  if (key === CONFIG_NODE)
69
69
  return target[CONFIG_NODE];
70
- // SOURCE_PROXY — возвращаем исходный store proxy (target tracking proxy)
70
+ // SOURCE_PROXY — return the underlying store proxy (the tracking proxy's target)
71
71
  if (key === SOURCE_PROXY)
72
72
  return target;
73
- // STORE_REF — возвращаем ссылку на ProxyStore
73
+ // STORE_REF — return the ProxyStore reference
74
74
  if (key === STORE_REF)
75
75
  return store;
76
- // Прочие символы пробрасываем как есть
76
+ // Other symbols are forwarded as-is
77
77
  if (typeof key === "symbol")
78
78
  return target[key];
79
- // Обратный маппинг на входе: external → internal. Проверки состояния
80
- // (list-ключи, FIELD_STATE_PROPS) по `ikey`; читаем и навигируем по
81
- // оригинальному external-`key` (source-proxy переведёт его обратно).
79
+ // Reverse mapping on input: external → internal. State checks (list
80
+ // keys, FIELD_STATE_PROPS) use `ikey`; reads and navigation use the
81
+ // original external `key` (the source proxy translates it back).
82
82
  const ikey = (store.externalToInternal[key] ?? key);
83
- // ── List proxy (единый кубик: root + per-entity) ───────────────────────
84
- // Ключ трекинга = объект ListState, а НЕ общий listConfigNode: иначе версии
85
- // разных владельцев одного per-entity-списка схлопнутся (RFC §2.6), а root
86
- // и entity потребовали бы две ветки. Должно идти ДО FIELD_STATE_PROPS:
87
- // `loading`/`dirty` входят в FIELD_STATE_PROPS, но на списке их надо трекать
88
- // по ListState, а не по CONFIG_NODE.
83
+ // ── List proxy (single building block: root + per-entity) ──────────────
84
+ // The tracking key is the ListState object, NOT the shared listConfigNode:
85
+ // otherwise the versions of different owners of one per-entity list would
86
+ // collapse, and root vs entity would need two branches. Must run BEFORE
87
+ // FIELD_STATE_PROPS: `loading`/`dirty` belong to FIELD_STATE_PROPS, but on
88
+ // a list they must be tracked by ListState, not CONFIG_NODE.
89
89
  const listState = target[LIST_STATE];
90
90
  if (listState) {
91
91
  if (ikey === "length" || ikey === "loading" || ikey === "dirty") {
@@ -111,24 +111,25 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
111
111
  const origMap = target[key];
112
112
  return (fn) => origMap((item, index, id) => fn(createTrackingProxy(item, refs, store, cache), index, id));
113
113
  }
114
- // add/remove/setItems/getById — пробрасываем без трекинга.
114
+ // add/remove/setItems/getById — forwarded without tracking.
115
115
  return target[key];
116
116
  }
117
117
  // ── Flow proxy / step proxy (defineFlow) ────────────────────────────────
118
- // Навигационное состояние трекается по объекту FlowState (бренд FLOW_STATE
119
- // экспонируют flow-нода, steps-proxy и step-ноды). Идёт ДО FIELD_STATE_PROPS:
120
- // `loading` входит в них, но на флоу он композитный (any step loading) и
121
- // требует подписки на step-ноды, а не только на CONFIG_NODE флоу.
118
+ // Navigation state is tracked by the FlowState object (the FLOW_STATE brand
119
+ // is exposed by the flow node, the steps proxy and step nodes). Runs BEFORE
120
+ // FIELD_STATE_PROPS: `loading` belongs there, but on a flow it is composite
121
+ // (any step loading) and needs subscriptions to the step nodes, not just
122
+ // the flow's CONFIG_NODE.
122
123
  if (FLOW_TRACKED_KEYS.has(ikey)) {
123
124
  const flowState = target[FLOW_STATE];
124
125
  if (flowState) {
125
- // "steps" чистая навигация к коллекции (перечитывается при любом
126
- // re-render); сам доступ не зависит от текущего шагане трекаем.
126
+ // "steps" is pure navigation to the collection (re-read on every
127
+ // re-render); the access itself doesn't depend on the current step untracked.
127
128
  if (ikey !== "steps" && !refs.accessed.has(flowState)) {
128
129
  refs.accessed.add(flowState);
129
130
  refs.lastVersions.set(flowState, store.getNodeVersion(flowState));
130
131
  }
131
- // Композитный loading: резолв шага бампает версию step-ноды.
132
+ // Composite loading: a step's resolve bumps the step node's version.
132
133
  if (ikey === "loading" && Array.isArray(flowState.stepNodes)) {
133
134
  for (const stepNode of flowState.stepNodes) {
134
135
  if (!refs.accessed.has(stepNode)) {
@@ -138,8 +139,8 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
138
139
  }
139
140
  }
140
141
  const result = target[key];
141
- // Объекты (steps-proxy, step-proxy, а также случайные дочерние узлы,
142
- // совпавшие по имени) — оборачиваем рекурсивно, как обычную навигацию.
142
+ // Objects (the steps proxy, step proxies, and any child nodes that
143
+ // happen to match by name) — wrapped recursively, like regular navigation.
143
144
  if (result && typeof result === "object") {
144
145
  refs.hasNavigated = true;
145
146
  return createTrackingProxy(result, refs, store, cache);
@@ -147,18 +148,18 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
147
148
  return result;
148
149
  }
149
150
  }
150
- // Чтение состояния поля трекинг ноды
151
- // submitting реактивный флаг группы, тоже требует трекинга
151
+ // Field-state readtrack the node.
152
+ // submitting is a reactive group flag and needs tracking too.
152
153
  if (FIELD_STATE_PROPS.has(ikey) || ikey === "submitting") {
153
154
  const configNode = target[CONFIG_NODE];
154
155
  if (configNode && !refs.accessed.has(configNode)) {
155
156
  refs.accessed.add(configNode);
156
- // Сохраняем текущую версию, чтобы getSnapshot не считал это изменением
157
+ // Save the current version so getSnapshot doesn't treat it as a change
157
158
  refs.lastVersions.set(configNode, store.getNodeVersion(configNode));
158
159
  }
159
160
  return target[key];
160
161
  }
161
- // Дочерний объектрекурсивный tracking proxy
162
+ // Child objectrecursive tracking proxy
162
163
  const result = target[key];
163
164
  // Entity id access: the entity proxy returns the id string directly (not via a
164
165
  // leaf proxy), so we would normally miss tracking it. Detect by checking if the
@@ -178,12 +179,12 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
178
179
  return result;
179
180
  },
180
181
  set(target, key, value) {
181
- // Запись пробрасывается в исходный proxy (SET trap в buildProxy)
182
+ // Writes are forwarded to the source proxy (the SET trap in buildProxy)
182
183
  return Reflect.set(target, key, value);
183
184
  },
184
185
  /**
185
- * Пробрасываем ownKeys из source proxy, чтобы spread ({...trackingProxy})
186
- * возвращал те же ключи, что и store proxy (без validate, formatter, …).
186
+ * Forward ownKeys from the source proxy so spread ({...trackingProxy})
187
+ * returns the same keys as the store proxy (no validate, formatter, …).
187
188
  */
188
189
  ownKeys(target) {
189
190
  return Reflect.ownKeys(target);
@@ -1 +1 @@
1
- {"version":3,"file":"createTrackingProxy.js","sourceRoot":"","sources":["../../react/createTrackingProxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createTrackingProxy.js","sourceRoot":"","sources":["../../react/createTrackingProxy.ts"],"names":[],"mappings":"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"}