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":"createContextTrackingProxy.js","sourceRoot":"","sources":["../../../store/resolvePipeline/createContextTrackingProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,UAAU,0BAA0B,CACxC,OAAgC;IAEhC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;QAC/B,GAAG,CAAC,OAAO,EAAE,GAAG;YACd,8DAA8D;YAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC9D,YAAY,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,GAAa,CAAC,CAAC;QAChC,CAAC;QACD,GAAG;YACD,wCAAwC;YACxC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACtE,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createValuesTrackingProxy — оборачивает дерево значений в Proxy, который:
|
|
3
|
+
* - ЧТЕНИЕ: отслеживает обращённые пути (автоматические зависимости для повторного запуска резолвера)
|
|
4
|
+
* - ЗАПИСЬ: буферизирует побочные эффекты (пакетный режим, без промежуточных ре-рендеров)
|
|
5
|
+
*
|
|
6
|
+
* Используется внутри выполнения резолвера: резолвер получает этот прокси вместо реального объекта.
|
|
7
|
+
* После завершения резолвера обращённые пути сохраняются для отслеживания зависимостей,
|
|
8
|
+
* а буферизированные записи сбрасываются одним пакетом.
|
|
9
|
+
*
|
|
10
|
+
* ─── КАК ЭТО РАБОТАЕТ ────────────────────────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* Дерево значений выглядит как обычный вложенный объект:
|
|
13
|
+
* { user: { name: "Alice", vehicleExists: true }, payment: { amount: 100 } }
|
|
14
|
+
*
|
|
15
|
+
* Когда резолвер запускается, он получает этот прокси вместо реального объекта.
|
|
16
|
+
* Прокси перехватывает каждое обращение к свойству:
|
|
17
|
+
*
|
|
18
|
+
* ЧТЕНИЕ: values.user.name
|
|
19
|
+
* → прокси возвращает вложенный прокси для "user"
|
|
20
|
+
* → вложенный прокси перехватывает "name", записывает путь "user.name" в accessedPaths
|
|
21
|
+
* → возвращает реальное значение
|
|
22
|
+
*
|
|
23
|
+
* ЗАПИСЬ: values.user.vehicleExists = false
|
|
24
|
+
* → прокси перехватывает присваивание, записывает { path: "user.vehicleExists", value: false }
|
|
25
|
+
* в pendingWrites[]
|
|
26
|
+
* → НЕ трогает реальный объект значений — запись отложена!
|
|
27
|
+
*
|
|
28
|
+
* После возврата резолвера:
|
|
29
|
+
* 1. getAccessedPaths() → используется для перестройки графа зависимостей этого резолвера
|
|
30
|
+
* (при следующем изменении любого из этих путей резолвер запустится снова)
|
|
31
|
+
* 2. getPendingWrites() → передаётся в applyPendingWrites(), который превращает каждый
|
|
32
|
+
* путь обратно во вложенный патч и вызывает applyPatch() на реальном хранилище
|
|
33
|
+
*
|
|
34
|
+
* ЗАЧЕМ БУФЕРИЗИРОВАТЬ ЗАПИСИ вместо немедленного применения?
|
|
35
|
+
* - Предотвращает каскадные ре-рендеры в середине работы резолвера
|
|
36
|
+
* - Все мутации применяются одним атомарным пакетом → согласованное состояние после каждого тика пайплайна
|
|
37
|
+
* - Записи резолвера A случайно не запускают резолвер B в процессе его выполнения
|
|
38
|
+
*/
|
|
39
|
+
export interface PendingWrite {
|
|
40
|
+
/**
|
|
41
|
+
* Путь в дереве значений, разделённый точками, например "user.vehicleExists" или "payment.amount".
|
|
42
|
+
* Отражает структуру объекта values (аналогично valuesCache.values).
|
|
43
|
+
* applyPendingWrites() разбивает этот путь по "." для построения вложенного патч-объекта.
|
|
44
|
+
*/
|
|
45
|
+
path: string;
|
|
46
|
+
/** Новое значение, которое резолвер хочет записать по этому пути. */
|
|
47
|
+
value: unknown;
|
|
48
|
+
}
|
|
49
|
+
export interface ValuesTrackingResult {
|
|
50
|
+
/** Отслеживающий прокси с поддержкой записи для передачи резолверу. Чтения трекаются, записи буферизируются. */
|
|
51
|
+
proxy: Record<string, unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* Возвращает все пути (через точку), которые были ПРОЧИТАНЫ в ходе выполнения резолвера.
|
|
54
|
+
* Используется после возврата резолвера для обновления графа зависимостей:
|
|
55
|
+
* резолвер повторно запустится при изменении любого из этих путей.
|
|
56
|
+
*/
|
|
57
|
+
getAccessedPaths: () => Set<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Возвращает все операции записи, буферизированные во время выполнения резолвера.
|
|
60
|
+
* Ни одна из этих записей ещё не применена к реальному хранилищу —
|
|
61
|
+
* они сбрасываются одним пакетом через applyPendingWrites() после возврата резолвера.
|
|
62
|
+
*/
|
|
63
|
+
getPendingWrites: () => PendingWrite[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Создаёт отслеживающий прокси с поддержкой записи для дерева значений.
|
|
67
|
+
*
|
|
68
|
+
* - Чтение примитива записывает полный путь (например "user.id") в accessedPaths
|
|
69
|
+
* - Чтение объекта возвращает вложенный прокси (рекурсивно), не трекается до обращения к листу
|
|
70
|
+
* - Запись по ЛЮБОМУ пути буферизирует присваивание в pendingWrites[], не затрагивая реальные данные
|
|
71
|
+
*
|
|
72
|
+
* @param values — текущий снапшот значений (из valuesCache.values), здесь считается только для чтения
|
|
73
|
+
*/
|
|
74
|
+
export declare function createValuesTrackingProxy(values: Record<string, unknown>): ValuesTrackingResult;
|
|
75
|
+
//# sourceMappingURL=createValuesTrackingProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createValuesTrackingProxy.d.ts","sourceRoot":"","sources":["../../../store/resolvePipeline/createValuesTrackingProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,gHAAgH;IAChH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,YAAY,EAAE,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,oBAAoB,CAwFtB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createValuesTrackingProxy — оборачивает дерево значений в Proxy, который:
|
|
3
|
+
* - ЧТЕНИЕ: отслеживает обращённые пути (автоматические зависимости для повторного запуска резолвера)
|
|
4
|
+
* - ЗАПИСЬ: буферизирует побочные эффекты (пакетный режим, без промежуточных ре-рендеров)
|
|
5
|
+
*
|
|
6
|
+
* Используется внутри выполнения резолвера: резолвер получает этот прокси вместо реального объекта.
|
|
7
|
+
* После завершения резолвера обращённые пути сохраняются для отслеживания зависимостей,
|
|
8
|
+
* а буферизированные записи сбрасываются одним пакетом.
|
|
9
|
+
*
|
|
10
|
+
* ─── КАК ЭТО РАБОТАЕТ ────────────────────────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* Дерево значений выглядит как обычный вложенный объект:
|
|
13
|
+
* { user: { name: "Alice", vehicleExists: true }, payment: { amount: 100 } }
|
|
14
|
+
*
|
|
15
|
+
* Когда резолвер запускается, он получает этот прокси вместо реального объекта.
|
|
16
|
+
* Прокси перехватывает каждое обращение к свойству:
|
|
17
|
+
*
|
|
18
|
+
* ЧТЕНИЕ: values.user.name
|
|
19
|
+
* → прокси возвращает вложенный прокси для "user"
|
|
20
|
+
* → вложенный прокси перехватывает "name", записывает путь "user.name" в accessedPaths
|
|
21
|
+
* → возвращает реальное значение
|
|
22
|
+
*
|
|
23
|
+
* ЗАПИСЬ: values.user.vehicleExists = false
|
|
24
|
+
* → прокси перехватывает присваивание, записывает { path: "user.vehicleExists", value: false }
|
|
25
|
+
* в pendingWrites[]
|
|
26
|
+
* → НЕ трогает реальный объект значений — запись отложена!
|
|
27
|
+
*
|
|
28
|
+
* После возврата резолвера:
|
|
29
|
+
* 1. getAccessedPaths() → используется для перестройки графа зависимостей этого резолвера
|
|
30
|
+
* (при следующем изменении любого из этих путей резолвер запустится снова)
|
|
31
|
+
* 2. getPendingWrites() → передаётся в applyPendingWrites(), который превращает каждый
|
|
32
|
+
* путь обратно во вложенный патч и вызывает applyPatch() на реальном хранилище
|
|
33
|
+
*
|
|
34
|
+
* ЗАЧЕМ БУФЕРИЗИРОВАТЬ ЗАПИСИ вместо немедленного применения?
|
|
35
|
+
* - Предотвращает каскадные ре-рендеры в середине работы резолвера
|
|
36
|
+
* - Все мутации применяются одним атомарным пакетом → согласованное состояние после каждого тика пайплайна
|
|
37
|
+
* - Записи резолвера A случайно не запускают резолвер B в процессе его выполнения
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Создаёт отслеживающий прокси с поддержкой записи для дерева значений.
|
|
41
|
+
*
|
|
42
|
+
* - Чтение примитива записывает полный путь (например "user.id") в accessedPaths
|
|
43
|
+
* - Чтение объекта возвращает вложенный прокси (рекурсивно), не трекается до обращения к листу
|
|
44
|
+
* - Запись по ЛЮБОМУ пути буферизирует присваивание в pendingWrites[], не затрагивая реальные данные
|
|
45
|
+
*
|
|
46
|
+
* @param values — текущий снапшот значений (из valuesCache.values), здесь считается только для чтения
|
|
47
|
+
*/
|
|
48
|
+
export function createValuesTrackingProxy(values) {
|
|
49
|
+
// Собирает все пути к примитивам, которые резолвер читает.
|
|
50
|
+
// Пример после работы резолвера: Set { "user.name", "user.vehicleExists" }
|
|
51
|
+
const accessedPaths = new Set();
|
|
52
|
+
// Собирает все записи, которые резолвер выполняет, в порядке их появления.
|
|
53
|
+
// Ни одна не применяется до вызова applyPendingWrites() после возврата резолвера.
|
|
54
|
+
// Пример: [{ path: "user.vehicleExists", value: false }, { path: "payment.amount", value: 200 }]
|
|
55
|
+
const pendingWrites = [];
|
|
56
|
+
// Кэширует вложенные прокси по их префиксу пути, чтобы при повторном обращении
|
|
57
|
+
// к одному и тому же вложенному объекту возвращался тот же экземпляр прокси.
|
|
58
|
+
// Ключ: префикс пути через точку (например "user"), или "__root__" для корневого уровня.
|
|
59
|
+
const proxyCache = new Map();
|
|
60
|
+
/**
|
|
61
|
+
* Рекурсивно оборачивает `target` в Proxy, который отслеживает чтения и буферизирует записи.
|
|
62
|
+
*
|
|
63
|
+
* @param target — реальный объект значений (или вложенный подобъект) для обёртки
|
|
64
|
+
* @param parentPath — накопленный префикс пути через точку, например "" для корня или "user" для вложенного
|
|
65
|
+
*/
|
|
66
|
+
function buildValuesProxy(target, parentPath) {
|
|
67
|
+
// Возвращаем закэшированный прокси для данного пути, чтобы не создавать дублирующие прокси
|
|
68
|
+
// для одного узла (важно для проверок ссылочного равенства внутри резолверов).
|
|
69
|
+
const cacheKey = parentPath || "__root__";
|
|
70
|
+
if (proxyCache.has(cacheKey))
|
|
71
|
+
return proxyCache.get(cacheKey);
|
|
72
|
+
const p = new Proxy(target, {
|
|
73
|
+
// ─── GET-ловушка ──────────────────────────────────────────────────────
|
|
74
|
+
// Перехватывает каждое чтение свойства. Строит полный путь через точку, затем:
|
|
75
|
+
// • если значение — вложенный простой объект → возвращает вложенный прокси
|
|
76
|
+
// (промежуточные пути не трекаем, только чтения листьев)
|
|
77
|
+
// • если значение — примитив → записывает путь в accessedPaths и возвращает его
|
|
78
|
+
get(_t, key) {
|
|
79
|
+
// Игнорируем символьные ключи (например Symbol.toPrimitive, Symbol.iterator) —
|
|
80
|
+
// это внутренние ключи фреймворка/рантайма, не часть дерева значений.
|
|
81
|
+
if (typeof key === "symbol")
|
|
82
|
+
return undefined;
|
|
83
|
+
// Формируем полный путь через точку для данного обращения, например "user" + "." + "name" = "user.name"
|
|
84
|
+
const fullPath = parentPath ? `${parentPath}.${key}` : key;
|
|
85
|
+
const val = target[key];
|
|
86
|
+
// Если значение — простой объект, оборачиваем его в ещё один прокси, чтобы
|
|
87
|
+
// продолжать отслеживать более глубокие чтения, например values.user.address.city.
|
|
88
|
+
// Массивы и Date считаются листовыми значениями (не рекурсируем).
|
|
89
|
+
if (val !== null && typeof val === "object" && !Array.isArray(val) && !(val instanceof Date)) {
|
|
90
|
+
return buildValuesProxy(val, fullPath);
|
|
91
|
+
}
|
|
92
|
+
// Чтение листа — записываем путь, чтобы резолвер мог быть перезапущен позже,
|
|
93
|
+
// когда это конкретное значение изменится в хранилище.
|
|
94
|
+
accessedPaths.add(fullPath);
|
|
95
|
+
return val;
|
|
96
|
+
},
|
|
97
|
+
// ─── SET-ловушка ──────────────────────────────────────────────────────
|
|
98
|
+
// Перехватывает каждое присваивание. Вместо мутации реального объекта значений
|
|
99
|
+
// помещаем дескриптор PendingWrite в буфер.
|
|
100
|
+
//
|
|
101
|
+
// Запись намеренно откладывается:
|
|
102
|
+
// 1. Резолвер может выполнить несколько записей подряд; сначала собираем все.
|
|
103
|
+
// 2. applyPendingWrites() вызывается после возврата резолвера, поэтому все
|
|
104
|
+
// мутации применяются атомарно за один вызов applyPatch().
|
|
105
|
+
// 3. Это не позволяет резолверу наблюдать собственные частично применённые записи.
|
|
106
|
+
set(_t, key, newValue) {
|
|
107
|
+
if (typeof key === "symbol")
|
|
108
|
+
return false;
|
|
109
|
+
const fullPath = parentPath ? `${parentPath}.${key}` : key;
|
|
110
|
+
// Буферизируем запись — реальное хранилище пока не трогаем.
|
|
111
|
+
pendingWrites.push({ path: fullPath, value: newValue });
|
|
112
|
+
// Возврат true сообщает Proxy, что присваивание «принято»
|
|
113
|
+
// (предотвращает TypeError в strict-режиме, несмотря на отсутствие реальной мутации).
|
|
114
|
+
return true;
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
proxyCache.set(cacheKey, p);
|
|
118
|
+
return p;
|
|
119
|
+
}
|
|
120
|
+
// Строим прокси корневого уровня (parentPath = "" означает отсутствие префикса).
|
|
121
|
+
const proxy = buildValuesProxy(values, "");
|
|
122
|
+
return {
|
|
123
|
+
proxy,
|
|
124
|
+
getAccessedPaths: () => accessedPaths,
|
|
125
|
+
getPendingWrites: () => pendingWrites,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=createValuesTrackingProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createValuesTrackingProxy.js","sourceRoot":"","sources":["../../../store/resolvePipeline/createValuesTrackingProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AA8BH;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA+B;IAE/B,2DAA2D;IAC3D,2EAA2E;IAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,2EAA2E;IAC3E,kFAAkF;IAClF,iGAAiG;IACjG,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,+EAA+E;IAC/E,6EAA6E;IAC7E,yFAAyF;IACzF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE9C;;;;;OAKG;IACH,SAAS,gBAAgB,CAAC,MAA+B,EAAE,UAAkB;QAC3E,2FAA2F;QAC3F,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,UAAU,IAAI,UAAU,CAAC;QAC1C,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAA4B,CAAC;QAEzF,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;YAC1B,yEAAyE;YACzE,+EAA+E;YAC/E,6EAA6E;YAC7E,6DAA6D;YAC7D,kFAAkF;YAClF,GAAG,CAAC,EAAE,EAAE,GAAoB;gBAC1B,+EAA+E;gBAC/E,sEAAsE;gBACtE,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBAE9C,wGAAwG;gBACxG,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAExB,2EAA2E;gBAC3E,mFAAmF;gBACnF,kEAAkE;gBAClE,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;oBAC7F,OAAO,gBAAgB,CAAC,GAA8B,EAAE,QAAQ,CAAC,CAAC;gBACpE,CAAC;gBAED,6EAA6E;gBAC7E,uDAAuD;gBACvD,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO,GAAG,CAAC;YACb,CAAC;YAED,yEAAyE;YACzE,+EAA+E;YAC/E,4CAA4C;YAC5C,EAAE;YACF,kCAAkC;YAClC,gFAAgF;YAChF,6EAA6E;YAC7E,gEAAgE;YAChE,qFAAqF;YACrF,GAAG,CAAC,EAAE,EAAE,GAAoB,EAAE,QAAiB;gBAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAE1C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3D,4DAA4D;gBAC5D,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxD,0DAA0D;gBAC1D,sFAAsF;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAA4B,CAAC;IACtC,CAAC;IAED,iFAAiF;IACjF,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK;QACL,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EntityNode } from "../entityRegistry/types";
|
|
2
|
+
import type { ResolveDeps } from "./types";
|
|
3
|
+
import { EntityResolveStateMap } from "./types";
|
|
4
|
+
import type { TemplateFieldResolveEntry } from "./initResolveStates";
|
|
5
|
+
/**
|
|
6
|
+
* Dependencies for executeEntityFieldResolve.
|
|
7
|
+
* Extends ResolveDeps with entity-specific state map.
|
|
8
|
+
*/
|
|
9
|
+
export interface EntityFieldResolveDeps extends ResolveDeps {
|
|
10
|
+
/** Per-entity field resolve states: (entityId, templateFieldNode) → ResolveState. */
|
|
11
|
+
entityStates: EntityResolveStateMap;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Execute a per-entity field resolve.
|
|
15
|
+
*
|
|
16
|
+
* Pipeline:
|
|
17
|
+
* 1. Get/create ResolveState in entityStates
|
|
18
|
+
* 2. Set status = pending, loading = true on entity leaf nodeState → recomputeAndNotify
|
|
19
|
+
* 3. Build entity values via buildEntityValuesFromNode → wrap in tracking proxy
|
|
20
|
+
* 4. Wrap store.context in context-tracking proxy for auto context-deps
|
|
21
|
+
* 5. Call resolve.resolver(entityValues, storeProxy)
|
|
22
|
+
* 6. On success: write result to entity leaf (nodeState + entityNode.field.value)
|
|
23
|
+
* Set status = resolved, save auto-deps, recomputeAndNotify
|
|
24
|
+
* 7. On error (after all retries): call onError, set status = error, recomputeAndNotify
|
|
25
|
+
* 8. Retry logic from resolve.options.retry
|
|
26
|
+
* 9. pendingRetrigger support
|
|
27
|
+
*/
|
|
28
|
+
export declare function executeEntityFieldResolve(entityId: string, entry: TemplateFieldResolveEntry, entityNode: EntityNode, deps: EntityFieldResolveDeps): Promise<unknown>;
|
|
29
|
+
//# sourceMappingURL=executeEntityFieldResolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeEntityFieldResolve.d.ts","sourceRoot":"","sources":["../../../store/resolvePipeline/executeEntityFieldResolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,yBAAyB,CAAC;AAK3F,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAKrE;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,qFAAqF;IACrF,YAAY,EAAE,qBAAqB,CAAC;CACrC;AA8BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAwNlB"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { recomputeAndNotify } from "../compute/recompute";
|
|
2
|
+
import { storeValue } from "../writePipeline/storeValue";
|
|
3
|
+
import { createValuesTrackingProxy } from "./createValuesTrackingProxy";
|
|
4
|
+
import { createContextTrackingProxy } from "./createContextTrackingProxy";
|
|
5
|
+
import { isLeafNode } from "../traversal";
|
|
6
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
7
|
+
/**
|
|
8
|
+
* Build a flat values object from an entity node, reading current values
|
|
9
|
+
* from nodeState where available (same as buildEntityValues in buildEntityProjectionProxy).
|
|
10
|
+
*/
|
|
11
|
+
function buildEntityValuesFromNode(entityNode, nodeState) {
|
|
12
|
+
const values = {};
|
|
13
|
+
for (const key of Object.keys(entityNode)) {
|
|
14
|
+
const field = entityNode[key];
|
|
15
|
+
if (field && typeof field === "object") {
|
|
16
|
+
if (isLeafNode(field)) {
|
|
17
|
+
values[key] =
|
|
18
|
+
nodeState.get(field)?.value ??
|
|
19
|
+
field.value;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
values[key] = buildEntityValuesFromNode(field, nodeState);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return values;
|
|
27
|
+
}
|
|
28
|
+
// ─── Core execution ───────────────────────────────────────────────────────────
|
|
29
|
+
/**
|
|
30
|
+
* Execute a per-entity field resolve.
|
|
31
|
+
*
|
|
32
|
+
* Pipeline:
|
|
33
|
+
* 1. Get/create ResolveState in entityStates
|
|
34
|
+
* 2. Set status = pending, loading = true on entity leaf nodeState → recomputeAndNotify
|
|
35
|
+
* 3. Build entity values via buildEntityValuesFromNode → wrap in tracking proxy
|
|
36
|
+
* 4. Wrap store.context in context-tracking proxy for auto context-deps
|
|
37
|
+
* 5. Call resolve.resolver(entityValues, storeProxy)
|
|
38
|
+
* 6. On success: write result to entity leaf (nodeState + entityNode.field.value)
|
|
39
|
+
* Set status = resolved, save auto-deps, recomputeAndNotify
|
|
40
|
+
* 7. On error (after all retries): call onError, set status = error, recomputeAndNotify
|
|
41
|
+
* 8. Retry logic from resolve.options.retry
|
|
42
|
+
* 9. pendingRetrigger support
|
|
43
|
+
*/
|
|
44
|
+
export function executeEntityFieldResolve(entityId, entry, entityNode, deps) {
|
|
45
|
+
const { nodeState, recompute, notifyChanged, notify, store, valuesCache, initialValueMap, entityStates, } = deps;
|
|
46
|
+
const { node: templateFieldNode, resolve, fieldKey } = entry;
|
|
47
|
+
const state = entityStates.getOrCreate(entityId, templateFieldNode, new Set(resolve.deps ?? []));
|
|
48
|
+
// Deduplication: already running
|
|
49
|
+
if (state.status === "pending" && state.promise) {
|
|
50
|
+
return state.promise;
|
|
51
|
+
}
|
|
52
|
+
// Set state to pending
|
|
53
|
+
state.status = "pending";
|
|
54
|
+
state.attempt = 0;
|
|
55
|
+
state.error = null;
|
|
56
|
+
// Get entity leaf node for this field
|
|
57
|
+
const entityLeafField = entityNode[fieldKey];
|
|
58
|
+
const entityLeaf = entityLeafField && typeof entityLeafField === "object" && isLeafNode(entityLeafField)
|
|
59
|
+
? entityLeafField
|
|
60
|
+
: null;
|
|
61
|
+
// Set loading = true in entity leaf nodeState
|
|
62
|
+
if (entityLeaf) {
|
|
63
|
+
const leafState = nodeState.get(entityLeaf);
|
|
64
|
+
if (leafState) {
|
|
65
|
+
nodeState.set(entityLeaf, { ...leafState, loading: true });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Notify: loading changed (entity leaf status changed to pending)
|
|
69
|
+
const loadingChanged = new Set();
|
|
70
|
+
if (entityLeaf)
|
|
71
|
+
loadingChanged.add(entityLeaf);
|
|
72
|
+
loadingChanged.add(templateFieldNode);
|
|
73
|
+
recomputeAndNotify(loadingChanged, recompute, notifyChanged);
|
|
74
|
+
// Retry options
|
|
75
|
+
const retryOpts = resolve.options?.retry ?? { attempts: 0, delay: 1000 };
|
|
76
|
+
const maxAttempts = retryOpts.attempts;
|
|
77
|
+
const retryDelay = retryOpts.delay ?? 1000;
|
|
78
|
+
const promise = (async () => {
|
|
79
|
+
let lastError;
|
|
80
|
+
let contextTracking = null;
|
|
81
|
+
for (let attempt = 0; attempt <= maxAttempts; attempt++) {
|
|
82
|
+
state.attempt = attempt;
|
|
83
|
+
// Wait before retry (not on first attempt)
|
|
84
|
+
if (attempt > 0) {
|
|
85
|
+
await new Promise((r) => setTimeout(r, retryDelay));
|
|
86
|
+
// If status changed while waiting (e.g. reset) — abort
|
|
87
|
+
if (state.status !== "pending")
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Build current entity values and wrap in tracking proxy for auto-deps
|
|
92
|
+
const entityValues = buildEntityValuesFromNode(entityNode, nodeState);
|
|
93
|
+
const tracking = createValuesTrackingProxy(entityValues);
|
|
94
|
+
// Wrap store.context in tracking proxy for context auto-deps
|
|
95
|
+
contextTracking = createContextTrackingProxy(store.context);
|
|
96
|
+
const storeProxy = new Proxy(store, {
|
|
97
|
+
get(target, key) {
|
|
98
|
+
if (key === "context")
|
|
99
|
+
return contextTracking.proxy;
|
|
100
|
+
return target[key];
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
const result = await resolve.resolver(tracking.proxy, storeProxy);
|
|
104
|
+
// If status changed while awaiting — abort (e.g. reset, delete entity)
|
|
105
|
+
if (state.status !== "pending")
|
|
106
|
+
return result;
|
|
107
|
+
// ── Success path ────────────────────────────────────────────────────
|
|
108
|
+
const changed = new Set();
|
|
109
|
+
if (entityLeaf)
|
|
110
|
+
changed.add(entityLeaf);
|
|
111
|
+
changed.add(templateFieldNode);
|
|
112
|
+
// Write resolved value to entity leaf
|
|
113
|
+
if (entityLeaf !== null && result !== undefined) {
|
|
114
|
+
// Update entityNode.field.value (keeps entity node in sync)
|
|
115
|
+
entityLeaf.value = result;
|
|
116
|
+
// Update nodeState and valuesCache (via storeValue)
|
|
117
|
+
storeValue(entityLeaf, result, nodeState, valuesCache);
|
|
118
|
+
// Seed initialValueMap so the resolved value becomes the dirty baseline.
|
|
119
|
+
// Without this, the field would immediately appear dirty after resolve.
|
|
120
|
+
initialValueMap.set(entityLeaf, result);
|
|
121
|
+
}
|
|
122
|
+
else if (entityLeaf === null && result !== undefined) {
|
|
123
|
+
// The entity doesn't have this field yet (e.g. bio is in editUser template
|
|
124
|
+
// but not in the users list template). Use store._setEntitiesRaw to create
|
|
125
|
+
// the leaf on the entity and register it in nodeState + valuesCache.
|
|
126
|
+
const storeRef = store;
|
|
127
|
+
if (typeof storeRef._setEntitiesRaw === "function") {
|
|
128
|
+
const newlyChanged = storeRef._setEntitiesRaw([{ id: entityId, [fieldKey]: result }]);
|
|
129
|
+
for (const n of newlyChanged)
|
|
130
|
+
changed.add(n);
|
|
131
|
+
// Re-read entityLeaf now that the field exists in the entity
|
|
132
|
+
const freshLeaf = entityNode[fieldKey];
|
|
133
|
+
if (freshLeaf && typeof freshLeaf === "object" && isLeafNode(freshLeaf)) {
|
|
134
|
+
initialValueMap.set(freshLeaf, result);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Clear loading from entity leaf nodeState
|
|
139
|
+
if (entityLeaf) {
|
|
140
|
+
const leafState = nodeState.get(entityLeaf);
|
|
141
|
+
if (leafState) {
|
|
142
|
+
nodeState.set(entityLeaf, { ...leafState, loading: false });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Update resolve state
|
|
146
|
+
state.status = "resolved";
|
|
147
|
+
state.error = null;
|
|
148
|
+
// Save auto-deps (entity-relative paths + context deps)
|
|
149
|
+
const accessedPaths = tracking.getAccessedPaths();
|
|
150
|
+
const mergedDeps = new Set(resolve.deps ?? []);
|
|
151
|
+
for (const p of accessedPaths)
|
|
152
|
+
mergedDeps.add(p);
|
|
153
|
+
for (const key of contextTracking.getAccessedKeys()) {
|
|
154
|
+
mergedDeps.add(`$context.${key}`);
|
|
155
|
+
}
|
|
156
|
+
state.dependencies = mergedDeps;
|
|
157
|
+
// Recompute + notify (once)
|
|
158
|
+
recomputeAndNotify(changed, recompute, notifyChanged);
|
|
159
|
+
// If a dep changed while pending — retrigger immediately
|
|
160
|
+
if (state.pendingRetrigger) {
|
|
161
|
+
state.pendingRetrigger = false;
|
|
162
|
+
state.status = "idle";
|
|
163
|
+
state.promise = null;
|
|
164
|
+
executeEntityFieldResolve(entityId, entry, entityNode, deps);
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
lastError = err;
|
|
170
|
+
// Continue to next attempt
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ── Error path (all retries exhausted) ──────────────────────────────────
|
|
174
|
+
if (state.status !== "pending")
|
|
175
|
+
return; // aborted externally
|
|
176
|
+
const changed = new Set();
|
|
177
|
+
if (entityLeaf)
|
|
178
|
+
changed.add(entityLeaf);
|
|
179
|
+
changed.add(templateFieldNode);
|
|
180
|
+
// Clear loading from entity leaf nodeState
|
|
181
|
+
if (entityLeaf) {
|
|
182
|
+
const leafState = nodeState.get(entityLeaf);
|
|
183
|
+
if (leafState) {
|
|
184
|
+
nodeState.set(entityLeaf, { ...leafState, loading: false });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
state.status = "error";
|
|
188
|
+
state.error = lastError;
|
|
189
|
+
// Save context deps even on error (for retrigger on setContext)
|
|
190
|
+
if (contextTracking && contextTracking.getAccessedKeys().size > 0) {
|
|
191
|
+
const mergedDeps = new Set(resolve.deps ?? []);
|
|
192
|
+
for (const key of contextTracking.getAccessedKeys()) {
|
|
193
|
+
mergedDeps.add(`$context.${key}`);
|
|
194
|
+
}
|
|
195
|
+
state.dependencies = mergedDeps;
|
|
196
|
+
}
|
|
197
|
+
// Call error handler
|
|
198
|
+
try {
|
|
199
|
+
resolve.onError(lastError, { notify });
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// onError must not throw — suppress if it does
|
|
203
|
+
}
|
|
204
|
+
// Recompute + notify
|
|
205
|
+
recomputeAndNotify(changed, recompute, notifyChanged);
|
|
206
|
+
// If a dep changed while pending — retrigger immediately
|
|
207
|
+
if (state.pendingRetrigger) {
|
|
208
|
+
state.pendingRetrigger = false;
|
|
209
|
+
state.status = "idle";
|
|
210
|
+
state.promise = null;
|
|
211
|
+
executeEntityFieldResolve(entityId, entry, entityNode, deps);
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
})();
|
|
215
|
+
state.promise = promise;
|
|
216
|
+
return promise;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=executeEntityFieldResolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeEntityFieldResolve.js","sourceRoot":"","sources":["../../../store/resolvePipeline/executeEntityFieldResolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { EntityData } from "../entityRegistry";
|
|
2
|
+
import type { ListResolveConfig, ListState } from "../store/types";
|
|
3
|
+
import type { ResolveDeps } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Дополнительные зависимости для executeListResolve.
|
|
6
|
+
* Расширяет ResolveDeps с list-специфичными колбэками.
|
|
7
|
+
*/
|
|
8
|
+
export interface ListResolveDeps extends ResolveDeps {
|
|
9
|
+
/**
|
|
10
|
+
* Upsert entities в EntityRegistry + зарегистрировать leaf-ноды.
|
|
11
|
+
* Не вызывает recompute/notifyChanged — они вызываются после.
|
|
12
|
+
* Возвращает Set изменённых leaf-нод.
|
|
13
|
+
* Phase 4: listNode передаётся для автоматического запуска entity field resolves.
|
|
14
|
+
*/
|
|
15
|
+
setEntitiesRaw: (items: EntityData[], listNode?: object) => Set<object>;
|
|
16
|
+
/**
|
|
17
|
+
* Синхронизировать valuesCache с составом списка (единый метод, root + entity).
|
|
18
|
+
* Вызывается после обновления listState.itemIds.
|
|
19
|
+
*/
|
|
20
|
+
syncListValuesCache: (listState: ListState) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Запустить resolve для ListNode.
|
|
24
|
+
*
|
|
25
|
+
* Отличается от executeResolve (для групп):
|
|
26
|
+
* - resolver возвращает Array<EntityData> вместо Record<string, unknown>
|
|
27
|
+
* - Результат → upsert entities + обновление listState.itemIds
|
|
28
|
+
* - initialItemIds обновляется при успехе → dirty = false после resolve
|
|
29
|
+
* - loading state хранится в nodeState для listNode (создаётся на лету)
|
|
30
|
+
*/
|
|
31
|
+
export declare function executeListResolve(listNode: object, resolve: ListResolveConfig, listState: ListState, deps: ListResolveDeps): Promise<unknown>;
|
|
32
|
+
//# sourceMappingURL=executeListResolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeListResolve.d.ts","sourceRoot":"","sources":["../../../store/resolvePipeline/executeListResolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD;;;;;OAKG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAExE;;;OAGG;IACH,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CACrD;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,OAAO,CAAC,CA6JlB"}
|