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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../store/store/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
/**
|
|
3
|
+
* Применяет leaf-level `beforeSubmit` трансформации к snapshot'у значений.
|
|
4
|
+
* Не мутирует store — работает с копией.
|
|
5
|
+
*/
|
|
6
|
+
export declare function applyLeafBeforeSubmit(node: AnyConfigNode, values: Record<string, unknown>): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=applyLeafBeforeSubmit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyLeafBeforeSubmit.d.ts","sourceRoot":"","sources":["../../../store/submitPipeline/applyLeafBeforeSubmit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { configKeys, isLeafNode } from "../traversal";
|
|
2
|
+
/**
|
|
3
|
+
* Применяет leaf-level `beforeSubmit` трансформации к snapshot'у значений.
|
|
4
|
+
* Не мутирует store — работает с копией.
|
|
5
|
+
*/
|
|
6
|
+
export function applyLeafBeforeSubmit(node, values) {
|
|
7
|
+
const result = { ...values };
|
|
8
|
+
for (const key of configKeys(node)) {
|
|
9
|
+
const child = node[key];
|
|
10
|
+
if (!child || typeof child !== "object")
|
|
11
|
+
continue;
|
|
12
|
+
if (isLeafNode(child)) {
|
|
13
|
+
if (typeof child.beforeSubmit === "function") {
|
|
14
|
+
result[key] = child.beforeSubmit(result[key], values);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const childValues = result[key];
|
|
19
|
+
if (childValues && typeof childValues === "object" && !Array.isArray(childValues)) {
|
|
20
|
+
result[key] = applyLeafBeforeSubmit(child, childValues);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=applyLeafBeforeSubmit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyLeafBeforeSubmit.js","sourceRoot":"","sources":["../../../store/submitPipeline/applyLeafBeforeSubmit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAmB,EACnB,MAA+B;IAE/B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAkB,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAElD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,OAAQ,KAAuB,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,GACR,KAAuB,CAAC,YAC1B,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClF,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAsC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
import type { FieldState } from "../compute/index";
|
|
3
|
+
/**
|
|
4
|
+
* Собирает все листовые узлы поддерева с их путями и текущим состоянием.
|
|
5
|
+
* Используется для валидации при submit.
|
|
6
|
+
*/
|
|
7
|
+
export declare function collectLeafStates(node: AnyConfigNode, nodeState: WeakMap<object, FieldState>, parentPath?: string): Array<{
|
|
8
|
+
path: string;
|
|
9
|
+
state: FieldState;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=collectLeafStates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectLeafStates.d.ts","sourceRoot":"","sources":["../../../store/submitPipeline/collectLeafStates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EACtC,UAAU,SAAK,GACd,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAW5C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { walkFull } from "../traversal";
|
|
2
|
+
/**
|
|
3
|
+
* Собирает все листовые узлы поддерева с их путями и текущим состоянием.
|
|
4
|
+
* Используется для валидации при submit.
|
|
5
|
+
*/
|
|
6
|
+
export function collectLeafStates(node, nodeState, parentPath = "") {
|
|
7
|
+
const result = [];
|
|
8
|
+
walkFull(node, {
|
|
9
|
+
onLeaf(leaf, _key, path) {
|
|
10
|
+
const state = nodeState.get(leaf);
|
|
11
|
+
if (state)
|
|
12
|
+
result.push({ path, state });
|
|
13
|
+
},
|
|
14
|
+
}, parentPath);
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=collectLeafStates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectLeafStates.js","sourceRoot":"","sources":["../../../store/submitPipeline/collectLeafStates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAIxC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAmB,EACnB,SAAsC,EACtC,UAAU,GAAG,EAAE;IAEf,MAAM,MAAM,GAA+C,EAAE,CAAC;IAE9D,QAAQ,CAAC,IAAI,EAAE;QACb,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YACrB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,EAAE,UAAU,CAAC,CAAC;IAEf,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
import type { ValuesCache } from "../valuesCache/valuesCache";
|
|
3
|
+
/**
|
|
4
|
+
* Извлечь поддерево значений для группового узла из кеша.
|
|
5
|
+
* Для корня → весь кеш, для вложенной группы → вложенный объект по пути.
|
|
6
|
+
* Возвращает snapshot (копию), чтобы beforeSubmit-трансформации не мутировали кеш.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSubValues(cache: ValuesCache, groupNode: AnyConfigNode, rootConfig: AnyConfigNode, nodePaths: WeakMap<object, string>): Record<string, unknown>;
|
|
9
|
+
//# sourceMappingURL=getSubValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSubValues.d.ts","sourceRoot":"","sources":["../../../store/submitPipeline/getSubValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Извлечь поддерево значений для группового узла из кеша.
|
|
3
|
+
* Для корня → весь кеш, для вложенной группы → вложенный объект по пути.
|
|
4
|
+
* Возвращает snapshot (копию), чтобы beforeSubmit-трансформации не мутировали кеш.
|
|
5
|
+
*/
|
|
6
|
+
export function getSubValues(cache, groupNode, rootConfig, nodePaths) {
|
|
7
|
+
let source;
|
|
8
|
+
if (groupNode === rootConfig) {
|
|
9
|
+
source = cache.values;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
const path = nodePaths.get(groupNode);
|
|
13
|
+
if (!path) {
|
|
14
|
+
source = cache.values;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
let current = cache.values;
|
|
18
|
+
for (const segment of path.split(".")) {
|
|
19
|
+
current = current?.[segment];
|
|
20
|
+
}
|
|
21
|
+
source = current ?? {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return structuredClone(source);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=getSubValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSubValues.js","sourceRoot":"","sources":["../../../store/submitPipeline/getSubValues.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAkB,EAClB,SAAwB,EACxB,UAAyB,EACzB,SAAkC;IAElC,IAAI,MAA+B,CAAC;IAEpC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,GAAY,KAAK,CAAC,MAAM,CAAC;YACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,GAAI,OAAmC,EAAE,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,GAAI,OAAmC,IAAI,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type AnyConfigNode } from "../store/types";
|
|
2
|
+
import type { Palistor } from "../store/palistor";
|
|
3
|
+
import type { SubmitResult } from "./types";
|
|
4
|
+
export type { SubmitResult };
|
|
5
|
+
/**
|
|
6
|
+
* Context passed when submitting an entity leaf through a template field.
|
|
7
|
+
* The view (parentProxy, parentValues, onReset) is resolved via NodeRegistry.getView(node, via).
|
|
8
|
+
*/
|
|
9
|
+
export interface EntityLeafSubmitOptions {
|
|
10
|
+
/** templateField — source of callbacks: beforeSubmit, validate, onSubmit, afterSubmit */
|
|
11
|
+
via: AnyConfigNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* SubmitPipeline — submit flow для групповых и листовых узлов.
|
|
15
|
+
*
|
|
16
|
+
* Lifecycle:
|
|
17
|
+
* 1. submitting = true + revalidate = true → recompute → notify
|
|
18
|
+
* 2. Собрать значения (поддерево для group, одно значение для leaf)
|
|
19
|
+
* 3. Применить beforeSubmit
|
|
20
|
+
* 4. (group only) Применить group-level beforeSubmit
|
|
21
|
+
* 5. Валидация — если ошибки → return { success: false }
|
|
22
|
+
* 6. Вызвать onSubmit(value, store, parent)
|
|
23
|
+
* 7. Вызвать afterSubmit с результатом и reset-экшеном
|
|
24
|
+
* 8. (group only) Очистка persist
|
|
25
|
+
* 9. submitting = false → recompute → notify
|
|
26
|
+
*/
|
|
27
|
+
export declare class SubmitPipeline {
|
|
28
|
+
private readonly kernel;
|
|
29
|
+
constructor(kernel: Palistor<any, any>);
|
|
30
|
+
execute(node: AnyConfigNode, entityOpts?: EntityLeafSubmitOptions): Promise<SubmitResult>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=submitPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitPipeline.d.ts","sourceRoot":"","sources":["../../../store/submitPipeline/submitPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,yFAAyF;IACzF,GAAG,EAAE,aAAa,CAAC;CACpB;AAID;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAEjD,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;CAoHhG"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { setGroupRevalidate } from "../dirtyTracking";
|
|
2
|
+
import { collectLeafStates } from "./collectLeafStates";
|
|
3
|
+
import { applyLeafBeforeSubmit } from "./applyLeafBeforeSubmit";
|
|
4
|
+
import { isLeafNode } from "../traversal";
|
|
5
|
+
import { computeFieldState } from "../compute";
|
|
6
|
+
// ─── Submit pipeline ─────────────────────────────────────────────────────────
|
|
7
|
+
/**
|
|
8
|
+
* SubmitPipeline — submit flow для групповых и листовых узлов.
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle:
|
|
11
|
+
* 1. submitting = true + revalidate = true → recompute → notify
|
|
12
|
+
* 2. Собрать значения (поддерево для group, одно значение для leaf)
|
|
13
|
+
* 3. Применить beforeSubmit
|
|
14
|
+
* 4. (group only) Применить group-level beforeSubmit
|
|
15
|
+
* 5. Валидация — если ошибки → return { success: false }
|
|
16
|
+
* 6. Вызвать onSubmit(value, store, parent)
|
|
17
|
+
* 7. Вызвать afterSubmit с результатом и reset-экшеном
|
|
18
|
+
* 8. (group only) Очистка persist
|
|
19
|
+
* 9. submitting = false → recompute → notify
|
|
20
|
+
*/
|
|
21
|
+
export class SubmitPipeline {
|
|
22
|
+
constructor(kernel) {
|
|
23
|
+
this.kernel = kernel;
|
|
24
|
+
}
|
|
25
|
+
async execute(node, entityOpts) {
|
|
26
|
+
const view = this.kernel.nodes.getView(node, entityOpts?.via);
|
|
27
|
+
const isLeaf = isLeafNode(node);
|
|
28
|
+
const nodeState = this.kernel.nodes.nodeState;
|
|
29
|
+
// 1. submitting = true + revalidate = true → recompute → notify
|
|
30
|
+
const prevState = nodeState.get(view.storage);
|
|
31
|
+
nodeState.set(view.storage, { ...prevState, submitting: true });
|
|
32
|
+
const revalidateChanged = setGroupRevalidate(view.storage, true, nodeState);
|
|
33
|
+
const changed1 = this.kernel.recompute();
|
|
34
|
+
changed1.add(view.storage);
|
|
35
|
+
for (const n of revalidateChanged)
|
|
36
|
+
changed1.add(n);
|
|
37
|
+
this.kernel.notifyChanged(changed1);
|
|
38
|
+
try {
|
|
39
|
+
let value;
|
|
40
|
+
if (isLeaf) {
|
|
41
|
+
// 2. Leaf: get own current value
|
|
42
|
+
value = nodeState.get(view.storage)?.value;
|
|
43
|
+
// 3. Leaf beforeSubmit(value, parentValues)
|
|
44
|
+
if (typeof view.rules.beforeSubmit === "function") {
|
|
45
|
+
value = await view.rules.beforeSubmit(value, view.parent.getValues());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// 2. Group: unified entry — nodeState.value is the groupSlot reference for non-root groups;
|
|
50
|
+
// root config may not be in nodeState, so fall back to groupSlot directly.
|
|
51
|
+
const groupValue = (nodeState.get(view.storage)?.value ?? this.kernel.values.groupSlot.get(view.storage) ?? {});
|
|
52
|
+
let values = structuredClone(groupValue);
|
|
53
|
+
// 3. Leaf-level beforeSubmit on group subtree
|
|
54
|
+
values = applyLeafBeforeSubmit(view.storage, values);
|
|
55
|
+
// 4. Group-level beforeSubmit
|
|
56
|
+
if (typeof view.rules.beforeSubmit === "function") {
|
|
57
|
+
values = await view.rules.beforeSubmit(values);
|
|
58
|
+
}
|
|
59
|
+
value = values;
|
|
60
|
+
}
|
|
61
|
+
// 5. Валидация
|
|
62
|
+
if (isLeaf) {
|
|
63
|
+
if (entityOpts?.via) {
|
|
64
|
+
// Entity leaf: validate directly via template rules — not covered by the recompute system
|
|
65
|
+
// (computeFieldState runs on the node itself, but entity leaves carry no rules; those live on templateField).
|
|
66
|
+
const { isInvalid, errorMessage } = computeFieldState(view.rules, value, view.parent.getValues(), true, this.kernel.services.translate);
|
|
67
|
+
if (isInvalid && errorMessage) {
|
|
68
|
+
const nodePath = this.kernel.nodes.nodePaths.get(view.storage) ?? "";
|
|
69
|
+
return { success: false, errors: [{ path: nodePath, message: errorMessage }] };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const leafState = nodeState.get(view.storage);
|
|
74
|
+
if (leafState?.isInvalid && leafState.errorMessage) {
|
|
75
|
+
const nodePath = this.kernel.nodes.nodePaths.get(view.storage) ?? "";
|
|
76
|
+
return { success: false, errors: [{ path: nodePath, message: leafState.errorMessage }] };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const errors = [];
|
|
82
|
+
const leaves = collectLeafStates(view.storage, nodeState);
|
|
83
|
+
for (const { path, state } of leaves) {
|
|
84
|
+
if (state.isInvalid && state.errorMessage) {
|
|
85
|
+
errors.push({ path, message: state.errorMessage });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (errors.length > 0)
|
|
89
|
+
return { success: false, errors };
|
|
90
|
+
}
|
|
91
|
+
// 6. onSubmit(value, store, parent)
|
|
92
|
+
let result;
|
|
93
|
+
if (typeof view.rules.onSubmit === "function") {
|
|
94
|
+
result = await view.rules.onSubmit(value, this.kernel, view.parent.proxy);
|
|
95
|
+
}
|
|
96
|
+
// 7. afterSubmit
|
|
97
|
+
if (typeof view.rules.afterSubmit === "function") {
|
|
98
|
+
const reset = isLeaf
|
|
99
|
+
? view.onReset
|
|
100
|
+
: () => this.kernel.resetPipeline.execute(view.storage);
|
|
101
|
+
await view.rules.afterSubmit(result, { reset });
|
|
102
|
+
}
|
|
103
|
+
// 8. Очистка persist после успешного submit (group only)
|
|
104
|
+
if (!isLeaf) {
|
|
105
|
+
await this.kernel.persist.clear();
|
|
106
|
+
}
|
|
107
|
+
return { success: true, result };
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
// 9. submitting = false → recompute → notify
|
|
111
|
+
const finalState = nodeState.get(view.storage);
|
|
112
|
+
nodeState.set(view.storage, { ...finalState, submitting: false });
|
|
113
|
+
const changed2 = this.kernel.recompute();
|
|
114
|
+
changed2.add(view.storage);
|
|
115
|
+
this.kernel.notifyChanged(changed2);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=submitPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitPipeline.js","sourceRoot":"","sources":["../../../store/submitPipeline/submitPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../store/submitPipeline/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GACpB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../store/submitPipeline/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../store/traversal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../store/traversal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Проверить, есть ли у узла дочерние config-ключи (объекты, включая ListNode-массивы).
|
|
3
|
+
* Вызывается ТОЛЬКО при инициализации (в registerNodes) для простановки __kind.
|
|
4
|
+
*/
|
|
5
|
+
export declare function hasChildren(node: object): boolean;
|
|
6
|
+
/** Leaf node — узел с __kind === "leaf" (проставляется registerNodes / entity-фабриками).
|
|
7
|
+
* Fallback: если __kind не проставлен — используется "value" in node (обратная совместимость). */
|
|
8
|
+
export declare function isLeafNode(node: object): boolean;
|
|
9
|
+
/** Group node — узел с __kind === "group" (проставляется registerNodes / entity-фабриками).
|
|
10
|
+
* Fallback: если __kind не проставлен — используется !("value" in node). */
|
|
11
|
+
export declare function isGroupNode(node: object): boolean;
|
|
12
|
+
/** List node — массив (entity-списки хранятся как Array) */
|
|
13
|
+
export declare function isListNode(node: unknown): node is unknown[];
|
|
14
|
+
/**
|
|
15
|
+
* Вернуть ключи узла, отфильтровав служебные CONFIG_PROPS.
|
|
16
|
+
* Это заменяет повторяющийся паттерн:
|
|
17
|
+
* for (const key of Object.keys(node)) {
|
|
18
|
+
* if (CONFIG_PROPS.has(key)) continue;
|
|
19
|
+
* ...
|
|
20
|
+
* }
|
|
21
|
+
*/
|
|
22
|
+
export declare function configKeys(node: Record<string, unknown>): string[];
|
|
23
|
+
//# sourceMappingURL=nodeClassifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeClassifier.d.ts","sourceRoot":"","sources":["../../../store/traversal/nodeClassifier.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED;kGACkG;AAClG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhD;AAED;4EAC4E;AAC5E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAElE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CONFIG_PROPS } from "../constants";
|
|
2
|
+
/**
|
|
3
|
+
* Проверить, есть ли у узла дочерние config-ключи (объекты, включая ListNode-массивы).
|
|
4
|
+
* Вызывается ТОЛЬКО при инициализации (в registerNodes) для простановки __kind.
|
|
5
|
+
*/
|
|
6
|
+
export function hasChildren(node) {
|
|
7
|
+
const keys = configKeys(node);
|
|
8
|
+
return keys.some(k => {
|
|
9
|
+
const v = node[k];
|
|
10
|
+
return v !== null && typeof v === "object";
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
/** Leaf node — узел с __kind === "leaf" (проставляется registerNodes / entity-фабриками).
|
|
14
|
+
* Fallback: если __kind не проставлен — используется "value" in node (обратная совместимость). */
|
|
15
|
+
export function isLeafNode(node) {
|
|
16
|
+
const kind = node.__kind;
|
|
17
|
+
if (kind !== undefined)
|
|
18
|
+
return kind === "leaf";
|
|
19
|
+
// Fallback для узлов без __kind (тесты, инлайн-конфиги до registerNodes)
|
|
20
|
+
return "value" in node;
|
|
21
|
+
}
|
|
22
|
+
/** Group node — узел с __kind === "group" (проставляется registerNodes / entity-фабриками).
|
|
23
|
+
* Fallback: если __kind не проставлен — используется !("value" in node). */
|
|
24
|
+
export function isGroupNode(node) {
|
|
25
|
+
const kind = node.__kind;
|
|
26
|
+
if (kind !== undefined)
|
|
27
|
+
return kind === "group";
|
|
28
|
+
// Fallback для узлов без __kind (тесты, инлайн-конфиги до registerNodes)
|
|
29
|
+
return !("value" in node);
|
|
30
|
+
}
|
|
31
|
+
/** List node — массив (entity-списки хранятся как Array) */
|
|
32
|
+
export function isListNode(node) {
|
|
33
|
+
return Array.isArray(node);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Вернуть ключи узла, отфильтровав служебные CONFIG_PROPS.
|
|
37
|
+
* Это заменяет повторяющийся паттерн:
|
|
38
|
+
* for (const key of Object.keys(node)) {
|
|
39
|
+
* if (CONFIG_PROPS.has(key)) continue;
|
|
40
|
+
* ...
|
|
41
|
+
* }
|
|
42
|
+
*/
|
|
43
|
+
export function configKeys(node) {
|
|
44
|
+
return Object.keys(node).filter(k => !CONFIG_PROPS.has(k));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=nodeClassifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeClassifier.js","sourceRoot":"","sources":["../../../store/traversal/nodeClassifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,UAAU,CAAC,IAA+B,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACnB,MAAM,CAAC,GAAI,IAAgC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;kGACkG;AAClG,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAI,IAAY,CAAC,MAAM,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,KAAK,MAAM,CAAC;IAC/C,yEAAyE;IACzE,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;4EAC4E;AAC5E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAI,IAAY,CAAC,MAAM,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,KAAK,OAAO,CAAC;IAChD,yEAAyE;IACzE,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,IAA6B;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
export interface TreeVisitor {
|
|
3
|
+
/**
|
|
4
|
+
* Вызывается для каждого leaf-узла ({ value: ... }).
|
|
5
|
+
* @param node — config-узел (ref на объект, можно использовать как ключ WeakMap)
|
|
6
|
+
* @param key — имя ключа в родителе (например "city")
|
|
7
|
+
* @param path — полный dot-path (например "address.city")
|
|
8
|
+
* @param parent — родительский config-узел
|
|
9
|
+
*/
|
|
10
|
+
onLeaf(node: object, key: string, path: string, parent: AnyConfigNode): void;
|
|
11
|
+
/**
|
|
12
|
+
* Вызывается для group-узла ПЕРЕД входом в рекурсию.
|
|
13
|
+
* Верни false чтобы пропустить поддерево (например reset boundary).
|
|
14
|
+
* Если не определён — всегда входит.
|
|
15
|
+
*/
|
|
16
|
+
onGroupEnter?(node: AnyConfigNode, key: string, path: string, parent: AnyConfigNode): boolean | void;
|
|
17
|
+
/**
|
|
18
|
+
* Вызывается для group-узла ПОСЛЕ обхода всех его потомков.
|
|
19
|
+
* Опционально — для агрегации (например dirty = any child dirty).
|
|
20
|
+
*/
|
|
21
|
+
onGroupExit?(node: AnyConfigNode, key: string, path: string, parent: AnyConfigNode): void;
|
|
22
|
+
/**
|
|
23
|
+
* Вызывается для list-узла (Array).
|
|
24
|
+
* Если не определён — list пропускается.
|
|
25
|
+
*/
|
|
26
|
+
onList?(node: unknown[], key: string, path: string, parent: AnyConfigNode): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Обход полного дерева конфигурации с visitor-callback'ами.
|
|
30
|
+
* Заменяет повторяющийся паттерн Object.keys + CONFIG_PROPS + leaf/group/list.
|
|
31
|
+
*/
|
|
32
|
+
export declare function walkFull(node: AnyConfigNode, visitor: TreeVisitor, parentPath?: string): void;
|
|
33
|
+
//# sourceMappingURL=walkFull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkFull.d.ts","sourceRoot":"","sources":["../../../store/traversal/walkFull.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAE7E;;;;OAIG;IACH,YAAY,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;IAErG;;;OAGG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAE1F;;;OAGG;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAClF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,WAAW,EACpB,UAAU,SAAK,GACd,IAAI,CAqBN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { configKeys, isLeafNode, isListNode } from "./nodeClassifier";
|
|
2
|
+
/**
|
|
3
|
+
* Обход полного дерева конфигурации с visitor-callback'ами.
|
|
4
|
+
* Заменяет повторяющийся паттерн Object.keys + CONFIG_PROPS + leaf/group/list.
|
|
5
|
+
*/
|
|
6
|
+
export function walkFull(node, visitor, parentPath = "") {
|
|
7
|
+
for (const key of configKeys(node)) {
|
|
8
|
+
const child = node[key];
|
|
9
|
+
if (!child || typeof child !== "object")
|
|
10
|
+
continue;
|
|
11
|
+
const path = parentPath ? `${parentPath}.${key}` : key;
|
|
12
|
+
if (isListNode(child)) {
|
|
13
|
+
visitor.onList?.(child, key, path, node);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (isLeafNode(child)) {
|
|
17
|
+
visitor.onLeaf(child, key, path, node);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const enter = visitor.onGroupEnter?.(child, key, path, node);
|
|
21
|
+
if (enter === false)
|
|
22
|
+
continue;
|
|
23
|
+
walkFull(child, visitor, path);
|
|
24
|
+
visitor.onGroupExit?.(child, key, path, node);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=walkFull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkFull.js","sourceRoot":"","sources":["../../../store/traversal/walkFull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiCtE;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAmB,EACnB,OAAoB,EACpB,UAAU,GAAG,EAAE;IAEf,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAElD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAkB,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,KAAe,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAe,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,KAAsB,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9E,IAAI,KAAK,KAAK,KAAK;gBAAE,SAAS;YAC9B,QAAQ,CAAC,KAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAChD,OAAO,CAAC,WAAW,EAAE,CAAC,KAAsB,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
import type { FieldState } from "../compute/index";
|
|
3
|
+
export interface ValuesCache {
|
|
4
|
+
/** Корневой объект значений — всегда актуальный, мутабельный. */
|
|
5
|
+
readonly values: Record<string, unknown>;
|
|
6
|
+
/** Маппинг config-node → { parent, key } для O(1) обновления. */
|
|
7
|
+
readonly nodeSlot: WeakMap<object, {
|
|
8
|
+
parent: Record<string, unknown>;
|
|
9
|
+
key: string;
|
|
10
|
+
}>;
|
|
11
|
+
/** Маппинг group config-node → соответствующий вложенный объект values. */
|
|
12
|
+
readonly groupSlot: WeakMap<object, Record<string, unknown>>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Построить начальный кеш значений из дерева конфига + nodeState.
|
|
16
|
+
* Вызывается ОДИН раз после registerNodes.
|
|
17
|
+
*
|
|
18
|
+
* Обходит дерево конфига и дополнительно
|
|
19
|
+
* запоминает «слот» каждого листового узла для O(1) обновлений.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildValuesCache(rootConfig: AnyConfigNode, nodeState: WeakMap<object, FieldState>): ValuesCache;
|
|
22
|
+
/**
|
|
23
|
+
* Обновить одно значение в кеше — O(1).
|
|
24
|
+
* Вызывается при каждой записи value в nodeState.
|
|
25
|
+
*/
|
|
26
|
+
export declare function updateValuesCacheEntry(cache: ValuesCache, node: object, newValue: unknown): void;
|
|
27
|
+
//# sourceMappingURL=valuesCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valuesCache.d.ts","sourceRoot":"","sources":["../../../store/valuesCache/valuesCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9D;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GACrC,WAAW,CAsCb;AAID;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,IAAI,CAGN"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { configKeys, isLeafNode, isListNode } from "../traversal";
|
|
2
|
+
// ─── Build ───────────────────────────────────────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Построить начальный кеш значений из дерева конфига + nodeState.
|
|
5
|
+
* Вызывается ОДИН раз после registerNodes.
|
|
6
|
+
*
|
|
7
|
+
* Обходит дерево конфига и дополнительно
|
|
8
|
+
* запоминает «слот» каждого листового узла для O(1) обновлений.
|
|
9
|
+
*/
|
|
10
|
+
export function buildValuesCache(rootConfig, nodeState) {
|
|
11
|
+
const values = {};
|
|
12
|
+
const nodeSlot = new WeakMap();
|
|
13
|
+
const groupSlot = new WeakMap();
|
|
14
|
+
groupSlot.set(rootConfig, values);
|
|
15
|
+
function walk(node, target) {
|
|
16
|
+
for (const key of configKeys(node)) {
|
|
17
|
+
const child = node[key];
|
|
18
|
+
if (!child || typeof child !== "object")
|
|
19
|
+
continue;
|
|
20
|
+
if (isListNode(child)) {
|
|
21
|
+
// ListNode: register empty array in values + nodeSlot for later updates
|
|
22
|
+
const emptyArray = [];
|
|
23
|
+
target[key] = emptyArray;
|
|
24
|
+
nodeSlot.set(child, { parent: target, key });
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (isLeafNode(child)) {
|
|
28
|
+
target[key] = nodeState.get(child)?.value ?? "";
|
|
29
|
+
nodeSlot.set(child, { parent: target, key });
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const group = {};
|
|
33
|
+
target[key] = group;
|
|
34
|
+
groupSlot.set(child, group);
|
|
35
|
+
// Also register group in nodeSlot so nodes can resolve their parent-scoped values.
|
|
36
|
+
nodeSlot.set(child, { parent: target, key });
|
|
37
|
+
// Update group's nodeState.value to reference the group object (Phase 2).
|
|
38
|
+
const state = nodeState.get(child);
|
|
39
|
+
if (state)
|
|
40
|
+
nodeState.set(child, { ...state, value: group });
|
|
41
|
+
walk(child, group);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
walk(rootConfig, values);
|
|
46
|
+
return { values, nodeSlot, groupSlot };
|
|
47
|
+
}
|
|
48
|
+
// ─── Update ──────────────────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Обновить одно значение в кеше — O(1).
|
|
51
|
+
* Вызывается при каждой записи value в nodeState.
|
|
52
|
+
*/
|
|
53
|
+
export function updateValuesCacheEntry(cache, node, newValue) {
|
|
54
|
+
const slot = cache.nodeSlot.get(node);
|
|
55
|
+
if (slot)
|
|
56
|
+
slot.parent[slot.key] = newValue;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=valuesCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valuesCache.js","sourceRoot":"","sources":["../../../store/valuesCache/valuesCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAelE,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAyB,EACzB,SAAsC;IAEtC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA4D,CAAC;IACzF,MAAM,SAAS,GAAG,IAAI,OAAO,EAAmC,CAAC;IAEjE,SAAS,CAAC,GAAG,CAAC,UAAoB,EAAE,MAAM,CAAC,CAAC;IAE5C,SAAS,IAAI,CAAC,IAAmB,EAAE,MAA+B;QAChE,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,EAAE,CAAC;gBACtB,wEAAwE;gBACxE,MAAM,UAAU,GAAc,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;gBACzB,QAAQ,CAAC,GAAG,CAAC,KAA0B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClE,SAAS;YACX,CAAC;YAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAA4B,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpB,SAAS,CAAC,GAAG,CAAC,KAAe,EAAE,KAAK,CAAC,CAAC;gBACtC,mFAAmF;gBACnF,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7C,0EAA0E;gBAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,KAAK;oBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAkB,EAClB,IAAY,EACZ,QAAiB;IAEjB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnyConfigNode } from "../store/types";
|
|
2
|
+
/**
|
|
3
|
+
* Отформатировать патч: рекурсивно обходит дерево конфига параллельно с деревом патча
|
|
4
|
+
* и для каждого листового значения применяет formatter узла (если он есть).
|
|
5
|
+
*
|
|
6
|
+
* Возвращает новый объект-патч с отформатированными значениями.
|
|
7
|
+
* Исходный patch не мутируется.
|
|
8
|
+
*
|
|
9
|
+
* Используется как первая фаза перед applyPatch:
|
|
10
|
+
* const formatted = formatPatch(config, patch, allValues);
|
|
11
|
+
* applyPatch(config, nodeState, formatted);
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatPatch(configNode: AnyConfigNode, patch: Record<string, unknown>, allValues: Record<string, unknown>): Record<string, unknown>;
|
|
14
|
+
//# sourceMappingURL=formatPatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatPatch.d.ts","sourceRoot":"","sources":["../../../store/writePipeline/formatPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,aAAa,EACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB"}
|