palistor 0.0.24 → 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 (278) hide show
  1. package/README.md +574 -542
  2. package/README.ru.md +979 -0
  3. package/dist/index.d.ts +19 -28
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +21 -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 +92 -42
  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.d.ts.map +1 -1
  32. package/dist/store/buildProxy/buildProxy.js +84 -33
  33. package/dist/store/buildProxy/buildProxy.js.map +1 -1
  34. package/dist/store/buildProxy/computeProxyKeys.d.ts +8 -8
  35. package/dist/store/buildProxy/computeProxyKeys.d.ts.map +1 -1
  36. package/dist/store/buildProxy/computeProxyKeys.js +18 -13
  37. package/dist/store/buildProxy/computeProxyKeys.js.map +1 -1
  38. package/dist/store/buildProxy/handleLazyResolve.d.ts +3 -3
  39. package/dist/store/buildProxy/handleLazyResolve.js +3 -3
  40. package/dist/store/buildProxy/initProxyCaches.d.ts +5 -5
  41. package/dist/store/buildProxy/initProxyCaches.js +5 -5
  42. package/dist/store/compute/computeFieldState.d.ts +3 -3
  43. package/dist/store/compute/computeFieldState.js +8 -8
  44. package/dist/store/compute/computeFieldState.js.map +1 -1
  45. package/dist/store/compute/fieldStateChanged.d.ts +1 -1
  46. package/dist/store/compute/fieldStateChanged.js +1 -1
  47. package/dist/store/compute/recompute/collectGroupComputeNodes.d.ts +4 -4
  48. package/dist/store/compute/recompute/collectGroupComputeNodes.js +7 -7
  49. package/dist/store/compute/recompute/collectGroupComputeNodes.js.map +1 -1
  50. package/dist/store/compute/recompute/recomputeAndNotify.d.ts +3 -3
  51. package/dist/store/compute/recompute/recomputeAndNotify.js +3 -3
  52. package/dist/store/compute/recompute/recomputeLeaves.d.ts +11 -10
  53. package/dist/store/compute/recompute/recomputeLeaves.d.ts.map +1 -1
  54. package/dist/store/compute/recompute/recomputeLeaves.js +26 -27
  55. package/dist/store/compute/recompute/recomputeLeaves.js.map +1 -1
  56. package/dist/store/compute/recompute/recomputeTargeted.d.ts +7 -7
  57. package/dist/store/compute/recompute/recomputeTargeted.js +12 -12
  58. package/dist/store/compute/recompute/recomputeTargeted.js.map +1 -1
  59. package/dist/store/compute/recompute/topologicalSortComputed.d.ts +4 -4
  60. package/dist/store/compute/recompute/topologicalSortComputed.d.ts.map +1 -1
  61. package/dist/store/compute/recompute/topologicalSortComputed.js +11 -13
  62. package/dist/store/compute/recompute/topologicalSortComputed.js.map +1 -1
  63. package/dist/store/compute/recompute/types.d.ts +4 -4
  64. package/dist/store/compute/resolveFlag.d.ts +2 -2
  65. package/dist/store/compute/resolveFlag.js +2 -2
  66. package/dist/store/compute/resolveString.d.ts +5 -5
  67. package/dist/store/compute/resolveString.js +6 -6
  68. package/dist/store/compute/resolveString.js.map +1 -1
  69. package/dist/store/compute/types.d.ts +3 -3
  70. package/dist/store/constants.d.ts +57 -38
  71. package/dist/store/constants.d.ts.map +1 -1
  72. package/dist/store/constants.js +70 -35
  73. package/dist/store/constants.js.map +1 -1
  74. package/dist/store/defineFieldMapping.d.ts +21 -19
  75. package/dist/store/defineFieldMapping.d.ts.map +1 -1
  76. package/dist/store/defineFieldMapping.js +21 -19
  77. package/dist/store/defineFieldMapping.js.map +1 -1
  78. package/dist/store/dirtyTracking/collectInitialSnapshot.js +1 -1
  79. package/dist/store/dirtyTracking/collectInitialSnapshot.js.map +1 -1
  80. package/dist/store/dirtyTracking/recomputeDirtyTargeted.d.ts +3 -3
  81. package/dist/store/dirtyTracking/recomputeDirtyTargeted.js +11 -11
  82. package/dist/store/dirtyTracking/recomputeDirtyTargeted.js.map +1 -1
  83. package/dist/store/dirtyTracking/setGroupRevalidate.d.ts +6 -6
  84. package/dist/store/dirtyTracking/setGroupRevalidate.js +7 -7
  85. package/dist/store/dirtyTracking/setGroupRevalidate.js.map +1 -1
  86. package/dist/store/entityRegistry/entityRegistry.d.ts +72 -72
  87. package/dist/store/entityRegistry/entityRegistry.d.ts.map +1 -1
  88. package/dist/store/entityRegistry/entityRegistry.js +91 -91
  89. package/dist/store/entityRegistry/entityRegistry.js.map +1 -1
  90. package/dist/store/entityRegistry/generateId.d.ts +3 -3
  91. package/dist/store/entityRegistry/generateId.js +3 -3
  92. package/dist/store/entityRegistry/types.d.ts +17 -17
  93. package/dist/store/entityRegistry/types.d.ts.map +1 -1
  94. package/dist/store/flow/buildFlowStepsProxy.d.ts +17 -0
  95. package/dist/store/flow/buildFlowStepsProxy.d.ts.map +1 -0
  96. package/dist/store/flow/buildFlowStepsProxy.js +72 -0
  97. package/dist/store/flow/buildFlowStepsProxy.js.map +1 -0
  98. package/dist/store/flow/defineFlow.d.ts +92 -0
  99. package/dist/store/flow/defineFlow.d.ts.map +1 -0
  100. package/dist/store/flow/defineFlow.js +99 -0
  101. package/dist/store/flow/defineFlow.js.map +1 -0
  102. package/dist/store/flow/flowApi.d.ts +18 -0
  103. package/dist/store/flow/flowApi.d.ts.map +1 -0
  104. package/dist/store/flow/flowApi.js +18 -0
  105. package/dist/store/flow/flowApi.js.map +1 -0
  106. package/dist/store/flow/flowNavigation.d.ts +137 -0
  107. package/dist/store/flow/flowNavigation.d.ts.map +1 -0
  108. package/dist/store/flow/flowNavigation.js +384 -0
  109. package/dist/store/flow/flowNavigation.js.map +1 -0
  110. package/dist/store/flow/flowState.d.ts +41 -0
  111. package/dist/store/flow/flowState.d.ts.map +1 -0
  112. package/dist/store/flow/flowState.js +51 -0
  113. package/dist/store/flow/flowState.js.map +1 -0
  114. package/dist/store/flow/index.d.ts +10 -0
  115. package/dist/store/flow/index.d.ts.map +1 -0
  116. package/dist/store/flow/index.js +6 -0
  117. package/dist/store/flow/index.js.map +1 -0
  118. package/dist/store/groupDeps/createGroupDeps.d.ts +3 -3
  119. package/dist/store/groupDeps/createGroupDeps.js +6 -6
  120. package/dist/store/groupDeps/createGroupDeps.js.map +1 -1
  121. package/dist/store/groupDeps/createTrackingValues.d.ts +9 -9
  122. package/dist/store/groupDeps/createTrackingValues.js +11 -11
  123. package/dist/store/groupDeps/createTrackingValues.js.map +1 -1
  124. package/dist/store/groupDeps/getNodeGroupPath.d.ts +3 -3
  125. package/dist/store/groupDeps/getNodeGroupPath.js +5 -5
  126. package/dist/store/groupDeps/getNodeGroupPath.js.map +1 -1
  127. package/dist/store/groupDeps/getRecipientGroups.d.ts +1 -1
  128. package/dist/store/groupDeps/getRecipientGroups.js +1 -1
  129. package/dist/store/groupDeps/groupDeps.d.ts +7 -7
  130. package/dist/store/groupDeps/groupDeps.js +7 -7
  131. package/dist/store/groupDeps/pairKey.d.ts +3 -3
  132. package/dist/store/groupDeps/pairKey.d.ts.map +1 -1
  133. package/dist/store/groupDeps/pairKey.js +4 -4
  134. package/dist/store/groupDeps/pairKey.js.map +1 -1
  135. package/dist/store/groupDeps/resolveGroupByPath.d.ts +3 -3
  136. package/dist/store/groupDeps/resolveGroupByPath.js +3 -3
  137. package/dist/store/init/createNotificationHub.d.ts +31 -31
  138. package/dist/store/init/createNotificationHub.d.ts.map +1 -1
  139. package/dist/store/init/createNotificationHub.js +36 -37
  140. package/dist/store/init/createNotificationHub.js.map +1 -1
  141. package/dist/store/init/createResolveManager.d.ts +72 -69
  142. package/dist/store/init/createResolveManager.d.ts.map +1 -1
  143. package/dist/store/init/createResolveManager.js +101 -98
  144. package/dist/store/init/createResolveManager.js.map +1 -1
  145. package/dist/store/init/initGroupSubmitting.d.ts +2 -2
  146. package/dist/store/init/initGroupSubmitting.js +4 -4
  147. package/dist/store/init/initGroupSubmitting.js.map +1 -1
  148. package/dist/store/normalizeConfig.d.ts +20 -18
  149. package/dist/store/normalizeConfig.d.ts.map +1 -1
  150. package/dist/store/normalizeConfig.js +31 -29
  151. package/dist/store/normalizeConfig.js.map +1 -1
  152. package/dist/store/onChangePipeline/computeFieldKey.d.ts +2 -2
  153. package/dist/store/onChangePipeline/computeFieldKey.js +2 -2
  154. package/dist/store/onChangePipeline/findOnChangeAncestors.d.ts +2 -2
  155. package/dist/store/onChangePipeline/findOnChangeAncestors.js +4 -4
  156. package/dist/store/onChangePipeline/findOnChangeAncestors.js.map +1 -1
  157. package/dist/store/onChangePipeline/onChangePipeline.d.ts +13 -12
  158. package/dist/store/onChangePipeline/onChangePipeline.d.ts.map +1 -1
  159. package/dist/store/onChangePipeline/onChangePipeline.js +14 -13
  160. package/dist/store/onChangePipeline/onChangePipeline.js.map +1 -1
  161. package/dist/store/persist/drivers.d.ts +7 -7
  162. package/dist/store/persist/drivers.js +8 -8
  163. package/dist/store/persist/drivers.js.map +1 -1
  164. package/dist/store/persist/index.d.ts +1 -1
  165. package/dist/store/persist/persistManager.d.ts +23 -23
  166. package/dist/store/persist/persistManager.d.ts.map +1 -1
  167. package/dist/store/persist/persistManager.js +73 -42
  168. package/dist/store/persist/persistManager.js.map +1 -1
  169. package/dist/store/persist/types.d.ts +23 -23
  170. package/dist/store/persist/types.d.ts.map +1 -1
  171. package/dist/store/persist/types.js +4 -4
  172. package/dist/store/resetPipeline/buildResetPatch.d.ts +5 -5
  173. package/dist/store/resetPipeline/buildResetPatch.js +5 -5
  174. package/dist/store/resetPipeline/collectDefaults.d.ts +5 -5
  175. package/dist/store/resetPipeline/collectDefaults.js +6 -6
  176. package/dist/store/resetPipeline/collectDefaults.js.map +1 -1
  177. package/dist/store/resetPipeline/resetPipeline.d.ts +7 -7
  178. package/dist/store/resetPipeline/resetPipeline.d.ts.map +1 -1
  179. package/dist/store/resetPipeline/resetPipeline.js +17 -12
  180. package/dist/store/resetPipeline/resetPipeline.js.map +1 -1
  181. package/dist/store/resolvePipeline/applyPendingWrites.d.ts +10 -10
  182. package/dist/store/resolvePipeline/applyPendingWrites.d.ts.map +1 -1
  183. package/dist/store/resolvePipeline/applyPendingWrites.js +35 -38
  184. package/dist/store/resolvePipeline/applyPendingWrites.js.map +1 -1
  185. package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts +8 -7
  186. package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts.map +1 -1
  187. package/dist/store/resolvePipeline/createContextTrackingProxy.js +6 -5
  188. package/dist/store/resolvePipeline/createContextTrackingProxy.js.map +1 -1
  189. package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts +43 -43
  190. package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts.map +1 -1
  191. package/dist/store/resolvePipeline/createValuesTrackingProxy.js +70 -70
  192. package/dist/store/resolvePipeline/createValuesTrackingProxy.js.map +1 -1
  193. package/dist/store/resolvePipeline/executeListResolve.d.ts +14 -14
  194. package/dist/store/resolvePipeline/executeListResolve.js +27 -27
  195. package/dist/store/resolvePipeline/executeListResolve.js.map +1 -1
  196. package/dist/store/resolvePipeline/executeResolve.d.ts +15 -15
  197. package/dist/store/resolvePipeline/executeResolve.js +46 -46
  198. package/dist/store/resolvePipeline/executeResolve.js.map +1 -1
  199. package/dist/store/store/NodeRegistry/nodeRegistry.d.ts +69 -56
  200. package/dist/store/store/NodeRegistry/nodeRegistry.d.ts.map +1 -1
  201. package/dist/store/store/NodeRegistry/nodeRegistry.js +94 -78
  202. package/dist/store/store/NodeRegistry/nodeRegistry.js.map +1 -1
  203. package/dist/store/store/NodeRegistry/nodeUtils.d.ts +5 -5
  204. package/dist/store/store/NodeRegistry/nodeUtils.d.ts.map +1 -1
  205. package/dist/store/store/NodeRegistry/nodeUtils.js +5 -5
  206. package/dist/store/store/NodeRegistry/nodeUtils.js.map +1 -1
  207. package/dist/store/store/groupDepsMap.d.ts +23 -23
  208. package/dist/store/store/groupDepsMap.d.ts.map +1 -1
  209. package/dist/store/store/groupDepsMap.js +40 -34
  210. package/dist/store/store/groupDepsMap.js.map +1 -1
  211. package/dist/store/store/hasComputedProps.d.ts +2 -2
  212. package/dist/store/store/hasComputedProps.js +2 -2
  213. package/dist/store/store/nodeMap.d.ts +5 -5
  214. package/dist/store/store/nodeMap.js +7 -7
  215. package/dist/store/store/nodeMap.js.map +1 -1
  216. package/dist/store/store/palistor.d.ts +80 -80
  217. package/dist/store/store/palistor.d.ts.map +1 -1
  218. package/dist/store/store/palistor.js +151 -165
  219. package/dist/store/store/palistor.js.map +1 -1
  220. package/dist/store/store/registerNodes.d.ts +10 -10
  221. package/dist/store/store/registerNodes.d.ts.map +1 -1
  222. package/dist/store/store/registerNodes.js +33 -18
  223. package/dist/store/store/registerNodes.js.map +1 -1
  224. package/dist/store/store/serviceRegistry.d.ts +8 -8
  225. package/dist/store/store/serviceRegistry.d.ts.map +1 -1
  226. package/dist/store/store/serviceRegistry.js +8 -8
  227. package/dist/store/store/serviceRegistry.js.map +1 -1
  228. package/dist/store/store/types.d.ts +277 -223
  229. package/dist/store/store/types.d.ts.map +1 -1
  230. package/dist/store/submitPipeline/applyLeafBeforeSubmit.d.ts +2 -2
  231. package/dist/store/submitPipeline/applyLeafBeforeSubmit.js +2 -2
  232. package/dist/store/submitPipeline/collectLeafStates.d.ts +2 -2
  233. package/dist/store/submitPipeline/collectLeafStates.js +2 -2
  234. package/dist/store/submitPipeline/submitPipeline.d.ts +8 -8
  235. package/dist/store/submitPipeline/submitPipeline.d.ts.map +1 -1
  236. package/dist/store/submitPipeline/submitPipeline.js +15 -11
  237. package/dist/store/submitPipeline/submitPipeline.js.map +1 -1
  238. package/dist/store/submitPipeline/types.d.ts +1 -1
  239. package/dist/store/submitPipeline/types.d.ts.map +1 -1
  240. package/dist/store/traversal/nodeClassifier.d.ts +9 -9
  241. package/dist/store/traversal/nodeClassifier.d.ts.map +1 -1
  242. package/dist/store/traversal/nodeClassifier.js +11 -11
  243. package/dist/store/traversal/nodeClassifier.js.map +1 -1
  244. package/dist/store/traversal/walkFull.d.ts +14 -14
  245. package/dist/store/traversal/walkFull.js +2 -2
  246. package/dist/store/valuesCache/valuesCache.d.ts +9 -9
  247. package/dist/store/valuesCache/valuesCache.d.ts.map +1 -1
  248. package/dist/store/valuesCache/valuesCache.js +6 -6
  249. package/dist/store/writePipeline/formatPatch.d.ts +5 -5
  250. package/dist/store/writePipeline/formatPatch.js +7 -7
  251. package/dist/store/writePipeline/formatPatch.js.map +1 -1
  252. package/dist/store/writePipeline/formatValue.d.ts +5 -5
  253. package/dist/store/writePipeline/formatValue.js +5 -5
  254. package/dist/store/writePipeline/mergeChanged.d.ts +4 -4
  255. package/dist/store/writePipeline/mergeChanged.js +4 -4
  256. package/dist/store/writePipeline/runSetter.d.ts +6 -6
  257. package/dist/store/writePipeline/runSetter.js +8 -8
  258. package/dist/store/writePipeline/storeValue.d.ts +3 -3
  259. package/dist/store/writePipeline/storeValue.js +3 -3
  260. package/dist/store/writePipeline/types.d.ts +4 -4
  261. package/dist/store/writePipeline/types.d.ts.map +1 -1
  262. package/dist/store/writePipeline/writePipeline.d.ts +7 -7
  263. package/dist/store/writePipeline/writePipeline.d.ts.map +1 -1
  264. package/dist/store/writePipeline/writePipeline.js +15 -15
  265. package/dist/store/writePipeline/writePipeline.js.map +1 -1
  266. package/package.json +11 -4
  267. package/dist/store/compute/recompute/collectGroupLeafNodes.d.ts +0 -11
  268. package/dist/store/compute/recompute/collectGroupLeafNodes.d.ts.map +0 -1
  269. package/dist/store/compute/recompute/collectGroupLeafNodes.js +0 -26
  270. package/dist/store/compute/recompute/collectGroupLeafNodes.js.map +0 -1
  271. package/dist/store/fieldMapping.typecheck.d.ts +0 -2
  272. package/dist/store/fieldMapping.typecheck.d.ts.map +0 -1
  273. package/dist/store/fieldMapping.typecheck.js +0 -71
  274. package/dist/store/fieldMapping.typecheck.js.map +0 -1
  275. package/dist/store/submitPipeline/getSubValues.d.ts +0 -9
  276. package/dist/store/submitPipeline/getSubValues.d.ts.map +0 -1
  277. package/dist/store/submitPipeline/getSubValues.js +0 -26
  278. package/dist/store/submitPipeline/getSubValues.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,46 +1,35 @@
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";
41
30
  export type { PersistManager } from "./store/persist/persistManager";
