palistor 0.0.24
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/LICENSE +21 -0
- package/README.md +947 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/react/createTrackingProxy.d.ts +55 -0
- package/dist/react/createTrackingProxy.d.ts.map +1 -0
- package/dist/react/createTrackingProxy.js +149 -0
- package/dist/react/createTrackingProxy.js.map +1 -0
- package/dist/react/useForm.d.ts +108 -0
- package/dist/react/useForm.d.ts.map +1 -0
- package/dist/react/useForm.js +180 -0
- package/dist/react/useForm.js.map +1 -0
- package/dist/react/useNotifier.d.ts +35 -0
- package/dist/react/useNotifier.d.ts.map +1 -0
- package/dist/react/useNotifier.js +41 -0
- package/dist/react/useNotifier.js.map +1 -0
- package/dist/react/usePersist.d.ts +45 -0
- package/dist/react/usePersist.d.ts.map +1 -0
- package/dist/react/usePersist.js +60 -0
- package/dist/react/usePersist.js.map +1 -0
- package/dist/react/useStoreContext.d.ts +42 -0
- package/dist/react/useStoreContext.d.ts.map +1 -0
- package/dist/react/useStoreContext.js +46 -0
- package/dist/react/useStoreContext.js.map +1 -0
- package/dist/react/useTranslator.d.ts +37 -0
- package/dist/react/useTranslator.d.ts.map +1 -0
- package/dist/react/useTranslator.js +43 -0
- package/dist/react/useTranslator.js.map +1 -0
- package/dist/store/applyPatch/applyPatch.d.ts +17 -0
- package/dist/store/applyPatch/applyPatch.d.ts.map +1 -0
- package/dist/store/applyPatch/applyPatch.js +44 -0
- package/dist/store/applyPatch/applyPatch.js.map +1 -0
- package/dist/store/buildProxy/buildEntityProjectionProxy.d.ts +52 -0
- package/dist/store/buildProxy/buildEntityProjectionProxy.d.ts.map +1 -0
- package/dist/store/buildProxy/buildEntityProjectionProxy.js +321 -0
- package/dist/store/buildProxy/buildEntityProjectionProxy.js.map +1 -0
- package/dist/store/buildProxy/buildListProxy.d.ts +33 -0
- package/dist/store/buildProxy/buildListProxy.d.ts.map +1 -0
- package/dist/store/buildProxy/buildListProxy.js +306 -0
- package/dist/store/buildProxy/buildListProxy.js.map +1 -0
- package/dist/store/buildProxy/buildProxy.d.ts +41 -0
- package/dist/store/buildProxy/buildProxy.d.ts.map +1 -0
- package/dist/store/buildProxy/buildProxy.js +380 -0
- package/dist/store/buildProxy/buildProxy.js.map +1 -0
- package/dist/store/buildProxy/computeProxyKeys.d.ts +15 -0
- package/dist/store/buildProxy/computeProxyKeys.d.ts.map +1 -0
- package/dist/store/buildProxy/computeProxyKeys.js +28 -0
- package/dist/store/buildProxy/computeProxyKeys.js.map +1 -0
- package/dist/store/buildProxy/handleLazyResolve.d.ts +10 -0
- package/dist/store/buildProxy/handleLazyResolve.d.ts.map +1 -0
- package/dist/store/buildProxy/handleLazyResolve.js +26 -0
- package/dist/store/buildProxy/handleLazyResolve.js.map +1 -0
- package/dist/store/buildProxy/initProxyCaches.d.ts +16 -0
- package/dist/store/buildProxy/initProxyCaches.d.ts.map +1 -0
- package/dist/store/buildProxy/initProxyCaches.js +17 -0
- package/dist/store/buildProxy/initProxyCaches.js.map +1 -0
- package/dist/store/compute/computeFieldState.d.ts +10 -0
- package/dist/store/compute/computeFieldState.d.ts.map +1 -0
- package/dist/store/compute/computeFieldState.js +53 -0
- package/dist/store/compute/computeFieldState.js.map +1 -0
- package/dist/store/compute/fieldStateChanged.d.ts +6 -0
- package/dist/store/compute/fieldStateChanged.d.ts.map +1 -0
- package/dist/store/compute/fieldStateChanged.js +20 -0
- package/dist/store/compute/fieldStateChanged.js.map +1 -0
- package/dist/store/compute/index.d.ts +7 -0
- package/dist/store/compute/index.d.ts.map +1 -0
- package/dist/store/compute/index.js +6 -0
- package/dist/store/compute/index.js.map +1 -0
- package/dist/store/compute/isEmpty.d.ts +6 -0
- package/dist/store/compute/isEmpty.d.ts.map +1 -0
- package/dist/store/compute/isEmpty.js +14 -0
- package/dist/store/compute/isEmpty.js.map +1 -0
- package/dist/store/compute/recompute/collectGroupComputeNodes.d.ts +11 -0
- package/dist/store/compute/recompute/collectGroupComputeNodes.d.ts.map +1 -0
- package/dist/store/compute/recompute/collectGroupComputeNodes.js +26 -0
- package/dist/store/compute/recompute/collectGroupComputeNodes.js.map +1 -0
- package/dist/store/compute/recompute/collectGroupLeafNodes.d.ts +11 -0
- package/dist/store/compute/recompute/collectGroupLeafNodes.d.ts.map +1 -0
- package/dist/store/compute/recompute/collectGroupLeafNodes.js +26 -0
- package/dist/store/compute/recompute/collectGroupLeafNodes.js.map +1 -0
- package/dist/store/compute/recompute/index.d.ts +7 -0
- package/dist/store/compute/recompute/index.d.ts.map +1 -0
- package/dist/store/compute/recompute/index.js +6 -0
- package/dist/store/compute/recompute/index.js.map +1 -0
- package/dist/store/compute/recompute/recomputeAndNotify.d.ts +8 -0
- package/dist/store/compute/recompute/recomputeAndNotify.d.ts.map +1 -0
- package/dist/store/compute/recompute/recomputeAndNotify.js +13 -0
- package/dist/store/compute/recompute/recomputeAndNotify.js.map +1 -0
- package/dist/store/compute/recompute/recomputeLeaves.d.ts +23 -0
- package/dist/store/compute/recompute/recomputeLeaves.d.ts.map +1 -0
- package/dist/store/compute/recompute/recomputeLeaves.js +77 -0
- package/dist/store/compute/recompute/recomputeLeaves.js.map +1 -0
- package/dist/store/compute/recompute/recomputeTargeted.d.ts +14 -0
- package/dist/store/compute/recompute/recomputeTargeted.d.ts.map +1 -0
- package/dist/store/compute/recompute/recomputeTargeted.js +50 -0
- package/dist/store/compute/recompute/recomputeTargeted.js.map +1 -0
- package/dist/store/compute/recompute/topologicalSortComputed.d.ts +16 -0
- package/dist/store/compute/recompute/topologicalSortComputed.d.ts.map +1 -0
- package/dist/store/compute/recompute/topologicalSortComputed.js +60 -0
- package/dist/store/compute/recompute/topologicalSortComputed.js.map +1 -0
- package/dist/store/compute/recompute/types.d.ts +24 -0
- package/dist/store/compute/recompute/types.d.ts.map +1 -0
- package/dist/store/compute/recompute/types.js +2 -0
- package/dist/store/compute/recompute/types.js.map +1 -0
- package/dist/store/compute/resolveFlag.d.ts +7 -0
- package/dist/store/compute/resolveFlag.d.ts.map +1 -0
- package/dist/store/compute/resolveFlag.js +12 -0
- package/dist/store/compute/resolveFlag.js.map +1 -0
- package/dist/store/compute/resolveString.d.ts +11 -0
- package/dist/store/compute/resolveString.d.ts.map +1 -0
- package/dist/store/compute/resolveString.js +18 -0
- package/dist/store/compute/resolveString.js.map +1 -0
- package/dist/store/compute/types.d.ts +37 -0
- package/dist/store/compute/types.d.ts.map +1 -0
- package/dist/store/compute/types.js +2 -0
- package/dist/store/compute/types.js.map +1 -0
- package/dist/store/constants.d.ts +83 -0
- package/dist/store/constants.d.ts.map +1 -0
- package/dist/store/constants.js +145 -0
- package/dist/store/constants.js.map +1 -0
- package/dist/store/defineFieldMapping.d.ts +41 -0
- package/dist/store/defineFieldMapping.d.ts.map +1 -0
- package/dist/store/defineFieldMapping.js +42 -0
- package/dist/store/defineFieldMapping.js.map +1 -0
- package/dist/store/defineList.d.ts +14 -0
- package/dist/store/defineList.d.ts.map +1 -0
- package/dist/store/defineList.js +7 -0
- package/dist/store/defineList.js.map +1 -0
- package/dist/store/dirtyTracking/captureInitialValues.d.ts +8 -0
- package/dist/store/dirtyTracking/captureInitialValues.d.ts.map +1 -0
- package/dist/store/dirtyTracking/captureInitialValues.js +16 -0
- package/dist/store/dirtyTracking/captureInitialValues.js.map +1 -0
- package/dist/store/dirtyTracking/collectInitialSnapshot.d.ts +10 -0
- package/dist/store/dirtyTracking/collectInitialSnapshot.d.ts.map +1 -0
- package/dist/store/dirtyTracking/collectInitialSnapshot.js +35 -0
- package/dist/store/dirtyTracking/collectInitialSnapshot.js.map +1 -0
- package/dist/store/dirtyTracking/index.d.ts +7 -0
- package/dist/store/dirtyTracking/index.d.ts.map +1 -0
- package/dist/store/dirtyTracking/index.js +6 -0
- package/dist/store/dirtyTracking/index.js.map +1 -0
- package/dist/store/dirtyTracking/isDirtyValue.d.ts +7 -0
- package/dist/store/dirtyTracking/isDirtyValue.d.ts.map +1 -0
- package/dist/store/dirtyTracking/isDirtyValue.js +25 -0
- package/dist/store/dirtyTracking/isDirtyValue.js.map +1 -0
- package/dist/store/dirtyTracking/mergeInitialValues.d.ts +11 -0
- package/dist/store/dirtyTracking/mergeInitialValues.d.ts.map +1 -0
- package/dist/store/dirtyTracking/mergeInitialValues.js +29 -0
- package/dist/store/dirtyTracking/mergeInitialValues.js.map +1 -0
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.d.ts +17 -0
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.d.ts.map +1 -0
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.js +90 -0
- package/dist/store/dirtyTracking/recomputeDirtyTargeted.js.map +1 -0
- package/dist/store/dirtyTracking/setGroupRevalidate.d.ts +13 -0
- package/dist/store/dirtyTracking/setGroupRevalidate.d.ts.map +1 -0
- package/dist/store/dirtyTracking/setGroupRevalidate.js +32 -0
- package/dist/store/dirtyTracking/setGroupRevalidate.js.map +1 -0
- package/dist/store/entityRegistry/entityRegistry.d.ts +166 -0
- package/dist/store/entityRegistry/entityRegistry.d.ts.map +1 -0
- package/dist/store/entityRegistry/entityRegistry.js +402 -0
- package/dist/store/entityRegistry/entityRegistry.js.map +1 -0
- package/dist/store/entityRegistry/generateId.d.ts +7 -0
- package/dist/store/entityRegistry/generateId.d.ts.map +1 -0
- package/dist/store/entityRegistry/generateId.js +18 -0
- package/dist/store/entityRegistry/generateId.js.map +1 -0
- package/dist/store/entityRegistry/index.d.ts +4 -0
- package/dist/store/entityRegistry/index.d.ts.map +1 -0
- package/dist/store/entityRegistry/index.js +3 -0
- package/dist/store/entityRegistry/index.js.map +1 -0
- package/dist/store/entityRegistry/types.d.ts +50 -0
- package/dist/store/entityRegistry/types.d.ts.map +1 -0
- package/dist/store/entityRegistry/types.js +2 -0
- package/dist/store/entityRegistry/types.js.map +1 -0
- package/dist/store/fieldMapping.typecheck.d.ts +2 -0
- package/dist/store/fieldMapping.typecheck.d.ts.map +1 -0
- package/dist/store/fieldMapping.typecheck.js +71 -0
- package/dist/store/fieldMapping.typecheck.js.map +1 -0
- package/dist/store/groupDeps/createGroupDeps.d.ts +9 -0
- package/dist/store/groupDeps/createGroupDeps.d.ts.map +1 -0
- package/dist/store/groupDeps/createGroupDeps.js +29 -0
- package/dist/store/groupDeps/createGroupDeps.js.map +1 -0
- package/dist/store/groupDeps/createTrackingValues.d.ts +15 -0
- package/dist/store/groupDeps/createTrackingValues.d.ts.map +1 -0
- package/dist/store/groupDeps/createTrackingValues.js +39 -0
- package/dist/store/groupDeps/createTrackingValues.js.map +1 -0
- package/dist/store/groupDeps/getNodeGroupPath.d.ts +9 -0
- package/dist/store/groupDeps/getNodeGroupPath.d.ts.map +1 -0
- package/dist/store/groupDeps/getNodeGroupPath.js +20 -0
- package/dist/store/groupDeps/getNodeGroupPath.js.map +1 -0
- package/dist/store/groupDeps/getRecipientGroups.d.ts +5 -0
- package/dist/store/groupDeps/getRecipientGroups.d.ts.map +1 -0
- package/dist/store/groupDeps/getRecipientGroups.js +15 -0
- package/dist/store/groupDeps/getRecipientGroups.js.map +1 -0
- package/dist/store/groupDeps/groupDeps.d.ts +19 -0
- package/dist/store/groupDeps/groupDeps.d.ts.map +1 -0
- package/dist/store/groupDeps/groupDeps.js +19 -0
- package/dist/store/groupDeps/groupDeps.js.map +1 -0
- package/dist/store/groupDeps/index.d.ts +7 -0
- package/dist/store/groupDeps/index.d.ts.map +1 -0
- package/dist/store/groupDeps/index.js +7 -0
- package/dist/store/groupDeps/index.js.map +1 -0
- package/dist/store/groupDeps/pairKey.d.ts +7 -0
- package/dist/store/groupDeps/pairKey.d.ts.map +1 -0
- package/dist/store/groupDeps/pairKey.js +12 -0
- package/dist/store/groupDeps/pairKey.js.map +1 -0
- package/dist/store/groupDeps/resolveGroupByPath.d.ts +8 -0
- package/dist/store/groupDeps/resolveGroupByPath.d.ts.map +1 -0
- package/dist/store/groupDeps/resolveGroupByPath.js +19 -0
- package/dist/store/groupDeps/resolveGroupByPath.js.map +1 -0
- package/dist/store/init/createNotificationHub.d.ts +81 -0
- package/dist/store/init/createNotificationHub.d.ts.map +1 -0
- package/dist/store/init/createNotificationHub.js +149 -0
- package/dist/store/init/createNotificationHub.js.map +1 -0
- package/dist/store/init/createResolveManager.d.ts +166 -0
- package/dist/store/init/createResolveManager.d.ts.map +1 -0
- package/dist/store/init/createResolveManager.js +502 -0
- package/dist/store/init/createResolveManager.js.map +1 -0
- package/dist/store/init/initGroupSubmitting.d.ts +8 -0
- package/dist/store/init/initGroupSubmitting.d.ts.map +1 -0
- package/dist/store/init/initGroupSubmitting.js +39 -0
- package/dist/store/init/initGroupSubmitting.js.map +1 -0
- package/dist/store/normalizeConfig.d.ts +28 -0
- package/dist/store/normalizeConfig.d.ts.map +1 -0
- package/dist/store/normalizeConfig.js +76 -0
- package/dist/store/normalizeConfig.js.map +1 -0
- package/dist/store/onChangePipeline/computeFieldKey.d.ts +11 -0
- package/dist/store/onChangePipeline/computeFieldKey.d.ts.map +1 -0
- package/dist/store/onChangePipeline/computeFieldKey.js +18 -0
- package/dist/store/onChangePipeline/computeFieldKey.js.map +1 -0
- package/dist/store/onChangePipeline/findOnChangeAncestors.d.ts +8 -0
- package/dist/store/onChangePipeline/findOnChangeAncestors.d.ts.map +1 -0
- package/dist/store/onChangePipeline/findOnChangeAncestors.js +22 -0
- package/dist/store/onChangePipeline/findOnChangeAncestors.js.map +1 -0
- package/dist/store/onChangePipeline/onChangePipeline.d.ts +29 -0
- package/dist/store/onChangePipeline/onChangePipeline.d.ts.map +1 -0
- package/dist/store/onChangePipeline/onChangePipeline.js +99 -0
- package/dist/store/onChangePipeline/onChangePipeline.js.map +1 -0
- package/dist/store/persist/drivers.d.ts +34 -0
- package/dist/store/persist/drivers.d.ts.map +1 -0
- package/dist/store/persist/drivers.js +89 -0
- package/dist/store/persist/drivers.js.map +1 -0
- package/dist/store/persist/index.d.ts +7 -0
- package/dist/store/persist/index.d.ts.map +1 -0
- package/dist/store/persist/index.js +3 -0
- package/dist/store/persist/index.js.map +1 -0
- package/dist/store/persist/persistManager.d.ts +67 -0
- package/dist/store/persist/persistManager.d.ts.map +1 -0
- package/dist/store/persist/persistManager.js +198 -0
- package/dist/store/persist/persistManager.js.map +1 -0
- package/dist/store/persist/types.d.ts +66 -0
- package/dist/store/persist/types.d.ts.map +1 -0
- package/dist/store/persist/types.js +9 -0
- package/dist/store/persist/types.js.map +1 -0
- package/dist/store/resetPipeline/buildResetPatch.d.ts +11 -0
- package/dist/store/resetPipeline/buildResetPatch.d.ts.map +1 -0
- package/dist/store/resetPipeline/buildResetPatch.js +22 -0
- package/dist/store/resetPipeline/buildResetPatch.js.map +1 -0
- package/dist/store/resetPipeline/collectDefaults.d.ts +12 -0
- package/dist/store/resetPipeline/collectDefaults.d.ts.map +1 -0
- package/dist/store/resetPipeline/collectDefaults.js +31 -0
- package/dist/store/resetPipeline/collectDefaults.js.map +1 -0
- package/dist/store/resetPipeline/resetPipeline.d.ts +19 -0
- package/dist/store/resetPipeline/resetPipeline.d.ts.map +1 -0
- package/dist/store/resetPipeline/resetPipeline.js +49 -0
- package/dist/store/resetPipeline/resetPipeline.js.map +1 -0
- package/dist/store/resolvePipeline/applyPendingWrites.d.ts +26 -0
- package/dist/store/resolvePipeline/applyPendingWrites.d.ts.map +1 -0
- package/dist/store/resolvePipeline/applyPendingWrites.js +68 -0
- package/dist/store/resolvePipeline/applyPendingWrites.js.map +1 -0
- package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts +16 -0
- package/dist/store/resolvePipeline/createContextTrackingProxy.d.ts.map +1 -0
- package/dist/store/resolvePipeline/createContextTrackingProxy.js +29 -0
- package/dist/store/resolvePipeline/createContextTrackingProxy.js.map +1 -0
- package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts +75 -0
- package/dist/store/resolvePipeline/createValuesTrackingProxy.d.ts.map +1 -0
- package/dist/store/resolvePipeline/createValuesTrackingProxy.js +128 -0
- package/dist/store/resolvePipeline/createValuesTrackingProxy.js.map +1 -0
- package/dist/store/resolvePipeline/executeEntityFieldResolve.d.ts +29 -0
- package/dist/store/resolvePipeline/executeEntityFieldResolve.d.ts.map +1 -0
- package/dist/store/resolvePipeline/executeEntityFieldResolve.js +218 -0
- package/dist/store/resolvePipeline/executeEntityFieldResolve.js.map +1 -0
- package/dist/store/resolvePipeline/executeListResolve.d.ts +32 -0
- package/dist/store/resolvePipeline/executeListResolve.d.ts.map +1 -0
- package/dist/store/resolvePipeline/executeListResolve.js +157 -0
- package/dist/store/resolvePipeline/executeListResolve.js.map +1 -0
- package/dist/store/resolvePipeline/executeResolve.d.ts +26 -0
- package/dist/store/resolvePipeline/executeResolve.d.ts.map +1 -0
- package/dist/store/resolvePipeline/executeResolve.js +201 -0
- package/dist/store/resolvePipeline/executeResolve.js.map +1 -0
- package/dist/store/resolvePipeline/findResolvesToRetrigger.d.ts +10 -0
- package/dist/store/resolvePipeline/findResolvesToRetrigger.d.ts.map +1 -0
- package/dist/store/resolvePipeline/findResolvesToRetrigger.js +29 -0
- package/dist/store/resolvePipeline/findResolvesToRetrigger.js.map +1 -0
- package/dist/store/resolvePipeline/index.d.ts +22 -0
- package/dist/store/resolvePipeline/index.d.ts.map +1 -0
- package/dist/store/resolvePipeline/index.js +18 -0
- package/dist/store/resolvePipeline/index.js.map +1 -0
- package/dist/store/resolvePipeline/initResolveStates.d.ts +41 -0
- package/dist/store/resolvePipeline/initResolveStates.d.ts.map +1 -0
- package/dist/store/resolvePipeline/initResolveStates.js +95 -0
- package/dist/store/resolvePipeline/initResolveStates.js.map +1 -0
- package/dist/store/resolvePipeline/resetResolveState.d.ts +8 -0
- package/dist/store/resolvePipeline/resetResolveState.d.ts.map +1 -0
- package/dist/store/resolvePipeline/resetResolveState.js +18 -0
- package/dist/store/resolvePipeline/resetResolveState.js.map +1 -0
- package/dist/store/resolvePipeline/types.d.ts +134 -0
- package/dist/store/resolvePipeline/types.d.ts.map +1 -0
- package/dist/store/resolvePipeline/types.js +54 -0
- package/dist/store/resolvePipeline/types.js.map +1 -0
- package/dist/store/store/NodeRegistry/index.d.ts +3 -0
- package/dist/store/store/NodeRegistry/index.d.ts.map +1 -0
- package/dist/store/store/NodeRegistry/index.js +2 -0
- package/dist/store/store/NodeRegistry/index.js.map +1 -0
- package/dist/store/store/NodeRegistry/nodeRegistry.d.ts +139 -0
- package/dist/store/store/NodeRegistry/nodeRegistry.d.ts.map +1 -0
- package/dist/store/store/NodeRegistry/nodeRegistry.js +255 -0
- package/dist/store/store/NodeRegistry/nodeRegistry.js.map +1 -0
- package/dist/store/store/NodeRegistry/nodeUtils.d.ts +17 -0
- package/dist/store/store/NodeRegistry/nodeUtils.d.ts.map +1 -0
- package/dist/store/store/NodeRegistry/nodeUtils.js +21 -0
- package/dist/store/store/NodeRegistry/nodeUtils.js.map +1 -0
- package/dist/store/store/NodeRegistry/nodeView.d.ts +28 -0
- package/dist/store/store/NodeRegistry/nodeView.d.ts.map +1 -0
- package/dist/store/store/NodeRegistry/nodeView.js +16 -0
- package/dist/store/store/NodeRegistry/nodeView.js.map +1 -0
- package/dist/store/store/dirtyTracker.d.ts +27 -0
- package/dist/store/store/dirtyTracker.d.ts.map +1 -0
- package/dist/store/store/dirtyTracker.js +38 -0
- package/dist/store/store/dirtyTracker.js.map +1 -0
- package/dist/store/store/groupDepsMap.d.ts +52 -0
- package/dist/store/store/groupDepsMap.d.ts.map +1 -0
- package/dist/store/store/groupDepsMap.js +84 -0
- package/dist/store/store/groupDepsMap.js.map +1 -0
- package/dist/store/store/hasComputedProps.d.ts +7 -0
- package/dist/store/store/hasComputedProps.d.ts.map +1 -0
- package/dist/store/store/hasComputedProps.js +15 -0
- package/dist/store/store/hasComputedProps.js.map +1 -0
- package/dist/store/store/index.d.ts +6 -0
- package/dist/store/store/index.d.ts.map +1 -0
- package/dist/store/store/index.js +3 -0
- package/dist/store/store/index.js.map +1 -0
- package/dist/store/store/nodeMap.d.ts +12 -0
- package/dist/store/store/nodeMap.d.ts.map +1 -0
- package/dist/store/store/nodeMap.js +30 -0
- package/dist/store/store/nodeMap.js.map +1 -0
- package/dist/store/store/palistor.d.ts +256 -0
- package/dist/store/store/palistor.d.ts.map +1 -0
- package/dist/store/store/palistor.js +772 -0
- package/dist/store/store/palistor.js.map +1 -0
- package/dist/store/store/registerNodes.d.ts +33 -0
- package/dist/store/store/registerNodes.d.ts.map +1 -0
- package/dist/store/store/registerNodes.js +88 -0
- package/dist/store/store/registerNodes.js.map +1 -0
- package/dist/store/store/serviceRegistry.d.ts +24 -0
- package/dist/store/store/serviceRegistry.d.ts.map +1 -0
- package/dist/store/store/serviceRegistry.js +32 -0
- package/dist/store/store/serviceRegistry.js.map +1 -0
- package/dist/store/store/types.d.ts +622 -0
- package/dist/store/store/types.d.ts.map +1 -0
- package/dist/store/store/types.js +2 -0
- package/dist/store/store/types.js.map +1 -0
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.d.ts +7 -0
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.d.ts.map +1 -0
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.js +26 -0
- package/dist/store/submitPipeline/applyLeafBeforeSubmit.js.map +1 -0
- package/dist/store/submitPipeline/collectLeafStates.d.ts +11 -0
- package/dist/store/submitPipeline/collectLeafStates.d.ts.map +1 -0
- package/dist/store/submitPipeline/collectLeafStates.js +17 -0
- package/dist/store/submitPipeline/collectLeafStates.js.map +1 -0
- package/dist/store/submitPipeline/getSubValues.d.ts +9 -0
- package/dist/store/submitPipeline/getSubValues.d.ts.map +1 -0
- package/dist/store/submitPipeline/getSubValues.js +26 -0
- package/dist/store/submitPipeline/getSubValues.js.map +1 -0
- package/dist/store/submitPipeline/submitPipeline.d.ts +32 -0
- package/dist/store/submitPipeline/submitPipeline.d.ts.map +1 -0
- package/dist/store/submitPipeline/submitPipeline.js +119 -0
- package/dist/store/submitPipeline/submitPipeline.js.map +1 -0
- package/dist/store/submitPipeline/types.d.ts +12 -0
- package/dist/store/submitPipeline/types.d.ts.map +1 -0
- package/dist/store/submitPipeline/types.js +2 -0
- package/dist/store/submitPipeline/types.js.map +1 -0
- package/dist/store/traversal/index.d.ts +4 -0
- package/dist/store/traversal/index.d.ts.map +1 -0
- package/dist/store/traversal/index.js +3 -0
- package/dist/store/traversal/index.js.map +1 -0
- package/dist/store/traversal/nodeClassifier.d.ts +23 -0
- package/dist/store/traversal/nodeClassifier.d.ts.map +1 -0
- package/dist/store/traversal/nodeClassifier.js +46 -0
- package/dist/store/traversal/nodeClassifier.js.map +1 -0
- package/dist/store/traversal/walkFull.d.ts +33 -0
- package/dist/store/traversal/walkFull.d.ts.map +1 -0
- package/dist/store/traversal/walkFull.js +28 -0
- package/dist/store/traversal/walkFull.js.map +1 -0
- package/dist/store/valuesCache/valuesCache.d.ts +27 -0
- package/dist/store/valuesCache/valuesCache.d.ts.map +1 -0
- package/dist/store/valuesCache/valuesCache.js +58 -0
- package/dist/store/valuesCache/valuesCache.js.map +1 -0
- package/dist/store/writePipeline/formatPatch.d.ts +14 -0
- package/dist/store/writePipeline/formatPatch.d.ts.map +1 -0
- package/dist/store/writePipeline/formatPatch.js +35 -0
- package/dist/store/writePipeline/formatPatch.js.map +1 -0
- package/dist/store/writePipeline/formatValue.d.ts +12 -0
- package/dist/store/writePipeline/formatValue.d.ts.map +1 -0
- package/dist/store/writePipeline/formatValue.js +15 -0
- package/dist/store/writePipeline/formatValue.js.map +1 -0
- package/dist/store/writePipeline/index.d.ts +8 -0
- package/dist/store/writePipeline/index.d.ts.map +1 -0
- package/dist/store/writePipeline/index.js +7 -0
- package/dist/store/writePipeline/index.js.map +1 -0
- package/dist/store/writePipeline/mergeChanged.d.ts +9 -0
- package/dist/store/writePipeline/mergeChanged.d.ts.map +1 -0
- package/dist/store/writePipeline/mergeChanged.js +15 -0
- package/dist/store/writePipeline/mergeChanged.js.map +1 -0
- package/dist/store/writePipeline/runSetter.d.ts +16 -0
- package/dist/store/writePipeline/runSetter.d.ts.map +1 -0
- package/dist/store/writePipeline/runSetter.js +35 -0
- package/dist/store/writePipeline/runSetter.js.map +1 -0
- package/dist/store/writePipeline/storeValue.d.ts +11 -0
- package/dist/store/writePipeline/storeValue.d.ts.map +1 -0
- package/dist/store/writePipeline/storeValue.js +17 -0
- package/dist/store/writePipeline/storeValue.js.map +1 -0
- package/dist/store/writePipeline/types.d.ts +10 -0
- package/dist/store/writePipeline/types.d.ts.map +1 -0
- package/dist/store/writePipeline/types.js +2 -0
- package/dist/store/writePipeline/types.js.map +1 -0
- package/dist/store/writePipeline/writePipeline.d.ts +31 -0
- package/dist/store/writePipeline/writePipeline.d.ts.map +1 -0
- package/dist/store/writePipeline/writePipeline.js +97 -0
- package/dist/store/writePipeline/writePipeline.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { configKeys, isLeafNode } from "../traversal";
|
|
2
|
+
import { pairKey } from "./pairKey";
|
|
3
|
+
/**
|
|
4
|
+
* Создать карту зависимостей с self-зависимостью для каждой группы.
|
|
5
|
+
*
|
|
6
|
+
* Группа — любой узел конфига без "value".
|
|
7
|
+
* Root-группа обозначается пустой строкой "".
|
|
8
|
+
*/
|
|
9
|
+
export function createGroupDeps(rootConfig, nodePaths) {
|
|
10
|
+
const deps = new Set();
|
|
11
|
+
// Self-зависимость корня
|
|
12
|
+
deps.add(pairKey("", ""));
|
|
13
|
+
// Self-зависимости вложенных групп
|
|
14
|
+
function walk(node) {
|
|
15
|
+
for (const key of configKeys(node)) {
|
|
16
|
+
const child = node[key];
|
|
17
|
+
if (!child || typeof child !== "object")
|
|
18
|
+
continue;
|
|
19
|
+
if (isLeafNode(child))
|
|
20
|
+
continue; // лист — не группа
|
|
21
|
+
const path = nodePaths.get(child) ?? "";
|
|
22
|
+
deps.add(pairKey(path, path));
|
|
23
|
+
walk(child);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
walk(rootConfig);
|
|
27
|
+
return deps;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=createGroupDeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createGroupDeps.js","sourceRoot":"","sources":["../../../store/groupDeps/createGroupDeps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAyB,EACzB,SAAkC;IAElC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,yBAAyB;IACzB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1B,mCAAmC;IACnC,SAAS,IAAI,CAAC,IAAmB;QAC/B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAkB,CAAC;YACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YAClD,IAAI,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,mBAAmB;YACpD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Обёртка для valuesCache.values, которая перехватывает READ-доступы
|
|
3
|
+
* и записывает кросс-групповые зависимости в Set.
|
|
4
|
+
*
|
|
5
|
+
* При чтении leaf-значения определяется группа-донор (по текущему уровню вложенности).
|
|
6
|
+
* Если донор ≠ реципиент → записываем пару donor→recipient.
|
|
7
|
+
*
|
|
8
|
+
* @param values — плоский объект значений из valuesCache.values
|
|
9
|
+
* @param recipientGroupPath — путь группы, для которой сейчас идёт вычисление
|
|
10
|
+
* @param deps — Set для записи обнаруженных зависимостей
|
|
11
|
+
* @param currentGroupPath — текущий уровень вложенности в дереве значений (начинается с "")
|
|
12
|
+
* @param subProxyCache — WeakMap для мемоизации суб-прокси в рамках одного вызова
|
|
13
|
+
*/
|
|
14
|
+
export declare function createTrackingValues(values: Record<string, unknown>, recipientGroupPath: string, deps: Set<string>, currentGroupPath?: string, subProxyCache?: WeakMap<object, Record<string, unknown>>): Record<string, unknown>;
|
|
15
|
+
//# sourceMappingURL=createTrackingValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTrackingValues.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/createTrackingValues.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EACjB,gBAAgB,SAAK,EACrB,aAAa,GAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAiB,GACtE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { pairKey } from "./pairKey";
|
|
2
|
+
/**
|
|
3
|
+
* Обёртка для valuesCache.values, которая перехватывает READ-доступы
|
|
4
|
+
* и записывает кросс-групповые зависимости в Set.
|
|
5
|
+
*
|
|
6
|
+
* При чтении leaf-значения определяется группа-донор (по текущему уровню вложенности).
|
|
7
|
+
* Если донор ≠ реципиент → записываем пару donor→recipient.
|
|
8
|
+
*
|
|
9
|
+
* @param values — плоский объект значений из valuesCache.values
|
|
10
|
+
* @param recipientGroupPath — путь группы, для которой сейчас идёт вычисление
|
|
11
|
+
* @param deps — Set для записи обнаруженных зависимостей
|
|
12
|
+
* @param currentGroupPath — текущий уровень вложенности в дереве значений (начинается с "")
|
|
13
|
+
* @param subProxyCache — WeakMap для мемоизации суб-прокси в рамках одного вызова
|
|
14
|
+
*/
|
|
15
|
+
export function createTrackingValues(values, recipientGroupPath, deps, currentGroupPath = "", subProxyCache = new WeakMap()) {
|
|
16
|
+
return new Proxy(values, {
|
|
17
|
+
get(target, key) {
|
|
18
|
+
if (typeof key === "symbol")
|
|
19
|
+
return target[key];
|
|
20
|
+
const val = target[key];
|
|
21
|
+
// Вложенный объект (группа) — рекурсивный proxy с мемоизацией
|
|
22
|
+
if (val && typeof val === "object" && !Array.isArray(val)) {
|
|
23
|
+
const cached = subProxyCache.get(val);
|
|
24
|
+
if (cached)
|
|
25
|
+
return cached;
|
|
26
|
+
const childPath = currentGroupPath ? `${currentGroupPath}.${key}` : key;
|
|
27
|
+
const childProxy = createTrackingValues(val, recipientGroupPath, deps, childPath, subProxyCache);
|
|
28
|
+
subProxyCache.set(val, childProxy);
|
|
29
|
+
return childProxy;
|
|
30
|
+
}
|
|
31
|
+
// Чтение leaf-значения: донор = currentGroupPath
|
|
32
|
+
if (currentGroupPath !== recipientGroupPath) {
|
|
33
|
+
deps.add(pairKey(currentGroupPath, recipientGroupPath));
|
|
34
|
+
}
|
|
35
|
+
return val;
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=createTrackingValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTrackingValues.js","sourceRoot":"","sources":["../../../store/groupDeps/createTrackingValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA+B,EAC/B,kBAA0B,EAC1B,IAAiB,EACjB,gBAAgB,GAAG,EAAE,EACrB,gBAA0D,IAAI,OAAO,EAAE;IAEvE,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,MAAM,EAAE,GAAoB;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAQ,MAAc,CAAC,GAAG,CAAC,CAAC;YAEzD,MAAM,GAAG,GAAI,MAAkC,CAAC,GAAG,CAAC,CAAC;YAErD,8DAA8D;YAC9D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;gBAChD,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC;gBAC1B,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxE,MAAM,UAAU,GAAG,oBAAoB,CACrC,GAA8B,EAC9B,kBAAkB,EAClB,IAAI,EACJ,SAAS,EACT,aAAa,CACd,CAAC;gBACF,aAAa,CAAC,GAAG,CAAC,GAAa,EAAE,UAAU,CAAC,CAAC;gBAC7C,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,iDAAiD;YACjD,IAAI,gBAAgB,KAAK,kBAAkB,EAAE,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Определить путь группы, к которой принадлежит узел.
|
|
3
|
+
*
|
|
4
|
+
* - Листовой узел (есть "value") → путь родительской группы
|
|
5
|
+
* - Групповой узел → свой собственный путь
|
|
6
|
+
* - Root → ""
|
|
7
|
+
*/
|
|
8
|
+
export declare function getNodeGroupPath(node: object, nodeParents: WeakMap<object, object>, nodePaths: WeakMap<object, string>): string;
|
|
9
|
+
//# sourceMappingURL=getNodeGroupPath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNodeGroupPath.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/getNodeGroupPath.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CASR"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isGroupNode } from "../traversal";
|
|
2
|
+
/**
|
|
3
|
+
* Определить путь группы, к которой принадлежит узел.
|
|
4
|
+
*
|
|
5
|
+
* - Листовой узел (есть "value") → путь родительской группы
|
|
6
|
+
* - Групповой узел → свой собственный путь
|
|
7
|
+
* - Root → ""
|
|
8
|
+
*/
|
|
9
|
+
export function getNodeGroupPath(node, nodeParents, nodePaths) {
|
|
10
|
+
// Групповой узел → его собственный путь
|
|
11
|
+
if (isGroupNode(node)) {
|
|
12
|
+
return nodePaths.get(node) ?? "";
|
|
13
|
+
}
|
|
14
|
+
// Листовой → путь родительской группы
|
|
15
|
+
const parent = nodeParents.get(node);
|
|
16
|
+
if (!parent)
|
|
17
|
+
return "";
|
|
18
|
+
return nodePaths.get(parent) ?? "";
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=getNodeGroupPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNodeGroupPath.js","sourceRoot":"","sources":["../../../store/groupDeps/getNodeGroupPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,WAAoC,EACpC,SAAkC;IAElC,wCAAwC;IACxC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,sCAAsC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRecipientGroups.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/getRecipientGroups.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASjF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parsePairKey } from "./pairKey";
|
|
2
|
+
/**
|
|
3
|
+
* Получить все группы-реципиенты для данного донора (исключая self-зависимость).
|
|
4
|
+
*/
|
|
5
|
+
export function getRecipientGroups(deps, donorPath) {
|
|
6
|
+
const recipients = [];
|
|
7
|
+
for (const pair of deps) {
|
|
8
|
+
const [donor, recipient] = parsePairKey(pair);
|
|
9
|
+
if (donor === donorPath && recipient !== donorPath) {
|
|
10
|
+
recipients.push(recipient);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return recipients;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=getRecipientGroups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRecipientGroups.js","sourceRoot":"","sources":["../../../store/groupDeps/getRecipientGroups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB,EAAE,SAAiB;IACrE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACnD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Карта зависимостей между группами.
|
|
3
|
+
*
|
|
4
|
+
* Хранит пары "донор→реципиент" в Set<string>.
|
|
5
|
+
* Когда значение в группе-доноре меняется, все группы-реципиенты
|
|
6
|
+
* нужно пересчитать.
|
|
7
|
+
*
|
|
8
|
+
* Пример: если поле в группе passport читает значение из root,
|
|
9
|
+
* записывается зависимость "→passport" (root — донор, passport — реципиент).
|
|
10
|
+
*
|
|
11
|
+
* Каждая группа по умолчанию зависит от себя ("AA", "BB").
|
|
12
|
+
*/
|
|
13
|
+
export { pairKey } from "./pairKey";
|
|
14
|
+
export { createGroupDeps } from "./createGroupDeps";
|
|
15
|
+
export { getRecipientGroups } from "./getRecipientGroups";
|
|
16
|
+
export { getNodeGroupPath } from "./getNodeGroupPath";
|
|
17
|
+
export { resolveGroupByPath } from "./resolveGroupByPath";
|
|
18
|
+
export { createTrackingValues } from "./createTrackingValues";
|
|
19
|
+
//# sourceMappingURL=groupDeps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupDeps.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/groupDeps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Карта зависимостей между группами.
|
|
3
|
+
*
|
|
4
|
+
* Хранит пары "донор→реципиент" в Set<string>.
|
|
5
|
+
* Когда значение в группе-доноре меняется, все группы-реципиенты
|
|
6
|
+
* нужно пересчитать.
|
|
7
|
+
*
|
|
8
|
+
* Пример: если поле в группе passport читает значение из root,
|
|
9
|
+
* записывается зависимость "→passport" (root — донор, passport — реципиент).
|
|
10
|
+
*
|
|
11
|
+
* Каждая группа по умолчанию зависит от себя ("AA", "BB").
|
|
12
|
+
*/
|
|
13
|
+
export { pairKey } from "./pairKey";
|
|
14
|
+
export { createGroupDeps } from "./createGroupDeps";
|
|
15
|
+
export { getRecipientGroups } from "./getRecipientGroups";
|
|
16
|
+
export { getNodeGroupPath } from "./getNodeGroupPath";
|
|
17
|
+
export { resolveGroupByPath } from "./resolveGroupByPath";
|
|
18
|
+
export { createTrackingValues } from "./createTrackingValues";
|
|
19
|
+
//# sourceMappingURL=groupDeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupDeps.js","sourceRoot":"","sources":["../../../store/groupDeps/groupDeps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { pairKey } from "./pairKey";
|
|
2
|
+
export { createGroupDeps } from "./createGroupDeps";
|
|
3
|
+
export { getRecipientGroups } from "./getRecipientGroups";
|
|
4
|
+
export { getNodeGroupPath } from "./getNodeGroupPath";
|
|
5
|
+
export { resolveGroupByPath } from "./resolveGroupByPath";
|
|
6
|
+
export { createTrackingValues } from "./createTrackingValues";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { pairKey } from "./pairKey";
|
|
2
|
+
export { createGroupDeps } from "./createGroupDeps";
|
|
3
|
+
export { getRecipientGroups } from "./getRecipientGroups";
|
|
4
|
+
export { getNodeGroupPath } from "./getNodeGroupPath";
|
|
5
|
+
export { resolveGroupByPath } from "./resolveGroupByPath";
|
|
6
|
+
export { createTrackingValues } from "./createTrackingValues";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../store/groupDeps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Разделитель пары "донор→реципиент". */
|
|
2
|
+
export declare const SEP = "\u2192";
|
|
3
|
+
/** Создать ключ пары "донор→реципиент". */
|
|
4
|
+
export declare function pairKey(donor: string, recipient: string): string;
|
|
5
|
+
/** Разобрать ключ обратно в [donor, recipient]. */
|
|
6
|
+
export declare function parsePairKey(key: string): [string, string];
|
|
7
|
+
//# sourceMappingURL=pairKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairKey.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/pairKey.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,eAAO,MAAM,GAAG,WAAW,CAAC;AAE5B,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAG1D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Разделитель пары "донор→реципиент". */
|
|
2
|
+
export const SEP = "\u2192"; // →
|
|
3
|
+
/** Создать ключ пары "донор→реципиент". */
|
|
4
|
+
export function pairKey(donor, recipient) {
|
|
5
|
+
return `${donor}${SEP}${recipient}`;
|
|
6
|
+
}
|
|
7
|
+
/** Разобрать ключ обратно в [donor, recipient]. */
|
|
8
|
+
export function parsePairKey(key) {
|
|
9
|
+
const idx = key.indexOf(SEP);
|
|
10
|
+
return [key.slice(0, idx), key.slice(idx + SEP.length)];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=pairKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairKey.js","sourceRoot":"","sources":["../../../store/groupDeps/pairKey.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI;AAEjC,2CAA2C;AAC3C,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,SAAiB;IACtD,OAAO,GAAG,KAAK,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC;AACtC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AnyConfigNode } from "../store/types";
|
|
2
|
+
/**
|
|
3
|
+
* Найти узел конфига группы по dot-пути.
|
|
4
|
+
* "" → rootConfig, "passport" → rootConfig.passport, и т.д.
|
|
5
|
+
* Возвращает undefined если путь не существует в дереве (например, entity-пути "_entity_.*").
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveGroupByPath(rootConfig: AnyConfigNode, path: string): AnyConfigNode | undefined;
|
|
8
|
+
//# sourceMappingURL=resolveGroupByPath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGroupByPath.d.ts","sourceRoot":"","sources":["../../../store/groupDeps/resolveGroupByPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,CAU3B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Найти узел конфига группы по dot-пути.
|
|
3
|
+
* "" → rootConfig, "passport" → rootConfig.passport, и т.д.
|
|
4
|
+
* Возвращает undefined если путь не существует в дереве (например, entity-пути "_entity_.*").
|
|
5
|
+
*/
|
|
6
|
+
export function resolveGroupByPath(rootConfig, path) {
|
|
7
|
+
if (!path)
|
|
8
|
+
return rootConfig;
|
|
9
|
+
const parts = path.split(".");
|
|
10
|
+
let node = rootConfig;
|
|
11
|
+
for (const part of parts) {
|
|
12
|
+
const next = node[part];
|
|
13
|
+
if (!next)
|
|
14
|
+
return undefined;
|
|
15
|
+
node = next;
|
|
16
|
+
}
|
|
17
|
+
return node;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=resolveGroupByPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGroupByPath.js","sourceRoot":"","sources":["../../../store/groupDeps/resolveGroupByPath.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAyB,EACzB,IAAY;IAEZ,IAAI,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAkB,UAAU,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAA8B,CAAC;QACrD,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { AnyConfigNode, ListState } from "../store/types";
|
|
2
|
+
import type { FieldState } from "../compute/index";
|
|
3
|
+
import type { ComputeEntry } from "../store/registerNodes";
|
|
4
|
+
/** Зависимости, необходимые для пересчёта dirty-флагов при уведомлении. */
|
|
5
|
+
export interface DirtyDeps {
|
|
6
|
+
rootConfig: AnyConfigNode;
|
|
7
|
+
nodeState: WeakMap<AnyConfigNode, FieldState>;
|
|
8
|
+
initialValueMap: WeakMap<AnyConfigNode, unknown>;
|
|
9
|
+
/** ListStates для dirty-tracking по составу списков (Phase 2C). */
|
|
10
|
+
listStates?: WeakMap<AnyConfigNode, ListState>;
|
|
11
|
+
nodeParents: WeakMap<AnyConfigNode, AnyConfigNode>;
|
|
12
|
+
nodePaths: WeakMap<AnyConfigNode, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface NotificationHubDeps {
|
|
15
|
+
computeNodes: ComputeEntry[];
|
|
16
|
+
/** Маппинг узлов на их dot-пути (заполняется buildNodeMaps). */
|
|
17
|
+
nodePaths: WeakMap<object, string>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Система уведомлений хранилища.
|
|
21
|
+
*
|
|
22
|
+
* Консолидирует:
|
|
23
|
+
* - per-node и глобальные подписки
|
|
24
|
+
* - версионирование (global + per-node)
|
|
25
|
+
* - post-notify hook для внешних подсистем (resolve retrigger)
|
|
26
|
+
*/
|
|
27
|
+
export declare class NotificationHub {
|
|
28
|
+
private readonly computeNodes;
|
|
29
|
+
private readonly nodePaths;
|
|
30
|
+
/** Подписчики на изменение каждого поля. */
|
|
31
|
+
private readonly nodeListeners;
|
|
32
|
+
/** Глобальные подписчики — уведомляются при ЛЮБОМ изменении. */
|
|
33
|
+
private readonly globalListeners;
|
|
34
|
+
/** Глобальная версия — инкрементируется при каждом изменении. */
|
|
35
|
+
private version;
|
|
36
|
+
/** Версии отдельных узлов — для точечной подписки. */
|
|
37
|
+
private readonly nodeVersions;
|
|
38
|
+
/** Хук, вызываемый после каждого notifyChanged (resolve retrigger и т.д.) */
|
|
39
|
+
private postNotifyHook;
|
|
40
|
+
/**
|
|
41
|
+
* Re-entrancy guard: предотвращает рекурсивный вызов postNotifyHook.
|
|
42
|
+
* Пути, накопленные во время активного хука, откладываются и обрабатываются
|
|
43
|
+
* последовательно после завершения текущего вызова.
|
|
44
|
+
*/
|
|
45
|
+
private isDispatchingHook;
|
|
46
|
+
private pendingHookPaths;
|
|
47
|
+
constructor(deps: NotificationHubDeps);
|
|
48
|
+
private notifyNode;
|
|
49
|
+
private notifyGlobals;
|
|
50
|
+
/**
|
|
51
|
+
* Обработать набор изменённых узлов:
|
|
52
|
+
* 1. Пересчитать dirty-флаги (leaf + group + root)
|
|
53
|
+
* 2. Инкрементировать глобальную версию
|
|
54
|
+
* 3. Обновить per-node версии + уведомить per-node подписчиков
|
|
55
|
+
* 4. Уведомить глобальных подписчиков
|
|
56
|
+
* 5. Вызвать postNotifyHook (retrigger resolves и т.д.)
|
|
57
|
+
*/
|
|
58
|
+
notifyChanged(changed: Set<AnyConfigNode>, dirtyDeps: DirtyDeps): void;
|
|
59
|
+
/** Подписаться на изменения конкретного узла. */
|
|
60
|
+
subscribe: (node: AnyConfigNode, listener: () => void) => (() => void);
|
|
61
|
+
/** Подписаться на любое изменение в хранилище. */
|
|
62
|
+
subscribeGlobal: (listener: () => void) => (() => void);
|
|
63
|
+
/** Глобальная версия хранилища. */
|
|
64
|
+
getVersion: () => number;
|
|
65
|
+
/** Версия конкретного узла. */
|
|
66
|
+
getNodeVersion: (node: AnyConfigNode) => number;
|
|
67
|
+
/**
|
|
68
|
+
* Инкрементировать версию для всех leaf-узлов + уведомить глобальных подписчиков.
|
|
69
|
+
* Используется при смене translator — все компоненты перерендерятся.
|
|
70
|
+
*/
|
|
71
|
+
bumpLeafVersions(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Зарегистрировать хук, вызываемый после каждого notifyChanged.
|
|
74
|
+
* Получает множество dot-путей изменённых узлов.
|
|
75
|
+
* Используется resolve-системой для retrigger по зависимостям.
|
|
76
|
+
*/
|
|
77
|
+
setPostNotifyHook(hook: ((changedPaths: Set<string>) => void) | null): void;
|
|
78
|
+
}
|
|
79
|
+
/** @deprecated Use `new NotificationHub(deps)` instead. */
|
|
80
|
+
export declare function createNotificationHub(deps: NotificationHubDeps): NotificationHub;
|
|
81
|
+
//# sourceMappingURL=createNotificationHub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNotificationHub.d.ts","sourceRoot":"","sources":["../../../store/init/createNotificationHub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC9C,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjD,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC/C,WAAW,EAAE,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACnD,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAID;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiD;IAE/E,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD,iEAAiE;IACjE,OAAO,CAAC,OAAO,CAAK;IAEpB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IAErE,6EAA6E;IAC7E,OAAO,CAAC,cAAc,CAAsD;IAE5E;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAA4B;gBAExC,IAAI,EAAE,mBAAmB;IAOrC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAMrB;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAsDtE,iDAAiD;IACjD,SAAS,GAAI,MAAM,aAAa,EAAE,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAInE;IAEF,kDAAkD;IAClD,eAAe,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAGpD;IAEF,mCAAmC;IACnC,UAAU,QAAO,MAAM,CAErB;IAEF,+BAA+B;IAC/B,cAAc,GAAI,MAAM,aAAa,KAAG,MAAM,CAE5C;IAEF;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAQxB;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;CAG5E;AAID,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CAEhF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { recomputeDirtyTargeted } from "../dirtyTracking/recomputeDirtyTargeted";
|
|
2
|
+
// ─── Class ───────────────────────────────────────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Система уведомлений хранилища.
|
|
5
|
+
*
|
|
6
|
+
* Консолидирует:
|
|
7
|
+
* - per-node и глобальные подписки
|
|
8
|
+
* - версионирование (global + per-node)
|
|
9
|
+
* - post-notify hook для внешних подсистем (resolve retrigger)
|
|
10
|
+
*/
|
|
11
|
+
export class NotificationHub {
|
|
12
|
+
constructor(deps) {
|
|
13
|
+
/** Подписчики на изменение каждого поля. */
|
|
14
|
+
this.nodeListeners = new WeakMap();
|
|
15
|
+
/** Глобальные подписчики — уведомляются при ЛЮБОМ изменении. */
|
|
16
|
+
this.globalListeners = new Set();
|
|
17
|
+
/** Глобальная версия — инкрементируется при каждом изменении. */
|
|
18
|
+
this.version = 0;
|
|
19
|
+
/** Версии отдельных узлов — для точечной подписки. */
|
|
20
|
+
this.nodeVersions = new WeakMap();
|
|
21
|
+
/** Хук, вызываемый после каждого notifyChanged (resolve retrigger и т.д.) */
|
|
22
|
+
this.postNotifyHook = null;
|
|
23
|
+
/**
|
|
24
|
+
* Re-entrancy guard: предотвращает рекурсивный вызов postNotifyHook.
|
|
25
|
+
* Пути, накопленные во время активного хука, откладываются и обрабатываются
|
|
26
|
+
* последовательно после завершения текущего вызова.
|
|
27
|
+
*/
|
|
28
|
+
this.isDispatchingHook = false;
|
|
29
|
+
this.pendingHookPaths = null;
|
|
30
|
+
/** Подписаться на изменения конкретного узла. */
|
|
31
|
+
this.subscribe = (node, listener) => {
|
|
32
|
+
if (!this.nodeListeners.has(node))
|
|
33
|
+
this.nodeListeners.set(node, new Set());
|
|
34
|
+
this.nodeListeners.get(node).add(listener);
|
|
35
|
+
return () => this.nodeListeners.get(node).delete(listener);
|
|
36
|
+
};
|
|
37
|
+
/** Подписаться на любое изменение в хранилище. */
|
|
38
|
+
this.subscribeGlobal = (listener) => {
|
|
39
|
+
this.globalListeners.add(listener);
|
|
40
|
+
return () => this.globalListeners.delete(listener);
|
|
41
|
+
};
|
|
42
|
+
/** Глобальная версия хранилища. */
|
|
43
|
+
this.getVersion = () => {
|
|
44
|
+
return this.version;
|
|
45
|
+
};
|
|
46
|
+
/** Версия конкретного узла. */
|
|
47
|
+
this.getNodeVersion = (node) => {
|
|
48
|
+
return this.nodeVersions.get(node) ?? 0;
|
|
49
|
+
};
|
|
50
|
+
this.computeNodes = deps.computeNodes;
|
|
51
|
+
this.nodePaths = deps.nodePaths;
|
|
52
|
+
}
|
|
53
|
+
// ─── Internal helpers ────────────────────────────────────────────────────
|
|
54
|
+
notifyNode(node) {
|
|
55
|
+
this.nodeListeners.get(node)?.forEach((fn) => fn());
|
|
56
|
+
}
|
|
57
|
+
notifyGlobals() {
|
|
58
|
+
this.globalListeners.forEach((fn) => fn());
|
|
59
|
+
}
|
|
60
|
+
// ─── Public API ──────────────────────────────────────────────────────────
|
|
61
|
+
/**
|
|
62
|
+
* Обработать набор изменённых узлов:
|
|
63
|
+
* 1. Пересчитать dirty-флаги (leaf + group + root)
|
|
64
|
+
* 2. Инкрементировать глобальную версию
|
|
65
|
+
* 3. Обновить per-node версии + уведомить per-node подписчиков
|
|
66
|
+
* 4. Уведомить глобальных подписчиков
|
|
67
|
+
* 5. Вызвать postNotifyHook (retrigger resolves и т.д.)
|
|
68
|
+
*/
|
|
69
|
+
notifyChanged(changed, dirtyDeps) {
|
|
70
|
+
if (changed.size === 0)
|
|
71
|
+
return;
|
|
72
|
+
// Recompute dirty flags targeted to changed nodes only
|
|
73
|
+
const { rootConfig, nodeState, initialValueMap, listStates, nodeParents, nodePaths } = dirtyDeps;
|
|
74
|
+
const dirtyResult = recomputeDirtyTargeted(changed, rootConfig, nodeState, initialValueMap, nodeParents, nodePaths, listStates);
|
|
75
|
+
for (const n of dirtyResult.changed)
|
|
76
|
+
changed.add(n);
|
|
77
|
+
// Инкрементируем глобальную версию
|
|
78
|
+
this.version++;
|
|
79
|
+
// Обновляем версии изменённых узлов + уведомляем per-node подписчиков
|
|
80
|
+
for (const node of changed) {
|
|
81
|
+
this.nodeVersions.set(node, this.version);
|
|
82
|
+
this.notifyNode(node);
|
|
83
|
+
}
|
|
84
|
+
// Уведомляем глобальных подписчиков
|
|
85
|
+
this.notifyGlobals();
|
|
86
|
+
// Post-notify hook (resolve retrigger и т.д.)
|
|
87
|
+
// Re-entrancy guard: если notifyChanged вызван рекурсивно (например,
|
|
88
|
+
// из executeListResolve во время postNotifyHook), пути накапливаются
|
|
89
|
+
// и обрабатываются последовательно после завершения внешнего вызова.
|
|
90
|
+
if (this.postNotifyHook) {
|
|
91
|
+
const changedPaths = new Set();
|
|
92
|
+
for (const n of changed) {
|
|
93
|
+
const p = this.nodePaths.get(n);
|
|
94
|
+
if (p)
|
|
95
|
+
changedPaths.add(p);
|
|
96
|
+
}
|
|
97
|
+
if (changedPaths.size > 0) {
|
|
98
|
+
if (this.isDispatchingHook) {
|
|
99
|
+
// Рекурсивный вызов: откладываем пути
|
|
100
|
+
if (!this.pendingHookPaths)
|
|
101
|
+
this.pendingHookPaths = new Set();
|
|
102
|
+
for (const p of changedPaths)
|
|
103
|
+
this.pendingHookPaths.add(p);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.isDispatchingHook = true;
|
|
107
|
+
try {
|
|
108
|
+
this.postNotifyHook(changedPaths);
|
|
109
|
+
// Дрейнируем пути, накопленные во время вызова хука
|
|
110
|
+
while (this.pendingHookPaths !== null && this.pendingHookPaths.size > 0) {
|
|
111
|
+
const pending = this.pendingHookPaths;
|
|
112
|
+
this.pendingHookPaths = null;
|
|
113
|
+
this.postNotifyHook(pending);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
this.isDispatchingHook = false;
|
|
118
|
+
this.pendingHookPaths = null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Инкрементировать версию для всех leaf-узлов + уведомить глобальных подписчиков.
|
|
126
|
+
* Используется при смене translator — все компоненты перерендерятся.
|
|
127
|
+
*/
|
|
128
|
+
bumpLeafVersions() {
|
|
129
|
+
this.version++;
|
|
130
|
+
for (const { node } of this.computeNodes) {
|
|
131
|
+
this.nodeVersions.set(node, this.version);
|
|
132
|
+
}
|
|
133
|
+
this.notifyGlobals();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Зарегистрировать хук, вызываемый после каждого notifyChanged.
|
|
137
|
+
* Получает множество dot-путей изменённых узлов.
|
|
138
|
+
* Используется resolve-системой для retrigger по зависимостям.
|
|
139
|
+
*/
|
|
140
|
+
setPostNotifyHook(hook) {
|
|
141
|
+
this.postNotifyHook = hook;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ─── Deprecated factory alias ────────────────────────────────────────────────
|
|
145
|
+
/** @deprecated Use `new NotificationHub(deps)` instead. */
|
|
146
|
+
export function createNotificationHub(deps) {
|
|
147
|
+
return new NotificationHub(deps);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=createNotificationHub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNotificationHub.js","sourceRoot":"","sources":["../../../store/init/createNotificationHub.ts"],"names":[],"mappings":"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"}
|