palistor 0.0.25 → 0.0.27

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 +609 -542
  2. package/README.ru.md +1015 -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
@@ -1,102 +1,102 @@
1
1
  /**
2
- * Символ для доступа к исходному config-узлу из Proxy.
3
- * Используется tracking proxy для определения, какой узел читается.
2
+ * Symbol for accessing the original config node through a Proxy.
3
+ * Used by tracking proxies to identify which node is being read.
4
4
  */
5
5
  export declare const CONFIG_NODE: unique symbol;
6
6
  /**
7
- * Символ для получения исходного source-proxy (store.proxy) из tracking proxy.
8
- * Позволяет useForm принять tracking proxy поддерево и извлечь source.
7
+ * Symbol for extracting the source proxy (store.proxy) from a tracking proxy.
8
+ * Lets useForm accept a tracking-proxy subtree and unwrap the source.
9
9
  */
10
10
  export declare const SOURCE_PROXY: unique symbol;
11
11
  /**
12
- * Символ для получения ссылки на ProxyStore из tracking proxy.
13
- * Позволяет useForm принять tracking proxy поддерево и подписаться на store.
12
+ * Symbol for extracting the owning ProxyStore from a tracking proxy.
13
+ * Lets useForm accept a tracking-proxy subtree and subscribe to the store.
14
14
  */
15
15
  export declare const STORE_REF: unique symbol;
16
16
  /**
17
- * Символ для получения entity ID из EntityProjectionProxy.
18
- * Позволяет useForm(entity, templateSelector) извлечь entityId и store из proxy.
17
+ * Symbol for extracting the entity ID from an EntityProjectionProxy.
18
+ * Lets useForm(entity, templateSelector) recover entityId and store from the proxy.
19
19
  */
20
20
  export declare const ENTITY_ID: unique symbol;
21
21
  /**
22
- * Символ для получения объекта id-листа (EntityLeafNode) из EntityProjectionProxy.
23
- * Используется tracking proxy для регистрации подписки на id — чтобы rekey()
24
- * корректно триггерил перерендер компонентов, читающих `entity.id`.
22
+ * Symbol for extracting the id leaf object (EntityLeafNode) from an
23
+ * EntityProjectionProxy. Tracking proxies register a subscription on it so
24
+ * rekey() correctly re-renders components that read `entity.id`.
25
25
  */
26
26
  export declare const ENTITY_ID_LEAF: unique symbol;
27
27
  /**
28
- * Бренд-символ list proxy — возвращает объект `ListState` (единый кубик «список»).
29
- * Идентичность узла для tracking/resolve: сам объект `ListState` (ключ в хабе).
30
- * Root-list `ownerEntity === null`; per-entity — изолированный `ListState` на
31
- * каждую пару (owner, listConfigNode).
28
+ * Brand symbol of a list proxy — returns the `ListState` object (the single
29
+ * "list" building block). Node identity for tracking/resolve is the `ListState`
30
+ * object itself (hub key). Root lists have `ownerEntity === null`; per-entity
31
+ * lists get an isolated `ListState` per (owner, listConfigNode) pair.
32
32
  */
33
33
  export declare const LIST_STATE: unique symbol;
34
34
  /**
35
- * Бренд-символ flow proxy — возвращает объект `FlowState` (навигационное
36
- * состояние флоу). Экспонируется тремя прокси: flow-нодой, steps-прокси и
37
- * каждой step-нодой (для последних возвращается FlowState владеющего флоу).
38
- * Идентичность для tracking: сам объект `FlowState` (ключ в хабе) — навигация
39
- * бампает его версию.
35
+ * Brand symbol of a flow proxy — returns the `FlowState` object (flow
36
+ * navigation state). Exposed by three proxies: the flow node, the steps proxy,
37
+ * and each step node (the latter return the owning flow's FlowState).
38
+ * Tracking identity: the `FlowState` object itself (hub key) — navigation
39
+ * bumps its version.
40
40
  */
41
41
  export declare const FLOW_STATE: unique symbol;
42
42
  /**
43
- * Имя маркер-ключа flow-ноды: упорядоченный массив ключей шагов.
44
- * Проставляется defineFlow; входит в CONFIG_PROPS, поэтому все обходы
45
- * дерева (traversal, registerNodes, buildValuesCache, …) его пропускают.
43
+ * Marker key on a flow node: the ordered array of step keys.
44
+ * Set by defineFlow; included in CONFIG_PROPS so all tree walks
45
+ * (traversal, registerNodes, buildValuesCache, …) skip it.
46
46
  */
