mobx-keystone 0.67.4 → 0.68.1-alpha
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/CHANGELOG.md +8 -0
- package/dist/_virtual/_tslib.mjs +12 -0
- package/dist/mobx-keystone.umd.js +5339 -5261
- package/dist/model/utils.d.ts +1 -1
- package/dist/node_modules/fast-deep-equal/es6/index.mjs +68 -0
- package/dist/node_modules/nanoid/non-secure/index.mjs +11 -0
- package/dist/snapshot/index.d.ts +0 -8
- package/dist/{dataModel/_BaseDataModel.d.ts → snapshot/registerDefaultReconcilers.d.ts} +0 -0
- package/dist/{model/_BaseModel.d.ts → snapshot/registerDefaultSnapshotters.d.ts} +0 -0
- package/dist/src/action/actionDecoratorUtils.mjs +25 -0
- package/dist/src/action/applyAction.mjs +54 -0
- package/dist/src/action/applyDelete.mjs +20 -0
- package/dist/src/action/applyMethodCall.mjs +19 -0
- package/dist/src/action/applySet.mjs +25 -0
- package/dist/src/action/builtInActions.mjs +15 -0
- package/dist/src/action/context.mjs +22 -0
- package/dist/src/action/hookActions.mjs +13 -0
- package/dist/src/action/isModelAction.mjs +6 -0
- package/dist/src/action/middleware.mjs +84 -0
- package/dist/src/action/modelAction.mjs +34 -0
- package/dist/src/action/modelFlow.mjs +251 -0
- package/dist/src/action/pendingActions.mjs +30 -0
- package/dist/src/action/protection.mjs +19 -0
- package/dist/src/action/runUnprotected.mjs +24 -0
- package/dist/src/action/wrapInAction.mjs +90 -0
- package/dist/src/actionMiddlewares/actionSerialization/actionSerialization.mjs +131 -0
- package/dist/src/actionMiddlewares/actionSerialization/applySerializedAction.mjs +110 -0
- package/dist/src/actionMiddlewares/actionSerialization/arraySerializer.mjs +15 -0
- package/dist/src/actionMiddlewares/actionSerialization/core.mjs +3 -0
- package/dist/src/actionMiddlewares/actionSerialization/dateSerializer.mjs +15 -0
- package/dist/src/actionMiddlewares/actionSerialization/mapSerializer.mjs +32 -0
- package/dist/src/actionMiddlewares/actionSerialization/objectPathSerializer.mjs +33 -0
- package/dist/src/actionMiddlewares/actionSerialization/objectSnapshotSerializer.mjs +18 -0
- package/dist/src/actionMiddlewares/actionSerialization/plainObjectSerializer.mjs +27 -0
- package/dist/src/actionMiddlewares/actionSerialization/primitiveSerializer.mjs +39 -0
- package/dist/src/actionMiddlewares/actionSerialization/setSerializer.mjs +29 -0
- package/dist/src/actionMiddlewares/actionTrackingMiddleware.mjs +239 -0
- package/dist/src/actionMiddlewares/onActionMiddleware.mjs +44 -0
- package/dist/src/actionMiddlewares/readonlyMiddleware.mjs +49 -0
- package/dist/src/actionMiddlewares/transactionMiddleware.mjs +69 -0
- package/dist/src/actionMiddlewares/undoMiddleware.mjs +472 -0
- package/dist/src/actionMiddlewares/utils.mjs +25 -0
- package/dist/src/computedTree/computedTree.mjs +63 -0
- package/dist/src/context/context.mjs +141 -0
- package/dist/src/dataModel/BaseDataModel.mjs +108 -0
- package/dist/src/dataModel/DataModel.mjs +32 -0
- package/dist/src/dataModel/actions.mjs +12 -0
- package/dist/src/dataModel/getDataModelMetadata.mjs +14 -0
- package/dist/src/dataModel/newDataModel.mjs +31 -0
- package/dist/src/dataModel/utils.mjs +29 -0
- package/dist/src/frozen/Frozen.mjs +68 -0
- package/dist/src/globalConfig/globalConfig.mjs +57 -0
- package/dist/src/index.mjs +97 -0
- package/dist/src/model/BaseModel.mjs +118 -0
- package/dist/src/model/Model.mjs +36 -0
- package/dist/src/model/getModelMetadata.mjs +19 -0
- package/dist/src/model/metadata.mjs +7 -0
- package/dist/src/model/newModel.mjs +95 -0
- package/dist/src/model/utils.mjs +33 -0
- package/dist/src/modelShared/BaseModelShared.mjs +9 -0
- package/dist/src/modelShared/Model.mjs +249 -0
- package/dist/src/modelShared/checkModelDecoratorArgs.mjs +21 -0
- package/dist/src/modelShared/modelClassInitializer.mjs +14 -0
- package/dist/src/modelShared/modelDecorator.mjs +117 -0
- package/dist/src/modelShared/modelInfo.mjs +7 -0
- package/dist/src/modelShared/modelPropsInfo.mjs +9 -0
- package/dist/src/modelShared/modelSymbols.mjs +5 -0
- package/dist/src/modelShared/newModel.mjs +13 -0
- package/dist/src/modelShared/prop.mjs +138 -0
- package/dist/src/modelShared/utils.mjs +10 -0
- package/dist/src/parent/core.mjs +34 -0
- package/dist/src/parent/coreObjectChildren.mjs +98 -0
- package/dist/src/parent/detach.mjs +32 -0
- package/dist/src/parent/findChildren.mjs +16 -0
- package/dist/src/parent/findParent.mjs +30 -0
- package/dist/src/parent/getChildrenObjects.mjs +12 -0
- package/dist/src/parent/onChildAttachedTo.mjs +101 -0
- package/dist/src/parent/path.mjs +149 -0
- package/dist/src/parent/path2.mjs +12 -0
- package/dist/src/parent/setParent.mjs +83 -0
- package/dist/src/parent/walkTree.mjs +104 -0
- package/dist/src/patch/applyPatches.mjs +118 -0
- package/dist/src/patch/emitPatch.mjs +100 -0
- package/dist/src/patch/jsonPatch.mjs +60 -0
- package/dist/src/patch/patchRecorder.mjs +75 -0
- package/dist/src/redux/connectReduxDevTools.mjs +153 -0
- package/dist/src/redux/redux.mjs +60 -0
- package/dist/src/ref/Ref.mjs +38 -0
- package/dist/src/ref/core.mjs +179 -0
- package/dist/src/ref/customRef.mjs +9 -0
- package/dist/src/ref/rootRef.mjs +34 -0
- package/dist/src/rootStore/attachDetach.mjs +53 -0
- package/dist/src/rootStore/rootStore.mjs +50 -0
- package/dist/src/snapshot/SnapshotterAndReconcilerPriority.mjs +9 -0
- package/dist/src/snapshot/applySnapshot.mjs +92 -0
- package/dist/src/snapshot/clone.mjs +29 -0
- package/dist/src/snapshot/fromArraySnapshot.mjs +23 -0
- package/dist/src/snapshot/fromFrozenSnapshot.mjs +13 -0
- package/dist/src/snapshot/fromModelSnapshot.mjs +38 -0
- package/dist/src/snapshot/fromPlainObjectSnapshot.mjs +26 -0
- package/dist/src/snapshot/fromSnapshot.mjs +91 -0
- package/dist/src/snapshot/getSnapshot.mjs +27 -0
- package/dist/src/snapshot/internal.mjs +97 -0
- package/dist/src/snapshot/onSnapshot.mjs +16 -0
- package/dist/src/snapshot/reconcileArraySnapshot.mjs +40 -0
- package/dist/src/snapshot/reconcileFrozenSnapshot.mjs +19 -0
- package/dist/src/snapshot/reconcileModelSnapshot.mjs +77 -0
- package/dist/src/snapshot/reconcilePlainObjectSnapshot.mjs +47 -0
- package/dist/src/snapshot/reconcileSnapshot.mjs +49 -0
- package/dist/src/snapshot/registerDefaultReconcilers.mjs +17 -0
- package/dist/src/snapshot/registerDefaultSnapshotters.mjs +17 -0
- package/dist/src/standardActions/actions.mjs +35 -0
- package/dist/src/standardActions/arrayActions.mjs +66 -0
- package/dist/src/standardActions/objectActions.mjs +36 -0
- package/dist/src/standardActions/standaloneActions.mjs +9 -0
- package/dist/src/transforms/ImmutableDate.mjs +51 -0
- package/dist/src/transforms/asMap.mjs +29 -0
- package/dist/src/transforms/asSet.mjs +12 -0
- package/dist/src/transforms/bigint.mjs +14 -0
- package/dist/src/transforms/date.mjs +27 -0
- package/dist/src/treeUtils/deepEquals.mjs +40 -0
- package/dist/src/treeUtils/draft.mjs +116 -0
- package/dist/src/treeUtils/sandbox.mjs +158 -0
- package/dist/src/tweaker/TweakerPriority.mjs +9 -0
- package/dist/src/tweaker/core.mjs +38 -0
- package/dist/src/tweaker/registerDefaultTweakers.mjs +17 -0
- package/dist/src/tweaker/tweak.mjs +109 -0
- package/dist/src/tweaker/tweakArray.mjs +272 -0
- package/dist/src/tweaker/tweakFrozen.mjs +28 -0
- package/dist/src/tweaker/tweakModel.mjs +26 -0
- package/dist/src/tweaker/tweakPlainObject.mjs +205 -0
- package/dist/src/tweaker/typeChecking.mjs +46 -0
- package/dist/src/tweaker/withoutTypeChecking.mjs +15 -0
- package/dist/src/types/TypeCheckError.mjs +31 -0
- package/dist/src/types/TypeChecker.mjs +165 -0
- package/dist/src/types/arrayBased/array.mjs +68 -0
- package/dist/src/types/arrayBased/tuple.mjs +71 -0
- package/dist/src/types/getTypeInfo.mjs +12 -0
- package/dist/src/types/objectBased/arraySet.mjs +83 -0
- package/dist/src/types/objectBased/dataModelData.mjs +95 -0
- package/dist/src/types/objectBased/model.mjs +133 -0
- package/dist/src/types/objectBased/object.mjs +119 -0
- package/dist/src/types/objectBased/objectMap.mjs +90 -0
- package/dist/src/types/objectBased/record.mjs +80 -0
- package/dist/src/types/objectBased/ref.mjs +62 -0
- package/dist/src/types/primitiveBased/enum.mjs +20 -0
- package/dist/src/types/primitiveBased/primitives.mjs +59 -0
- package/dist/src/types/primitiveBased/refinedPrimitives.mjs +6 -0
- package/dist/src/types/registerDefaultStandardTypeResolvers.mjs +13 -0
- package/dist/src/types/resolveTypeChecker.mjs +52 -0
- package/dist/src/types/tProp.mjs +53 -0
- package/dist/src/types/typeCheck.mjs +11 -0
- package/dist/src/types/types.mjs +69 -0
- package/dist/src/types/utility/maybe.mjs +10 -0
- package/dist/src/types/utility/or.mjs +99 -0
- package/dist/src/types/utility/refinement.mjs +52 -0
- package/dist/src/types/utility/unchecked.mjs +10 -0
- package/dist/src/utils/ModelPool.mjs +50 -0
- package/dist/src/utils/chainFns.mjs +15 -0
- package/dist/src/utils/index.mjs +228 -0
- package/dist/src/utils/mapUtils.mjs +10 -0
- package/dist/src/utils/tag.mjs +16 -0
- package/dist/src/wrappers/ArraySet.mjs +85 -0
- package/dist/src/wrappers/ObjectMap.mjs +96 -0
- package/dist/src/wrappers/asMap.mjs +181 -0
- package/dist/src/wrappers/asSet.mjs +97 -0
- package/dist/tweaker/index.d.ts +0 -4
- package/dist/tweaker/registerDefaultTweakers.d.ts +1 -0
- package/dist/types/registerDefaultStandardTypeResolvers.d.ts +1 -0
- package/package.json +12 -14
- package/src/actionMiddlewares/actionSerialization/actionSerialization.ts +24 -9
- package/src/dataModel/BaseDataModel.ts +0 -3
- package/src/dataModel/utils.ts +4 -4
- package/src/dist/action/actionDecoratorUtils.d.ts +5 -0
- package/src/dist/action/applyAction.d.ts +36 -0
- package/src/dist/action/applyDelete.d.ts +7 -0
- package/src/dist/action/applyMethodCall.d.ts +9 -0
- package/src/dist/action/applySet.d.ts +8 -0
- package/src/dist/action/builtInActions.d.ts +39 -0
- package/src/dist/action/context.d.ts +85 -0
- package/src/dist/action/hookActions.d.ts +32 -0
- package/src/dist/action/index.d.ts +12 -0
- package/src/dist/action/isModelAction.d.ts +7 -0
- package/src/dist/action/middleware.d.ts +34 -0
- package/src/dist/action/modelAction.d.ts +9 -0
- package/src/dist/action/modelFlow.d.ts +34 -0
- package/src/dist/action/pendingActions.d.ts +1 -0
- package/src/dist/action/protection.d.ts +1 -0
- package/src/dist/action/runUnprotected.d.ts +19 -0
- package/src/dist/action/wrapInAction.d.ts +1 -0
- package/src/dist/actionMiddlewares/actionSerialization/actionSerialization.d.ts +84 -0
- package/src/dist/actionMiddlewares/actionSerialization/applySerializedAction.d.ts +45 -0
- package/src/dist/actionMiddlewares/actionSerialization/arraySerializer.d.ts +3 -0
- package/src/dist/actionMiddlewares/actionSerialization/core.d.ts +28 -0
- package/src/dist/actionMiddlewares/actionSerialization/dateSerializer.d.ts +2 -0
- package/src/dist/actionMiddlewares/actionSerialization/index.d.ts +3 -0
- package/src/dist/actionMiddlewares/actionSerialization/mapSerializer.d.ts +6 -0
- package/src/dist/actionMiddlewares/actionSerialization/objectPathSerializer.d.ts +8 -0
- package/src/dist/actionMiddlewares/actionSerialization/objectSnapshotSerializer.d.ts +2 -0
- package/src/dist/actionMiddlewares/actionSerialization/plainObjectSerializer.d.ts +2 -0
- package/src/dist/actionMiddlewares/actionSerialization/primitiveSerializer.d.ts +2 -0
- package/src/dist/actionMiddlewares/actionSerialization/setSerializer.d.ts +3 -0
- package/src/dist/actionMiddlewares/actionTrackingMiddleware.d.ts +122 -0
- package/src/dist/actionMiddlewares/index.d.ts +6 -0
- package/src/dist/actionMiddlewares/onActionMiddleware.d.ts +26 -0
- package/src/dist/actionMiddlewares/readonlyMiddleware.d.ts +35 -0
- package/src/dist/actionMiddlewares/transactionMiddleware.d.ts +21 -0
- package/src/dist/actionMiddlewares/undoMiddleware.d.ts +283 -0
- package/src/dist/actionMiddlewares/utils.d.ts +1 -0
- package/src/dist/computedTree/computedTree.d.ts +16 -0
- package/src/dist/computedTree/index.d.ts +1 -0
- package/src/dist/context/context.d.ts +84 -0
- package/src/dist/context/index.d.ts +1 -0
- package/src/dist/dataModel/BaseDataModel.d.ts +52 -0
- package/src/dist/dataModel/DataModel.d.ts +47 -0
- package/src/dist/dataModel/DataModelConstructorOptions.d.ts +1 -0
- package/src/dist/dataModel/actions.d.ts +1 -0
- package/src/dist/dataModel/getDataModelMetadata.d.ts +19 -0
- package/src/dist/dataModel/index.d.ts +4 -0
- package/src/dist/dataModel/newDataModel.d.ts +1 -0
- package/src/dist/dataModel/utils.d.ts +8 -0
- package/src/dist/frozen/Frozen.d.ts +50 -0
- package/src/dist/frozen/index.d.ts +1 -0
- package/src/dist/globalConfig/globalConfig.d.ts +51 -0
- package/src/dist/globalConfig/index.d.ts +1 -0
- package/src/dist/index.d.ts +23 -0
- package/src/dist/mobx-keystone.umd.js +8201 -0
- package/src/dist/model/BaseModel.d.ts +125 -0
- package/src/dist/model/Model.d.ts +94 -0
- package/src/dist/model/ModelConstructorOptions.d.ts +1 -0
- package/src/dist/model/getModelMetadata.d.ts +27 -0
- package/src/dist/model/index.d.ts +5 -0
- package/src/dist/model/metadata.d.ts +8 -0
- package/src/dist/model/newModel.d.ts +1 -0
- package/src/dist/model/utils.d.ts +8 -0
- package/src/dist/modelShared/BaseModelShared.d.ts +76 -0
- package/src/dist/modelShared/Model.d.ts +15 -0
- package/src/dist/modelShared/checkModelDecoratorArgs.d.ts +1 -0
- package/src/dist/modelShared/index.d.ts +3 -0
- package/src/dist/modelShared/modelClassInitializer.d.ts +1 -0
- package/src/dist/modelShared/modelDecorator.d.ts +24 -0
- package/src/dist/modelShared/modelInfo.d.ts +1 -0
- package/src/dist/modelShared/modelPropsInfo.d.ts +1 -0
- package/src/dist/modelShared/modelSymbols.d.ts +3 -0
- package/src/dist/modelShared/newModel.d.ts +4 -0
- package/src/dist/modelShared/prop.d.ts +179 -0
- package/src/dist/modelShared/utils.d.ts +1 -0
- package/src/dist/parent/core.d.ts +1 -0
- package/src/dist/parent/coreObjectChildren.d.ts +1 -0
- package/src/dist/parent/detach.d.ts +9 -0
- package/src/dist/parent/findChildren.d.ts +13 -0
- package/src/dist/parent/findParent.d.ts +41 -0
- package/src/dist/parent/getChildrenObjects.d.ts +11 -0
- package/src/dist/parent/index.d.ts +9 -0
- package/src/dist/parent/onChildAttachedTo.d.ts +22 -0
- package/src/dist/parent/path.d.ts +107 -0
- package/src/dist/parent/path2.d.ts +16 -0
- package/src/dist/parent/pathTypes.d.ts +12 -0
- package/src/dist/parent/setParent.d.ts +1 -0
- package/src/dist/parent/walkTree.d.ts +25 -0
- package/src/dist/patch/Patch.d.ts +16 -0
- package/src/dist/patch/applyPatches.d.ts +9 -0
- package/src/dist/patch/emitPatch.d.ts +29 -0
- package/src/dist/patch/index.d.ts +5 -0
- package/src/dist/patch/jsonPatch.d.ts +45 -0
- package/src/dist/patch/patchRecorder.d.ts +70 -0
- package/src/dist/redux/connectReduxDevTools.d.ts +12 -0
- package/src/dist/redux/index.d.ts +2 -0
- package/src/dist/redux/redux.d.ts +47 -0
- package/src/dist/ref/Ref.d.ts +53 -0
- package/src/dist/ref/core.d.ts +46 -0
- package/src/dist/ref/customRef.d.ts +38 -0
- package/src/dist/ref/index.d.ts +4 -0
- package/src/dist/ref/rootRef.d.ts +33 -0
- package/src/dist/rootStore/attachDetach.d.ts +1 -0
- package/src/dist/rootStore/index.d.ts +1 -0
- package/src/dist/rootStore/rootStore.d.ts +33 -0
- package/src/dist/snapshot/SnapshotOf.d.ts +47 -0
- package/src/dist/snapshot/SnapshotterAndReconcilerPriority.d.ts +1 -0
- package/src/dist/snapshot/applySnapshot.d.ts +17 -0
- package/src/dist/snapshot/clone.d.ts +18 -0
- package/src/dist/snapshot/fromArraySnapshot.d.ts +1 -0
- package/src/dist/snapshot/fromFrozenSnapshot.d.ts +1 -0
- package/src/dist/snapshot/fromModelSnapshot.d.ts +1 -0
- package/src/dist/snapshot/fromPlainObjectSnapshot.d.ts +1 -0
- package/src/dist/snapshot/fromSnapshot.d.ts +36 -0
- package/src/dist/snapshot/getSnapshot.d.ts +22 -0
- package/src/dist/snapshot/index.d.ts +6 -0
- package/src/dist/snapshot/internal.d.ts +1 -0
- package/src/dist/snapshot/onSnapshot.d.ts +18 -0
- package/src/dist/snapshot/reconcileArraySnapshot.d.ts +1 -0
- package/src/dist/snapshot/reconcileFrozenSnapshot.d.ts +1 -0
- package/src/dist/snapshot/reconcileModelSnapshot.d.ts +1 -0
- package/src/dist/snapshot/reconcilePlainObjectSnapshot.d.ts +1 -0
- package/src/dist/snapshot/reconcileSnapshot.d.ts +1 -0
- package/src/dist/snapshot/registerDefaultReconcilers.d.ts +1 -0
- package/src/dist/snapshot/registerDefaultSnapshotters.d.ts +1 -0
- package/src/dist/standardActions/actions.d.ts +1 -0
- package/src/dist/standardActions/arrayActions.d.ts +18 -0
- package/src/dist/standardActions/index.d.ts +3 -0
- package/src/dist/standardActions/objectActions.d.ts +7 -0
- package/src/dist/standardActions/standaloneActions.d.ts +16 -0
- package/src/dist/transforms/ImmutableDate.d.ts +1 -0
- package/src/dist/transforms/asMap.d.ts +3 -0
- package/src/dist/transforms/asSet.d.ts +2 -0
- package/src/dist/transforms/bigint.d.ts +2 -0
- package/src/dist/transforms/date.d.ts +3 -0
- package/src/dist/transforms/index.d.ts +4 -0
- package/src/dist/treeUtils/deepEquals.d.ts +20 -0
- package/src/dist/treeUtils/draft.d.ts +70 -0
- package/src/dist/treeUtils/index.d.ts +3 -0
- package/src/dist/treeUtils/sandbox.d.ts +85 -0
- package/src/dist/tweaker/TweakerPriority.d.ts +1 -0
- package/src/dist/tweaker/core.d.ts +14 -0
- package/src/dist/tweaker/index.d.ts +2 -0
- package/src/dist/tweaker/registerDefaultTweakers.d.ts +1 -0
- package/src/dist/tweaker/tweak.d.ts +22 -0
- package/src/dist/tweaker/tweakArray.d.ts +1 -0
- package/src/dist/tweaker/tweakFrozen.d.ts +1 -0
- package/src/dist/tweaker/tweakModel.d.ts +1 -0
- package/src/dist/tweaker/tweakPlainObject.d.ts +1 -0
- package/src/dist/tweaker/typeChecking.d.ts +1 -0
- package/src/dist/tweaker/withoutTypeChecking.d.ts +2 -0
- package/src/dist/types/TypeCheckError.d.ts +22 -0
- package/src/dist/types/TypeChecker.d.ts +8 -0
- package/src/dist/types/arrayBased/array.d.ts +23 -0
- package/src/dist/types/arrayBased/tuple.d.ts +24 -0
- package/src/dist/types/getTypeInfo.d.ts +9 -0
- package/src/dist/types/index.d.ts +5 -0
- package/src/dist/types/objectBased/arraySet.d.ts +24 -0
- package/src/dist/types/objectBased/dataModelData.d.ts +44 -0
- package/src/dist/types/objectBased/model.d.ts +43 -0
- package/src/dist/types/objectBased/object.d.ts +63 -0
- package/src/dist/types/objectBased/objectMap.d.ts +24 -0
- package/src/dist/types/objectBased/record.d.ts +24 -0
- package/src/dist/types/objectBased/ref.d.ts +21 -0
- package/src/dist/types/primitiveBased/enum.d.ts +34 -0
- package/src/dist/types/primitiveBased/primitives.d.ts +81 -0
- package/src/dist/types/primitiveBased/refinedPrimitives.d.ts +18 -0
- package/src/dist/types/registerDefaultStandardTypeResolvers.d.ts +1 -0
- package/src/dist/types/resolveTypeChecker.d.ts +1 -0
- package/src/dist/types/schemas.d.ts +53 -0
- package/src/dist/types/tProp.d.ts +92 -0
- package/src/dist/types/typeCheck.d.ts +11 -0
- package/src/dist/types/types.d.ts +51 -0
- package/src/dist/types/utility/maybe.d.ts +29 -0
- package/src/dist/types/utility/or.d.ts +35 -0
- package/src/dist/types/utility/refinement.d.ts +45 -0
- package/src/dist/types/utility/unchecked.d.ts +22 -0
- package/src/dist/utils/ModelPool.d.ts +7 -0
- package/src/dist/utils/chainFns.d.ts +1 -0
- package/src/dist/utils/index.d.ts +6 -0
- package/src/dist/utils/mapUtils.d.ts +2 -0
- package/src/dist/utils/tag.d.ts +13 -0
- package/src/dist/utils/types.d.ts +39 -0
- package/src/dist/wrappers/ArraySet.d.ts +29 -0
- package/src/dist/wrappers/ObjectMap.d.ts +32 -0
- package/src/dist/wrappers/asMap.d.ts +29 -0
- package/src/dist/wrappers/asSet.d.ts +15 -0
- package/src/dist/wrappers/index.d.ts +4 -0
- package/src/model/BaseModel.ts +0 -3
- package/src/model/utils.ts +4 -5
- package/src/modelShared/checkModelDecoratorArgs.ts +6 -6
- package/src/parent/setParent.ts +2 -2
- package/src/rootStore/attachDetach.ts +2 -3
- package/src/snapshot/fromArraySnapshot.ts +11 -6
- package/src/snapshot/fromFrozenSnapshot.ts +11 -6
- package/src/snapshot/fromModelSnapshot.ts +11 -6
- package/src/snapshot/fromPlainObjectSnapshot.ts +11 -6
- package/src/snapshot/fromSnapshot.ts +3 -0
- package/src/snapshot/index.ts +0 -10
- package/src/snapshot/reconcileArraySnapshot.ts +11 -6
- package/src/snapshot/reconcileFrozenSnapshot.ts +11 -6
- package/src/snapshot/reconcileModelSnapshot.ts +11 -6
- package/src/snapshot/reconcilePlainObjectSnapshot.ts +11 -6
- package/src/snapshot/reconcileSnapshot.ts +3 -0
- package/src/snapshot/registerDefaultReconcilers.ts +21 -0
- package/src/snapshot/registerDefaultSnapshotters.ts +21 -0
- package/src/tweaker/index.ts +0 -6
- package/src/tweaker/registerDefaultTweakers.ts +21 -0
- package/src/tweaker/tweak.ts +3 -0
- package/src/tweaker/tweakArray.ts +406 -401
- package/src/tweaker/tweakFrozen.ts +11 -6
- package/src/tweaker/tweakModel.ts +11 -6
- package/src/tweaker/tweakPlainObject.ts +288 -283
- package/src/types/objectBased/model.ts +6 -1
- package/src/types/objectBased/ref.ts +1 -1
- package/src/types/primitiveBased/primitives.ts +177 -166
- package/src/types/registerDefaultStandardTypeResolvers.ts +17 -0
- package/src/types/resolveTypeChecker.ts +7 -1
- package/dist/mobx-keystone.es.js +0 -7856
- package/dist/mobx-keystone.es.mjs +0 -7856
- package/src/dataModel/_BaseDataModel.ts +0 -15
- package/src/model/_BaseModel.ts +0 -15
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { ActionContextActionType, ActionContextAsyncStepType } from "../action/context.mjs";
|
|
2
|
+
import { addActionMiddleware } from "../action/middleware.mjs";
|
|
3
|
+
import { assertTweakedObject } from "../tweaker/core.mjs";
|
|
4
|
+
import { failure } from "../utils/index.mjs";
|
|
5
|
+
var ActionTrackingResult;
|
|
6
|
+
(function(ActionTrackingResult2) {
|
|
7
|
+
ActionTrackingResult2["Return"] = "return";
|
|
8
|
+
ActionTrackingResult2["Throw"] = "throw";
|
|
9
|
+
})(ActionTrackingResult || (ActionTrackingResult = {}));
|
|
10
|
+
function actionTrackingMiddleware(subtreeRoot, hooks) {
|
|
11
|
+
assertTweakedObject(subtreeRoot, "subtreeRoot");
|
|
12
|
+
const dataSymbol = Symbol("actionTrackingMiddlewareData");
|
|
13
|
+
let State;
|
|
14
|
+
(function(State2) {
|
|
15
|
+
State2["Idle"] = "idle";
|
|
16
|
+
State2["Started"] = "started";
|
|
17
|
+
State2["RealResumed"] = "realResumed";
|
|
18
|
+
State2["FakeResumed"] = "fakeResumed";
|
|
19
|
+
State2["Suspended"] = "suspended";
|
|
20
|
+
State2["Finished"] = "finished";
|
|
21
|
+
})(State || (State = {}));
|
|
22
|
+
function getCtxData(ctx) {
|
|
23
|
+
return ctx.data[dataSymbol];
|
|
24
|
+
}
|
|
25
|
+
function setCtxData(ctx, partialData) {
|
|
26
|
+
let currentData = ctx.data[dataSymbol];
|
|
27
|
+
if (!currentData) {
|
|
28
|
+
ctx.data[dataSymbol] = partialData;
|
|
29
|
+
} else {
|
|
30
|
+
Object.assign(currentData, partialData);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const userFilter = (ctx) => {
|
|
34
|
+
if (hooks.filter) {
|
|
35
|
+
return hooks.filter(simplifyActionContext(ctx));
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
const resumeSuspendSupport = !!hooks.onResume || !!hooks.onSuspend;
|
|
40
|
+
const filter = (ctx) => {
|
|
41
|
+
if (ctx.type === ActionContextActionType.Sync) {
|
|
42
|
+
const accepted = userFilter(ctx);
|
|
43
|
+
if (accepted) {
|
|
44
|
+
setCtxData(ctx, {
|
|
45
|
+
startAccepted: true,
|
|
46
|
+
state: State.Idle
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return accepted;
|
|
50
|
+
} else {
|
|
51
|
+
switch (ctx.asyncStepType) {
|
|
52
|
+
case ActionContextAsyncStepType.Spawn:
|
|
53
|
+
const accepted = userFilter(ctx);
|
|
54
|
+
if (accepted) {
|
|
55
|
+
setCtxData(ctx, {
|
|
56
|
+
startAccepted: true,
|
|
57
|
+
state: State.Idle
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return accepted;
|
|
61
|
+
case ActionContextAsyncStepType.Return:
|
|
62
|
+
case ActionContextAsyncStepType.Throw:
|
|
63
|
+
const data = getCtxData(ctx.spawnAsyncStepContext);
|
|
64
|
+
return data ? data.startAccepted : false;
|
|
65
|
+
case ActionContextAsyncStepType.Resume:
|
|
66
|
+
case ActionContextAsyncStepType.ResumeError:
|
|
67
|
+
if (!resumeSuspendSupport) {
|
|
68
|
+
return false;
|
|
69
|
+
} else {
|
|
70
|
+
const data2 = getCtxData(ctx.spawnAsyncStepContext);
|
|
71
|
+
return data2 ? data2.startAccepted : false;
|
|
72
|
+
}
|
|
73
|
+
default:
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const start = (simpleCtx) => {
|
|
79
|
+
setCtxData(simpleCtx, {
|
|
80
|
+
state: State.Started
|
|
81
|
+
});
|
|
82
|
+
if (hooks.onStart) {
|
|
83
|
+
return hooks.onStart(simpleCtx) || void 0;
|
|
84
|
+
}
|
|
85
|
+
return void 0;
|
|
86
|
+
};
|
|
87
|
+
const finish = (simpleCtx, ret) => {
|
|
88
|
+
const parentCtx = simpleCtx.parentContext;
|
|
89
|
+
let parentResumed = false;
|
|
90
|
+
if (parentCtx) {
|
|
91
|
+
const parentData = getCtxData(parentCtx);
|
|
92
|
+
if (parentData && parentData.startAccepted && parentData.state === State.Suspended) {
|
|
93
|
+
parentResumed = true;
|
|
94
|
+
resume(parentCtx, false);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
setCtxData(simpleCtx, {
|
|
98
|
+
state: State.Finished
|
|
99
|
+
});
|
|
100
|
+
if (hooks.onFinish) {
|
|
101
|
+
ret = hooks.onFinish(simpleCtx, ret) || ret;
|
|
102
|
+
}
|
|
103
|
+
if (parentResumed) {
|
|
104
|
+
suspend(parentCtx);
|
|
105
|
+
}
|
|
106
|
+
return ret;
|
|
107
|
+
};
|
|
108
|
+
const resume = (simpleCtx, real) => {
|
|
109
|
+
const parentCtx = simpleCtx.parentContext;
|
|
110
|
+
if (parentCtx) {
|
|
111
|
+
const parentData = getCtxData(parentCtx);
|
|
112
|
+
if (parentData && parentData.startAccepted && parentData.state === State.Suspended) {
|
|
113
|
+
resume(parentCtx, false);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
setCtxData(simpleCtx, {
|
|
117
|
+
state: real ? State.RealResumed : State.FakeResumed
|
|
118
|
+
});
|
|
119
|
+
if (hooks.onResume) {
|
|
120
|
+
hooks.onResume(simpleCtx);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const suspend = (simpleCtx) => {
|
|
124
|
+
setCtxData(simpleCtx, {
|
|
125
|
+
state: State.Suspended
|
|
126
|
+
});
|
|
127
|
+
if (hooks.onSuspend) {
|
|
128
|
+
hooks.onSuspend(simpleCtx);
|
|
129
|
+
}
|
|
130
|
+
const parentCtx = simpleCtx.parentContext;
|
|
131
|
+
if (parentCtx) {
|
|
132
|
+
const parentData = getCtxData(parentCtx);
|
|
133
|
+
if (parentData && parentData.startAccepted && parentData.state === State.FakeResumed) {
|
|
134
|
+
suspend(parentCtx);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const mware = (ctx, next) => {
|
|
139
|
+
const simpleCtx = simplifyActionContext(ctx);
|
|
140
|
+
const origNext = next;
|
|
141
|
+
next = () => {
|
|
142
|
+
resume(simpleCtx, true);
|
|
143
|
+
try {
|
|
144
|
+
return origNext();
|
|
145
|
+
} finally {
|
|
146
|
+
suspend(simpleCtx);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
if (ctx.type === ActionContextActionType.Sync) {
|
|
150
|
+
let retObj = start(simpleCtx);
|
|
151
|
+
if (retObj) {
|
|
152
|
+
resume(simpleCtx, true);
|
|
153
|
+
suspend(simpleCtx);
|
|
154
|
+
retObj = finish(simpleCtx, retObj);
|
|
155
|
+
} else {
|
|
156
|
+
try {
|
|
157
|
+
retObj = finish(simpleCtx, { result: ActionTrackingResult.Return, value: next() });
|
|
158
|
+
} catch (err) {
|
|
159
|
+
retObj = finish(simpleCtx, { result: ActionTrackingResult.Throw, value: err });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return returnOrThrowActionTrackingReturn(retObj);
|
|
163
|
+
} else {
|
|
164
|
+
switch (ctx.asyncStepType) {
|
|
165
|
+
case ActionContextAsyncStepType.Spawn: {
|
|
166
|
+
let retObj = start(simpleCtx);
|
|
167
|
+
if (retObj) {
|
|
168
|
+
resume(simpleCtx, true);
|
|
169
|
+
suspend(simpleCtx);
|
|
170
|
+
retObj = finish(simpleCtx, retObj);
|
|
171
|
+
return returnOrThrowActionTrackingReturn(retObj);
|
|
172
|
+
} else {
|
|
173
|
+
return next();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
case ActionContextAsyncStepType.Return: {
|
|
177
|
+
const flowFinisher = next();
|
|
178
|
+
const retObj = finish(simpleCtx, {
|
|
179
|
+
result: ActionTrackingResult.Return,
|
|
180
|
+
value: flowFinisher.value
|
|
181
|
+
});
|
|
182
|
+
flowFinisher.resolution = retObj.result === ActionTrackingResult.Return ? "accept" : "reject";
|
|
183
|
+
flowFinisher.value = retObj.value;
|
|
184
|
+
return flowFinisher;
|
|
185
|
+
}
|
|
186
|
+
case ActionContextAsyncStepType.Throw: {
|
|
187
|
+
const flowFinisher = next();
|
|
188
|
+
const retObj = finish(simpleCtx, {
|
|
189
|
+
result: ActionTrackingResult.Throw,
|
|
190
|
+
value: flowFinisher.value
|
|
191
|
+
});
|
|
192
|
+
flowFinisher.resolution = retObj.result === ActionTrackingResult.Return ? "accept" : "reject";
|
|
193
|
+
flowFinisher.value = retObj.value;
|
|
194
|
+
return flowFinisher;
|
|
195
|
+
}
|
|
196
|
+
case ActionContextAsyncStepType.Resume:
|
|
197
|
+
case ActionContextAsyncStepType.ResumeError:
|
|
198
|
+
if (resumeSuspendSupport) {
|
|
199
|
+
return next();
|
|
200
|
+
} else {
|
|
201
|
+
throw failure(`assertion error: async step should have been filtered out - ${ctx.asyncStepType}`);
|
|
202
|
+
}
|
|
203
|
+
default:
|
|
204
|
+
throw failure(`assertion error: async step should have been filtered out - ${ctx.asyncStepType}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
return addActionMiddleware({ middleware: mware, filter, subtreeRoot });
|
|
209
|
+
}
|
|
210
|
+
function returnOrThrowActionTrackingReturn(retObj) {
|
|
211
|
+
if (retObj.result === ActionTrackingResult.Return) {
|
|
212
|
+
return retObj.value;
|
|
213
|
+
} else {
|
|
214
|
+
throw retObj.value;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const simpleDataContextSymbol = Symbol("simpleDataContext");
|
|
218
|
+
function simplifyActionContext(ctx) {
|
|
219
|
+
while (ctx.previousAsyncStepContext) {
|
|
220
|
+
ctx = ctx.previousAsyncStepContext;
|
|
221
|
+
}
|
|
222
|
+
let simpleCtx = ctx.data[simpleDataContextSymbol];
|
|
223
|
+
if (!simpleCtx) {
|
|
224
|
+
const parentContext = ctx.parentContext ? simplifyActionContext(ctx.parentContext) : void 0;
|
|
225
|
+
simpleCtx = {
|
|
226
|
+
actionName: ctx.actionName,
|
|
227
|
+
type: ctx.type,
|
|
228
|
+
target: ctx.target,
|
|
229
|
+
args: ctx.args,
|
|
230
|
+
data: ctx.data,
|
|
231
|
+
parentContext
|
|
232
|
+
};
|
|
233
|
+
simpleCtx.rootContext = parentContext ? parentContext.rootContext : simpleCtx;
|
|
234
|
+
ctx.data[simpleDataContextSymbol] = simpleCtx;
|
|
235
|
+
}
|
|
236
|
+
return simpleCtx;
|
|
237
|
+
}
|
|
238
|
+
export { ActionTrackingResult, actionTrackingMiddleware, simplifyActionContext };
|
|
239
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjdGlvbk1pZGRsZXdhcmVzL2FjdGlvblRyYWNraW5nTWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY3Rpb25Db250ZXh0LFxuICBBY3Rpb25Db250ZXh0QWN0aW9uVHlwZSxcbiAgQWN0aW9uQ29udGV4dEFzeW5jU3RlcFR5cGUsXG59IGZyb20gXCIuLi9hY3Rpb24vY29udGV4dFwiXG5pbXBvcnQge1xuICBBY3Rpb25NaWRkbGV3YXJlLFxuICBBY3Rpb25NaWRkbGV3YXJlRGlzcG9zZXIsXG4gIGFkZEFjdGlvbk1pZGRsZXdhcmUsXG59IGZyb20gXCIuLi9hY3Rpb24vbWlkZGxld2FyZVwiXG5pbXBvcnQgdHlwZSB7IEZsb3dGaW5pc2hlciB9IGZyb20gXCIuLi9hY3Rpb24vbW9kZWxGbG93XCJcbmltcG9ydCB0eXBlIHsgQW55TW9kZWwgfSBmcm9tIFwiLi4vbW9kZWwvQmFzZU1vZGVsXCJcbmltcG9ydCB7IGFzc2VydFR3ZWFrZWRPYmplY3QgfSBmcm9tIFwiLi4vdHdlYWtlci9jb3JlXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHNcIlxuXG4vKipcbiAqIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBhY3Rpb24gY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVBY3Rpb25Db250ZXh0IHtcbiAgLyoqXG4gICAqIEFjdGlvbiBuYW1lXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25OYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIEFjdGlvbiB0eXBlLCBzeW5jIG9yIGFzeW5jLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQWN0aW9uQ29udGV4dEFjdGlvblR5cGVcbiAgLyoqXG4gICAqIEFjdGlvbiB0YXJnZXQgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IEFueU1vZGVsXG4gIC8qKlxuICAgKiBBcnJheSBvZiBhY3Rpb24gYXJndW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJnczogUmVhZG9ubHlBcnJheTxhbnk+XG4gIC8qKlxuICAgKiBQYXJlbnQgYWN0aW9uIGNvbnRleHQsIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudENvbnRleHQ/OiBTaW1wbGVBY3Rpb25Db250ZXh0XG4gIC8qKlxuICAgKiBSb290IGFjdGlvbiBjb250ZXh0LCBvciBpdHNlbGYgaWYgdGhlIHJvb3QuXG4gICAqL1xuICByZWFkb25seSByb290Q29udGV4dDogU2ltcGxlQWN0aW9uQ29udGV4dFxuICAvKipcbiAgICogQ3VzdG9tIGRhdGEgZm9yIHRoZSBhY3Rpb24gY29udGV4dCB0byBiZSBzZXQgYnkgbWlkZGxld2FyZXMsIGFuIG9iamVjdC5cbiAgICogU3ltYm9scyBtdXN0IGJlIHVzZWQgYXMga2V5cyB0byBhdm9pZCBuYW1lIGNsYXNoaW5nIGJldHdlZW4gbWlkZGxld2FyZXMuXG4gICAqL1xuICByZWFkb25seSBkYXRhOiBSZWNvcmQ8c3ltYm9sLCBhbnk+XG59XG5cbi8qKlxuICogQWN0aW9uIHRyYWNraW5nIG1pZGRsZXdhcmUgZmluaXNoIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGVudW0gQWN0aW9uVHJhY2tpbmdSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGFjdGlvbiByZXR1cm5lZCBub3JtYWxseSAod2l0aG91dCB0aHJvd2luZykuXG4gICAqL1xuICBSZXR1cm4gPSBcInJldHVyblwiLFxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0aHJldyBhbiBlcnJvci5cbiAgICovXG4gIFRocm93ID0gXCJ0aHJvd1wiLFxufVxuXG4vKipcbiAqIEFjdGlvbiB0cmFja2luZyBtaWRkbGV3YXJlIGhvb2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblRyYWNraW5nTWlkZGxld2FyZSB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgZnVuY3Rpb24gY2FsbGVkIHdoZW5ldmVyIGVhY2ggYWN0aW9uIHN0YXJ0cywgYW5kIG9ubHkgdGhlbi5cbiAgICpcbiAgICogSWYgdGhlIGFjdGlvbiBpcyBhY2NlcHRlZCB0aGVuIGBvblN0YXJ0YCwgYG9uUmVzdW1lYCwgYG9uU3VzcGVuZGAgYW5kIGBvbkZpbmlzaGBcbiAgICogZm9yIHRoYXQgcGFydGljdWxhciBhY3Rpb24gd2lsbCBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEFsbCBhY3Rpb25zIGFyZSBhY2NlcHRlZCBieSBkZWZhdWx0IGlmIG5vIGZpbHRlciBmdW5jdGlvbiBpcyBwcmVzZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IFNpbXBsaWZpZWQgYWN0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHRydWUgdG8gYWNjZXB0IHRoZSBhY3Rpb24sIGZhbHNlIHRvIHNraXAgaXQuXG4gICAqL1xuICBmaWx0ZXI/KGN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCk6IGJvb2xlYW5cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYW4gYWN0aW9uIGp1c3Qgc3RhcnRlZC5cbiAgICpcbiAgICogQHBhcmFtIGN0eCBTaW1wbGlmaWVkIGFjdGlvbiBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBDYW4gb3B0aW9uYWxseSByZXR1cm4gYSByZXN1bHQgdGhhdCB3aWxsIGNhbmNlbCB0aGUgb3JpZ2luYWwgYWN0aW9uIGFuZCBmaW5pc2ggaXRcbiAgICogd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWUgLyBlcnJvciB0byBiZSB0aHJvd24uIEluIGVpdGhlciBjYXNlIGNhc2UgcmVzdW1lIC8gc3VzcGVuZCAvIGZpbmlzaCB3aWxsXG4gICAqIHN0aWxsIGJlIGNhbGxlZCBub3JtYWxseS5cbiAgICovXG4gIG9uU3RhcnQ/KGN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCk6IHZvaWQgfCBBY3Rpb25UcmFja2luZ1JldHVyblxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbiBhY3Rpb24ganVzdCByZXN1bWVkIGEgc3luY2hyb25vdXMgcGllY2Ugb2YgY29kZSBleGVjdXRpb24uXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgZm9yIHN5bmMgYWN0aW9ucyBhbmQgbXVsdGlwbGUgdGltZXMgZm9yIGZsb3dzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IFNpbXBsaWZpZWQgYWN0aW9uIGNvbnRleHQuXG4gICAqL1xuICBvblJlc3VtZT8oY3R4OiBTaW1wbGVBY3Rpb25Db250ZXh0KTogdm9pZFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbiBhY3Rpb24ganVzdCBmaW5pc2hlZCBhIHN5bmNocm9ub3VzIHBpY2Ugb2YgY29kZSBleGVjdXRpb24uXG4gICAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgYWN0aW9uIGlzIGZpbmlzaGVkLlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGZvciBzeW5jIGFjdGlvbnMgYW5kIG11bHRpcGxlIHRpbWVzIGZvciBmbG93cy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCBTaW1wbGlmaWVkIGFjdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgb25TdXNwZW5kPyhjdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpOiB2b2lkXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFuIGFjdGlvbiBqdXN0IGZpbmlzaGVkLCBlaXRoZXIgYnkgcmV0dXJuaW5nIG5vcm1hbGx5IG9yIGJ5IHRocm93aW5nIGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IFNpbXBsaWZpZWQgYWN0aW9uIGNvbnRleHQuXG4gICAqIEBwYXJhbSByZXQgQWN0aW9uIHJldHVybiByZXN1bHQuXG4gICAqIEByZXR1cm5zIENhbiBvcHRpb25hbGx5IHJldHVybiBhIG5ldyByZXN1bHQgdGhhdCB3aWxsIG92ZXJyaWRlIHRoZSBvcmlnaW5hbCBvbmUuXG4gICAqL1xuICBvbkZpbmlzaD8oY3R4OiBTaW1wbGVBY3Rpb25Db250ZXh0LCByZXQ6IEFjdGlvblRyYWNraW5nUmV0dXJuKTogdm9pZCB8IEFjdGlvblRyYWNraW5nUmV0dXJuXG59XG5cbi8qKlxuICogUmV0dXJuIHJlc3VsdCBvZiBhbiBhY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uVHJhY2tpbmdSZXR1cm4ge1xuICByZXN1bHQ6IEFjdGlvblRyYWNraW5nUmVzdWx0XG4gIHZhbHVlOiBhbnlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFjdGlvbiB0cmFja2luZyBtaWRkbGV3YXJlLCB3aGljaCBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvblxuICogb2YgdGhlIHN0YW5kYXJkIGFjdGlvbiBtaWRkbGV3YXJlLlxuICpcbiAqIEBwYXJhbSBzdWJ0cmVlUm9vdCBTdWJ0cmVlIHJvb3QgdGFyZ2V0IG9iamVjdC5cbiAqIEBwYXJhbSBob29rcyBNaWRkbGV3YXJlIGhvb2tzLlxuICogQHJldHVybnMgVGhlIG1pZGRsZXdhcmUgZGlzcG9zZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25UcmFja2luZ01pZGRsZXdhcmUoXG4gIHN1YnRyZWVSb290OiBvYmplY3QsXG4gIGhvb2tzOiBBY3Rpb25UcmFja2luZ01pZGRsZXdhcmVcbik6IEFjdGlvbk1pZGRsZXdhcmVEaXNwb3NlciB7XG4gIGFzc2VydFR3ZWFrZWRPYmplY3Qoc3VidHJlZVJvb3QsIFwic3VidHJlZVJvb3RcIilcblxuICBjb25zdCBkYXRhU3ltYm9sID0gU3ltYm9sKFwiYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlRGF0YVwiKVxuXG4gIGVudW0gU3RhdGUge1xuICAgIElkbGUgPSBcImlkbGVcIixcbiAgICBTdGFydGVkID0gXCJzdGFydGVkXCIsXG4gICAgUmVhbFJlc3VtZWQgPSBcInJlYWxSZXN1bWVkXCIsXG4gICAgRmFrZVJlc3VtZWQgPSBcImZha2VSZXN1bWVkXCIsXG4gICAgU3VzcGVuZGVkID0gXCJzdXNwZW5kZWRcIixcbiAgICBGaW5pc2hlZCA9IFwiZmluaXNoZWRcIixcbiAgfVxuXG4gIGludGVyZmFjZSBEYXRhIHtcbiAgICBzdGFydEFjY2VwdGVkOiBib29sZWFuXG4gICAgc3RhdGU6IFN0YXRlXG4gIH1cblxuICBmdW5jdGlvbiBnZXRDdHhEYXRhKGN0eDogQWN0aW9uQ29udGV4dCB8IFNpbXBsZUFjdGlvbkNvbnRleHQpOiBEYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY3R4LmRhdGFbZGF0YVN5bWJvbF1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEN0eERhdGEoY3R4OiBBY3Rpb25Db250ZXh0IHwgU2ltcGxlQWN0aW9uQ29udGV4dCwgcGFydGlhbERhdGE6IFBhcnRpYWw8RGF0YT4pIHtcbiAgICBsZXQgY3VycmVudERhdGEgPSBjdHguZGF0YVtkYXRhU3ltYm9sXVxuICAgIGlmICghY3VycmVudERhdGEpIHtcbiAgICAgIGN0eC5kYXRhW2RhdGFTeW1ib2xdID0gcGFydGlhbERhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihjdXJyZW50RGF0YSwgcGFydGlhbERhdGEpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXNlckZpbHRlcjogQWN0aW9uTWlkZGxld2FyZVtcImZpbHRlclwiXSA9IChjdHgpID0+IHtcbiAgICBpZiAoaG9va3MuZmlsdGVyKSB7XG4gICAgICByZXR1cm4gaG9va3MuZmlsdGVyKHNpbXBsaWZ5QWN0aW9uQ29udGV4dChjdHgpKVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCByZXN1bWVTdXNwZW5kU3VwcG9ydCA9ICEhaG9va3Mub25SZXN1bWUgfHwgISFob29rcy5vblN1c3BlbmRcblxuICBjb25zdCBmaWx0ZXI6IEFjdGlvbk1pZGRsZXdhcmVbXCJmaWx0ZXJcIl0gPSAoY3R4KSA9PiB7XG4gICAgaWYgKGN0eC50eXBlID09PSBBY3Rpb25Db250ZXh0QWN0aW9uVHlwZS5TeW5jKSB7XG4gICAgICAvLyBzdGFydCBhbmQgZmluaXNoIGlzIG9uIHRoZSBzYW1lIGNvbnRleHRcbiAgICAgIGNvbnN0IGFjY2VwdGVkID0gdXNlckZpbHRlcihjdHgpXG4gICAgICBpZiAoYWNjZXB0ZWQpIHtcbiAgICAgICAgc2V0Q3R4RGF0YShjdHgsIHtcbiAgICAgICAgICBzdGFydEFjY2VwdGVkOiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiBTdGF0ZS5JZGxlLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY2VwdGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoY3R4LmFzeW5jU3RlcFR5cGUpIHtcbiAgICAgICAgY2FzZSBBY3Rpb25Db250ZXh0QXN5bmNTdGVwVHlwZS5TcGF3bjpcbiAgICAgICAgICBjb25zdCBhY2NlcHRlZCA9IHVzZXJGaWx0ZXIoY3R4KVxuICAgICAgICAgIGlmIChhY2NlcHRlZCkge1xuICAgICAgICAgICAgc2V0Q3R4RGF0YShjdHgsIHtcbiAgICAgICAgICAgICAgc3RhcnRBY2NlcHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlLklkbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjZXB0ZWRcblxuICAgICAgICBjYXNlIEFjdGlvbkNvbnRleHRBc3luY1N0ZXBUeXBlLlJldHVybjpcbiAgICAgICAgY2FzZSBBY3Rpb25Db250ZXh0QXN5bmNTdGVwVHlwZS5UaHJvdzpcbiAgICAgICAgICAvLyBkZXBlbmRzIGlmIHRoZSBzcGF3biBvbmUgd2FzIGFjY2VwdGVkIG9yIG5vdFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBnZXRDdHhEYXRhKGN0eC5zcGF3bkFzeW5jU3RlcENvbnRleHQhKVxuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YS5zdGFydEFjY2VwdGVkIDogZmFsc2VcblxuICAgICAgICBjYXNlIEFjdGlvbkNvbnRleHRBc3luY1N0ZXBUeXBlLlJlc3VtZTpcbiAgICAgICAgY2FzZSBBY3Rpb25Db250ZXh0QXN5bmNTdGVwVHlwZS5SZXN1bWVFcnJvcjpcbiAgICAgICAgICBpZiAoIXJlc3VtZVN1c3BlbmRTdXBwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVwZW5kcyBpZiB0aGUgc3Bhd24gb25lIHdhcyBhY2NlcHRlZCBvciBub3RcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBnZXRDdHhEYXRhKGN0eC5zcGF3bkFzeW5jU3RlcENvbnRleHQhKVxuICAgICAgICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhLnN0YXJ0QWNjZXB0ZWQgOiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gKHNpbXBsZUN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCk6IEFjdGlvblRyYWNraW5nUmV0dXJuIHwgdW5kZWZpbmVkID0+IHtcbiAgICBzZXRDdHhEYXRhKHNpbXBsZUN0eCwge1xuICAgICAgc3RhdGU6IFN0YXRlLlN0YXJ0ZWQsXG4gICAgfSlcbiAgICBpZiAoaG9va3Mub25TdGFydCkge1xuICAgICAgcmV0dXJuIGhvb2tzLm9uU3RhcnQoc2ltcGxlQ3R4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgZmluaXNoID0gKFxuICAgIHNpbXBsZUN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCxcbiAgICByZXQ6IEFjdGlvblRyYWNraW5nUmV0dXJuXG4gICk6IEFjdGlvblRyYWNraW5nUmV0dXJuID0+IHtcbiAgICAvLyBmYWtlbHkgcmVzdW1lIGFuZCBzdXNwZW5kIHRoZSBwYXJlbnQgaWYgbmVlZGVkXG4gICAgY29uc3QgcGFyZW50Q3R4ID0gc2ltcGxlQ3R4LnBhcmVudENvbnRleHRcbiAgICBsZXQgcGFyZW50UmVzdW1lZCA9IGZhbHNlXG4gICAgaWYgKHBhcmVudEN0eCkge1xuICAgICAgY29uc3QgcGFyZW50RGF0YSA9IGdldEN0eERhdGEocGFyZW50Q3R4KVxuICAgICAgaWYgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5zdGFydEFjY2VwdGVkICYmIHBhcmVudERhdGEuc3RhdGUgPT09IFN0YXRlLlN1c3BlbmRlZCkge1xuICAgICAgICBwYXJlbnRSZXN1bWVkID0gdHJ1ZVxuICAgICAgICByZXN1bWUocGFyZW50Q3R4LCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDdHhEYXRhKHNpbXBsZUN0eCwge1xuICAgICAgc3RhdGU6IFN0YXRlLkZpbmlzaGVkLFxuICAgIH0pXG5cbiAgICBpZiAoaG9va3Mub25GaW5pc2gpIHtcbiAgICAgIHJldCA9IGhvb2tzLm9uRmluaXNoKHNpbXBsZUN0eCwgcmV0KSB8fCByZXRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50UmVzdW1lZCkge1xuICAgICAgc3VzcGVuZChwYXJlbnRDdHghKVxuICAgIH1cblxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGNvbnN0IHJlc3VtZSA9IChzaW1wbGVDdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQsIHJlYWw6IGJvb2xlYW4pID0+IHtcbiAgICAvLyBlbnN1cmUgcGFyZW50cyBhcmUgcmVzdW1lZFxuICAgIGNvbnN0IHBhcmVudEN0eCA9IHNpbXBsZUN0eC5wYXJlbnRDb250ZXh0XG4gICAgaWYgKHBhcmVudEN0eCkge1xuICAgICAgY29uc3QgcGFyZW50RGF0YSA9IGdldEN0eERhdGEocGFyZW50Q3R4KVxuICAgICAgaWYgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5zdGFydEFjY2VwdGVkICYmIHBhcmVudERhdGEuc3RhdGUgPT09IFN0YXRlLlN1c3BlbmRlZCkge1xuICAgICAgICByZXN1bWUocGFyZW50Q3R4LCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDdHhEYXRhKHNpbXBsZUN0eCwge1xuICAgICAgc3RhdGU6IHJlYWwgPyBTdGF0ZS5SZWFsUmVzdW1lZCA6IFN0YXRlLkZha2VSZXN1bWVkLFxuICAgIH0pXG4gICAgaWYgKGhvb2tzLm9uUmVzdW1lKSB7XG4gICAgICBob29rcy5vblJlc3VtZShzaW1wbGVDdHgpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VzcGVuZCA9IChzaW1wbGVDdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpID0+IHtcbiAgICBzZXRDdHhEYXRhKHNpbXBsZUN0eCwge1xuICAgICAgc3RhdGU6IFN0YXRlLlN1c3BlbmRlZCxcbiAgICB9KVxuICAgIGlmIChob29rcy5vblN1c3BlbmQpIHtcbiAgICAgIGhvb2tzLm9uU3VzcGVuZChzaW1wbGVDdHgpXG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHBhcmVudHMgYXJlIHN1c3BlbmRlZCBpZiB0aGV5IHdlcmUgZmFrZWx5IHJlc3VtZWRcbiAgICBjb25zdCBwYXJlbnRDdHggPSBzaW1wbGVDdHgucGFyZW50Q29udGV4dFxuICAgIGlmIChwYXJlbnRDdHgpIHtcbiAgICAgIGNvbnN0IHBhcmVudERhdGEgPSBnZXRDdHhEYXRhKHBhcmVudEN0eClcbiAgICAgIGlmIChwYXJlbnREYXRhICYmIHBhcmVudERhdGEuc3RhcnRBY2NlcHRlZCAmJiBwYXJlbnREYXRhLnN0YXRlID09PSBTdGF0ZS5GYWtlUmVzdW1lZCkge1xuICAgICAgICBzdXNwZW5kKHBhcmVudEN0eClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBtd2FyZTogQWN0aW9uTWlkZGxld2FyZVtcIm1pZGRsZXdhcmVcIl0gPSAoY3R4LCBuZXh0KSA9PiB7XG4gICAgY29uc3Qgc2ltcGxlQ3R4ID0gc2ltcGxpZnlBY3Rpb25Db250ZXh0KGN0eClcblxuICAgIGNvbnN0IG9yaWdOZXh0ID0gbmV4dFxuICAgIG5leHQgPSAoKSA9PiB7XG4gICAgICByZXN1bWUoc2ltcGxlQ3R4LCB0cnVlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWdOZXh0KClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN1c3BlbmQoc2ltcGxlQ3R4KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdHgudHlwZSA9PT0gQWN0aW9uQ29udGV4dEFjdGlvblR5cGUuU3luYykge1xuICAgICAgbGV0IHJldE9iaiA9IHN0YXJ0KHNpbXBsZUN0eClcblxuICAgICAgaWYgKHJldE9iaikge1xuICAgICAgICAvLyBhY3Rpb24gY2FuY2VsZWQgLyBvdmVycmlkZGVuIGJ5IG9uU3RhcnRcbiAgICAgICAgcmVzdW1lKHNpbXBsZUN0eCwgdHJ1ZSlcbiAgICAgICAgc3VzcGVuZChzaW1wbGVDdHgpXG4gICAgICAgIHJldE9iaiA9IGZpbmlzaChzaW1wbGVDdHgsIHJldE9iailcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0T2JqID0gZmluaXNoKHNpbXBsZUN0eCwgeyByZXN1bHQ6IEFjdGlvblRyYWNraW5nUmVzdWx0LlJldHVybiwgdmFsdWU6IG5leHQoKSB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXRPYmogPSBmaW5pc2goc2ltcGxlQ3R4LCB7IHJlc3VsdDogQWN0aW9uVHJhY2tpbmdSZXN1bHQuVGhyb3csIHZhbHVlOiBlcnIgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuT3JUaHJvd0FjdGlvblRyYWNraW5nUmV0dXJuKHJldE9iailcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXN5bmNcblxuICAgICAgc3dpdGNoIChjdHguYXN5bmNTdGVwVHlwZSkge1xuICAgICAgICBjYXNlIEFjdGlvbkNvbnRleHRBc3luY1N0ZXBUeXBlLlNwYXduOiB7XG4gICAgICAgICAgbGV0IHJldE9iaiA9IHN0YXJ0KHNpbXBsZUN0eClcbiAgICAgICAgICBpZiAocmV0T2JqKSB7XG4gICAgICAgICAgICAvLyBhY3Rpb24gY2FuY2VsZWQgLyBvdmVycmlkZGVuIGJ5IG9uU3RhcnRcbiAgICAgICAgICAgIHJlc3VtZShzaW1wbGVDdHgsIHRydWUpXG4gICAgICAgICAgICBzdXNwZW5kKHNpbXBsZUN0eClcbiAgICAgICAgICAgIHJldE9iaiA9IGZpbmlzaChzaW1wbGVDdHgsIHJldE9iailcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5PclRocm93QWN0aW9uVHJhY2tpbmdSZXR1cm4ocmV0T2JqKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBBY3Rpb25Db250ZXh0QXN5bmNTdGVwVHlwZS5SZXR1cm46IHtcbiAgICAgICAgICBjb25zdCBmbG93RmluaXNoZXI6IEZsb3dGaW5pc2hlciA9IG5leHQoKVxuICAgICAgICAgIGNvbnN0IHJldE9iaiA9IGZpbmlzaChzaW1wbGVDdHgsIHtcbiAgICAgICAgICAgIHJlc3VsdDogQWN0aW9uVHJhY2tpbmdSZXN1bHQuUmV0dXJuLFxuICAgICAgICAgICAgdmFsdWU6IGZsb3dGaW5pc2hlci52YWx1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGZsb3dGaW5pc2hlci5yZXNvbHV0aW9uID1cbiAgICAgICAgICAgIHJldE9iai5yZXN1bHQgPT09IEFjdGlvblRyYWNraW5nUmVzdWx0LlJldHVybiA/IFwiYWNjZXB0XCIgOiBcInJlamVjdFwiXG4gICAgICAgICAgZmxvd0ZpbmlzaGVyLnZhbHVlID0gcmV0T2JqLnZhbHVlXG4gICAgICAgICAgcmV0dXJuIGZsb3dGaW5pc2hlclxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBBY3Rpb25Db250ZXh0QXN5bmNTdGVwVHlwZS5UaHJvdzoge1xuICAgICAgICAgIGNvbnN0IGZsb3dGaW5pc2hlcjogRmxvd0ZpbmlzaGVyID0gbmV4dCgpXG4gICAgICAgICAgY29uc3QgcmV0T2JqID0gZmluaXNoKHNpbXBsZUN0eCwge1xuICAgICAgICAgICAgcmVzdWx0OiBBY3Rpb25UcmFja2luZ1Jlc3VsdC5UaHJvdyxcbiAgICAgICAgICAgIHZhbHVlOiBmbG93RmluaXNoZXIudmFsdWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBmbG93RmluaXNoZXIucmVzb2x1dGlvbiA9XG4gICAgICAgICAgICByZXRPYmoucmVzdWx0ID09PSBBY3Rpb25UcmFja2luZ1Jlc3VsdC5SZXR1cm4gPyBcImFjY2VwdFwiIDogXCJyZWplY3RcIlxuICAgICAgICAgIGZsb3dGaW5pc2hlci52YWx1ZSA9IHJldE9iai52YWx1ZVxuICAgICAgICAgIHJldHVybiBmbG93RmluaXNoZXJcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQWN0aW9uQ29udGV4dEFzeW5jU3RlcFR5cGUuUmVzdW1lOlxuICAgICAgICBjYXNlIEFjdGlvbkNvbnRleHRBc3luY1N0ZXBUeXBlLlJlc3VtZUVycm9yOlxuICAgICAgICAgIGlmIChyZXN1bWVTdXNwZW5kU3VwcG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgICAgICBgYXNzZXJ0aW9uIGVycm9yOiBhc3luYyBzdGVwIHNob3VsZCBoYXZlIGJlZW4gZmlsdGVyZWQgb3V0IC0gJHtjdHguYXN5bmNTdGVwVHlwZX1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShcbiAgICAgICAgICAgIGBhc3NlcnRpb24gZXJyb3I6IGFzeW5jIHN0ZXAgc2hvdWxkIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQgLSAke2N0eC5hc3luY1N0ZXBUeXBlfWBcbiAgICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFkZEFjdGlvbk1pZGRsZXdhcmUoeyBtaWRkbGV3YXJlOiBtd2FyZSwgZmlsdGVyLCBzdWJ0cmVlUm9vdDogc3VidHJlZVJvb3QgfSlcbn1cblxuZnVuY3Rpb24gcmV0dXJuT3JUaHJvd0FjdGlvblRyYWNraW5nUmV0dXJuKHJldE9iajogQWN0aW9uVHJhY2tpbmdSZXR1cm4pIHtcbiAgaWYgKHJldE9iai5yZXN1bHQgPT09IEFjdGlvblRyYWNraW5nUmVzdWx0LlJldHVybikge1xuICAgIHJldHVybiByZXRPYmoudmFsdWVcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyByZXRPYmoudmFsdWVcbiAgfVxufVxuXG5jb25zdCBzaW1wbGVEYXRhQ29udGV4dFN5bWJvbCA9IFN5bWJvbChcInNpbXBsZURhdGFDb250ZXh0XCIpXG5cbi8qKlxuICogU2ltcGxpZmllcyBhbiBhY3Rpb24gY29udGV4dCBieSBjb252ZXJ0aW5nIGFuIGFzeW5jIGNhbGwgaGllcmFyY2h5IGludG8gYSBzaW1wbGVyIG9uZS5cbiAqXG4gKiBAcGFyYW0gY3R4IEFjdGlvbiBjb250ZXh0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBTaW1wbGlmaWVkIGFjdGlvbiBjb250ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxpZnlBY3Rpb25Db250ZXh0KGN0eDogQWN0aW9uQ29udGV4dCk6IFNpbXBsZUFjdGlvbkNvbnRleHQge1xuICB3aGlsZSAoY3R4LnByZXZpb3VzQXN5bmNTdGVwQ29udGV4dCkge1xuICAgIGN0eCA9IGN0eC5wcmV2aW91c0FzeW5jU3RlcENvbnRleHRcbiAgfVxuXG4gIGxldCBzaW1wbGVDdHggPSBjdHguZGF0YVtzaW1wbGVEYXRhQ29udGV4dFN5bWJvbF1cbiAgaWYgKCFzaW1wbGVDdHgpIHtcbiAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY3R4LnBhcmVudENvbnRleHQgPyBzaW1wbGlmeUFjdGlvbkNvbnRleHQoY3R4LnBhcmVudENvbnRleHQpIDogdW5kZWZpbmVkXG5cbiAgICBzaW1wbGVDdHggPSB7XG4gICAgICBhY3Rpb25OYW1lOiBjdHguYWN0aW9uTmFtZSxcbiAgICAgIHR5cGU6IGN0eC50eXBlLFxuICAgICAgdGFyZ2V0OiBjdHgudGFyZ2V0LFxuICAgICAgYXJnczogY3R4LmFyZ3MsXG4gICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgIHBhcmVudENvbnRleHQsXG4gICAgfVxuICAgIHNpbXBsZUN0eC5yb290Q29udGV4dCA9IHBhcmVudENvbnRleHQgPyBwYXJlbnRDb250ZXh0LnJvb3RDb250ZXh0IDogc2ltcGxlQ3R4XG5cbiAgICBjdHguZGF0YVtzaW1wbGVEYXRhQ29udGV4dFN5bWJvbF0gPSBzaW1wbGVDdHhcbiAgfVxuICByZXR1cm4gc2ltcGxlQ3R4XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztJQXFEWTtVQUFBOzs7QUFTWixHQVRZO2tDQWtGVixhQUNBO3NCQUVvQixhQUFhLGFBQWE7UUFFeEMsYUFBYSxPQUFPLDhCQUE4QjtNQUVuRDtZQUFBOzs7Ozs7O0tBQUE7c0JBY2U7V0FDWCxJQUFJLEtBQUs7QUFBQTtzQkFHRSxLQUEwQztRQUN4RCxjQUFjLElBQUksS0FBSztRQUN2QixDQUFDLGFBQWE7VUFDWixLQUFLLGNBQWM7QUFBQSxXQUNsQjthQUNFLE9BQU8sYUFBYSxXQUFXO0FBQUE7O1FBSXBDLGFBQXlDLENBQUM7UUFDMUMsTUFBTSxRQUFRO2FBQ1QsTUFBTSxPQUFPLHNCQUFzQixHQUFHLENBQUM7QUFBQTtXQUd6QztBQUFBO1FBR0gsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxDQUFDLE1BQU07UUFFbkQsU0FBcUMsQ0FBQztRQUN0QyxJQUFJLFNBQVMsd0JBQXdCLE1BQU07WUFFdkMsV0FBVyxXQUFXLEdBQUc7VUFDM0IsVUFBVTttQkFDRCxLQUFLO0FBQUEsVUFDZCxlQUFlO0FBQUEsVUFDZixPQUFPLE1BQU07QUFBQSxTQUNkO0FBQUE7YUFFSTtBQUFBLFdBQ0Y7Y0FDRyxJQUFJO0FBQUEsYUFDTCwyQkFBMkI7Z0JBQ3hCLFdBQVcsV0FBVyxHQUFHO2NBQzNCLFVBQVU7dUJBQ0QsS0FBSztBQUFBLGNBQ2QsZUFBZTtBQUFBLGNBQ2YsT0FBTyxNQUFNO0FBQUEsYUFDZDtBQUFBO2lCQUVJO0FBQUEsYUFFSiwyQkFBMkI7QUFBQSxhQUMzQiwyQkFBMkI7Z0JBRXhCLE9BQU8sV0FBVyxJQUFJLHFCQUFzQjtpQkFDM0MsT0FBTyxLQUFLLGdCQUFnQjtBQUFB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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { isHookAction } from "../action/hookActions.mjs";
|
|
2
|
+
import { fastGetRootPath } from "../parent/path.mjs";
|
|
3
|
+
import { assertTweakedObject } from "../tweaker/core.mjs";
|
|
4
|
+
import { assertIsObject } from "../utils/index.mjs";
|
|
5
|
+
import { actionTrackingMiddleware } from "./actionTrackingMiddleware.mjs";
|
|
6
|
+
import { rootPathToTargetPathIds } from "./utils.mjs";
|
|
7
|
+
function onActionMiddleware(subtreeRoot, listeners) {
|
|
8
|
+
assertTweakedObject(subtreeRoot, "subtreeRoot");
|
|
9
|
+
assertIsObject(listeners, "listeners");
|
|
10
|
+
return actionTrackingMiddleware(subtreeRoot, {
|
|
11
|
+
filter(ctx) {
|
|
12
|
+
if (ctx.parentContext) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (isHookAction(ctx.actionName)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
},
|
|
20
|
+
onStart(ctx) {
|
|
21
|
+
if (listeners.onStart) {
|
|
22
|
+
const actionCall = actionContextToActionCall(ctx);
|
|
23
|
+
return listeners.onStart(actionCall, ctx);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
onFinish(ctx, ret) {
|
|
27
|
+
if (listeners.onFinish) {
|
|
28
|
+
const actionCall = actionContextToActionCall(ctx);
|
|
29
|
+
return listeners.onFinish(actionCall, ctx, ret);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function actionContextToActionCall(ctx) {
|
|
35
|
+
const rootPath = fastGetRootPath(ctx.target);
|
|
36
|
+
return {
|
|
37
|
+
actionName: ctx.actionName,
|
|
38
|
+
args: ctx.args,
|
|
39
|
+
targetPath: rootPath.path,
|
|
40
|
+
targetPathIds: rootPathToTargetPathIds(rootPath)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export { onActionMiddleware };
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25BY3Rpb25NaWRkbGV3YXJlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjdGlvbk1pZGRsZXdhcmVzL29uQWN0aW9uTWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbkNhbGwgfSBmcm9tIFwiLi4vYWN0aW9uL2FwcGx5QWN0aW9uXCJcbmltcG9ydCB7IGlzSG9va0FjdGlvbiB9IGZyb20gXCIuLi9hY3Rpb24vaG9va0FjdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBBY3Rpb25NaWRkbGV3YXJlRGlzcG9zZXIgfSBmcm9tIFwiLi4vYWN0aW9uL21pZGRsZXdhcmVcIlxuaW1wb3J0IHsgZmFzdEdldFJvb3RQYXRoIH0gZnJvbSBcIi4uL3BhcmVudC9wYXRoXCJcbmltcG9ydCB7IGFzc2VydFR3ZWFrZWRPYmplY3QgfSBmcm9tIFwiLi4vdHdlYWtlci9jb3JlXCJcbmltcG9ydCB7IGFzc2VydElzT2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzXCJcbmltcG9ydCB7XG4gIGFjdGlvblRyYWNraW5nTWlkZGxld2FyZSxcbiAgQWN0aW9uVHJhY2tpbmdSZXR1cm4sXG4gIFNpbXBsZUFjdGlvbkNvbnRleHQsXG59IGZyb20gXCIuL2FjdGlvblRyYWNraW5nTWlkZGxld2FyZVwiXG5pbXBvcnQgeyByb290UGF0aFRvVGFyZ2V0UGF0aElkcyB9IGZyb20gXCIuL3V0aWxzXCJcblxuLyoqXG4gKiBBdHRhY2hlcyBhbiBhY3Rpb24gbWlkZGxld2FyZSB0aGF0IGludm9rZXMgYSBsaXN0ZW5lciBmb3IgYWxsIGFjdGlvbnMgb2YgYSBnaXZlbiB0cmVlLlxuICogTm90ZSB0aGF0IHRoZSBsaXN0ZW5lciB3aWxsIG9ubHkgYmUgaW52b2tlZCBmb3IgdGhlIHRvcG1vc3QgbGV2ZWwgYWN0aW9ucywgc28gaXQgd29uJ3QgcnVuIGZvciBjaGlsZCBhY3Rpb25zIG9yIGludGVybWVkaWFyeSBmbG93IHN0ZXBzLlxuICogQWxzbyBpdCB3b24ndCB0cmlnZ2VyIHRoZSBsaXN0ZW5lciBmb3IgY2FsbHMgdG8gaG9va3Mgc3VjaCBhcyBgb25BdHRhY2hlZFRvUm9vdFN0b3JlYCBvciBpdHMgcmV0dXJuZWQgZGlzcG9zZXIuXG4gKlxuICogSXRzIG1haW4gdXNlIGlzIHRvIGtlZXAgdHJhY2sgb2YgdG9wIGxldmVsIGFjdGlvbnMgdGhhdCBjYW4gYmUgbGF0ZXIgcmVwbGljYXRlZCB2aWEgYGFwcGx5QWN0aW9uYCBzb21ld2hlcmUgZWxzZSAoYW5vdGhlciBtYWNoaW5lLCBldGMuKS5cbiAqXG4gKiBUaGVyZSBhcmUgdHdvIGtpbmQgb2YgcG9zc2libGUgbGlzdGVuZXJzLCBgb25TdGFydGAgYW5kIGBvbkZpbmlzaGAgbGlzdGVuZXJzLlxuICogYG9uU3RhcnRgIGxpc3RlbmVycyBhcmUgY2FsbGVkIGJlZm9yZSB0aGUgYWN0aW9uIGV4ZWN1dGVzIGFuZCBhbGxvdyBjYW5jZWxsYXRpb24gYnkgcmV0dXJuaW5nIGEgbmV3IHJldHVybiB2YWx1ZSAod2hpY2ggbWlnaHQgYmUgYSByZXR1cm4gb3IgYSB0aHJvdykuXG4gKiBgb25GaW5pc2hgIGxpc3RlbmVycyBhcmUgY2FsbGVkIGFmdGVyIHRoZSBhY3Rpb24gZXhlY3V0ZXMsIGhhdmUgYWNjZXNzIHRvIHRoZSBhY3Rpb24gYWN0dWFsIHJldHVybiB2YWx1ZSBhbmQgYWxsb3cgb3ZlcnJpZGluZyBieSByZXR1cm5pbmcgYVxuICogbmV3IHJldHVybiB2YWx1ZSAod2hpY2ggbWlnaHQgYmUgYSByZXR1cm4gb3IgYSB0aHJvdykuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBhY3Rpb24gY2FsbHMgYXJlIHNlcmlhbGl6YWJsZSB5b3Ugc2hvdWxkIHVzZSBlaXRoZXIgYHNlcmlhbGl6ZUFjdGlvbkNhbGxBcmd1bWVudGAgb3ZlciB0aGUgYXJndW1lbnRzXG4gKiBvciBgc2VyaWFsaXplQWN0aW9uQ2FsbGAgb3ZlciB0aGUgd2hvbGUgYWN0aW9uIGJlZm9yZSBzZW5kaW5nIHRoZSBhY3Rpb24gY2FsbCBvdmVyIHRoZSB3aXJlIC8gc3RvcmluZyB0aGVtIC5cbiAqXG4gKiBAcGFyYW0gc3VidHJlZVJvb3QgU3VidHJlZSByb290IHRhcmdldCBvYmplY3QuXG4gKiBAcGFyYW0gbGlzdGVuZXJzIExpc3RlbmVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgaW52b2tlZCBldmVyeXRpbWUgYSB0b3Btb3N0IGFjdGlvbiBpcyBpbnZva2VkIG9uIHRoZSBtb2RlbCBvciBhbnkgY2hpbGRyZW4uXG4gKiBAcmV0dXJucyBUaGUgbWlkZGxld2FyZSBkaXNwb3Nlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uQWN0aW9uTWlkZGxld2FyZShcbiAgc3VidHJlZVJvb3Q6IG9iamVjdCxcbiAgbGlzdGVuZXJzOiB7XG4gICAgb25TdGFydD86IChcbiAgICAgIGFjdGlvbkNhbGw6IEFjdGlvbkNhbGwsXG4gICAgICBhY3Rpb25Db250ZXh0OiBTaW1wbGVBY3Rpb25Db250ZXh0XG4gICAgKSA9PiB2b2lkIHwgQWN0aW9uVHJhY2tpbmdSZXR1cm5cbiAgICBvbkZpbmlzaD86IChcbiAgICAgIGFjdGlvbkNhbGw6IEFjdGlvbkNhbGwsXG4gICAgICBhY3Rpb25Db250ZXh0OiBTaW1wbGVBY3Rpb25Db250ZXh0LFxuICAgICAgcmV0OiBBY3Rpb25UcmFja2luZ1JldHVyblxuICAgICkgPT4gdm9pZCB8IEFjdGlvblRyYWNraW5nUmV0dXJuXG4gIH1cbik6IEFjdGlvbk1pZGRsZXdhcmVEaXNwb3NlciB7XG4gIGFzc2VydFR3ZWFrZWRPYmplY3Qoc3VidHJlZVJvb3QsIFwic3VidHJlZVJvb3RcIilcbiAgYXNzZXJ0SXNPYmplY3QobGlzdGVuZXJzLCBcImxpc3RlbmVyc1wiKVxuXG4gIHJldHVybiBhY3Rpb25UcmFja2luZ01pZGRsZXdhcmUoc3VidHJlZVJvb3QsIHtcbiAgICBmaWx0ZXIoY3R4KSB7XG4gICAgICBpZiAoY3R4LnBhcmVudENvbnRleHQpIHtcbiAgICAgICAgLy8gc3ViLWFjdGlvbiwgZG8gbm90aGluZ1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gc2tpcCBob29rc1xuICAgICAgaWYgKGlzSG9va0FjdGlvbihjdHguYWN0aW9uTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIG9uU3RhcnQoY3R4KSB7XG4gICAgICBpZiAobGlzdGVuZXJzLm9uU3RhcnQpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uQ2FsbCA9IGFjdGlvbkNvbnRleHRUb0FjdGlvbkNhbGwoY3R4KVxuICAgICAgICByZXR1cm4gbGlzdGVuZXJzLm9uU3RhcnQoYWN0aW9uQ2FsbCwgY3R4KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkZpbmlzaChjdHgsIHJldCkge1xuICAgICAgaWYgKGxpc3RlbmVycy5vbkZpbmlzaCkge1xuICAgICAgICBjb25zdCBhY3Rpb25DYWxsID0gYWN0aW9uQ29udGV4dFRvQWN0aW9uQ2FsbChjdHgpXG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnMub25GaW5pc2goYWN0aW9uQ2FsbCwgY3R4LCByZXQpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gYWN0aW9uQ29udGV4dFRvQWN0aW9uQ2FsbChjdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpOiBBY3Rpb25DYWxsIHtcbiAgY29uc3Qgcm9vdFBhdGggPSBmYXN0R2V0Um9vdFBhdGgoY3R4LnRhcmdldClcblxuICByZXR1cm4ge1xuICAgIGFjdGlvbk5hbWU6IGN0eC5hY3Rpb25OYW1lLFxuICAgIGFyZ3M6IGN0eC5hcmdzLFxuICAgIHRhcmdldFBhdGg6IHJvb3RQYXRoLnBhdGgsXG4gICAgdGFyZ2V0UGF0aElkczogcm9vdFBhdGhUb1RhcmdldFBhdGhJZHMocm9vdFBhdGgpLFxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OzRCQWlDRSxhQUNBO3NCQVlvQixhQUFhLGFBQWE7aUJBQy9CLFdBQVcsV0FBVztTQUU5Qix5QkFBeUIsYUFBYTtBQUFBLElBQzNDLE9BQU87VUFDRCxJQUFJLGVBQWU7ZUFFZDtBQUFBO1VBSUwsYUFBYSxJQUFJLFVBQVUsR0FBRztlQUN6QjtBQUFBO2FBR0Y7QUFBQTtJQUdULFFBQVE7VUFDRixVQUFVLFNBQVM7Y0FDZixhQUFhLDBCQUEwQixHQUFHO2VBQ3pDLFVBQVUsUUFBUSxZQUFZLEdBQUc7QUFBQTs7SUFJNUMsU0FBUyxLQUFLO1VBQ1IsVUFBVSxVQUFVO2NBQ2hCLGFBQWEsMEJBQTBCLEdBQUc7ZUFDekMsVUFBVSxTQUFTLFlBQVksS0FBSyxHQUFHO0FBQUE7O0dBR25EO0FBQ0g7QUFFQSxtQ0FBbUM7UUFDM0IsV0FBVyxnQkFBZ0IsSUFBSSxNQUFNO1NBRXBDO0FBQUEsSUFDTCxZQUFZLElBQUk7QUFBQSxJQUNoQixNQUFNLElBQUk7QUFBQSxJQUNWLFlBQVksU0FBUztBQUFBLElBQ3JCLGVBQWUsd0JBQXdCLFFBQVE7QUFBQTtBQUVuRDs7In0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { isHookAction } from "../action/hookActions.mjs";
|
|
2
|
+
import { assertTweakedObject } from "../tweaker/core.mjs";
|
|
3
|
+
import { failure } from "../utils/index.mjs";
|
|
4
|
+
import { actionTrackingMiddleware, ActionTrackingResult } from "./actionTrackingMiddleware.mjs";
|
|
5
|
+
function readonlyMiddleware(subtreeRoot) {
|
|
6
|
+
assertTweakedObject(subtreeRoot, "subtreeRoot");
|
|
7
|
+
let writable = false;
|
|
8
|
+
const writableSymbol = Symbol("writable");
|
|
9
|
+
const disposer = actionTrackingMiddleware(subtreeRoot, {
|
|
10
|
+
filter(ctx) {
|
|
11
|
+
if (isHookAction(ctx.actionName)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
let currentlyWritable = writable;
|
|
15
|
+
if (!currentlyWritable) {
|
|
16
|
+
let currentCtx = ctx;
|
|
17
|
+
while (currentCtx && !currentlyWritable) {
|
|
18
|
+
currentlyWritable = !!currentCtx.data[writableSymbol];
|
|
19
|
+
currentCtx = currentCtx.parentContext;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (currentlyWritable) {
|
|
23
|
+
ctx.data[writableSymbol] = true;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
},
|
|
28
|
+
onStart(ctx) {
|
|
29
|
+
return {
|
|
30
|
+
result: ActionTrackingResult.Throw,
|
|
31
|
+
value: failure(`tried to invoke action '${ctx.actionName}' over a readonly node`)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
dispose: disposer,
|
|
37
|
+
allowWrite(fn) {
|
|
38
|
+
const oldWritable = writable;
|
|
39
|
+
writable = true;
|
|
40
|
+
try {
|
|
41
|
+
return fn();
|
|
42
|
+
} finally {
|
|
43
|
+
writable = oldWritable;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export { readonlyMiddleware };
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlNaWRkbGV3YXJlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjdGlvbk1pZGRsZXdhcmVzL3JlYWRvbmx5TWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0hvb2tBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9uL2hvb2tBY3Rpb25zXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uTWlkZGxld2FyZURpc3Bvc2VyIH0gZnJvbSBcIi4uL2FjdGlvbi9taWRkbGV3YXJlXCJcbmltcG9ydCB7IGFzc2VydFR3ZWFrZWRPYmplY3QgfSBmcm9tIFwiLi4vdHdlYWtlci9jb3JlXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHNcIlxuaW1wb3J0IHtcbiAgYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlLFxuICBBY3Rpb25UcmFja2luZ1Jlc3VsdCxcbiAgU2ltcGxlQWN0aW9uQ29udGV4dCxcbn0gZnJvbSBcIi4vYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlXCJcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgcmVhZG9ubHkgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkb25seU1pZGRsZXdhcmVSZXR1cm4ge1xuICBhbGxvd1dyaXRlPFI+KGZuOiAoKSA9PiBSKTogUlxuXG4gIGRpc3Bvc2U6IEFjdGlvbk1pZGRsZXdhcmVEaXNwb3NlclxufVxuXG4vKipcbiAqIEF0dGFjaGVzIGFuIGFjdGlvbiBtaWRkbGV3YXJlIHRoYXQgd2lsbCB0aHJvdyB3aGVuIGFueSBhY3Rpb24gaXMgc3RhcnRlZFxuICogb3ZlciB0aGUgbm9kZSBvciBhbnkgb2YgdGhlIGNoaWxkIG5vZGVzLCB0aHVzIGVmZmVjdGl2ZWx5IG1ha2luZyB0aGUgc3VidHJlZVxuICogcmVhZG9ubHkuXG4gKlxuICogSXQgd2lsbCByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBgZGlzcG9zZWAgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBtaWRkbGV3YXJlIGFuZCBhIGBhbGxvd1dyaXRlYCBmdW5jdGlvblxuICogdGhhdCB3aWxsIGFsbG93IGFjdGlvbnMgdG8gYmUgc3RhcnRlZCBpbnNpZGUgdGhlIHByb3ZpZGVkIGNvZGUgYmxvY2suXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiAvLyBnaXZlbiBhIG1vZGVsIGluc3RhbmNlIG5hbWVkIHRvZG9cbiAqIGNvbnN0IHsgZGlzcG9zZSwgYWxsb3dXcml0ZSB9ID0gcmVhZG9ubHlNaWRkbGV3YXJlKHRvZG8pXG4gKlxuICogLy8gdGhpcyB3aWxsIHRocm93XG4gKiB0b2RvLnNldERvbmUoZmFsc2UpXG4gKiBhd2FpdCB0b2RvLnNldERvbmVBc3luYyhmYWxzZSlcbiAqXG4gKiAvLyB0aGlzIHdpbGwgd29ya1xuICogYWxsb3dXcml0ZSgoKSA9PiB0b2RvLnNldERvbmUoZmFsc2UpKVxuICogLy8gbm90ZTogZm9yIGFzeW5jIGFsd2F5cyB1c2Ugb25lIGFjdGlvbiBpbnZvY2F0aW9uIHBlciBhbGxvd1dyaXRlIVxuICogYXdhaXQgYWxsb3dXcml0ZSgoKSA9PiB0b2RvLnNldERvbmVBc3luYyhmYWxzZSkpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3VidHJlZVJvb3QgU3VidHJlZSByb290IHRhcmdldCBvYmplY3QuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgbWlkZGxld2FyZSBkaXNwb3NlciAoYGRpc3Bvc2VgKSBhbmQgYSBgYWxsb3dXcml0ZWAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkb25seU1pZGRsZXdhcmUoc3VidHJlZVJvb3Q6IG9iamVjdCk6IFJlYWRvbmx5TWlkZGxld2FyZVJldHVybiB7XG4gIGFzc2VydFR3ZWFrZWRPYmplY3Qoc3VidHJlZVJvb3QsIFwic3VidHJlZVJvb3RcIilcblxuICBsZXQgd3JpdGFibGUgPSBmYWxzZVxuICBjb25zdCB3cml0YWJsZVN5bWJvbCA9IFN5bWJvbChcIndyaXRhYmxlXCIpXG5cbiAgY29uc3QgZGlzcG9zZXIgPSBhY3Rpb25UcmFja2luZ01pZGRsZXdhcmUoc3VidHJlZVJvb3QsIHtcbiAgICBmaWx0ZXIoY3R4KSB7XG4gICAgICAvLyBza2lwIGhvb2tzXG4gICAgICBpZiAoaXNIb29rQWN0aW9uKGN0eC5hY3Rpb25OYW1lKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgYXJlIGluc2lkZSBhbGxvd1dyaXRlIGl0IGlzIHdyaXRhYmxlXG4gICAgICBsZXQgY3VycmVudGx5V3JpdGFibGUgPSB3cml0YWJsZVxuXG4gICAgICBpZiAoIWN1cnJlbnRseVdyaXRhYmxlKSB7XG4gICAgICAgIC8vIGlmIGEgcGFyZW50IGNvbnRleHQgd2FzIHdyaXRhYmxlIHRoZW4gdGhlIGNoaWxkIHNob3VsZCBiZSBhcyB3ZWxsXG4gICAgICAgIGxldCBjdXJyZW50Q3R4OiBTaW1wbGVBY3Rpb25Db250ZXh0IHwgdW5kZWZpbmVkID0gY3R4XG4gICAgICAgIHdoaWxlIChjdXJyZW50Q3R4ICYmICFjdXJyZW50bHlXcml0YWJsZSkge1xuICAgICAgICAgIGN1cnJlbnRseVdyaXRhYmxlID0gISFjdXJyZW50Q3R4LmRhdGFbd3JpdGFibGVTeW1ib2xdXG4gICAgICAgICAgY3VycmVudEN0eCA9IGN1cnJlbnRDdHgucGFyZW50Q29udGV4dFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50bHlXcml0YWJsZSkge1xuICAgICAgICBjdHguZGF0YVt3cml0YWJsZVN5bWJvbF0gPSB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBvblN0YXJ0KGN0eCkge1xuICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUgKHdhc24ndCBmaWx0ZXJlZCBvdXQpIGl0IGlzIG5vdCB3cml0YWJsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiBBY3Rpb25UcmFja2luZ1Jlc3VsdC5UaHJvdyxcbiAgICAgICAgdmFsdWU6IGZhaWx1cmUoYHRyaWVkIHRvIGludm9rZSBhY3Rpb24gJyR7Y3R4LmFjdGlvbk5hbWV9JyBvdmVyIGEgcmVhZG9ubHkgbm9kZWApLFxuICAgICAgfVxuICAgIH0sXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwb3NlOiBkaXNwb3NlcixcbiAgICBhbGxvd1dyaXRlKGZuKSB7XG4gICAgICBjb25zdCBvbGRXcml0YWJsZSA9IHdyaXRhYmxlXG4gICAgICB3cml0YWJsZSA9IHRydWVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbigpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB3cml0YWJsZSA9IG9sZFdyaXRhYmxlXG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7NEJBNkNtQztzQkFDYixhQUFhLGFBQWE7TUFFMUMsV0FBVztRQUNULGlCQUFpQixPQUFPLFVBQVU7UUFFbEMsV0FBVyx5QkFBeUIsYUFBYTtBQUFBLElBQ3JELE9BQU87VUFFRCxhQUFhLElBQUksVUFBVSxHQUFHO2VBQ3pCO0FBQUE7VUFJTCxvQkFBb0I7VUFFcEIsQ0FBQyxtQkFBbUI7WUFFbEIsYUFBOEM7ZUFDM0MsY0FBYyxDQUFDLG1CQUFtQjs4QkFDbkIsQ0FBQyxDQUFDLFdBQVcsS0FBSzt1QkFDekIsV0FBVztBQUFBOztVQUl4QixtQkFBbUI7WUFDakIsS0FBSyxrQkFBa0I7ZUFDcEI7QUFBQTthQUdGO0FBQUE7SUFHVCxRQUFRO2FBRUM7QUFBQSxRQUNMLFFBQVEscUJBQXFCO0FBQUEsUUFDN0IsT0FBTyxRQUFRLDJCQUEyQixJQUFJLGtDQUFrQztBQUFBOztHQUdyRjtTQUVNO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCxXQUFXO1lBQ0gsY0FBYztpQkFDVDtVQUNQO2VBQ0s7O21CQUVJO0FBQUE7OztBQUluQjs7In0=
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { assertIsModel } from "../model/utils.mjs";
|
|
2
|
+
import { checkModelDecoratorArgs } from "../modelShared/checkModelDecoratorArgs.mjs";
|
|
3
|
+
import { addModelClassInitializer } from "../modelShared/modelClassInitializer.mjs";
|
|
4
|
+
import { applyPatches } from "../patch/applyPatches.mjs";
|
|
5
|
+
import "mobx";
|
|
6
|
+
import { assertIsObject, failure } from "../utils/index.mjs";
|
|
7
|
+
import { internalPatchRecorder } from "../patch/patchRecorder.mjs";
|
|
8
|
+
import { actionTrackingMiddleware, ActionTrackingResult } from "./actionTrackingMiddleware.mjs";
|
|
9
|
+
function transactionMiddleware(target) {
|
|
10
|
+
assertIsObject(target, "target");
|
|
11
|
+
const { model, actionName } = target;
|
|
12
|
+
assertIsModel(model, "target.model");
|
|
13
|
+
if (typeof actionName !== "string") {
|
|
14
|
+
throw failure("target.actionName must be a string");
|
|
15
|
+
}
|
|
16
|
+
const patchRecorderSymbol = Symbol("patchRecorder");
|
|
17
|
+
function initPatchRecorder(ctx) {
|
|
18
|
+
ctx.rootContext.data[patchRecorderSymbol] = internalPatchRecorder(void 0, {
|
|
19
|
+
recording: false
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function getPatchRecorder(ctx) {
|
|
23
|
+
return ctx.rootContext.data[patchRecorderSymbol];
|
|
24
|
+
}
|
|
25
|
+
return actionTrackingMiddleware(model, {
|
|
26
|
+
filter(ctx) {
|
|
27
|
+
const rootContext = ctx.rootContext;
|
|
28
|
+
return rootContext.target === model && rootContext.actionName === actionName;
|
|
29
|
+
},
|
|
30
|
+
onStart(ctx) {
|
|
31
|
+
if (ctx === ctx.rootContext) {
|
|
32
|
+
initPatchRecorder(ctx);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
onResume(ctx) {
|
|
36
|
+
getPatchRecorder(ctx).recording = true;
|
|
37
|
+
},
|
|
38
|
+
onSuspend(ctx) {
|
|
39
|
+
getPatchRecorder(ctx).recording = false;
|
|
40
|
+
},
|
|
41
|
+
onFinish(ctx, ret) {
|
|
42
|
+
if (ctx === ctx.rootContext) {
|
|
43
|
+
const patchRecorder = getPatchRecorder(ctx);
|
|
44
|
+
try {
|
|
45
|
+
if (ret.result === ActionTrackingResult.Throw) {
|
|
46
|
+
const { events } = patchRecorder;
|
|
47
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
48
|
+
const event = events[i];
|
|
49
|
+
applyPatches(event.target, event.inversePatches, true);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
} finally {
|
|
53
|
+
patchRecorder.dispose();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function transaction(target, propertyKey) {
|
|
60
|
+
checkModelDecoratorArgs("transaction", target, propertyKey);
|
|
61
|
+
addModelClassInitializer(target.constructor, (modelInstance) => {
|
|
62
|
+
transactionMiddleware({
|
|
63
|
+
model: modelInstance,
|
|
64
|
+
actionName: propertyKey
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export { transaction, transactionMiddleware };
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25NaWRkbGV3YXJlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjdGlvbk1pZGRsZXdhcmVzL3RyYW5zYWN0aW9uTWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbk1pZGRsZXdhcmVEaXNwb3NlciB9IGZyb20gXCIuLi9hY3Rpb24vbWlkZGxld2FyZVwiXG5pbXBvcnQgdHlwZSB7IEFueU1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL0Jhc2VNb2RlbFwiXG5pbXBvcnQgeyBhc3NlcnRJc01vZGVsIH0gZnJvbSBcIi4uL21vZGVsL3V0aWxzXCJcbmltcG9ydCB7IGNoZWNrTW9kZWxEZWNvcmF0b3JBcmdzIH0gZnJvbSBcIi4uL21vZGVsU2hhcmVkL2NoZWNrTW9kZWxEZWNvcmF0b3JBcmdzXCJcbmltcG9ydCB7IGFkZE1vZGVsQ2xhc3NJbml0aWFsaXplciB9IGZyb20gXCIuLi9tb2RlbFNoYXJlZC9tb2RlbENsYXNzSW5pdGlhbGl6ZXJcIlxuaW1wb3J0IHsgYXBwbHlQYXRjaGVzIH0gZnJvbSBcIi4uL3BhdGNoXCJcbmltcG9ydCB7IGludGVybmFsUGF0Y2hSZWNvcmRlciwgUGF0Y2hSZWNvcmRlciB9IGZyb20gXCIuLi9wYXRjaC9wYXRjaFJlY29yZGVyXCJcbmltcG9ydCB7IGFzc2VydElzT2JqZWN0LCBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzXCJcbmltcG9ydCB7XG4gIGFjdGlvblRyYWNraW5nTWlkZGxld2FyZSxcbiAgQWN0aW9uVHJhY2tpbmdSZXN1bHQsXG4gIFNpbXBsZUFjdGlvbkNvbnRleHQsXG59IGZyb20gXCIuL2FjdGlvblRyYWNraW5nTWlkZGxld2FyZVwiXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyYW5zYWN0aW9uIG1pZGRsZXdhcmUsIHdoaWNoIHJldmVydHMgY2hhbmdlcyBtYWRlIGJ5IGFuIGFjdGlvbiAvIGNoaWxkXG4gKiBhY3Rpb25zIHdoZW4gdGhlIHJvb3QgYWN0aW9uIHRocm93cyBhbiBleGNlcHRpb24gYnkgYXBwbHlpbmcgaW52ZXJzZSBwYXRjaGVzLlxuICpcbiAqIEB0eXBlcGFyYW0gTSBNb2RlbFxuICogQHBhcmFtIHRhcmdldCBPYmplY3Qgd2l0aCB0aGUgcm9vdCB0YXJnZXQgbW9kZWwgb2JqZWN0IChgbW9kZWxgKSBhbmQgcm9vdCBhY3Rpb24gbmFtZSAoYGFjdGlvbk5hbWVgKS5cbiAqIEByZXR1cm5zIFRoZSBtaWRkbGV3YXJlIGRpc3Bvc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25NaWRkbGV3YXJlPE0gZXh0ZW5kcyBBbnlNb2RlbD4odGFyZ2V0OiB7XG4gIG1vZGVsOiBNXG4gIGFjdGlvbk5hbWU6IGtleW9mIE1cbn0pOiBBY3Rpb25NaWRkbGV3YXJlRGlzcG9zZXIge1xuICBhc3NlcnRJc09iamVjdCh0YXJnZXQsIFwidGFyZ2V0XCIpXG5cbiAgY29uc3QgeyBtb2RlbCwgYWN0aW9uTmFtZSB9ID0gdGFyZ2V0XG5cbiAgYXNzZXJ0SXNNb2RlbChtb2RlbCwgXCJ0YXJnZXQubW9kZWxcIilcblxuICBpZiAodHlwZW9mIGFjdGlvbk5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBmYWlsdXJlKFwidGFyZ2V0LmFjdGlvbk5hbWUgbXVzdCBiZSBhIHN0cmluZ1wiKVxuICB9XG5cbiAgY29uc3QgcGF0Y2hSZWNvcmRlclN5bWJvbCA9IFN5bWJvbChcInBhdGNoUmVjb3JkZXJcIilcbiAgZnVuY3Rpb24gaW5pdFBhdGNoUmVjb3JkZXIoY3R4OiBTaW1wbGVBY3Rpb25Db250ZXh0KSB7XG4gICAgY3R4LnJvb3RDb250ZXh0LmRhdGFbcGF0Y2hSZWNvcmRlclN5bWJvbF0gPSBpbnRlcm5hbFBhdGNoUmVjb3JkZXIodW5kZWZpbmVkLCB7XG4gICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgIH0pXG4gIH1cbiAgZnVuY3Rpb24gZ2V0UGF0Y2hSZWNvcmRlcihjdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpOiBQYXRjaFJlY29yZGVyIHtcbiAgICByZXR1cm4gY3R4LnJvb3RDb250ZXh0LmRhdGFbcGF0Y2hSZWNvcmRlclN5bWJvbF1cbiAgfVxuXG4gIHJldHVybiBhY3Rpb25UcmFja2luZ01pZGRsZXdhcmUobW9kZWwsIHtcbiAgICBmaWx0ZXIoY3R4KSB7XG4gICAgICAvLyB0aGUgcHJpbWFyeSBhY3Rpb24gbXVzdCBiZSBvbiB0aGUgcm9vdCBvYmplY3RcbiAgICAgIGNvbnN0IHJvb3RDb250ZXh0ID0gY3R4LnJvb3RDb250ZXh0XG4gICAgICByZXR1cm4gcm9vdENvbnRleHQudGFyZ2V0ID09PSBtb2RlbCAmJiByb290Q29udGV4dC5hY3Rpb25OYW1lID09PSBhY3Rpb25OYW1lXG4gICAgfSxcbiAgICBvblN0YXJ0KGN0eCkge1xuICAgICAgaWYgKGN0eCA9PT0gY3R4LnJvb3RDb250ZXh0KSB7XG4gICAgICAgIGluaXRQYXRjaFJlY29yZGVyKGN0eClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uUmVzdW1lKGN0eCkge1xuICAgICAgZ2V0UGF0Y2hSZWNvcmRlcihjdHgpLnJlY29yZGluZyA9IHRydWVcbiAgICB9LFxuICAgIG9uU3VzcGVuZChjdHgpIHtcbiAgICAgIGdldFBhdGNoUmVjb3JkZXIoY3R4KS5yZWNvcmRpbmcgPSBmYWxzZVxuICAgIH0sXG4gICAgb25GaW5pc2goY3R4LCByZXQpIHtcbiAgICAgIGlmIChjdHggPT09IGN0eC5yb290Q29udGV4dCkge1xuICAgICAgICBjb25zdCBwYXRjaFJlY29yZGVyID0gZ2V0UGF0Y2hSZWNvcmRlcihjdHgpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAocmV0LnJlc3VsdCA9PT0gQWN0aW9uVHJhY2tpbmdSZXN1bHQuVGhyb3cpIHtcbiAgICAgICAgICAgIC8vIHVuZG8gY2hhbmdlcyAoYmFja3dhcmRzIGZvciBpbnZlcnNlIHBhdGNoZXMpXG4gICAgICAgICAgICBjb25zdCB7IGV2ZW50cyB9ID0gcGF0Y2hSZWNvcmRlclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpXVxuICAgICAgICAgICAgICBhcHBseVBhdGNoZXMoZXZlbnQudGFyZ2V0LCBldmVudC5pbnZlcnNlUGF0Y2hlcywgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcGF0Y2hSZWNvcmRlci5kaXNwb3NlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gbWlkZGxld2FyZSBhcyBhIGRlY29yYXRvci5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gcHJvcGVydHlLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCB7XG4gIGNoZWNrTW9kZWxEZWNvcmF0b3JBcmdzKFwidHJhbnNhY3Rpb25cIiwgdGFyZ2V0LCBwcm9wZXJ0eUtleSlcblxuICBhZGRNb2RlbENsYXNzSW5pdGlhbGl6ZXIodGFyZ2V0LmNvbnN0cnVjdG9yLCAobW9kZWxJbnN0YW5jZSkgPT4ge1xuICAgIHRyYW5zYWN0aW9uTWlkZGxld2FyZSh7XG4gICAgICBtb2RlbDogbW9kZWxJbnN0YW5jZSBhcyBBbnlNb2RlbCxcbiAgICAgIGFjdGlvbk5hbWU6IHByb3BlcnR5S2V5IGFzIGFueSxcbiAgICB9KVxuICB9KVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OytCQXNCMEQ7aUJBSXpDLFFBQVEsUUFBUTtRQUV6QixFQUFFLE9BQU8sZUFBZTtnQkFFaEIsT0FBTyxjQUFjO01BRS9CLE9BQU8sZUFBZSxVQUFVO1VBQzVCLFFBQVEsb0NBQW9DO0FBQUE7UUFHOUMsc0JBQXNCLE9BQU8sZUFBZTs2QkFDdkI7UUFDckIsWUFBWSxLQUFLLHVCQUF1QixzQkFBc0IsUUFBVztBQUFBLE1BQzNFLFdBQVc7QUFBQSxLQUNaO0FBQUE7NEJBRXVCO1dBQ2pCLElBQUksWUFBWSxLQUFLO0FBQUE7U0FHdkIseUJBQXlCLE9BQU87QUFBQSxJQUNyQyxPQUFPO1lBRUMsY0FBYyxJQUFJO2FBQ2pCLFlBQVksV0FBVyxTQUFTLFlBQVksZUFBZTtBQUFBO0lBRXBFLFFBQVE7VUFDRixRQUFRLElBQUksYUFBYTswQkFDVCxHQUFHO0FBQUE7O0lBR3pCLFNBQVM7dUJBQ1UsR0FBRyxFQUFFLFlBQVk7QUFBQTtJQUVwQyxVQUFVO3VCQUNTLEdBQUcsRUFBRSxZQUFZO0FBQUE7SUFFcEMsU0FBUyxLQUFLO1VBQ1IsUUFBUSxJQUFJLGFBQWE7Y0FDckIsZ0JBQWdCLGlCQUFpQixHQUFHO1lBRXRDO2NBQ0UsSUFBSSxXQUFXLHFCQUFxQixPQUFPO2tCQUV2QyxFQUFFLFdBQVc7cUJBQ1YsSUFBSSxPQUFPLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztvQkFDckMsUUFBUSxPQUFPOzJCQUNSLE1BQU0sUUFBUSxNQUFNLGdCQUFnQixJQUFJO0FBQUE7Ozt3QkFJM0M7Ozs7R0FJckI7QUFDSDtxQkFRNEIsUUFBYTswQkFDZixlQUFlLFFBQVEsV0FBVzsyQkFFakMsT0FBTyxhQUFhLENBQUM7MEJBQ3RCO0FBQUEsTUFDcEIsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLEtBQ2I7QUFBQSxHQUNGO0FBQ0g7OyJ9
|