42
31
  export { localStorageDriver, sessionStorageDriver } from "./store/persist/drivers";
43
- export type { TranslateFn, FormConfig, MaybeComputed, MaybeTranslatable, DeepPartialValues, FieldTypeMeta, ConfigNode, FieldProxyNode, GroupProxyNode, ConfigProxy, FieldMapping, ApplyFieldMapping, ValidateExternalConfig, ConfigKeyError, ExternalConfig, ExternalConfigNode, RawStoreProxy, RawStoreProxyMarker, ExtractValues, ProxyStoreOptions, ProxyStore, Unsubscribe, PalistorRef, PalistorList, PalistorEntityProxy, TypedListNode, ListResolver, TemplateConfig, InferEntity, } from "./store/store/types";
32
+ export type { FlowProxyNode, FlowStepProxy, FlowStepsProxy, TranslateFn, FormConfig, MaybeComputed, MaybeTranslatable, DeepPartialValues, FieldTypeMeta, ConfigNode, FieldProxyNode, GroupProxyNode, ConfigProxy, FieldMapping, ApplyFieldMapping, ValidateExternalConfig, ConfigKeyError, ExternalConfig, ExternalConfigNode, RawStoreProxy, RawStoreProxyMarker, ExtractValues, ProxyStoreOptions, ProxyStore, Unsubscribe, PalistorRef, PalistorList, PalistorEntityProxy, TypedListNode, ListResolver, TemplateConfig, InferEntity, } from "./store/store/types";
44
33
  export type { Palistor as PalistorProxy } from "./store/store/types";