47
47
  export declare const FLOW_STEPS_PROP = "__flowSteps";
48
48
  /**
49
- * Единственный источник имён полей состояния (canonical tuple).
50
- * Из него выводятся {@link FIELD_STATE_PROPS} (Set) и {@link MAPPABLE_KEYS}.
49
+ * Single source of truth for field-state property names (canonical tuple).
50
+ * {@link FIELD_STATE_PROPS} (Set) and {@link MAPPABLE_KEYS} derive from it.
51
51
  */
52
52
  export declare const FIELD_STATE_KEYS: readonly ["value", "label", "placeholder", "description", "isRequired", "isReadOnly", "isDisabled", "isVisible", "isInvalid", "errorMessage", "dirty", "loading"];
53
53
  /**
54
- * Свойства, относящиеся к состоянию поля. При обращении к ним прокси
55
- * возвращает значение из FieldState (вычисленное), а не из конфига.
54
+ * Field-state properties. When one of these is read, the proxy returns the
55
+ * computed value from FieldState rather than the raw config.
56
56
  */
57
57
  export declare const FIELD_STATE_PROPS: Set<string>;
58
58
  /**
59
- * Ключи, которые можно переименовывать через `fieldMapping`:
60
- * поля состояния + функциональный сеттер `onValueChange`.
59
+ * Keys renamable via `fieldMapping`: field-state keys plus the
60
+ * functional setter `onValueChange`.
61
61
  */
62
62
  export declare const MAPPABLE_KEYS: readonly ["value", "label", "placeholder", "description", "isRequired", "isReadOnly", "isDisabled", "isVisible", "isInvalid", "errorMessage", "dirty", "loading", "onValueChange"];
63
- /** Имя internal-ключа, допустимое как источник переименования в `fieldMapping`. */
63
+ /** Internal key name allowed as a rename source in `fieldMapping`. */
64
64
  export type MappableKey = (typeof MAPPABLE_KEYS)[number];
65
65
  /**
66
- * Подмножество mappable-ключей, которые являются ВХОДНЫМИ ключами конфига
67
- * т.е. их пишет автор в конфиге узла. Только эти ключи нормализуются
68
- * external→internal при активном `fieldMapping` (см. {@link normalizeConfig}).
66
+ * Subset of mappable keys that are INPUT config keys i.e. keys an author
67
+ * writes in a node config. Only these are normalized external→internal when
68
+ * `fieldMapping` is active (see {@link normalizeConfig}).
69
69
  *
70
- * Остальные mappable-ключи (`isInvalid`, `errorMessage`, `dirty`, `loading`,
71
- * `onValueChange`) вычисляемые/выходные: в конфиге не пишутся, поэтому на
72
- * входе их нормализовать нечего (перевод для них происходит только на выходе
73
- * proxy). Попытка написать такой ключ в конфиге ошибка (strict).
70
+ * The remaining mappable keys (`isInvalid`, `errorMessage`, `dirty`,
71
+ * `loading`, `onValueChange`) are computed/output-only: they never appear in
72
+ * a config, so there is nothing to normalize on input (they are translated
73
+ * only on proxy output). Writing such a key in a config is an error (strict).
74
74
  */
75
75
  export declare const MAPPABLE_CONFIG_KEYS_TUPLE: readonly ["value", "label", "placeholder", "description", "isRequired", "isReadOnly", "isDisabled", "isVisible"];
76
76
  export declare const MAPPABLE_CONFIG_KEYS: Set<string>;
77
- /** Тип-версия {@link MAPPABLE_CONFIG_KEYS} — internal-имена config-ключей,
78
- * которые можно переименовывать через `fieldMapping` (для валидатора типов). */
77
+ /** Type-level version of {@link MAPPABLE_CONFIG_KEYS} — internal config key
78
+ * names renamable via `fieldMapping` (used by the type validator). */
79
79
  export type MappableConfigKey = (typeof MAPPABLE_CONFIG_KEYS_TUPLE)[number];
80
80
  /**
81
- * Полный набор «служебных» ключей узла конфига.
82
- * При обходе дерева (init, buildValuesCache) пропускаются.
81
+ * Full set of "service" keys of a config node.
82
+ * Tree walks (init, buildValuesCache) skip them.
83
83
  */
84
84
  export declare const CONFIG_PROPS: Set<string>;
85
85
  export declare const SPREADABLE_FIELD_STATE_PROPS: string[];
