palistor 0.0.25 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +574 -542
- package/README.ru.md +979 -0
- package/dist/index.d.ts +16 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -28
- package/dist/index.js.map +1 -1
- package/dist/react/createTrackingProxy.d.ts +27 -27
- package/dist/react/createTrackingProxy.d.ts.map +1 -1
- package/dist/react/createTrackingProxy.js +54 -53
- package/dist/react/createTrackingProxy.js.map +1 -1
- package/dist/react/useForm.d.ts +42 -43
- package/dist/react/useForm.d.ts.map +1 -1
- package/dist/react/useForm.js +38 -38
- package/dist/react/useForm.js.map +1 -1
- package/dist/react/usePersist.d.ts +14 -14
- package/dist/react/usePersist.js +18 -18
- package/dist/react/usePersist.js.map +1 -1
- package/dist/react/useStoreContext.d.ts +11 -11
- package/dist/react/useStoreContext.js +11 -11
- package/dist/react/useTranslator.d.ts +12 -12
- package/dist/react/useTranslator.js +12 -12
- package/dist/store/applyPatch/applyPatch.d.ts +8 -8
- package/dist/store/applyPatch/applyPatch.js +12 -12
- package/dist/store/applyPatch/applyPatch.js.map +1 -1
- package/dist/store/buildProxy/buildEntityProjectionProxy.js +6 -6
- package/dist/store/buildProxy/buildEntityProjectionProxy.js.map +1 -1
- package/dist/store/buildProxy/buildListProxy.d.ts +8 -8
- package/dist/store/buildProxy/buildListProxy.js +30 -30
- package/dist/store/buildProxy/buildListProxy.js.map +1 -1
- package/dist/store/buildProxy/buildProxy.d.ts +8 -8
- package/dist/store/buildProxy/buildProxy.js +39 -39
- package/dist/store/buildProxy/buildProxy.js.map +1 -1
- package/dist/store/buildProxy/computeProxyKeys.d.ts +8 -8
- package/dist/store/buildProxy/computeProxyKeys.js +9 -9
- package/dist/store/buildProxy/computeProxyKeys.js.map +1 -1
- package/dist/store/buildProxy/handleLazyResolve.d.ts +3 -3
- package/dist/store/buildProxy/handleLazyResolve.js +3 -3
- package/dist/store/buildProxy/initProxyCaches.d.ts +5 -5
- package/dist/store/buildProxy/initProxyCaches.js +5 -5
- package/dist/store/compute/computeFieldState.d.ts +3 -3
- package/dist/store/compute/computeFieldState.js +8 -8
- package/dist/store/compute/computeFieldState.js.map +1 -1
- package/dist/store/compute/fieldStateChanged.d.ts +1 -1
- package/dist/store/compute/fieldStateChanged.js +1 -1
- package/dist/store/compute/recompute/collectGroupComputeNodes.d.ts +4 -4
- package/dist/store/compute/recompute/collectGroupComputeNodes.js +7 -7
- package/dist/store/compute/recompute/collectGroupComputeNodes.js.map +1 -1
- package/dist/store/compute/recompute/recomputeAndNotify.d.ts +3 -3
- package/dist/store/compute/recompute/recomputeAndNotify.js +3 -3
- package/dist/store/compute/recompute/recomputeLeaves.d.ts +11 -10
- package/dist/store/compute/recompute/recomputeLeaves.d.ts.map +1 -1
- package/dist/store/compute/recompute/recomputeLeaves.js +26 -27
- package/dist/store/compute/recompute/recomputeLeaves.js.map +1 -1
- package/dist/store/compute/recompute/recomputeTargeted.d.ts +7 -7
- package/dist/store/compute/recompute/recomputeTargeted.js +12 -12
- package/dist/store/compute/recompute/recomputeTargeted.js.map +1 -1
- package/dist/store/compute/recompute/topologicalSortComputed.d.ts +4 -4
- package/dist/store/compute/recompute/topologicalSortComputed.d.ts.map +1 -1
- package/dist/store/compute/recompute/topologicalSortComputed.js +11 -13
- package/dist/store/compute/recompute/topologicalSortComputed.js.map +1 -1
- package/dist/store/compute/recompute/types.d.ts +4 -4
- package/dist/store/compute/resolveFlag.d.ts +2 -2
- package/dist/store/compute/resolveFlag.js +2 -2
- package/dist/store/compute/resolveString.d.ts +5 -5
- package/dist/store/compute/resolveString.js +6 -6
- package/dist/store/compute/resolveString.js.map +1 -1
- package/dist/store/compute/types.d.ts +3 -3
- package/dist/store/constants.d.ts +48 -48
- package/dist/store/constants.d.ts.map +1 -1
- package/dist/store/constants.js +45 -45
- package/dist/store/defineFieldMapping.d.ts +21 -19
- package/dist/store/defineFieldMapping.d.ts.map +1 -1
- package/dist/store/defineFieldMapping.js +21 -19
- package/dist/store/defineFieldMapping.js.map +1 -1
- package/dist/store/dirtyTracking/collectInitialSnapshot.js +1 -1
- package/dist/store/dirtyTracking/collectInitialSnapshot.js.map +1 -1
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.d.ts +3 -3
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.js +11 -11
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.js.map +1 -1
- package/dist/store/dirtyTracking/setGroupRevalidate.d.ts +6 -6
- package/dist/store/dirtyTracking/setGroupRevalidate.js +7 -7
- package/dist/store/dirtyTracking/setGroupRevalidate.js.map +1 -1
- package/dist/store/entityRegistry/entityRegistry.d.ts +72 -72
- package/dist/store/entityRegistry/entityRegistry.d.ts.map +1 -1
- package/dist/store/entityRegistry/entityRegistry.js +91 -91
- package/dist/store/entityRegistry/entityRegistry.js.map +1 -1
- package/dist/store/entityRegistry/generateId.d.ts +3 -3
- package/dist/store/entityRegistry/generateId.js +3 -3
- package/dist/store/entityRegistry/types.d.ts +17 -17
- package/dist/store/entityRegistry/types.d.ts.map +1 -1
- package/dist/store/flow/buildFlowStepsProxy.d.ts +9 -9
- package/dist/store/flow/buildFlowStepsProxy.js +13 -13
- package/dist/store/flow/buildFlowStepsProxy.js.map +1 -1
- package/dist/store/flow/defineFlow.d.ts +27 -25
- package/dist/store/flow/defineFlow.d.ts.map +1 -1
- package/dist/store/flow/defineFlow.js +15 -13
- package/dist/store/flow/defineFlow.js.map +1 -1
- package/dist/store/flow/flowApi.d.ts +3 -2
- package/dist/store/flow/flowApi.d.ts.map +1 -1
- package/dist/store/flow/flowApi.js +1 -1
- package/dist/store/flow/flowApi.js.map +1 -1
- package/dist/store/flow/flowNavigation.d.ts +65 -63
- package/dist/store/flow/flowNavigation.d.ts.map +1 -1
- package/dist/store/flow/flowNavigation.js +74 -72
- package/dist/store/flow/flowNavigation.js.map +1 -1
- package/dist/store/flow/flowState.d.ts +16 -16
- package/dist/store/flow/flowState.d.ts.map +1 -1
- package/dist/store/flow/flowState.js +5 -5
- package/dist/store/flow/flowState.js.map +1 -1
- package/dist/store/groupDeps/createGroupDeps.d.ts +3 -3
- package/dist/store/groupDeps/createGroupDeps.js +6 -6
- package/dist/store/groupDeps/createGroupDeps.js.map +1 -1
- package/dist/store/groupDeps/createTrackingValues.d.ts +9 -9
- package/dist/store/groupDeps/createTrackingValues.js +11 -11
- package/dist/store/groupDeps/createTrackingValues.js.map +1 -1
- package/dist/store/groupDeps/getNodeGroupPath.d.ts +3 -3
- package/dist/store/groupDeps/getNodeGroupPath.js +5 -5
- package/dist/store/groupDeps/getNodeGroupPath.js.map +1 -1
- package/dist/store/groupDeps/getRecipientGroups.d.ts +1 -1
- package/dist/store/groupDeps/getRecipientGroups.js +1 -1
- package/dist/store/groupDeps/groupDeps.d.ts +7 -7
- package/dist/store/groupDeps/groupDeps.js +7 -7
- package/dist/store/groupDeps/pairKey.d.ts +3 -3
- package/dist/store/groupDeps/pairKey.d.ts.map +1 -1
- package/dist/store/groupDeps/pairKey.js +4 -4
- package/dist/store/groupDeps/pairKey.js.map +1 -1
- package/dist/store/groupDeps/resolveGroupByPath.d.ts +3 -3
- package/dist/store/groupDeps/resolveGroupByPath.js +3 -3
- package/dist/store/init/createNotificationHub.d.ts +31 -31
- package/dist/store/init/createNotificationHub.d.ts.map +1 -1
- package/dist/store/init/createNotificationHub.js +36 -37
- package/dist/store/init/createNotificationHub.js.map +1 -1
- package/dist/store/init/createResolveManager.d.ts +72 -69
- package/dist/store/init/createResolveManager.d.ts.map +1 -1
- package/dist/store/init/createResolveManager.js +101 -98
- package/dist/store/init/createResolveManager.js.map +1 -1
- package/dist/store/init/initGroupSubmitting.d.ts +2 -2
- package/dist/store/init/initGroupSubmitting.js +4 -4
- package/dist/store/init/initGroupSubmitting.js.map +1 -1
- package/dist/store/normalizeConfig.d.ts +20 -18
- package/dist/store/normalizeConfig.d.ts.map +1 -1
- package/dist/store/normalizeConfig.js +31 -29
- package/dist/store/normalizeConfig.js.map +1 -1
- package/dist/store/onChangePipeline/computeFieldKey.d.ts +2 -2
- package/dist/store/onChangePipeline/computeFieldKey.js +2 -2
- package/dist/store/onChangePipeline/findOnChangeAncestors.d.ts +2 -2
- package/dist/store/onChangePipeline/findOnChangeAncestors.js +4 -4
- package/dist/store/onChangePipeline/findOnChangeAncestors.js.map +1 -1
- package/dist/store/onChangePipeline/onChangePipeline.d.ts +13 -12
- package/dist/store/onChangePipeline/onChangePipeline.d.ts.map +1 -1
- package/dist/store/onChangePipeline/onChangePipeline.js +14 -13
- package/dist/store/onChangePipeline/onChangePipeline.js.map +1 -1
- package/dist/store/persist/drivers.d.ts +7 -7
- package/dist/store/persist/drivers.js +8 -8
- package/dist/store/persist/drivers.js.map +1 -1
- package/dist/store/persist/index.d.ts +1 -1
- package/dist/store/persist/persistManager.d.ts +23 -23
- package/dist/store/persist/persistManager.d.ts.map +1 -1
- package/dist/store/persist/persistManager.js +51 -51
- package/dist/store/persist/persistManager.js.map +1 -1
- package/dist/store/persist/types.d.ts +23 -23
- package/dist/store/persist/types.d.ts.map +1 -1
- package/dist/store/persist/types.js +4 -4
- package/dist/store/resetPipeline/buildResetPatch.d.ts +5 -5
- package/dist/store/resetPipeline/buildResetPatch.js +5 -5
- package/dist/store/resetPipeline/collectDefaults.d.ts +5 -5
- package/dist/store/resetPipeline/collectDefaults.js +6 -6
- package/dist/store/resetPipeline/collectDefaults.js.map +1 -1
- package/dist/store/resetPipeline/resetPipeline.d.ts +7 -7
- package/dist/store/resetPipeline/resetPipeline.js +15 -15
- package/dist/store/resetPipeline/resetPipeline.js.map +1 -1
- package/dist/store/resolvePipeline/applyPendingWrites.d.ts +10 -10
- package/dist/store/resolvePipeline/applyPendingWrites.d.ts.map +1 -1
- package/dist/store/resolvePipeline/applyPendingWrites.js +35 -38
- package/dist/store/resolvePipeline/applyPendingWrites.js.map +1 -1
- package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts +8 -7
- package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts.map +1 -1
- package/dist/store/resolvePipeline/createContextTrackingProxy.js +6 -5
- package/dist/store/resolvePipeline/createContextTrackingProxy.js.map +1 -1
- package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts +43 -43
- package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts.map +1 -1
- package/dist/store/resolvePipeline/createValuesTrackingProxy.js +70 -70
- package/dist/store/resolvePipeline/createValuesTrackingProxy.js.map +1 -1
- package/dist/store/resolvePipeline/executeListResolve.d.ts +14 -14
- package/dist/store/resolvePipeline/executeListResolve.js +27 -27
- package/dist/store/resolvePipeline/executeListResolve.js.map +1 -1
- package/dist/store/resolvePipeline/executeResolve.d.ts +15 -15
- package/dist/store/resolvePipeline/executeResolve.js +46 -46
- package/dist/store/resolvePipeline/executeResolve.js.map +1 -1
- package/dist/store/store/NodeRegistry/nodeRegistry.d.ts +61 -61
- package/dist/store/store/NodeRegistry/nodeRegistry.d.ts.map +1 -1
- package/dist/store/store/NodeRegistry/nodeRegistry.js +85 -86
- package/dist/store/store/NodeRegistry/nodeRegistry.js.map +1 -1
- package/dist/store/store/NodeRegistry/nodeUtils.d.ts +5 -5
- package/dist/store/store/NodeRegistry/nodeUtils.d.ts.map +1 -1
- package/dist/store/store/NodeRegistry/nodeUtils.js +5 -5
- package/dist/store/store/NodeRegistry/nodeUtils.js.map +1 -1
- package/dist/store/store/groupDepsMap.d.ts +23 -23
- package/dist/store/store/groupDepsMap.d.ts.map +1 -1
- package/dist/store/store/groupDepsMap.js +35 -34
- package/dist/store/store/groupDepsMap.js.map +1 -1
- package/dist/store/store/hasComputedProps.d.ts +2 -2
- package/dist/store/store/hasComputedProps.js +2 -2
- package/dist/store/store/nodeMap.d.ts +5 -5
- package/dist/store/store/nodeMap.js +7 -7
- package/dist/store/store/nodeMap.js.map +1 -1
- package/dist/store/store/palistor.d.ts +80 -80
- package/dist/store/store/palistor.d.ts.map +1 -1
- package/dist/store/store/palistor.js +149 -169
- package/dist/store/store/palistor.js.map +1 -1
- package/dist/store/store/registerNodes.d.ts +10 -10
- package/dist/store/store/registerNodes.js +15 -15
- package/dist/store/store/registerNodes.js.map +1 -1
- package/dist/store/store/serviceRegistry.d.ts +8 -8
- package/dist/store/store/serviceRegistry.d.ts.map +1 -1
- package/dist/store/store/serviceRegistry.js +8 -8
- package/dist/store/store/serviceRegistry.js.map +1 -1
- package/dist/store/store/types.d.ts +236 -234
- package/dist/store/store/types.d.ts.map +1 -1
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.d.ts +2 -2
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.js +2 -2
- package/dist/store/submitPipeline/collectLeafStates.d.ts +2 -2
- package/dist/store/submitPipeline/collectLeafStates.js +2 -2
- package/dist/store/submitPipeline/submitPipeline.d.ts +8 -8
- package/dist/store/submitPipeline/submitPipeline.js +12 -12
- package/dist/store/submitPipeline/submitPipeline.js.map +1 -1
- package/dist/store/submitPipeline/types.d.ts +1 -1
- package/dist/store/submitPipeline/types.d.ts.map +1 -1
- package/dist/store/traversal/nodeClassifier.d.ts +9 -9
- package/dist/store/traversal/nodeClassifier.d.ts.map +1 -1
- package/dist/store/traversal/nodeClassifier.js +11 -11
- package/dist/store/traversal/nodeClassifier.js.map +1 -1
- package/dist/store/traversal/walkFull.d.ts +14 -14
- package/dist/store/traversal/walkFull.js +2 -2
- package/dist/store/valuesCache/valuesCache.d.ts +9 -9
- package/dist/store/valuesCache/valuesCache.d.ts.map +1 -1
- package/dist/store/valuesCache/valuesCache.js +6 -6
- package/dist/store/writePipeline/formatPatch.d.ts +5 -5
- package/dist/store/writePipeline/formatPatch.js +7 -7
- package/dist/store/writePipeline/formatPatch.js.map +1 -1
- package/dist/store/writePipeline/formatValue.d.ts +5 -5
- package/dist/store/writePipeline/formatValue.js +5 -5
- package/dist/store/writePipeline/mergeChanged.d.ts +4 -4
- package/dist/store/writePipeline/mergeChanged.js +4 -4
- package/dist/store/writePipeline/runSetter.d.ts +6 -6
- package/dist/store/writePipeline/runSetter.js +8 -8
- package/dist/store/writePipeline/storeValue.d.ts +3 -3
- package/dist/store/writePipeline/storeValue.js +3 -3
- package/dist/store/writePipeline/types.d.ts +4 -4
- package/dist/store/writePipeline/types.d.ts.map +1 -1
- package/dist/store/writePipeline/writePipeline.d.ts +7 -7
- package/dist/store/writePipeline/writePipeline.d.ts.map +1 -1
- package/dist/store/writePipeline/writePipeline.js +15 -15
- package/dist/store/writePipeline/writePipeline.js.map +1 -1
- package/package.json +11 -4
|
@@ -7,17 +7,18 @@ import { isLeafNode, isGroupNode, isListNode } from "./nodeUtils";
|
|
|
7
7
|
import { makeIdentityView } from "./nodeView";
|
|
8
8
|
import { collectFlowStates } from "../../flow/flowState";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Recursively build the reverse index `listConfigNode → fieldPath` for ALL
|
|
11
|
+
* lists in the config, including lists nested inside a list template
|
|
12
|
+
* (per-entity lists) and inside nested groups.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* -
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
14
|
+
* The path is stored as an array of keys **relative to the nearest entity
|
|
15
|
+
* scope**:
|
|
16
|
+
* - a list directly under a template → `["contacts"]`;
|
|
17
|
+
* - a list inside a nested group → `["profile", "contacts"]`.
|
|
18
|
+
* The path resets at every list boundary (`child[0]` opens a new entity
|
|
19
|
+
* scope — its items are separate entities with their own projectionObj).
|
|
20
|
+
* This lets `syncListValuesCache` (per-entity branch) write the membership
|
|
21
|
+
* into the right nested spot of the owner's projectionObj.
|
|
21
22
|
*/
|
|
22
23
|
function collectListFieldKeys(node, map, prefix = []) {
|
|
23
24
|
for (const key of Object.keys(node)) {
|
|
@@ -30,7 +31,7 @@ function collectListFieldKeys(node, map, prefix = []) {
|
|
|
30
31
|
map.set(child, [...prefix, key]);
|
|
31
32
|
const template = child[0];
|
|
32
33
|
if (template && typeof template === "object") {
|
|
33
|
-
//
|
|
34
|
+
// New entity scope — the path resets.
|
|
34
35
|
collectListFieldKeys(template, map, []);
|
|
35
36
|
}
|
|
36
37
|
continue;
|
|
@@ -41,89 +42,88 @@ function collectListFieldKeys(node, map, prefix = []) {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
|
-
*
|
|
45
|
+
* Registry of config nodes.
|
|
45
46
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* groupComputeMap, proxyCache.
|
|
47
|
+
* Bundles the data used by `Palistor`: nodeState, nodePaths, nodeParents,
|
|
48
|
+
* computeNodes, groupComputeMap, proxyCache.
|
|
49
49
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
50
|
+
* Runs initialization (registerNodes + buildNodeMaps + initGroupSubmitting)
|
|
51
|
+
* in the constructor.
|
|
52
52
|
*
|
|
53
|
-
* @internal
|
|
53
|
+
* @internal used by pipelines and subsystems via the kernel
|
|
54
54
|
*/
|
|
55
55
|
export class NodeRegistry {
|
|
56
|
-
// ───
|
|
56
|
+
// ─── Initialization ──────────────────────────────────────────────────────
|
|
57
57
|
constructor(rootConfig, initialValues, translate) {
|
|
58
|
-
// ───
|
|
58
|
+
// ─── Data ────────────────────────────────────────────────────────────────
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
60
|
+
* Computed state of every config node.
|
|
61
|
+
* Key — the node object, value — its FieldState.
|
|
62
62
|
*/
|
|
63
63
|
this.nodeState = new WeakMap();
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
65
|
+
* Absolute dot-path of every config node.
|
|
66
|
+
* e.g. passport.number → "passport.number".
|
|
67
|
+
* The root node has no entry in this map ("" is used).
|
|
68
68
|
*/
|
|
69
69
|
this.nodePaths = new WeakMap();
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
71
|
+
* Direct parent of every config node.
|
|
72
|
+
* The root node has no entry.
|
|
73
73
|
*/
|
|
74
74
|
this.nodeParents = new WeakMap();
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
76
|
+
* All compute nodes in traversal (DFS) order.
|
|
77
|
+
* Contains leaf nodes and group nodes with computed props.
|
|
78
|
+
* Used by NotificationHub for bumpLeafVersions().
|
|
79
79
|
*/
|
|
80
80
|
this.computeNodes = [];
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
82
|
+
* Group node → array of its direct child entries (leaves + groups with computed props).
|
|
83
|
+
* Used by recomputeTargeted to recompute a subtree.
|
|
84
84
|
*/
|
|
85
85
|
this.groupComputeMap = new WeakMap();
|
|
86
86
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
87
|
+
* Proxy object cache — one proxy per config node.
|
|
88
|
+
* Guarantees stable (===) proxy references.
|
|
89
89
|
*/
|
|
90
90
|
this.proxyCache = new WeakMap();
|
|
91
91
|
/**
|
|
92
|
-
* ListState
|
|
93
|
-
*
|
|
94
|
-
*
|
|
92
|
+
* ListState for every ListNode in the config.
|
|
93
|
+
* Key — the config array object (the ListNode itself).
|
|
94
|
+
* Populated during registerNodes.
|
|
95
95
|
*/
|
|
96
96
|
this.listStates = new WeakMap();
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
98
|
+
* All ListState objects in registration order.
|
|
99
|
+
* Used by Palistor to register lists in EntityRegistry.rekey().
|
|
100
100
|
*/
|
|
101
101
|
this.allListStates = [];
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* `ListState`,
|
|
103
|
+
* Single list-proxy cache (root + per-entity) — keyed by the `ListState` object.
|
|
104
|
+
* Guarantees stable list-proxy references for React (like proxyCache for groups).
|
|
105
|
+
* Every (owner, listConfigNode) pair and every root list has its own
|
|
106
|
+
* `ListState`, so keying by it gives correct isolation.
|
|
107
107
|
*/
|
|
108
108
|
this.listProxyCache = new WeakMap();
|
|
109
109
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* (`["contacts"]
|
|
113
|
-
*
|
|
114
|
-
* projectionObj
|
|
110
|
+
* Reverse index `listConfigNode → fieldPath`.
|
|
111
|
+
* The path is an array of keys relative to the owner's entity scope
|
|
112
|
+
* (`["contacts"]`, or `["profile", "contacts"]` for a list in a nested group).
|
|
113
|
+
* Used to write per-entity list membership into the right nested spot of
|
|
114
|
+
* the owner's projectionObj — so `store.getValues()` includes nested lists.
|
|
115
115
|
*/
|
|
116
116
|
this.listFieldKeys = new WeakMap();
|
|
117
117
|
/**
|
|
118
|
-
* FlowState
|
|
119
|
-
*
|
|
118
|
+
* FlowState for every flow node (defineFlow) in the config.
|
|
119
|
+
* Key — the flow's config node. Populated in collectFlowStates.
|
|
120
120
|
*/
|
|
121
121
|
this.flowStates = new WeakMap();
|
|
122
|
-
/**
|
|
122
|
+
/** All FlowStates in registration order (persist, reset, init lifecycle). */
|
|
123
123
|
this.allFlowStates = [];
|
|
124
124
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
125
|
+
* Reverse index: step config node → FlowState of the owning flow.
|
|
126
|
+
* Used by the group proxy to compute step.status / step.isInvalid.
|
|
127
127
|
*/
|
|
128
128
|
this.stepToFlow = new WeakMap();
|
|
129
129
|
/**
|
|
@@ -137,18 +137,18 @@ export class NodeRegistry {
|
|
|
137
137
|
this.isLeafNode = isLeafNode;
|
|
138
138
|
this.isGroupNode = isGroupNode;
|
|
139
139
|
this.isListNode = isListNode;
|
|
140
|
-
//
|
|
140
|
+
// Phase 1: register all leaf nodes and set initial values
|
|
141
141
|
registerNodes(rootConfig, initialValues, this.computeNodes, this.nodeState, "", this.groupComputeMap, translate, this.listStates, this.allListStates);
|
|
142
|
-
//
|
|
142
|
+
// Phase 2: initialize submitting/dirty/revalidate for groups
|
|
143
143
|
initGroupSubmitting(rootConfig, this.nodeState);
|
|
144
|
-
//
|
|
144
|
+
// Phase 3: build path and parent mappings
|
|
145
145
|
buildNodeMaps(rootConfig, this.nodePaths, this.nodeParents);
|
|
146
|
-
//
|
|
147
|
-
//
|
|
146
|
+
// Phase 4: reverse index listConfigNode → fieldKey, needed to
|
|
147
|
+
// materialize per-entity lists into projectionObj (getValues).
|
|
148
148
|
collectListFieldKeys(rootConfig, this.listFieldKeys);
|
|
149
|
-
//
|
|
150
|
-
// __flowSteps.
|
|
151
|
-
//
|
|
149
|
+
// Phase 5 (defineFlow): register FlowState for nodes carrying the
|
|
150
|
+
// __flowSteps marker. Runs after buildNodeMaps — flow node paths are
|
|
151
|
+
// already assigned (needed for the persist snapshot and reset scope).
|
|
152
152
|
collectFlowStates(rootConfig, this);
|
|
153
153
|
}
|
|
154
154
|
/** Called by Palistor after construction to wire the kernel reference. */
|
|
@@ -178,33 +178,33 @@ export class NodeRegistry {
|
|
|
178
178
|
}
|
|
179
179
|
return view;
|
|
180
180
|
}
|
|
181
|
-
// ───
|
|
182
|
-
/**
|
|
181
|
+
// ─── Navigation ──────────────────────────────────────────────────────────
|
|
182
|
+
/** Get the computed state of a node. */
|
|
183
183
|
getState(node) {
|
|
184
184
|
return this.nodeState.get(node);
|
|
185
185
|
}
|
|
186
|
-
/**
|
|
186
|
+
/** Set the state of a node. */
|
|
187
187
|
setState(node, state) {
|
|
188
188
|
this.nodeState.set(node, state);
|
|
189
189
|
}
|
|
190
|
-
/**
|
|
190
|
+
/** Get the absolute dot-path of a node. undefined for the root. */
|
|
191
191
|
getPath(node) {
|
|
192
192
|
return this.nodePaths.get(node);
|
|
193
193
|
}
|
|
194
|
-
/**
|
|
194
|
+
/** Get the direct parent of a node. */
|
|
195
195
|
getParent(node) {
|
|
196
196
|
return this.nodeParents.get(node);
|
|
197
197
|
}
|
|
198
198
|
/**
|
|
199
|
-
*
|
|
200
|
-
* -
|
|
201
|
-
* -
|
|
202
|
-
* -
|
|
199
|
+
* Get the path of the group a node belongs to.
|
|
200
|
+
* - Leaf node → the parent group's path
|
|
201
|
+
* - Group node → its own path
|
|
202
|
+
* - Root → ""
|
|
203
203
|
*/
|
|
204
204
|
getGroupPath(node) {
|
|
205
205
|
return getNodeGroupPath(node, this.nodeParents, this.nodePaths);
|
|
206
206
|
}
|
|
207
|
-
/**
|
|
207
|
+
/** Find a node by dot-path. Scans computeNodes and checks their paths. */
|
|
208
208
|
findByPath(path) {
|
|
209
209
|
for (const entry of this.computeNodes) {
|
|
210
210
|
if (entry.path === path)
|
|
@@ -212,22 +212,22 @@ export class NodeRegistry {
|
|
|
212
212
|
}
|
|
213
213
|
return undefined;
|
|
214
214
|
}
|
|
215
|
-
/**
|
|
215
|
+
/** Iterate over all compute nodes. */
|
|
216
216
|
forEachCompute(callback) {
|
|
217
217
|
for (const entry of this.computeNodes) {
|
|
218
218
|
callback(entry);
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
/**
|
|
222
|
-
*
|
|
222
|
+
* Register a leaf node created at runtime (e.g. an entity leaf on store.set()).
|
|
223
223
|
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
224
|
+
* Updates all registry WeakMaps and appends an entry to `computeNodes`,
|
|
225
|
+
* so `bumpLeafVersions` (NotificationHub) automatically picks up the new node.
|
|
226
226
|
*
|
|
227
|
-
* @param node
|
|
228
|
-
* @param path
|
|
229
|
-
* @param parent
|
|
230
|
-
* @param state
|
|
227
|
+
* @param node Node object (`{ value }`)
|
|
228
|
+
* @param path Absolute dot-path, e.g. "users.0.name"
|
|
229
|
+
* @param parent Direct parent node object
|
|
230
|
+
* @param state Initial FieldState
|
|
231
231
|
*/
|
|
232
232
|
registerDynamicLeaf(node, path, parent, state) {
|
|
233
233
|
const entry = { node: node, path };
|
|
@@ -235,7 +235,7 @@ export class NodeRegistry {
|
|
|
235
235
|
this.nodeState.set(node, state);
|
|
236
236
|
this.nodePaths.set(node, path);
|
|
237
237
|
this.nodeParents.set(node, parent);
|
|
238
|
-
// groupComputeMap:
|
|
238
|
+
// groupComputeMap: append to the parent group's list
|
|
239
239
|
let list = this.groupComputeMap.get(parent);
|
|
240
240
|
if (!list) {
|
|
241
241
|
list = [];
|
|
@@ -244,20 +244,19 @@ export class NodeRegistry {
|
|
|
244
244
|
list.push(entry);
|
|
245
245
|
}
|
|
246
246
|
/**
|
|
247
|
-
*
|
|
247
|
+
* Unregister a leaf node (e.g. when an entity is deleted).
|
|
248
248
|
*
|
|
249
|
-
*
|
|
250
|
-
* WeakMap
|
|
249
|
+
* Removes the entry from `computeNodes` and from the parent's
|
|
250
|
+
* `groupComputeMap`. WeakMap entries (nodeState, nodePaths, nodeParents)
|
|
251
|
+
* are reclaimed by the GC automatically.
|
|
251
252
|
*
|
|
252
|
-
* @param node
|
|
253
|
+
* @param node Leaf node object
|
|
253
254
|
*/
|
|
254
255
|
unregisterLeaf(node) {
|
|
255
|
-
// Удалить из computeNodes
|
|
256
256
|
const idx = this.computeNodes.findIndex((e) => e.node === node);
|
|
257
257
|
if (idx !== -1) {
|
|
258
258
|
this.computeNodes.splice(idx, 1);
|
|
259
259
|
}
|
|
260
|
-
// Удалить из groupComputeMap родителя
|
|
261
260
|
const parent = this.nodeParents.get(node);
|
|
262
261
|
if (parent) {
|
|
263
262
|
const list = this.groupComputeMap.get(parent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeRegistry.js","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA8D,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAsC,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAkB,MAAM,sBAAsB,CAAC;AAEzE
|
|
1
|
+
{"version":3,"file":"nodeRegistry.js","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { isLeafNode, isGroupNode } from "../../traversal/nodeClassifier";
|
|
2
2
|
export { isLeafNode, isGroupNode } from "../../traversal/nodeClassifier";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* array[0] — template (
|
|
4
|
+
* Whether the node is a list (array of length 1-2).
|
|
5
|
+
* array[0] — template (a regular group), array[1] — optional listConfig.
|
|
6
6
|
*
|
|
7
|
-
* NOTE:
|
|
8
|
-
*
|
|
7
|
+
* NOTE: Stricter check than traversal.isListNode (length 1-2).
|
|
8
|
+
* Used when building proxies and expanding keys.
|
|
9
9
|
*/
|
|
10
10
|
export declare function isListNode(node: unknown): node is readonly [object, ...unknown[]];
|
|
11
|
-
/**
|
|
11
|
+
/** Utility class for node type checks. Constructed without arguments. */
|
|
12
12
|
export declare class NodeUtils {
|
|
13
13
|
isLeafNode: typeof isLeafNode;
|
|
14
14
|
isGroupNode: typeof isGroupNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAEjF;AAED,
|
|
1
|
+
{"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAEjF;AAED,yEAAyE;AACzE,qBAAa,SAAS;IACpB,UAAU,oBAAc;IACxB,WAAW,qBAAe;IAC1B,UAAU,oBAAc;CACzB"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { isLeafNode, isGroupNode } from "../../traversal/nodeClassifier";
|
|
2
2
|
export { isLeafNode, isGroupNode } from "../../traversal/nodeClassifier";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* array[0] — template (
|
|
4
|
+
* Whether the node is a list (array of length 1-2).
|
|
5
|
+
* array[0] — template (a regular group), array[1] — optional listConfig.
|
|
6
6
|
*
|
|
7
|
-
* NOTE:
|
|
8
|
-
*
|
|
7
|
+
* NOTE: Stricter check than traversal.isListNode (length 1-2).
|
|
8
|
+
* Used when building proxies and expanding keys.
|
|
9
9
|
*/
|
|
10
10
|
export function isListNode(node) {
|
|
11
11
|
return Array.isArray(node) && node.length >= 1 && node.length <= 2;
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
13
|
+
/** Utility class for node type checks. Constructed without arguments. */
|
|
14
14
|
export class NodeUtils {
|
|
15
15
|
constructor() {
|
|
16
16
|
this.isLeafNode = isLeafNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeUtils.js","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"nodeUtils.js","sourceRoot":"","sources":["../../../../store/store/NodeRegistry/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACzE;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,yEAAyE;AACzE,MAAM,OAAO,SAAS;IAAtB;QACE,eAAU,GAAG,UAAU,CAAC;QACxB,gBAAW,GAAG,WAAW,CAAC;QAC1B,eAAU,GAAG,UAAU,CAAC;IAC1B,CAAC;CAAA"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { AnyConfigNode } from "./types";
|
|
2
2
|
import type { TrackingWrap } from "../compute/recompute";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Map of dependencies between groups.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* - `Set<string>`
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
6
|
+
* Combines:
|
|
7
|
+
* - a `Set<string>` of donor→recipient pairs (cross-group dependencies)
|
|
8
|
+
* - a tracking-proxy cache and the "dependencies built" flag
|
|
9
|
+
* - the `createTrackingValues` logic during the first full recomputeAll
|
|
10
10
|
*
|
|
11
|
-
* @internal
|
|
11
|
+
* @internal used by `Palistor` and the compute pipelines
|
|
12
12
|
*/
|
|
13
13
|
export declare class GroupDepsMap {
|
|
14
14
|
private readonly _deps;
|
|
@@ -18,34 +18,34 @@ export declare class GroupDepsMap {
|
|
|
18
18
|
private readonly _nodePaths;
|
|
19
19
|
constructor(rootConfig: AnyConfigNode, nodePaths: WeakMap<object, string>, nodeParents: WeakMap<object, object>);
|
|
20
20
|
/**
|
|
21
|
-
* Raw `Set<string>`
|
|
22
|
-
*
|
|
21
|
+
* Raw `Set<string>` of dependency pairs — for compatibility with
|
|
22
|
+
* `recomputeTargeted` and other functions taking `groupDeps` directly.
|
|
23
23
|
* @internal
|
|
24
24
|
*/
|
|
25
25
|
get deps(): Set<string>;
|
|
26
|
-
/**
|
|
26
|
+
/** Whether cross-group dependencies were already built in the first recomputeAll. */
|
|
27
27
|
get isBuilt(): boolean;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* Returns a `TrackingWrap` function that intercepts READ accesses to other
|
|
30
|
+
* groups' values and records the dependencies into `deps`.
|
|
31
31
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
32
|
+
* Use ONLY during the first `recomputeAll` (`isBuilt === false`).
|
|
33
|
+
* Call `markBuilt()` when done.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
36
|
-
* -
|
|
37
|
-
* currentGroupPath = recipientPath (=
|
|
38
|
-
* -
|
|
39
|
-
*
|
|
40
|
-
* recipientPath
|
|
35
|
+
* Receives group-scoped values (parent from nodeSlot):
|
|
36
|
+
* - For leaf nodes: values = the parent group's scope,
|
|
37
|
+
* currentGroupPath = recipientPath (= the parent group's path).
|
|
38
|
+
* - For group nodes (with isVisible etc.): values = the group's parent
|
|
39
|
+
* scope (grandparent scope), currentGroupPath = the parent's path.
|
|
40
|
+
* recipientPath is then the group's own path.
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
42
|
+
* The cache uses the composite key `currentGroupPath\0recipientPath` to
|
|
43
|
+
* avoid collisions between leaf and group nodes with the same recipientPath.
|
|
44
44
|
*/
|
|
45
45
|
getTrackingWrap(): TrackingWrap;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* Mark the dependencies as built and release the proxy cache.
|
|
48
|
+
* Called exactly once — after the first full `recomputeAll`.
|
|
49
49
|
*/
|
|
50
50
|
markBuilt(): void;
|
|
51
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupDepsMap.d.ts","sourceRoot":"","sources":["../../../store/store/groupDepsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;gBAGnD,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAOtC;;;;OAIG;IACH,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAEtB;IAED
|
|
1
|
+
{"version":3,"file":"groupDepsMap.d.ts","sourceRoot":"","sources":["../../../store/store/groupDepsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;gBAGnD,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAOtC;;;;OAIG;IACH,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAEtB;IAED,qFAAqF;IACrF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,IAAI,YAAY;IAgC/B;;;OAGG;IACH,SAAS,IAAI,IAAI;CAIlB"}
|
|
@@ -3,14 +3,14 @@ import { createTrackingValues } from "../groupDeps/createTrackingValues";
|
|
|
3
3
|
import { getNodeGroupPath } from "../groupDeps/getNodeGroupPath";
|
|
4
4
|
import { isLeafNode } from "../traversal";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Map of dependencies between groups.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* - `Set<string>`
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
8
|
+
* Combines:
|
|
9
|
+
* - a `Set<string>` of donor→recipient pairs (cross-group dependencies)
|
|
10
|
+
* - a tracking-proxy cache and the "dependencies built" flag
|
|
11
|
+
* - the `createTrackingValues` logic during the first full recomputeAll
|
|
12
12
|
*
|
|
13
|
-
* @internal
|
|
13
|
+
* @internal used by `Palistor` and the compute pipelines
|
|
14
14
|
*/
|
|
15
15
|
export class GroupDepsMap {
|
|
16
16
|
constructor(rootConfig, nodePaths, nodeParents) {
|
|
@@ -21,48 +21,49 @@ export class GroupDepsMap {
|
|
|
21
21
|
this._nodeParents = nodeParents;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Raw `Set<string>`
|
|
25
|
-
*
|
|
24
|
+
* Raw `Set<string>` of dependency pairs — for compatibility with
|
|
25
|
+
* `recomputeTargeted` and other functions taking `groupDeps` directly.
|
|
26
26
|
* @internal
|
|
27
27
|
*/
|
|
28
28
|
get deps() {
|
|
29
29
|
return this._deps;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** Whether cross-group dependencies were already built in the first recomputeAll. */
|
|
32
32
|
get isBuilt() {
|
|
33
33
|
return this._built;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* Returns a `TrackingWrap` function that intercepts READ accesses to other
|
|
37
|
+
* groups' values and records the dependencies into `deps`.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* Use ONLY during the first `recomputeAll` (`isBuilt === false`).
|
|
40
|
+
* Call `markBuilt()` when done.
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
* -
|
|
44
|
-
* currentGroupPath = recipientPath (=
|
|
45
|
-
* -
|
|
46
|
-
*
|
|
47
|
-
* recipientPath
|
|
42
|
+
* Receives group-scoped values (parent from nodeSlot):
|
|
43
|
+
* - For leaf nodes: values = the parent group's scope,
|
|
44
|
+
* currentGroupPath = recipientPath (= the parent group's path).
|
|
45
|
+
* - For group nodes (with isVisible etc.): values = the group's parent
|
|
46
|
+
* scope (grandparent scope), currentGroupPath = the parent's path.
|
|
47
|
+
* recipientPath is then the group's own path.
|
|
48
48
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
49
|
+
* The cache uses the composite key `currentGroupPath\0recipientPath` to
|
|
50
|
+
* avoid collisions between leaf and group nodes with the same recipientPath.
|
|
51
51
|
*/
|
|
52
52
|
getTrackingWrap() {
|
|
53
53
|
return (node, values) => {
|
|
54
54
|
const isLeaf = isLeafNode(node);
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
// -
|
|
59
|
-
// -
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
55
|
+
// The path of the group UNDER which this compute entry lives in
|
|
56
|
+
// groupComputeMap — that group is what recomputeTargeted recomputes, so
|
|
57
|
+
// it must be the recipient of the cross-group dependency:
|
|
58
|
+
// - a leaf is stored under its parent group → getNodeGroupPath(leaf) = its path;
|
|
59
|
+
// - a group node (isVisible etc.) is also stored under its PARENT group,
|
|
60
|
+
// so we take the parent's path, not the node's own path. Otherwise the
|
|
61
|
+
// dependency is recorded on the group's own path, and recomputing that
|
|
62
|
+
// group only touches its CHILDREN — not its own isVisible entry (which
|
|
63
|
+
// lives under the parent) — so a neighbor's cross-group isVisible would
|
|
64
|
+
// never be recomputed.
|
|
65
|
+
// `values` here is the scope of that same parent group, so
|
|
66
|
+
// currentGroupPath (nesting root) equals ownerGroupPath.
|
|
66
67
|
const ownerGroupPath = isLeaf
|
|
67
68
|
? getNodeGroupPath(node, this._nodeParents, this._nodePaths)
|
|
68
69
|
: (() => {
|
|
@@ -78,8 +79,8 @@ export class GroupDepsMap {
|
|
|
78
79
|
};
|
|
79
80
|
}
|
|
80
81
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
82
|
+
* Mark the dependencies as built and release the proxy cache.
|
|
83
|
+
* Called exactly once — after the first full `recomputeAll`.
|
|
83
84
|
*/
|
|
84
85
|
markBuilt() {
|
|
85
86
|
this._built = true;
|