45
34
  export { Palistor } from "./store/store";
46
35
  export type { Resolve, NotifyFn, ResolveErrorContext } from "./store/resolvePipeline/";
@@ -50,5 +39,7 @@ export { usePersist } from "./react/usePersist";
50
39
  export { useTranslator } from "./react/useTranslator";
51
40
  export { useStoreContext } from "./react/useStoreContext";
52
41
  export { defineList } from "./store/defineList";
42
+ export { defineFlow, defineStep } from "./store/flow/defineFlow";
43
+ export type { AnyFlowStep, DefineFlowOptions, FlowError, FlowNode, FlowStep, FlowValues, StepStatus, } from "./store/flow/defineFlow";
53
44
  export { defineFieldMapping } from "./store/defineFieldMapping";
54
45
  //# sourceMappingURL=index.d.ts.map
@@ -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,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,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
- * });
22
+ * // Componentsubscribes via useForm
23
+ * import { useForm } from "palistor";
29
24
  *
30
- * return <Input {...getFieldProps("name")} />;
31
- * ```
32
- *
33
- * ```tsx
34
- * // Вложенный компонент — подключается к существующему store
35
- * const { getFieldProps } = useForm(orderId);
36
- *
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";
@@ -52,7 +41,11 @@ export { useStoreContext } from "./react/useStoreContext";
52
41
  // ============================================================================