86
86
  /**
87
- * Статический набор ключей, которые включаются при spread группового узла:
88
- * состояние (submitting, dirty, revalidate, loading) и методы (submit, reset).
89
- * Дочерние узлы добавляются динамически в computeProxyKeys.
87
+ * Static keys included when spreading a group node: state (submitting, dirty,
88
+ * revalidate, loading) and methods (submit, reset).
89
+ * Child node keys are added dynamically in computeProxyKeys.
90
90
  */
91
91
  export declare const GROUP_SPREAD_KEYS: string[];
92
92
  /**
93
- * Дополнительные ключи spread для flow-ноды (defineFlow) — добавляются
94
- * к GROUP_SPREAD_KEYS в computeProxyKeys, когда узел помечен FLOW_STEPS_PROP.
93
+ * Extra spread keys for a flow node (defineFlow) — appended to
94
+ * GROUP_SPREAD_KEYS in computeProxyKeys when the node carries FLOW_STEPS_PROP.
95
95
  */
96
96
  export declare const FLOW_SPREAD_KEYS: string[];
97
97
  /**
98
- * Статический набор ключей для proxy списка (ListNode).
99
- * Возвращается из computeProxyKeys вместо GROUP_SPREAD_KEYS, когда узел массив.
98
+ * Static key set for a list proxy (ListNode).
99
+ * Returned from computeProxyKeys instead of GROUP_SPREAD_KEYS when the node is an array.
100
100
  */
101
101
  export declare const LIST_SPREAD_KEYS: string[];
102
102
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../store/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,MAA6B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAA8B,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,OAAO,MAA2B,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,OAAO,MAA2B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,MAA+B,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA4B,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA4B,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,mKAanB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAAoC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,aAAa,oLAAkD,CAAC;AAE7E,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,kHAS7B,CAAC;AAEX,eAAO,MAAM,oBAAoB,aAA8C,CAAC;AAEhF;iFACiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,YAAY,aAwBvB,CAAC;AAEH,eAAO,MAAM,4BAA4B,UAM3B,CAAC;AAEf;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EASrC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAWpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAWpC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../store/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,MAA6B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAA8B,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,OAAO,MAA2B,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,OAAO,MAA2B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,MAA+B,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA4B,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA4B,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,mKAanB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAAoC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,aAAa,oLAAkD,CAAC;AAE7E,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,kHAS7B,CAAC;AAEX,eAAO,MAAM,oBAAoB,aAA8C,CAAC;AAEhF;uEACuE;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,YAAY,aAwBvB,CAAC;AAEH,eAAO,MAAM,4BAA4B,UAM3B,CAAC;AAEf;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EASrC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAWpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAWpC,CAAC"}
@@ -1,53 +1,53 @@
1
1
  /**
2
- * Символ для доступа к исходному config-узлу из Proxy.
3
- * Используется tracking proxy для определения, какой узел читается.
2
+ * Symbol for accessing the original config node through a Proxy.
3
+ * Used by tracking proxies to identify which node is being read.
4
4
  */
5
5
  export const CONFIG_NODE = Symbol("configNode");
6
6
  /**
7
- * Символ для получения исходного source-proxy (store.proxy) из tracking proxy.
8
- * Позволяет useForm принять tracking proxy поддерево и извлечь source.
7
+ * Symbol for extracting the source proxy (store.proxy) from a tracking proxy.
8
+ * Lets useForm accept a tracking-proxy subtree and unwrap the source.
9
9
  */
10
10
  export const SOURCE_PROXY = Symbol("sourceProxy");
11
11
  /**
12
- * Символ для получения ссылки на ProxyStore из tracking proxy.
13
- * Позволяет useForm принять tracking proxy поддерево и подписаться на store.
12
+ * Symbol for extracting the owning ProxyStore from a tracking proxy.
13
+ * Lets useForm accept a tracking-proxy subtree and subscribe to the store.
14
14
  */
15
15
  export const STORE_REF = Symbol("storeRef");
16
16
  /**
17
- * Символ для получения entity ID из EntityProjectionProxy.
18
- * Позволяет useForm(entity, templateSelector) извлечь entityId и store из proxy.
17
+ * Symbol for extracting the entity ID from an EntityProjectionProxy.
18
+ * Lets useForm(entity, templateSelector) recover entityId and store from the proxy.
19
19
  */
20
20
  export const ENTITY_ID = Symbol("entityId");
21
21
  /**
22
- * Символ для получения объекта id-листа (EntityLeafNode) из EntityProjectionProxy.
23
- * Используется tracking proxy для регистрации подписки на id — чтобы rekey()
24
- * корректно триггерил перерендер компонентов, читающих `entity.id`.
22
+ * Symbol for extracting the id leaf object (EntityLeafNode) from an
23
+ * EntityProjectionProxy. Tracking proxies register a subscription on it so
24
+ * rekey() correctly re-renders components that read `entity.id`.
25
25
  */
26
26
  export const ENTITY_ID_LEAF = Symbol("entityIdLeaf");
27
27
  /**
28
- * Бренд-символ list proxy — возвращает объект `ListState` (единый кубик «список»).
29
- * Идентичность узла для tracking/resolve: сам объект `ListState` (ключ в хабе).
30
- * Root-list `ownerEntity === null`; per-entity — изолированный `ListState` на
31
- * каждую пару (owner, listConfigNode).
28
+ * Brand symbol of a list proxy — returns the `ListState` object (the single
29
+ * "list" building block). Node identity for tracking/resolve is the `ListState`
30
+ * object itself (hub key). Root lists have `ownerEntity === null`; per-entity
31
+ * lists get an isolated `ListState` per (owner, listConfigNode) pair.
32
32
  */
33
33
  export const LIST_STATE = Symbol("listState");
34
34
  /**
35
- * Бренд-символ flow proxy — возвращает объект `FlowState` (навигационное
36
- * состояние флоу). Экспонируется тремя прокси: flow-нодой, steps-прокси и
37
- * каждой step-нодой (для последних возвращается FlowState владеющего флоу).
38
- * Идентичность для tracking: сам объект `FlowState` (ключ в хабе) — навигация
39
- * бампает его версию.
35
+ * Brand symbol of a flow proxy — returns the `FlowState` object (flow
36
+ * navigation state). Exposed by three proxies: the flow node, the steps proxy,
37
+ * and each step node (the latter return the owning flow's FlowState).
38
+ * Tracking identity: the `FlowState` object itself (hub key) — navigation
39
+ * bumps its version.
40
40
  */
41
41
  export const FLOW_STATE = Symbol("flowState");
42
42
  /**
43
- * Имя маркер-ключа flow-ноды: упорядоченный массив ключей шагов.
44
- * Проставляется defineFlow; входит в CONFIG_PROPS, поэтому все обходы
45
- * дерева (traversal, registerNodes, buildValuesCache, …) его пропускают.
43
+ * Marker key on a flow node: the ordered array of step keys.
44
+ * Set by defineFlow; included in CONFIG_PROPS so all tree walks
45
+ * (traversal, registerNodes, buildValuesCache, …) skip it.
46
46
  */
47
47
  export const FLOW_STEPS_PROP = "__flowSteps";
48
48
  /**
49
- * Единственный источник имён полей состояния (canonical tuple).
50
- * Из него выводятся {@link FIELD_STATE_PROPS} (Set) и {@link MAPPABLE_KEYS}.
49
+ * Single source of truth for field-state property names (canonical tuple).
50
+ * {@link FIELD_STATE_PROPS} (Set) and {@link MAPPABLE_KEYS} derive from it.
51
51
  */