53
42
  export { defineList } from "./store/defineList";
54
43
  // ============================================================================
55
- // defineFieldMapping typed fieldMapping helper (сохраняет литералы)
44
+ // defineFlow / defineStep step-based flow primitive
45
+ // ============================================================================
46
+ export { defineFlow, defineStep } from "./store/flow/defineFlow";
47
+ // ============================================================================
48
+ // defineFieldMapping — typed fieldMapping helper (preserves literals)
56
49
  // ============================================================================
57
50
  export { defineFieldMapping } from "./store/defineFieldMapping";
58
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;AAsCnF,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,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;AAEjD,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,CAuHL"}
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,30 +1,46 @@
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
- import { FIELD_STATE_PROPS, CONFIG_NODE, SOURCE_PROXY, STORE_REF, ENTITY_ID_LEAF, LIST_STATE } from "../store/constants";
18
+ import { FIELD_STATE_PROPS, CONFIG_NODE, SOURCE_PROXY, STORE_REF, ENTITY_ID_LEAF, LIST_STATE, FLOW_STATE } from "../store/constants";
19
19
  /**
20
- * Проверить, является ли объект tracking proxy (имеет SOURCE_PROXY символ).
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 matches — zero overhead for non-flow nodes on other keys.
23
+ */
24
+ const FLOW_TRACKED_KEYS = new Set([
25
+ "currentStepKey",
26
+ "currentStepIndex",
27
+ "canGoBack",
28
+ "history",
29
+ "errors",
30
+ "status",
31
+ "steps",
32
+ "current",
33
+ "loading",
34
+ ]);
35
+ /**
36
+ * Check whether an object is a tracking proxy (carries the SOURCE_PROXY symbol).
21
37
  */