52
52
  export const FIELD_STATE_KEYS = [
53
53
  "value",
@@ -64,24 +64,24 @@ export const FIELD_STATE_KEYS = [
64
64
  "loading",
65
65
  ];
66
66
  /**
67
- * Свойства, относящиеся к состоянию поля. При обращении к ним прокси
68
- * возвращает значение из FieldState (вычисленное), а не из конфига.
67
+ * Field-state properties. When one of these is read, the proxy returns the
68
+ * computed value from FieldState rather than the raw config.
69
69
  */
70
70
  export const FIELD_STATE_PROPS = new Set(FIELD_STATE_KEYS);
71
71
  /**
72
- * Ключи, которые можно переименовывать через `fieldMapping`:
73
- * поля состояния + функциональный сеттер `onValueChange`.
72
+ * Keys renamable via `fieldMapping`: field-state keys plus the
73
+ * functional setter `onValueChange`.
74
74
  */
75
75
  export const MAPPABLE_KEYS = [...FIELD_STATE_KEYS, "onValueChange"];
76
76
  /**
77
- * Подмножество mappable-ключей, которые являются ВХОДНЫМИ ключами конфига
78
- * т.е. их пишет автор в конфиге узла. Только эти ключи нормализуются
79
- * external→internal при активном `fieldMapping` (см. {@link normalizeConfig}).
77
+ * Subset of mappable keys that are INPUT config keys i.e. keys an author
78
+ * writes in a node config. Only these are normalized external→internal when
79
+ * `fieldMapping` is active (see {@link normalizeConfig}).
80
80
  *
81
- * Остальные mappable-ключи (`isInvalid`, `errorMessage`, `dirty`, `loading`,
82
- * `onValueChange`) вычисляемые/выходные: в конфиге не пишутся, поэтому на
83
- * входе их нормализовать нечего (перевод для них происходит только на выходе
84
- * proxy). Попытка написать такой ключ в конфиге ошибка (strict).
81
+ * The remaining mappable keys (`isInvalid`, `errorMessage`, `dirty`,
82
+ * `loading`, `onValueChange`) are computed/output-only: they never appear in
83
+ * a config, so there is nothing to normalize on input (they are translated
84
+ * only on proxy output). Writing such a key in a config is an error (strict).
85
85
  */
86
86
  export const MAPPABLE_CONFIG_KEYS_TUPLE = [
87
87
  "value",
@@ -95,8 +95,8 @@ export const MAPPABLE_CONFIG_KEYS_TUPLE = [
95
95
  ];
96
96
  export const MAPPABLE_CONFIG_KEYS = new Set(MAPPABLE_CONFIG_KEYS_TUPLE);
97
97
  /**
98
- * Полный набор «служебных» ключей узла конфига.
99
- * При обходе дерева (init, buildValuesCache) пропускаются.
98
+ * Full set of "service" keys of a config node.
99
+ * Tree walks (init, buildValuesCache) skip them.
100
100
  */
101
101
  export const CONFIG_PROPS = new Set([
102
102
  ...FIELD_STATE_PROPS,
@@ -131,9 +131,9 @@ export const SPREADABLE_FIELD_STATE_PROPS = [
131
131
  "loading",
132
132
  ].includes(k));
133
133
  /**
134
- * Статический набор ключей, которые включаются при spread группового узла:
135
- * состояние (submitting, dirty, revalidate, loading) и методы (submit, reset).
136
- * Дочерние узлы добавляются динамически в computeProxyKeys.
134
+ * Static keys included when spreading a group node: state (submitting, dirty,
135
+ * revalidate, loading) and methods (submit, reset).
136
+ * Child node keys are added dynamically in computeProxyKeys.
137
137
  */
138
138
  export const GROUP_SPREAD_KEYS = [
139
139
  "value",
@@ -146,8 +146,8 @@ export const GROUP_SPREAD_KEYS = [
146
146
  "reset",
147
147
  ];
148
148
  /**
149
- * Дополнительные ключи spread для flow-ноды (defineFlow) — добавляются
150
- * к GROUP_SPREAD_KEYS в computeProxyKeys, когда узел помечен FLOW_STEPS_PROP.
149
+ * Extra spread keys for a flow node (defineFlow) — appended to
150
+ * GROUP_SPREAD_KEYS in computeProxyKeys when the node carries FLOW_STEPS_PROP.
151
151
  */
152
152
  export const FLOW_SPREAD_KEYS = [
153
153
  "currentStepKey",
@@ -162,8 +162,8 @@ export const FLOW_SPREAD_KEYS = [
162
162
  "validate",
163
163
  ];
164
164
  /**
165
- * Статический набор ключей для proxy списка (ListNode).
166
- * Возвращается из computeProxyKeys вместо GROUP_SPREAD_KEYS, когда узел массив.
165
+ * Static key set for a list proxy (ListNode).
166
+ * Returned from computeProxyKeys instead of GROUP_SPREAD_KEYS when the node is an array.
167
167
  */
168
168
  export const LIST_SPREAD_KEYS = [
169
169
  "items",
@@ -1,24 +1,26 @@
1
1
  import type { FieldMapping } from "./store/types";
2
2
  /**
3
- * Хелпер для объявления переиспользуемой карты `fieldMapping` с сохранением
4
- * литеральных значений в типе.
3
+ * Helper for declaring a reusable `fieldMapping` map while preserving literal
4
+ * values in the type.
5
5
  *
6
- * Зачем нужен: при вынесении карты в отдельную константу литеральные значения
7
- * (`"required"`, …) обычно расширяются до `string`, и статическое переименование
8
- * полей перестаёт работать (рантайм при этом не страдает). Два способа этого
9
- * избежать — `as const` или этот хелпер. `defineFieldMapping` предпочтительнее,
10
- * так как ещё и проверяет карту на соответствие {@link FieldMapping} (ключи
11
- * только mappable-имена, значениястроки).
6
+ * Why it exists: when the map is extracted into a separate constant, the
7
+ * literal values (`"required"`, …) usually widen to `string`, and static
8
+ * field renaming stops working (runtime is unaffected). Two ways to avoid
9
+ * that — `as const` or this helper. `defineFieldMapping` is preferred since
10
+ * it also validates the map against {@link FieldMapping} (keys mappable
11
+ * names only, valuesstrings).
12
12
  *
13
- * > ⚠️ НЕ используйте `... satisfies FieldMapping` для переиспользуемой карты:
14
- * > `satisfies` расширяет значения до `string`, и типизация переименования
15
- * > не сработает. Для inline-литерала прямо в `new Palistor({ fieldMapping })`
16
- * > хелпер не нужен — `const`-параметр класса сам захватывает литералы.
13
+ * > ⚠️ Do NOT use `... satisfies FieldMapping` for a reusable map:
14
+ * > `satisfies` widens the values to `string` and the rename typing breaks.
15
+ * > For an inline literal directly in `new Palistor({ fieldMapping })` the
16
+ * > helper is unnecessarythe class `const` type parameter captures the
17
+ * > literals by itself.
17
18
  *
18
- * `fieldMapping` задаёт ЕДИНЫЙ публичный словарь имён поля: конфиг пишется в тех
19
- * же (external) именах, что и читается. Нормализатор в конструкторе Palistor
20
- * приводит их к internal перед compute (см. `normalizeConfig`), поэтому ядро не
21
- * меняется. Написать internal-имя ремапленного ключа в конфиге ошибка (strict).
19
+ * `fieldMapping` defines the SINGLE public vocabulary of field names: the
20
+ * config is authored in the same (external) names it is read with. The
21
+ * normalizer in the Palistor constructor converts them to internal names
22
+ * before compute (see `normalizeConfig`), so the core is unchanged. Writing
23
+ * the internal name of a remapped key in the config is an error (strict).
22
24
  *
23
25
  * @example
24
26
  * const fieldMapping = defineFieldMapping({
@@ -29,13 +31,13 @@ import type { FieldMapping } from "./store/types";
29
31
  * });
30
32
  * const store = new Palistor({
31
33
  * config: {
32
- * // external-имена, не isRequired/description:
34
+ * // external names, not isRequired/description:
33
35
  * email: { value: "", required: true, helpText: "We never share it" },
34
36
  * },
35
37
  * fieldMapping,
36
38
  * });
37
- * store.proxy.email.required; // boolean — типизировано
38
- * store.proxy.email.helperText; // string — ошибка валидации после submit
39
+ * store.proxy.email.required; // boolean — statically typed
40
+ * store.proxy.email.helperText; // string — validation error after submit
39
41
  */
40
42
  export declare function defineFieldMapping<const M extends FieldMapping>(mapping: M): M;
41
43
  //# sourceMappingURL=defineFieldMapping.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineFieldMapping.d.ts","sourceRoot":"","sources":["../../store/defineFieldMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAE9E"}
1
+ {"version":3,"file":"defineFieldMapping.d.ts","sourceRoot":"","sources":["../../store/defineFieldMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAE9E"}
@@ -1,23 +1,25 @@
1
1
  /**
2
- * Хелпер для объявления переиспользуемой карты `fieldMapping` с сохранением
3
- * литеральных значений в типе.
2
+ * Helper for declaring a reusable `fieldMapping` map while preserving literal
3
+ * values in the type.
4
4
  *
5
- * Зачем нужен: при вынесении карты в отдельную константу литеральные значения
6
- * (`"required"`, …) обычно расширяются до `string`, и статическое переименование
7
- * полей перестаёт работать (рантайм при этом не страдает). Два способа этого
8
- * избежать — `as const` или этот хелпер. `defineFieldMapping` предпочтительнее,
9
- * так как ещё и проверяет карту на соответствие {@link FieldMapping} (ключи
10
- * только mappable-имена, значениястроки).
5
+ * Why it exists: when the map is extracted into a separate constant, the
6
+ * literal values (`"required"`, …) usually widen to `string`, and static
7
+ * field renaming stops working (runtime is unaffected). Two ways to avoid
8
+ * that — `as const` or this helper. `defineFieldMapping` is preferred since
9
+ * it also validates the map against {@link FieldMapping} (keys mappable
10
+ * names only, valuesstrings).
11
11
  *
12
- * > ⚠️ НЕ используйте `... satisfies FieldMapping` для переиспользуемой карты:
13
- * > `satisfies` расширяет значения до `string`, и типизация переименования
14
- * > не сработает. Для inline-литерала прямо в `new Palistor({ fieldMapping })`
15
- * > хелпер не нужен — `const`-параметр класса сам захватывает литералы.
12
+ * > ⚠️ Do NOT use `... satisfies FieldMapping` for a reusable map:
13
+ * > `satisfies` widens the values to `string` and the rename typing breaks.
14
+ * > For an inline literal directly in `new Palistor({ fieldMapping })` the
15
+ * > helper is unnecessarythe class `const` type parameter captures the
16
+ * > literals by itself.
16
17
  *
17
- * `fieldMapping` задаёт ЕДИНЫЙ публичный словарь имён поля: конфиг пишется в тех
18
- * же (external) именах, что и читается. Нормализатор в конструкторе Palistor
19
- * приводит их к internal перед compute (см. `normalizeConfig`), поэтому ядро не
20
- * меняется. Написать internal-имя ремапленного ключа в конфиге ошибка (strict).
18
+ * `fieldMapping` defines the SINGLE public vocabulary of field names: the
19
+ * config is authored in the same (external) names it is read with. The
20
+ * normalizer in the Palistor constructor converts them to internal names
21
+ * before compute (see `normalizeConfig`), so the core is unchanged. Writing
22
+ * the internal name of a remapped key in the config is an error (strict).
21
23
  *
22
24
  * @example
23
25
  * const fieldMapping = defineFieldMapping({
@@ -28,13 +30,13 @@
28
30
  * });
29
31
  * const store = new Palistor({
30
32
  * config: {
31
- * // external-имена, не isRequired/description:
33
+ * // external names, not isRequired/description:
32
34
  * email: { value: "", required: true, helpText: "We never share it" },
33
35
  * },
34
36
  * fieldMapping,
35
37
  * });
36
- * store.proxy.email.required; // boolean — типизировано
37
- * store.proxy.email.helperText; // string — ошибка валидации после submit
38
+ * store.proxy.email.required; // boolean — statically typed
39
+ * store.proxy.email.helperText; // string — validation error after submit
38
40
  */
39
41
  export function defineFieldMapping(mapping) {
40
42
  return mapping;
@@ -1 +1 @@
1
- {"version":3,"file":"defineFieldMapping.js","sourceRoot":"","sources":["../../store/defineFieldMapping.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,kBAAkB,CAA+B,OAAU;IACzE,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"defineFieldMapping.js","sourceRoot":"","sources":["../../store/defineFieldMapping.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,kBAAkB,CAA+B,OAAU;IACzE,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -13,7 +13,7 @@ export function collectInitialSnapshot(node, initialValueMap) {
13
13
  if (!child || typeof child !== "object")
14
14
  continue;
15
15
  if (isListNode(child))
16
- continue; // ListNode — пропускаем, обрабатывается в фазе 2
16
+ continue; // ListNode — skipped, restored separately
17
17
  if (isLeafNode(child)) {
18
18
  const initial = initialValueMap.get(child);
19
19
  if (initial !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"collectInitialSnapshot.js","sourceRoot":"","sources":["../../../store/dirtyTracking/collectInitialSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAmB,EACnB,eAAyC;IAEzC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAkB,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,iDAAiD;QAElF,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,SAAS;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"collectInitialSnapshot.js","sourceRoot":"","sources":["../../../store/dirtyTracking/collectInitialSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAmB,EACnB,eAAyC;IAEzC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAkB,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,0CAA0C;QAE3E,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,SAAS;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -5,10 +5,10 @@ export interface RecomputeDirtyResult {
5
5
  changed: Set<object>;
6
6
  }
7
7
  /**
8
- * Scoped recompute dirty: пересчитывает dirty только для групп,
9
- * содержащих изменённые узлы, и bubble-up к предкам.
8
+ * Scoped dirty recompute: recomputes dirty only for the groups containing
9
+ * changed nodes, bubbling up to the ancestors.
10
10
  *
11
- * Сложность: O(affectedGroups × childrenPerGroup) вместо O(allNodes).
11
+ * Complexity: O(affectedGroups × childrenPerGroup) instead of O(allNodes).
12
12
  */
13
13
  export declare function recomputeDirtyTargeted(changedNodes: Set<object>, rootConfig: AnyConfigNode, nodeState: WeakMap<object, FieldState>, initialValueMap: WeakMap<object, unknown>, nodeParents: WeakMap<object, object>, nodePaths: WeakMap<object, string>, listStates?: WeakMap<object, {
14
14
  itemIds: string[];
@@ -13,14 +13,14 @@ function arraysEqual(a, b) {
13
13
  return true;
14
14
  }
15
15
  /**
16
- * Scoped recompute dirty: пересчитывает dirty только для групп,
17
- * содержащих изменённые узлы, и bubble-up к предкам.
16
+ * Scoped dirty recompute: recomputes dirty only for the groups containing
17
+ * changed nodes, bubbling up to the ancestors.
18
18
  *
19
- * Сложность: O(affectedGroups × childrenPerGroup) вместо O(allNodes).
19
+ * Complexity: O(affectedGroups × childrenPerGroup) instead of O(allNodes).
20
20
  */
21
21
  export function recomputeDirtyTargeted(changedNodes, rootConfig, nodeState, initialValueMap, nodeParents, nodePaths, listStates) {
22
22
  const changed = new Set();
23
- // 1. Пересчитать dirty только для ЛИСТЬЕВ из changedNodes
23
+ // 1. Recompute dirty only for the LEAVES from changedNodes
24
24
  const affectedGroupPaths = new Set();
25
25
  for (const node of changedNodes) {
26
26
  if (isLeafNode(node)) {
@@ -36,8 +36,8 @@ export function recomputeDirtyTargeted(changedNodes, rootConfig, nodeState, init
36
36
  }
37
37
  affectedGroupPaths.add(getNodeGroupPath(node, nodeParents, nodePaths));
38
38
  }
39
- // 2. Для каждой affected group — агрегировать dirty из immediate children
40
- // и bubble-up к предкам
39
+ // 2. For every affected group — aggregate dirty from its immediate children
40
+ // and bubble up to the ancestors
41
41
  const processed = new Set();
42
42
  const queue = [...affectedGroupPaths];
43
43
  while (queue.length > 0) {
@@ -47,8 +47,8 @@ export function recomputeDirtyTargeted(changedNodes, rootConfig, nodeState, init
47
47
  processed.add(groupPath);
48
48
  const groupNode = resolveGroupByPath(rootConfig, groupPath);
49
49
  if (!groupNode)
50
- continue; // entity-путипропускаем
51
- // Агрегировать dirty из immediate children
50
+ continue; // entity paths skip
51
+ // Aggregate dirty from immediate children
52
52
  let anyChildDirty = false;
53
53
  for (const key of configKeys(groupNode)) {
54
54
  const child = groupNode[key];
@@ -67,12 +67,12 @@ export function recomputeDirtyTargeted(changedNodes, rootConfig, nodeState, init
67
67
  if (childState?.dirty)
68
68
  anyChildDirty = true;
69
69
  }
70
- // Обновить dirty на самой group-ноде
70
+ // Update dirty on the group node itself
71
71
  const groupState = nodeState.get(groupNode);
72
72
  if (groupState && groupState.dirty !== anyChildDirty) {
73
73
  nodeState.set(groupNode, { ...groupState, dirty: anyChildDirty });
74
74
  changed.add(groupNode);
75
- // Bubble-up: добавить parent group в очередь
75
+ // Bubble up: enqueue the parent group
76
76
  const parent = nodeParents.get(groupNode);
77
77
  if (parent) {
78
78
  const parentPath = nodePaths.get(parent) ?? "";
@@ -82,7 +82,7 @@ export function recomputeDirtyTargeted(changedNodes, rootConfig, nodeState, init
82
82
  }
83
83
  }
84
84
  }
85
- // 3. Определить anyDirty по root
85
+ // 3. Determine anyDirty from the root
86
86
  const rootState = nodeState.get(rootConfig);
87
87
  const anyDirty = rootState?.dirty ?? false;
88
88
  return { anyDirty, changed };
@@ -1 +1 @@
1
- {"version":3,"file":"recomputeDirtyTargeted.js","sourceRoot":"","sources":["../../../store/dirtyTracking/recomputeDirtyTargeted.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recomputeDirtyTargeted.js","sourceRoot":"","sources":["../../../store/dirtyTracking/recomputeDirtyTargeted.ts"],"names":[],"mappings":"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"}