22
38
  export function isTrackingProxy(obj) {
23
39
  return !!obj && typeof obj === "object" && !!obj[SOURCE_PROXY];
24
40
  }
25
41
  /**
26
- * Извлечь source proxy и store из tracking proxy.
27
- * Возвращает 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.
28
44
  */
29
45
  export function unwrapTrackingProxy(obj) {
30
46
  if (!isTrackingProxy(obj))
@@ -35,41 +51,41 @@ export function unwrapTrackingProxy(obj) {
35
51
  };
36
52
  }
37
53
  /**
38
- * Создать tracking proxy поверх source proxy.
39
- * Кэшируется по 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).
40
56
  *
41
- * @param sourceProxy — базовый Proxy из store.proxy (или его дочерний узел)
57
+ * @param sourceProxy — the base Proxy from store.proxy (or its child node)
42
58
  * @param refs — per-component tracking state (accessed, lastVersions)
43
- * @param store — ProxyStore, для чтения текущих версий нод
44
- * @param cache — WeakMap для кэширования tracking прокси объектов
59
+ * @param store — the ProxyStore, for reading current node versions
60
+ * @param cache — WeakMap caching tracking proxy objects
45
61
  */
46
62
  export function createTrackingProxy(sourceProxy, refs, store, cache) {
47
63
  if (cache.has(sourceProxy))
48
64
  return cache.get(sourceProxy);
49
65
  const tracked = new Proxy(sourceProxy, {
50
66
  get(target, key) {
51
- // CONFIG_NODE — пробрасываем, tracking proxy прозрачен для этого символа
67
+ // CONFIG_NODE — forwarded; the tracking proxy is transparent to this symbol
52
68
  if (key === CONFIG_NODE)
53
69
  return target[CONFIG_NODE];
54
- // SOURCE_PROXY — возвращаем исходный store proxy (target tracking proxy)
70
+ // SOURCE_PROXY — return the underlying store proxy (the tracking proxy's target)
55
71
  if (key === SOURCE_PROXY)
56
72
  return target;
57
- // STORE_REF — возвращаем ссылку на ProxyStore
73
+ // STORE_REF — return the ProxyStore reference
58
74
  if (key === STORE_REF)
59
75
  return store;
60
- // Прочие символы пробрасываем как есть
76
+ // Other symbols are forwarded as-is
61
77
  if (typeof key === "symbol")
62
78
  return target[key];
63
- // Обратный маппинг на входе: external → internal. Проверки состояния
64
- // (list-ключи, FIELD_STATE_PROPS) по `ikey`; читаем и навигируем по
65
- // оригинальному 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).
66
82
  const ikey = (store.externalToInternal[key] ?? key);
67
- // ── List proxy (единый кубик: root + per-entity) ───────────────────────
68
- // Ключ трекинга = объект ListState, а НЕ общий listConfigNode: иначе версии
69
- // разных владельцев одного per-entity-списка схлопнутся (RFC §2.6), а root
70
- // и entity потребовали бы две ветки. Должно идти ДО FIELD_STATE_PROPS:
71
- // `loading`/`dirty` входят в FIELD_STATE_PROPS, но на списке их надо трекать
72
- // по 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.
73
89
  const listState = target[LIST_STATE];
74
90
  if (listState) {
75
91
  if (ikey === "length" || ikey === "loading" || ikey === "dirty") {
@@ -95,21 +111,55 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
95
111
  const origMap = target[key];
96
112
  return (fn) => origMap((item, index, id) => fn(createTrackingProxy(item, refs, store, cache), index, id));
97
113
  }
98
- // add/remove/setItems/getById — пробрасываем без трекинга.
114
+ // add/remove/setItems/getById — forwarded without tracking.
99
115
  return target[key];
100
116
  }
101
- // Чтение состояния поля трекинг ноды
102
- // submitting реактивный флаг группы, тоже требует трекинга
117
+ // ── Flow proxy / step proxy (defineFlow) ────────────────────────────────
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.
123
+ if (FLOW_TRACKED_KEYS.has(ikey)) {
124
+ const flowState = target[FLOW_STATE];
125
+ if (flowState) {
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.
128
+ if (ikey !== "steps" && !refs.accessed.has(flowState)) {
129
+ refs.accessed.add(flowState);
130
+ refs.lastVersions.set(flowState, store.getNodeVersion(flowState));
131
+ }
132
+ // Composite loading: a step's resolve bumps the step node's version.
133
+ if (ikey === "loading" && Array.isArray(flowState.stepNodes)) {
134
+ for (const stepNode of flowState.stepNodes) {
135
+ if (!refs.accessed.has(stepNode)) {
136
+ refs.accessed.add(stepNode);
137
+ refs.lastVersions.set(stepNode, store.getNodeVersion(stepNode));
138
+ }
139
+ }
140
+ }
141
+ const result = target[key];
142
+ // Objects (the steps proxy, step proxies, and any child nodes that
143
+ // happen to match by name) — wrapped recursively, like regular navigation.
144
+ if (result && typeof result === "object") {
145
+ refs.hasNavigated = true;
146
+ return createTrackingProxy(result, refs, store, cache);
147
+ }
148
+ return result;
149
+ }
150
+ }
151
+ // Field-state read → track the node.
152
+ // submitting is a reactive group flag and needs tracking too.
103
153
  if (FIELD_STATE_PROPS.has(ikey) || ikey === "submitting") {
104
154
  const configNode = target[CONFIG_NODE];
105
155
  if (configNode && !refs.accessed.has(configNode)) {
106
156
  refs.accessed.add(configNode);
107
- // Сохраняем текущую версию, чтобы getSnapshot не считал это изменением
157
+ // Save the current version so getSnapshot doesn't treat it as a change
108
158
  refs.lastVersions.set(configNode, store.getNodeVersion(configNode));
109
159
  }
110
160
  return target[key];
111
161
  }
112
- // Дочерний объектрекурсивный tracking proxy
162
+ // Child objectrecursive tracking proxy
113
163
  const result = target[key];
114
164
  // Entity id access: the entity proxy returns the id string directly (not via a
115
165
  // leaf proxy), so we would normally miss tracking it. Detect by checking if the
@@ -129,12 +179,12 @@ export function createTrackingProxy(sourceProxy, refs, store, cache) {
129
179
  return result;
130
180
  },
131
181
  set(target, key, value) {
132
- // Запись пробрасывается в исходный proxy (SET trap в buildProxy)
182
+ // Writes are forwarded to the source proxy (the SET trap in buildProxy)
133
183
  return Reflect.set(target, key, value);
134
184
  },
135
185
  /**
136
- * Пробрасываем ownKeys из source proxy, чтобы spread ({...trackingProxy})
137
- * возвращал те же ключи, что и 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, …).
138
188
  */
139
189
  ownKeys(target) {
140
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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"}