mobx-keystone 0.68.0 → 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/dist/_virtual/_tslib.mjs +12 -0
- 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/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/package.json +8 -11
- 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/dist/mobx-keystone.es.js +0 -7934
- package/dist/mobx-keystone.es.mjs +0 -7934
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __publicField = (obj, key, value) => {
|
|
21
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
import { __decorate } from "../../_virtual/_tslib.mjs";
|
|
25
|
+
import { computed, action } from "mobx";
|
|
26
|
+
import { modelAction } from "../action/modelAction.mjs";
|
|
27
|
+
import { Model } from "../model/Model.mjs";
|
|
28
|
+
import { model } from "../modelShared/modelDecorator.mjs";
|
|
29
|
+
import { fastGetRootPath } from "../parent/path.mjs";
|
|
30
|
+
import { applyPatches } from "../patch/applyPatches.mjs";
|
|
31
|
+
import { assertTweakedObject } from "../tweaker/core.mjs";
|
|
32
|
+
import { failure, namespace, getMobxVersion, mobx6 } from "../utils/index.mjs";
|
|
33
|
+
import { patchRecorder } from "../patch/patchRecorder.mjs";
|
|
34
|
+
import { typesArray } from "../types/arrayBased/array.mjs";
|
|
35
|
+
import { tProp } from "../types/tProp.mjs";
|
|
36
|
+
import { typesUnchecked } from "../types/utility/unchecked.mjs";
|
|
37
|
+
import { actionTrackingMiddleware } from "./actionTrackingMiddleware.mjs";
|
|
38
|
+
var UndoEventType;
|
|
39
|
+
(function(UndoEventType2) {
|
|
40
|
+
UndoEventType2["Single"] = "single";
|
|
41
|
+
UndoEventType2["Group"] = "group";
|
|
42
|
+
})(UndoEventType || (UndoEventType = {}));
|
|
43
|
+
function toSingleEvents(event, reverse) {
|
|
44
|
+
if (event.type === UndoEventType.Single)
|
|
45
|
+
return [event];
|
|
46
|
+
else {
|
|
47
|
+
const array = [];
|
|
48
|
+
for (const e of event.events) {
|
|
49
|
+
if (reverse) {
|
|
50
|
+
array.unshift(...toSingleEvents(e, true));
|
|
51
|
+
} else {
|
|
52
|
+
array.push(...toSingleEvents(e, false));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return array;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
let UndoStore = class UndoStore2 extends Model({
|
|
59
|
+
undoEvents: tProp(typesArray(typesUnchecked()), () => []),
|
|
60
|
+
redoEvents: tProp(typesArray(typesUnchecked()), () => [])
|
|
61
|
+
}) {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
__publicField(this, "_groupStack", []);
|
|
65
|
+
}
|
|
66
|
+
_clearUndo() {
|
|
67
|
+
withoutUndo(() => {
|
|
68
|
+
this.undoEvents.length = 0;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
_clearRedo() {
|
|
72
|
+
withoutUndo(() => {
|
|
73
|
+
this.redoEvents.length = 0;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
_undo() {
|
|
77
|
+
withoutUndo(() => {
|
|
78
|
+
const event = this.undoEvents.pop();
|
|
79
|
+
this.redoEvents.push(event);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
_redo() {
|
|
83
|
+
withoutUndo(() => {
|
|
84
|
+
const event = this.redoEvents.pop();
|
|
85
|
+
this.undoEvents.push(event);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
_addUndo(event) {
|
|
89
|
+
withoutUndo(() => {
|
|
90
|
+
this.undoEvents.push(event);
|
|
91
|
+
this.redoEvents.length = 0;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
_addUndoToParentGroup(parentGroup, event) {
|
|
95
|
+
parentGroup.events.push(event);
|
|
96
|
+
}
|
|
97
|
+
get _currentGroup() {
|
|
98
|
+
return this._groupStack[this._groupStack.length - 1];
|
|
99
|
+
}
|
|
100
|
+
_startGroup(groupName, startRunning, options) {
|
|
101
|
+
var _a;
|
|
102
|
+
let running = false;
|
|
103
|
+
let ended = false;
|
|
104
|
+
const parentGroup = this._currentGroup;
|
|
105
|
+
const group = {
|
|
106
|
+
type: UndoEventType.Group,
|
|
107
|
+
groupName,
|
|
108
|
+
events: []
|
|
109
|
+
};
|
|
110
|
+
const attachedStateBeforeEvent = parentGroup ? void 0 : (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save();
|
|
111
|
+
const api = {
|
|
112
|
+
pause: () => {
|
|
113
|
+
if (ended) {
|
|
114
|
+
throw failure("cannot pause a group when it is already ended");
|
|
115
|
+
}
|
|
116
|
+
if (!running) {
|
|
117
|
+
throw failure("cannot pause a group when it is not running");
|
|
118
|
+
}
|
|
119
|
+
if (this._currentGroup !== group) {
|
|
120
|
+
throw failure("group out of order");
|
|
121
|
+
}
|
|
122
|
+
this._groupStack.pop();
|
|
123
|
+
running = false;
|
|
124
|
+
},
|
|
125
|
+
resume: () => {
|
|
126
|
+
if (ended) {
|
|
127
|
+
throw failure("cannot resume a group when it is already ended");
|
|
128
|
+
}
|
|
129
|
+
if (running) {
|
|
130
|
+
throw failure("cannot resume a group when it is already running");
|
|
131
|
+
}
|
|
132
|
+
this._groupStack.push(group);
|
|
133
|
+
running = true;
|
|
134
|
+
},
|
|
135
|
+
end: () => {
|
|
136
|
+
var _a2;
|
|
137
|
+
if (running) {
|
|
138
|
+
api.pause();
|
|
139
|
+
}
|
|
140
|
+
ended = true;
|
|
141
|
+
if (parentGroup) {
|
|
142
|
+
this._addUndoToParentGroup(parentGroup, group);
|
|
143
|
+
} else {
|
|
144
|
+
this._addUndo(__spreadProps(__spreadValues({}, group), {
|
|
145
|
+
attachedState: {
|
|
146
|
+
beforeEvent: attachedStateBeforeEvent,
|
|
147
|
+
afterEvent: (_a2 = options == null ? void 0 : options.attachedState) == null ? void 0 : _a2.save()
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
if (startRunning) {
|
|
154
|
+
api.resume();
|
|
155
|
+
}
|
|
156
|
+
return api;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
__decorate([
|
|
160
|
+
modelAction
|
|
161
|
+
], UndoStore.prototype, "_clearUndo", null);
|
|
162
|
+
__decorate([
|
|
163
|
+
modelAction
|
|
164
|
+
], UndoStore.prototype, "_clearRedo", null);
|
|
165
|
+
__decorate([
|
|
166
|
+
modelAction
|
|
167
|
+
], UndoStore.prototype, "_undo", null);
|
|
168
|
+
__decorate([
|
|
169
|
+
modelAction
|
|
170
|
+
], UndoStore.prototype, "_redo", null);
|
|
171
|
+
__decorate([
|
|
172
|
+
modelAction
|
|
173
|
+
], UndoStore.prototype, "_addUndo", null);
|
|
174
|
+
UndoStore = __decorate([
|
|
175
|
+
model(`${namespace}/UndoStore`)
|
|
176
|
+
], UndoStore);
|
|
177
|
+
class UndoManager {
|
|
178
|
+
constructor(disposer, subtreeRoot, store, options) {
|
|
179
|
+
__publicField(this, "disposer");
|
|
180
|
+
__publicField(this, "subtreeRoot");
|
|
181
|
+
__publicField(this, "options");
|
|
182
|
+
__publicField(this, "store");
|
|
183
|
+
__publicField(this, "_isUndoRecordingDisabled", false);
|
|
184
|
+
this.disposer = disposer;
|
|
185
|
+
this.subtreeRoot = subtreeRoot;
|
|
186
|
+
this.options = options;
|
|
187
|
+
if (getMobxVersion() >= 6) {
|
|
188
|
+
mobx6.makeObservable(this);
|
|
189
|
+
}
|
|
190
|
+
this.store = store != null ? store : new UndoStore({});
|
|
191
|
+
}
|
|
192
|
+
get undoQueue() {
|
|
193
|
+
return this.store.undoEvents;
|
|
194
|
+
}
|
|
195
|
+
get redoQueue() {
|
|
196
|
+
return this.store.redoEvents;
|
|
197
|
+
}
|
|
198
|
+
get undoLevels() {
|
|
199
|
+
return this.undoQueue.length;
|
|
200
|
+
}
|
|
201
|
+
get canUndo() {
|
|
202
|
+
return this.undoLevels > 0;
|
|
203
|
+
}
|
|
204
|
+
clearUndo() {
|
|
205
|
+
this.store._clearUndo();
|
|
206
|
+
}
|
|
207
|
+
get redoLevels() {
|
|
208
|
+
return this.redoQueue.length;
|
|
209
|
+
}
|
|
210
|
+
get canRedo() {
|
|
211
|
+
return this.redoLevels > 0;
|
|
212
|
+
}
|
|
213
|
+
clearRedo() {
|
|
214
|
+
this.store._clearRedo();
|
|
215
|
+
}
|
|
216
|
+
undo() {
|
|
217
|
+
if (!this.canUndo) {
|
|
218
|
+
throw failure("nothing to undo");
|
|
219
|
+
}
|
|
220
|
+
const event = this.undoQueue[this.undoQueue.length - 1];
|
|
221
|
+
withoutUndo(() => {
|
|
222
|
+
var _a, _b, _c;
|
|
223
|
+
toSingleEvents(event, true).forEach((e) => {
|
|
224
|
+
applyPatches(this.subtreeRoot, e.inversePatches, true);
|
|
225
|
+
});
|
|
226
|
+
if ((_a = event.attachedState) == null ? void 0 : _a.beforeEvent) {
|
|
227
|
+
(_c = (_b = this.options) == null ? void 0 : _b.attachedState) == null ? void 0 : _c.restore(event.attachedState.beforeEvent);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
this.store._undo();
|
|
231
|
+
}
|
|
232
|
+
redo() {
|
|
233
|
+
if (!this.canRedo) {
|
|
234
|
+
throw failure("nothing to redo");
|
|
235
|
+
}
|
|
236
|
+
const event = this.redoQueue[this.redoQueue.length - 1];
|
|
237
|
+
withoutUndo(() => {
|
|
238
|
+
var _a, _b, _c;
|
|
239
|
+
toSingleEvents(event, false).forEach((e) => {
|
|
240
|
+
applyPatches(this.subtreeRoot, e.patches);
|
|
241
|
+
});
|
|
242
|
+
if ((_a = event.attachedState) == null ? void 0 : _a.afterEvent) {
|
|
243
|
+
(_c = (_b = this.options) == null ? void 0 : _b.attachedState) == null ? void 0 : _c.restore(event.attachedState.afterEvent);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
this.store._redo();
|
|
247
|
+
}
|
|
248
|
+
dispose() {
|
|
249
|
+
this.disposer();
|
|
250
|
+
}
|
|
251
|
+
get isUndoRecordingDisabled() {
|
|
252
|
+
return this._isUndoRecordingDisabled;
|
|
253
|
+
}
|
|
254
|
+
withoutUndo(fn) {
|
|
255
|
+
const savedUndoDisabled = this._isUndoRecordingDisabled;
|
|
256
|
+
this._isUndoRecordingDisabled = true;
|
|
257
|
+
try {
|
|
258
|
+
return fn();
|
|
259
|
+
} finally {
|
|
260
|
+
this._isUndoRecordingDisabled = savedUndoDisabled;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
createGroup(groupName) {
|
|
264
|
+
const group = this.store._startGroup(groupName, false, this.options);
|
|
265
|
+
return {
|
|
266
|
+
continue(fn) {
|
|
267
|
+
group.resume();
|
|
268
|
+
try {
|
|
269
|
+
return fn();
|
|
270
|
+
} finally {
|
|
271
|
+
group.pause();
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
end() {
|
|
275
|
+
group.end();
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
withGroup(arg1, arg2) {
|
|
280
|
+
let groupName;
|
|
281
|
+
let fn;
|
|
282
|
+
if (typeof arg1 === "string") {
|
|
283
|
+
groupName = arg1;
|
|
284
|
+
fn = arg2;
|
|
285
|
+
} else {
|
|
286
|
+
fn = arg1;
|
|
287
|
+
}
|
|
288
|
+
const group = this.store._startGroup(groupName, true, this.options);
|
|
289
|
+
try {
|
|
290
|
+
return fn();
|
|
291
|
+
} finally {
|
|
292
|
+
group.end();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
withGroupFlow(arg1, arg2) {
|
|
296
|
+
let groupName;
|
|
297
|
+
let fn;
|
|
298
|
+
if (typeof arg1 === "string") {
|
|
299
|
+
groupName = arg1;
|
|
300
|
+
fn = arg2;
|
|
301
|
+
} else {
|
|
302
|
+
fn = arg1;
|
|
303
|
+
}
|
|
304
|
+
const gen = fn();
|
|
305
|
+
const group = this.store._startGroup(groupName, false, this.options);
|
|
306
|
+
const genNext = gen.next.bind(gen);
|
|
307
|
+
const genThrow = gen.throw.bind(gen);
|
|
308
|
+
const promise = new Promise(function(resolve, reject) {
|
|
309
|
+
function onFulfilled(res) {
|
|
310
|
+
group.resume();
|
|
311
|
+
let ret;
|
|
312
|
+
try {
|
|
313
|
+
ret = genNext(res);
|
|
314
|
+
} catch (e) {
|
|
315
|
+
group.end();
|
|
316
|
+
reject(e);
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
group.pause();
|
|
320
|
+
next(ret);
|
|
321
|
+
}
|
|
322
|
+
function onRejected(err) {
|
|
323
|
+
group.resume();
|
|
324
|
+
let ret;
|
|
325
|
+
try {
|
|
326
|
+
ret = genThrow(err);
|
|
327
|
+
} catch (e) {
|
|
328
|
+
group.end();
|
|
329
|
+
reject(e);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
group.pause();
|
|
333
|
+
next(ret);
|
|
334
|
+
}
|
|
335
|
+
function next(ret) {
|
|
336
|
+
if (ret && typeof ret.then === "function") {
|
|
337
|
+
ret.then(next, reject);
|
|
338
|
+
} else if (ret.done) {
|
|
339
|
+
group.end();
|
|
340
|
+
resolve(ret.value);
|
|
341
|
+
} else {
|
|
342
|
+
Promise.resolve(ret.value).then(onFulfilled, onRejected);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
onFulfilled(void 0);
|
|
346
|
+
});
|
|
347
|
+
return promise;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
__decorate([
|
|
351
|
+
computed
|
|
352
|
+
], UndoManager.prototype, "undoQueue", null);
|
|
353
|
+
__decorate([
|
|
354
|
+
computed
|
|
355
|
+
], UndoManager.prototype, "redoQueue", null);
|
|
356
|
+
__decorate([
|
|
357
|
+
computed
|
|
358
|
+
], UndoManager.prototype, "undoLevels", null);
|
|
359
|
+
__decorate([
|
|
360
|
+
computed
|
|
361
|
+
], UndoManager.prototype, "canUndo", null);
|
|
362
|
+
__decorate([
|
|
363
|
+
action
|
|
364
|
+
], UndoManager.prototype, "clearUndo", null);
|
|
365
|
+
__decorate([
|
|
366
|
+
computed
|
|
367
|
+
], UndoManager.prototype, "redoLevels", null);
|
|
368
|
+
__decorate([
|
|
369
|
+
computed
|
|
370
|
+
], UndoManager.prototype, "canRedo", null);
|
|
371
|
+
__decorate([
|
|
372
|
+
action
|
|
373
|
+
], UndoManager.prototype, "clearRedo", null);
|
|
374
|
+
__decorate([
|
|
375
|
+
action
|
|
376
|
+
], UndoManager.prototype, "undo", null);
|
|
377
|
+
__decorate([
|
|
378
|
+
action
|
|
379
|
+
], UndoManager.prototype, "redo", null);
|
|
380
|
+
function undoMiddleware(subtreeRoot, store, options) {
|
|
381
|
+
assertTweakedObject(subtreeRoot, "subtreeRoot");
|
|
382
|
+
let manager;
|
|
383
|
+
const patchRecorderSymbol = Symbol("patchRecorder");
|
|
384
|
+
function initPatchRecorder(ctx) {
|
|
385
|
+
var _a;
|
|
386
|
+
const group = manager.store._currentGroup;
|
|
387
|
+
const patchRecorderData = {
|
|
388
|
+
recorder: patchRecorder(subtreeRoot, {
|
|
389
|
+
recording: false,
|
|
390
|
+
filter: () => {
|
|
391
|
+
return !_isGlobalUndoRecordingDisabled && !manager.isUndoRecordingDisabled;
|
|
392
|
+
}
|
|
393
|
+
}),
|
|
394
|
+
recorderStack: 0,
|
|
395
|
+
undoRootContext: ctx,
|
|
396
|
+
group,
|
|
397
|
+
attachedStateBeforeEvent: (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save()
|
|
398
|
+
};
|
|
399
|
+
ctx.rootContext.data[patchRecorderSymbol] = patchRecorderData;
|
|
400
|
+
}
|
|
401
|
+
function getPatchRecorderData(ctx) {
|
|
402
|
+
return ctx.rootContext.data[patchRecorderSymbol];
|
|
403
|
+
}
|
|
404
|
+
const middlewareDisposer = actionTrackingMiddleware(subtreeRoot, {
|
|
405
|
+
onStart(ctx) {
|
|
406
|
+
if (!getPatchRecorderData(ctx)) {
|
|
407
|
+
initPatchRecorder(ctx);
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
onResume(ctx) {
|
|
411
|
+
const patchRecorderData = getPatchRecorderData(ctx);
|
|
412
|
+
patchRecorderData.recorderStack++;
|
|
413
|
+
patchRecorderData.recorder.recording = patchRecorderData.recorderStack > 0;
|
|
414
|
+
},
|
|
415
|
+
onSuspend(ctx) {
|
|
416
|
+
const patchRecorderData = getPatchRecorderData(ctx);
|
|
417
|
+
patchRecorderData.recorderStack--;
|
|
418
|
+
patchRecorderData.recorder.recording = patchRecorderData.recorderStack > 0;
|
|
419
|
+
},
|
|
420
|
+
onFinish(ctx) {
|
|
421
|
+
var _a;
|
|
422
|
+
const patchRecorderData = getPatchRecorderData(ctx);
|
|
423
|
+
if (patchRecorderData && patchRecorderData.undoRootContext === ctx) {
|
|
424
|
+
const patchRecorder2 = patchRecorderData.recorder;
|
|
425
|
+
if (patchRecorder2.events.length > 0) {
|
|
426
|
+
const patches = [];
|
|
427
|
+
const inversePatches = [];
|
|
428
|
+
for (const event2 of patchRecorder2.events) {
|
|
429
|
+
patches.push(...event2.patches);
|
|
430
|
+
inversePatches.push(...event2.inversePatches);
|
|
431
|
+
}
|
|
432
|
+
const event = {
|
|
433
|
+
type: UndoEventType.Single,
|
|
434
|
+
targetPath: fastGetRootPath(ctx.target).path,
|
|
435
|
+
actionName: ctx.actionName,
|
|
436
|
+
patches,
|
|
437
|
+
inversePatches
|
|
438
|
+
};
|
|
439
|
+
const parentGroup = patchRecorderData.group;
|
|
440
|
+
if (parentGroup) {
|
|
441
|
+
manager.store._addUndoToParentGroup(parentGroup, event);
|
|
442
|
+
} else {
|
|
443
|
+
manager.store._addUndo(__spreadProps(__spreadValues({}, event), {
|
|
444
|
+
attachedState: {
|
|
445
|
+
beforeEvent: patchRecorderData.attachedStateBeforeEvent,
|
|
446
|
+
afterEvent: (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save()
|
|
447
|
+
}
|
|
448
|
+
}));
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
patchRecorder2.dispose();
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
manager = new UndoManager(middlewareDisposer, subtreeRoot, store, options);
|
|
456
|
+
return manager;
|
|
457
|
+
}
|
|
458
|
+
let _isGlobalUndoRecordingDisabled = false;
|
|
459
|
+
function isGlobalUndoRecordingDisabled() {
|
|
460
|
+
return _isGlobalUndoRecordingDisabled;
|
|
461
|
+
}
|
|
462
|
+
function withoutUndo(fn) {
|
|
463
|
+
const savedUndoDisabled = _isGlobalUndoRecordingDisabled;
|
|
464
|
+
_isGlobalUndoRecordingDisabled = true;
|
|
465
|
+
try {
|
|
466
|
+
return fn();
|
|
467
|
+
} finally {
|
|
468
|
+
_isGlobalUndoRecordingDisabled = savedUndoDisabled;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
export { UndoEventType, UndoManager, UndoStore, isGlobalUndoRecordingDisabled, undoMiddleware, withoutUndo };
|
|
472
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kb01pZGRsZXdhcmUubWpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uTWlkZGxld2FyZXMvdW5kb01pZGRsZXdhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uLCBjb21wdXRlZCB9IGZyb20gXCJtb2J4XCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uTWlkZGxld2FyZURpc3Bvc2VyIH0gZnJvbSBcIi4uL2FjdGlvbi9taWRkbGV3YXJlXCJcbmltcG9ydCB7IG1vZGVsQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbi9tb2RlbEFjdGlvblwiXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFwiXG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCIuLi9tb2RlbFNoYXJlZC9tb2RlbERlY29yYXRvclwiXG5pbXBvcnQgeyBmYXN0R2V0Um9vdFBhdGggfSBmcm9tIFwiLi4vcGFyZW50L3BhdGhcIlxuaW1wb3J0IHR5cGUgeyBQYXRoIH0gZnJvbSBcIi4uL3BhcmVudC9wYXRoVHlwZXNcIlxuaW1wb3J0IHsgYXBwbHlQYXRjaGVzLCBQYXRjaCwgcGF0Y2hSZWNvcmRlciwgUGF0Y2hSZWNvcmRlciB9IGZyb20gXCIuLi9wYXRjaFwiXG5pbXBvcnQgeyBhc3NlcnRUd2Vha2VkT2JqZWN0IH0gZnJvbSBcIi4uL3R3ZWFrZXIvY29yZVwiXG5pbXBvcnQgeyB0eXBlc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2FycmF5QmFzZWQvYXJyYXlcIlxuaW1wb3J0IHsgdFByb3AgfSBmcm9tIFwiLi4vdHlwZXMvdFByb3BcIlxuaW1wb3J0IHsgdHlwZXNVbmNoZWNrZWQgfSBmcm9tIFwiLi4vdHlwZXMvdXRpbGl0eS91bmNoZWNrZWRcIlxuaW1wb3J0IHsgZmFpbHVyZSwgZ2V0TW9ieFZlcnNpb24sIG1vYng2LCBuYW1lc3BhY2UgfSBmcm9tIFwiLi4vdXRpbHNcIlxuaW1wb3J0IHsgYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlLCBTaW1wbGVBY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4vYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlXCJcblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gZXZlbnQgd2l0aG91dCBhdHRhY2hlZCBzdGF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgVW5kb0V2ZW50V2l0aG91dEF0dGFjaGVkU3RhdGUgPSBVbmRvU2luZ2xlRXZlbnQgfCBVbmRvRXZlbnRHcm91cFxuXG4vKipcbiAqIEFuIHVuZG8vcmVkbyBldmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgVW5kb0V2ZW50ID0gVW5kb0V2ZW50V2l0aG91dEF0dGFjaGVkU3RhdGUgJiB7XG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgc2F2ZWQgYmVmb3JlIHRoZSBldmVudCBhY3Rpb25zIHN0YXJ0ZWQgLyBhZnRlciB0aGUgZXZlbnQgYWN0aW9ucyBmaW5pc2hlZC5cbiAgICovXG4gIGF0dGFjaGVkU3RhdGU6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgc2F2ZWQgYmVmb3JlIHRoZSBldmVudCBhY3Rpb25zIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgYmVmb3JlRXZlbnQ/OiB1bmtub3duXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXRlIHNhdmVkIGFmdGVyIHRoZSBldmVudCBhY3Rpb25zIGZpbmlzaGVkLlxuICAgICAqL1xuICAgIGFmdGVyRXZlbnQ/OiB1bmtub3duXG4gIH1cbn1cblxuLyoqXG4gKiBVbmRvIGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFVuZG9FdmVudFR5cGUge1xuICBTaW5nbGUgPSBcInNpbmdsZVwiLFxuICBHcm91cCA9IFwiZ3JvdXBcIixcbn1cblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gc2luZ2xlIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuZG9TaW5nbGVFdmVudCB7XG4gIC8qKlxuICAgKiBFeHByZXNzZXMgdGhpcyBpcyBhIHNpbmdsZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFVuZG9FdmVudFR5cGUuU2luZ2xlXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBvYmplY3QgdGhhdCBpbnZva2VkIHRoZSBhY3Rpb24gZnJvbSBpdHMgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFBhdGg6IFBhdGhcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGFjdGlvbiB0aGF0IHdhcyBpbnZva2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBQYXRjaGVzIHdpdGggY2hhbmdlcyBkb25lIGluc2lkZSB0aGUgYWN0aW9uLlxuICAgKiBVc2UgYHJlZG8oKWAgaW4gdGhlIGBVbmRvTWFuYWdlcmAgdG8gYXBwbHkgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZXM6IFJlYWRvbmx5QXJyYXk8UGF0Y2g+XG4gIC8qKlxuICAgKiBQYXRjaGVzIHRvIHVuZG8gdGhlIGNoYW5nZXMgZG9uZSBpbnNpZGUgdGhlIGFjdGlvbi5cbiAgICogVXNlIGB1bmRvKClgIGluIHRoZSBgVW5kb01hbmFnZXJgIHRvIGFwcGx5IHRoZW0uXG4gICAqL1xuICByZWFkb25seSBpbnZlcnNlUGF0Y2hlczogUmVhZG9ubHlBcnJheTxQYXRjaD5cbn1cblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gZXZlbnQgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5kb0V2ZW50R3JvdXAge1xuICAvKipcbiAgICogRXhwcmVzc2VzIHRoaXMgaXMgYW4gZXZlbnQgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBVbmRvRXZlbnRUeXBlLkdyb3VwXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBncm91cCAoaWYgYW55KS5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICogRXZlbnRzIHRoYXQgY29uZm9ybSB0aGlzIGdyb3VwIChtaWdodCBiZSBzaW5nbGUgZXZlbnRzIG9yIG90aGVyIG5lc3RlZCBncm91cHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBSZWFkb25seUFycmF5PFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlPlxufVxuXG5mdW5jdGlvbiB0b1NpbmdsZUV2ZW50cyhcbiAgZXZlbnQ6IFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlLFxuICByZXZlcnNlOiBib29sZWFuXG4pOiBSZWFkb25seUFycmF5PFVuZG9TaW5nbGVFdmVudD4ge1xuICBpZiAoZXZlbnQudHlwZSA9PT0gVW5kb0V2ZW50VHlwZS5TaW5nbGUpIHJldHVybiBbZXZlbnRdXG4gIGVsc2Uge1xuICAgIGNvbnN0IGFycmF5OiBVbmRvU2luZ2xlRXZlbnRbXSA9IFtdXG4gICAgZm9yIChjb25zdCBlIG9mIGV2ZW50LmV2ZW50cykge1xuICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgYXJyYXkudW5zaGlmdCguLi50b1NpbmdsZUV2ZW50cyhlLCB0cnVlKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5LnB1c2goLi4udG9TaW5nbGVFdmVudHMoZSwgZmFsc2UpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxufVxuXG4vKipcbiAqIFN0b3JlIG1vZGVsIGluc3RhbmNlIGZvciB1bmRvL3JlZG8gYWN0aW9ucy5cbiAqIERvIG5vdCBtYW5pcHVsYXRlIGRpcmVjdGx5LCBvdGhlciB0aGF0IGNyZWF0aW5nIGl0LlxuICovXG5AbW9kZWwoYCR7bmFtZXNwYWNlfS9VbmRvU3RvcmVgKVxuZXhwb3J0IGNsYXNzIFVuZG9TdG9yZSBleHRlbmRzIE1vZGVsKHtcbiAgLy8gVE9ETzogYWRkIHByb3BlciB0eXBlIGNoZWNraW5nIHRvIHVuZG8gc3RvcmVcbiAgdW5kb0V2ZW50czogdFByb3AodHlwZXNBcnJheSh0eXBlc1VuY2hlY2tlZDxVbmRvRXZlbnQ+KCkpLCAoKSA9PiBbXSksXG4gIHJlZG9FdmVudHM6IHRQcm9wKHR5cGVzQXJyYXkodHlwZXNVbmNoZWNrZWQ8VW5kb0V2ZW50PigpKSwgKCkgPT4gW10pLFxufSkge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQG1vZGVsQWN0aW9uXG4gIF9jbGVhclVuZG8oKSB7XG4gICAgd2l0aG91dFVuZG8oKCkgPT4ge1xuICAgICAgdGhpcy51bmRvRXZlbnRzLmxlbmd0aCA9IDBcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBtb2RlbEFjdGlvblxuICBfY2xlYXJSZWRvKCkge1xuICAgIHdpdGhvdXRVbmRvKCgpID0+IHtcbiAgICAgIHRoaXMucmVkb0V2ZW50cy5sZW5ndGggPSAwXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAbW9kZWxBY3Rpb25cbiAgX3VuZG8oKSB7XG4gICAgd2l0aG91dFVuZG8oKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLnVuZG9FdmVudHMucG9wKCkhXG4gICAgICB0aGlzLnJlZG9FdmVudHMucHVzaChldmVudClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBtb2RlbEFjdGlvblxuICBfcmVkbygpIHtcbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IHRoaXMucmVkb0V2ZW50cy5wb3AoKSFcbiAgICAgIHRoaXMudW5kb0V2ZW50cy5wdXNoKGV2ZW50KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQG1vZGVsQWN0aW9uXG4gIF9hZGRVbmRvKGV2ZW50OiBVbmRvRXZlbnQpIHtcbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICB0aGlzLnVuZG9FdmVudHMucHVzaChldmVudClcbiAgICAgIC8vIG9uY2UgYW4gdW5kbyBldmVudCBpcyBhZGRlZCByZWRvIHF1ZXVlIGlzIG5vIGxvbmdlciB2YWxpZFxuICAgICAgdGhpcy5yZWRvRXZlbnRzLmxlbmd0aCA9IDBcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfZ3JvdXBTdGFjazogVW5kb0V2ZW50R3JvdXBbXSA9IFtdXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIF9hZGRVbmRvVG9QYXJlbnRHcm91cChwYXJlbnRHcm91cDogVW5kb0V2ZW50R3JvdXAsIGV2ZW50OiBVbmRvRXZlbnRXaXRob3V0QXR0YWNoZWRTdGF0ZSkge1xuICAgIDsocGFyZW50R3JvdXAuZXZlbnRzIGFzIFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlW10pLnB1c2goZXZlbnQpXG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0IF9jdXJyZW50R3JvdXAoKTogVW5kb0V2ZW50R3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9ncm91cFN0YWNrW3RoaXMuX2dyb3VwU3RhY2subGVuZ3RoIC0gMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBfc3RhcnRHcm91cChcbiAgICBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzdGFydFJ1bm5pbmc6IGJvb2xlYW4sXG4gICAgb3B0aW9uczogVW5kb01pZGRsZXdhcmVPcHRpb25zPHVua25vd24+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGxldCBydW5uaW5nID0gZmFsc2VcbiAgICBsZXQgZW5kZWQgPSBmYWxzZVxuICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGhpcy5fY3VycmVudEdyb3VwXG5cbiAgICBjb25zdCBncm91cDogVW5kb0V2ZW50R3JvdXAgPSB7XG4gICAgICB0eXBlOiBVbmRvRXZlbnRUeXBlLkdyb3VwLFxuICAgICAgZ3JvdXBOYW1lLFxuICAgICAgZXZlbnRzOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCBhdHRhY2hlZFN0YXRlQmVmb3JlRXZlbnQgPSBwYXJlbnRHcm91cCA/IHVuZGVmaW5lZCA6IG9wdGlvbnM/LmF0dGFjaGVkU3RhdGU/LnNhdmUoKVxuXG4gICAgY29uc3QgYXBpID0ge1xuICAgICAgcGF1c2U6ICgpID0+IHtcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShcImNhbm5vdCBwYXVzZSBhIGdyb3VwIHdoZW4gaXQgaXMgYWxyZWFkeSBlbmRlZFwiKVxuICAgICAgICB9XG4gICAgICAgIGlmICghcnVubmluZykge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoXCJjYW5ub3QgcGF1c2UgYSBncm91cCB3aGVuIGl0IGlzIG5vdCBydW5uaW5nXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCAhPT0gZ3JvdXApIHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKFwiZ3JvdXAgb3V0IG9mIG9yZGVyXCIpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ3JvdXBTdGFjay5wb3AoKVxuICAgICAgICBydW5uaW5nID0gZmFsc2VcbiAgICAgIH0sXG4gICAgICByZXN1bWU6ICgpID0+IHtcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShcImNhbm5vdCByZXN1bWUgYSBncm91cCB3aGVuIGl0IGlzIGFscmVhZHkgZW5kZWRcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoXCJjYW5ub3QgcmVzdW1lIGEgZ3JvdXAgd2hlbiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmdcIilcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ncm91cFN0YWNrLnB1c2goZ3JvdXApXG4gICAgICAgIHJ1bm5pbmcgPSB0cnVlXG4gICAgICB9LFxuICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgIGlmIChydW5uaW5nKSB7XG4gICAgICAgICAgYXBpLnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgICBlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgICAgICAgdGhpcy5fYWRkVW5kb1RvUGFyZW50R3JvdXAocGFyZW50R3JvdXAsIGdyb3VwKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2FkZFVuZG8oe1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBhdHRhY2hlZFN0YXRlOiB7XG4gICAgICAgICAgICAgIGJlZm9yZUV2ZW50OiBhdHRhY2hlZFN0YXRlQmVmb3JlRXZlbnQsXG4gICAgICAgICAgICAgIGFmdGVyRXZlbnQ6IG9wdGlvbnM/LmF0dGFjaGVkU3RhdGU/LnNhdmUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRSdW5uaW5nKSB7XG4gICAgICBhcGkucmVzdW1lKClcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpXG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VyIGNsYXNzIHJldHVybmVkIGJ5IGB1bmRvTWlkZGxld2FyZWAgdGhhdCBhbGxvd3MgeW91IHRvIHBlcmZvcm0gdW5kby9yZWRvIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmRvTWFuYWdlciB7XG4gIC8qKlxuICAgKiBUaGUgc3RvcmUgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3RvcmUgdW5kby9yZWRvIGFjdGlvbiBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBzdG9yZTogVW5kb1N0b3JlXG5cbiAgLyoqXG4gICAqIFRoZSB1bmRvIHN0YWNrLCB3aGVyZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRvIHVuZG8gd2lsbCBiZSB0aGUgbGFzdCBvZiB0aGUgYXJyYXkuXG4gICAqIERvIG5vdCBtYW5pcHVsYXRlIHRoaXMgYXJyYXkgZGlyZWN0bHkuXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgZ2V0IHVuZG9RdWV1ZSgpOiBSZWFkb25seUFycmF5PFVuZG9FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnVuZG9FdmVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVkbyBzdGFjaywgd2hlcmUgdGhlIGZpcnN0IG9wZXJhdGlvbiB0byByZWRvIHdpbGwgYmUgdGhlIGxhc3Qgb2YgdGhlIGFycmF5LlxuICAgKiBEbyBub3QgbWFuaXB1bGF0ZSB0aGlzIGFycmF5IGRpcmVjdGx5LlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCByZWRvUXVldWUoKTogUmVhZG9ubHlBcnJheTxVbmRvRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5yZWRvRXZlbnRzXG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB1bmRvIGFjdGlvbnMgYXZhaWxhYmxlLlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCB1bmRvTGV2ZWxzKCkge1xuICAgIHJldHVybiB0aGlzLnVuZG9RdWV1ZS5sZW5ndGhcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB1bmRvIGNhbiBiZSBwZXJmb3JtZWQgKGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bmRvIGFjdGlvbiBhdmFpbGFibGUpLlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCBjYW5VbmRvKCkge1xuICAgIHJldHVybiB0aGlzLnVuZG9MZXZlbHMgPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSB1bmRvIHF1ZXVlLlxuICAgKi9cbiAgQGFjdGlvblxuICBjbGVhclVuZG8oKSB7XG4gICAgdGhpcy5zdG9yZS5fY2xlYXJVbmRvKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlZG8gYWN0aW9ucyBhdmFpbGFibGUuXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgZ2V0IHJlZG9MZXZlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1F1ZXVlLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIElmIHJlZG8gY2FuIGJlIHBlcmZvcm1lZCAoaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJlZG8gYWN0aW9uIGF2YWlsYWJsZSlcbiAgICovXG4gIEBjb21wdXRlZFxuICBnZXQgY2FuUmVkbygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvTGV2ZWxzID4gMFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcmVkbyBxdWV1ZS5cbiAgICovXG4gIEBhY3Rpb25cbiAgY2xlYXJSZWRvKCkge1xuICAgIHRoaXMuc3RvcmUuX2NsZWFyUmVkbygpXG4gIH1cblxuICAvKipcbiAgICogVW5kb2VzIHRoZSBsYXN0IGFjdGlvbi5cbiAgICogV2lsbCB0aHJvdyBpZiB0aGVyZSBpcyBubyBhY3Rpb24gdG8gdW5kby5cbiAgICovXG4gIEBhY3Rpb25cbiAgdW5kbygpIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbykge1xuICAgICAgdGhyb3cgZmFpbHVyZShcIm5vdGhpbmcgdG8gdW5kb1wiKVxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHRoaXMudW5kb1F1ZXVlW3RoaXMudW5kb1F1ZXVlLmxlbmd0aCAtIDFdXG5cbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICB0b1NpbmdsZUV2ZW50cyhldmVudCwgdHJ1ZSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBhcHBseVBhdGNoZXModGhpcy5zdWJ0cmVlUm9vdCwgZS5pbnZlcnNlUGF0Y2hlcywgdHJ1ZSlcbiAgICAgIH0pXG5cbiAgICAgIC8vIHJlc3RvcmUgdGhlIGF0dGFjaGVkIHN0YXRlIGJlZm9yZSB0aGUgb3BlcmF0aW9uIHdhcyBtYWRlXG4gICAgICBpZiAoZXZlbnQuYXR0YWNoZWRTdGF0ZT8uYmVmb3JlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5yZXN0b3JlKGV2ZW50LmF0dGFjaGVkU3RhdGUuYmVmb3JlRXZlbnQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuc3RvcmUuX3VuZG8oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZG9lcyB0aGUgcHJldmlvdXMgYWN0aW9uLlxuICAgKiBXaWxsIHRocm93IGlmIHRoZXJlIGlzIG5vIGFjdGlvbiB0byByZWRvLlxuICAgKi9cbiAgQGFjdGlvblxuICByZWRvKCkge1xuICAgIGlmICghdGhpcy5jYW5SZWRvKSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFwibm90aGluZyB0byByZWRvXCIpXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5yZWRvUXVldWVbdGhpcy5yZWRvUXVldWUubGVuZ3RoIC0gMV1cblxuICAgIHdpdGhvdXRVbmRvKCgpID0+IHtcbiAgICAgIHRvU2luZ2xlRXZlbnRzKGV2ZW50LCBmYWxzZSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBhcHBseVBhdGNoZXModGhpcy5zdWJ0cmVlUm9vdCwgZS5wYXRjaGVzKVxuICAgICAgfSlcblxuICAgICAgLy8gcmVzdG9yZSB0aGUgYXR0YWNoZWQgc3RhdGUgYWZ0ZXIgdGhlIG9wZXJhdGlvbiB3YXMgbWFkZVxuICAgICAgaWYgKGV2ZW50LmF0dGFjaGVkU3RhdGU/LmFmdGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5yZXN0b3JlKGV2ZW50LmF0dGFjaGVkU3RhdGUuYWZ0ZXJFdmVudClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5zdG9yZS5fcmVkbygpXG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIHVuZG8gbWlkZGxld2FyZS5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5kaXNwb3NlcigpXG4gIH1cblxuICBwcml2YXRlIF9pc1VuZG9SZWNvcmRpbmdEaXNhYmxlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWYgdW5kbyByZWNvcmRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkIG9yIG5vdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGBVbmRvTWFuYWdlcmAuXG4gICAqL1xuICBnZXQgaXNVbmRvUmVjb3JkaW5nRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkXG4gIH1cblxuICAvKipcbiAgICogU2tpcHMgdGhlIHVuZG8gcmVjb3JkaW5nIG1lY2hhbmlzbSBmb3IgdGhlIGNvZGUgYmxvY2sgdGhhdCBnZXRzIHJ1biBzeW5jaHJvbm91c2x5IGluc2lkZS5cbiAgICpcbiAgICogQHR5cGVwYXJhbSBUIENvZGUgYmxvY2sgcmV0dXJuIHR5cGUuXG4gICAqIEBwYXJhbSBmbiBDb2RlIGJsb2NrIHRvIHJ1bi5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgd2l0aG91dFVuZG88VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCBzYXZlZFVuZG9EaXNhYmxlZCA9IHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkXG4gICAgdGhpcy5faXNVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkID0gc2F2ZWRVbmRvRGlzYWJsZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBncm91cCB0aGF0IGNhbiBiZSBjb250aW51ZWQgbXVsdGlwbGUgdGltZXMgYW5kIHRoZW4gZW5kZWQuXG4gICAqIEBwYXJhbSBncm91cE5hbWUgT3B0aW9uYWwgZ3JvdXAgbmFtZS5cbiAgICogQHJldHVybnMgQW4gQVBJIHRvIGNvbnRpbnVlL2VuZCB0aGUgZ3JvdXAuXG4gICAqL1xuICBjcmVhdGVHcm91cChncm91cE5hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuc3RvcmUuX3N0YXJ0R3JvdXAoZ3JvdXBOYW1lLCBmYWxzZSwgdGhpcy5vcHRpb25zKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRpbnVlPFQ+KGZuOiAoKSA9PiBUKTogVCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGZuKClcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBncm91cC5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGVuZCgpIHtcbiAgICAgICAgZ3JvdXAuZW5kKClcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeW5jaHJvbm91cyBjb2RlIGJsb2NrIGFzIGFuIHVuZG8gZ3JvdXAuXG4gICAqIE5vdGUgdGhhdCBuZXN0ZWQgZ3JvdXBzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIEdyb3VwIG5hbWUuXG4gICAqIEBwYXJhbSBmbiBDb2RlIGJsb2NrLlxuICAgKiBAcmV0dXJucyBDb2RlIGJsb2NrIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHdpdGhHcm91cDxUPihncm91cE5hbWU6IHN0cmluZywgZm46ICgpID0+IFQpOiBUXG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeW5jaHJvbm91cyBjb2RlIGJsb2NrIGFzIGFuIHVuZG8gZ3JvdXAuXG4gICAqIE5vdGUgdGhhdCBuZXN0ZWQgZ3JvdXBzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ29kZSBibG9jay5cbiAgICogQHJldHVybnMgQ29kZSBibG9jayByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB3aXRoR3JvdXA8VD4oZm46ICgpID0+IFQpOiBUXG5cbiAgd2l0aEdyb3VwPFQ+KGFyZzE6IGFueSwgYXJnMj86IGFueSk6IFQge1xuICAgIGxldCBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGxldCBmbjogKCkgPT4gVFxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZ3JvdXBOYW1lID0gYXJnMVxuICAgICAgZm4gPSBhcmcyXG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gYXJnMVxuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5zdG9yZS5fc3RhcnRHcm91cChncm91cE5hbWUsIHRydWUsIHRoaXMub3B0aW9ucylcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZ3JvdXAuZW5kKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbiBhc3luY2hyb25vdXMgY29kZSBibG9jayBhcyBhbiB1bmRvIGdyb3VwLlxuICAgKiBOb3RlIHRoYXQgbmVzdGVkIGdyb3VwcyBhcmUgYWxsb3dlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBHcm91cCBuYW1lLlxuICAgKiBAcGFyYW0gZm4gRmxvdyBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgRmxvdyBmdW5jdGlvbiByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB3aXRoR3JvdXBGbG93PFI+KGdyb3VwTmFtZTogc3RyaW5nLCBmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55Pik6IFByb21pc2U8Uj5cblxuICAvKipcbiAgICogUnVucyBhbiBhc3luY2hyb25vdXMgY29kZSBibG9jayBhcyBhbiB1bmRvIGdyb3VwLlxuICAgKiBOb3RlIHRoYXQgbmVzdGVkIGdyb3VwcyBhcmUgYWxsb3dlZC5cbiAgICpcbiAgICogQHBhcmFtIGZuIEZsb3cgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIEZsb3cgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgd2l0aEdyb3VwRmxvdzxSPihmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55Pik6IFByb21pc2U8Uj5cblxuICB3aXRoR3JvdXBGbG93PFI+KGFyZzE6IGFueSwgYXJnMj86IGFueSk6IFByb21pc2U8Uj4ge1xuICAgIGxldCBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGxldCBmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55PlxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZ3JvdXBOYW1lID0gYXJnMVxuICAgICAgZm4gPSBhcmcyXG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gYXJnMVxuICAgIH1cblxuICAgIGNvbnN0IGdlbiA9IGZuKClcblxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5zdG9yZS5fc3RhcnRHcm91cChncm91cE5hbWUsIGZhbHNlLCB0aGlzLm9wdGlvbnMpXG5cbiAgICAvLyB1c2UgYm91bmQgZnVuY3Rpb25zIHRvIGZpeCBlczYgY29tcGlsYXRpb25cbiAgICBjb25zdCBnZW5OZXh0ID0gZ2VuLm5leHQuYmluZChnZW4pXG4gICAgY29uc3QgZ2VuVGhyb3cgPSBnZW4udGhyb3chLmJpbmQoZ2VuKVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFI+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIG9uRnVsZmlsbGVkKHJlczogYW55KTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIGxldCByZXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBnZW5OZXh0KHJlcylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGdyb3VwLmVuZCgpXG4gICAgICAgICAgcmVqZWN0KGUpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBncm91cC5wYXVzZSgpXG4gICAgICAgIG5leHQocmV0KVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycjogYW55KTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIGxldCByZXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBnZW5UaHJvdyhlcnIpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBncm91cC5lbmQoKVxuICAgICAgICAgIHJlamVjdChlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXAucGF1c2UoKVxuICAgICAgICBuZXh0KHJldClcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbmV4dChyZXQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAocmV0ICYmIHR5cGVvZiByZXQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gYW4gYXN5bmMgaXRlcmF0b3JcbiAgICAgICAgICByZXQudGhlbihuZXh0LCByZWplY3QpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0LmRvbmUpIHtcbiAgICAgICAgICAvLyBkb25lXG4gICAgICAgICAgZ3JvdXAuZW5kKClcbiAgICAgICAgICByZXNvbHZlKHJldC52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb250aW51ZVxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXQudmFsdWUpLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb25GdWxmaWxsZWQodW5kZWZpbmVkKSAvLyBraWNrIG9mZiB0aGUgcHJvY2Vzc1xuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYFVuZG9NYW5hZ2VyYC5cbiAgICogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGB1bmRvTWlkZGxld2FyZWAgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIGRpc3Bvc2VyXG4gICAqIEBwYXJhbSBzdWJ0cmVlUm9vdFxuICAgKiBAcGFyYW0gW3N0b3JlXVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NlcjogQWN0aW9uTWlkZGxld2FyZURpc3Bvc2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VidHJlZVJvb3Q6IG9iamVjdCxcbiAgICBzdG9yZTogVW5kb1N0b3JlIHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVW5kb01pZGRsZXdhcmVPcHRpb25zPHVua25vd24+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmIChnZXRNb2J4VmVyc2lvbigpID49IDYpIHtcbiAgICAgIG1vYng2Lm1ha2VPYnNlcnZhYmxlKHRoaXMpXG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlID8/IG5ldyBVbmRvU3RvcmUoe30pXG4gIH1cbn1cblxuLyoqXG4gKiBVbmRvIG1pZGRsZXdhcmUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmRvTWlkZGxld2FyZU9wdGlvbnM8Uz4ge1xuICBhdHRhY2hlZFN0YXRlPzoge1xuICAgIHNhdmUoKTogU1xuICAgIHJlc3RvcmUoczogUyk6IHZvaWRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gdW5kbyBtaWRkbGV3YXJlLlxuICpcbiAqIEBwYXJhbSBzdWJ0cmVlUm9vdCBTdWJ0cmVlIHJvb3QgdGFyZ2V0IG9iamVjdC5cbiAqIEBwYXJhbSBzdG9yZSBPcHRpb25hbCBgVW5kb1N0b3JlYCB3aGVyZSB0byBzdG9yZSB0aGUgdW5kby9yZWRvIHF1ZXVlcy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG9cbiAqIHN0b3JlIHN1Y2ggcXVldWVzIHNvbWV3aGVyZSBpbiB5b3VyIG1vZGVscy4gSWYgbm9uZSBpcyBwcm92aWRlZCBpdCB3aWxsIHJlc2lkZSBpbiBtZW1vcnkuXG4gKiBAcGFyYW0gb3B0aW9ucyBFeHRyYSBvcHRpb25zLCBzdWNoIGFzIGhvdyB0byBzYXZlIC8gcmVzdG9yZSBjZXJ0YWluIHNuYXBzaG90IG9mIHRoZSBzdGF0ZSB0byBiZSByZXN0b3JlZCB3aGVuIHVuZG9pbmcvcmVkb2luZy5cbiAqIEByZXR1cm5zIEFuIGBVbmRvTWFuYWdlcmAgd2hpY2ggYWxsb3dzIHlvdSB0byBkbyB0aGUgbWFuYWdlIHRoZSB1bmRvL3JlZG8gb3BlcmF0aW9ucyBhbmQgZGlzcG9zZSBvZiB0aGUgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZG9NaWRkbGV3YXJlPFM+KFxuICBzdWJ0cmVlUm9vdDogb2JqZWN0LFxuICBzdG9yZT86IFVuZG9TdG9yZSxcbiAgb3B0aW9ucz86IFVuZG9NaWRkbGV3YXJlT3B0aW9uczxTPlxuKTogVW5kb01hbmFnZXIge1xuICBhc3NlcnRUd2Vha2VkT2JqZWN0KHN1YnRyZWVSb290LCBcInN1YnRyZWVSb290XCIpXG5cbiAgbGV0IG1hbmFnZXI6IFVuZG9NYW5hZ2VyXG5cbiAgaW50ZXJmYWNlIFBhdGNoUmVjb3JkZXJEYXRhIHtcbiAgICByZWNvcmRlcjogUGF0Y2hSZWNvcmRlclxuICAgIHJlY29yZGVyU3RhY2s6IG51bWJlclxuICAgIHVuZG9Sb290Q29udGV4dDogU2ltcGxlQWN0aW9uQ29udGV4dFxuICAgIGdyb3VwOiBVbmRvRXZlbnRHcm91cCB8IHVuZGVmaW5lZFxuICAgIGF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudDogUyB8IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgcGF0Y2hSZWNvcmRlclN5bWJvbCA9IFN5bWJvbChcInBhdGNoUmVjb3JkZXJcIilcblxuICBmdW5jdGlvbiBpbml0UGF0Y2hSZWNvcmRlcihjdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpIHtcbiAgICBjb25zdCBncm91cCA9IG1hbmFnZXIuc3RvcmUuX2N1cnJlbnRHcm91cFxuXG4gICAgY29uc3QgcGF0Y2hSZWNvcmRlckRhdGE6IFBhdGNoUmVjb3JkZXJEYXRhID0ge1xuICAgICAgcmVjb3JkZXI6IHBhdGNoUmVjb3JkZXIoc3VidHJlZVJvb3QsIHtcbiAgICAgICAgcmVjb3JkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgJiYgIW1hbmFnZXIuaXNVbmRvUmVjb3JkaW5nRGlzYWJsZWRcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcmVjb3JkZXJTdGFjazogMCxcbiAgICAgIHVuZG9Sb290Q29udGV4dDogY3R4LFxuICAgICAgZ3JvdXAsXG5cbiAgICAgIGF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudDogb3B0aW9ucz8uYXR0YWNoZWRTdGF0ZT8uc2F2ZSgpLFxuICAgIH1cblxuICAgIGN0eC5yb290Q29udGV4dC5kYXRhW3BhdGNoUmVjb3JkZXJTeW1ib2xdID0gcGF0Y2hSZWNvcmRlckRhdGFcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCk6IFBhdGNoUmVjb3JkZXJEYXRhIHtcbiAgICByZXR1cm4gY3R4LnJvb3RDb250ZXh0LmRhdGFbcGF0Y2hSZWNvcmRlclN5bWJvbF1cbiAgfVxuXG4gIGNvbnN0IG1pZGRsZXdhcmVEaXNwb3NlciA9IGFjdGlvblRyYWNraW5nTWlkZGxld2FyZShzdWJ0cmVlUm9vdCwge1xuICAgIG9uU3RhcnQoY3R4KSB7XG4gICAgICBpZiAoIWdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eCkpIHtcbiAgICAgICAgaW5pdFBhdGNoUmVjb3JkZXIoY3R4KVxuICAgICAgfVxuICAgIH0sXG4gICAgb25SZXN1bWUoY3R4KSB7XG4gICAgICBjb25zdCBwYXRjaFJlY29yZGVyRGF0YSA9IGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eClcbiAgICAgIHBhdGNoUmVjb3JkZXJEYXRhLnJlY29yZGVyU3RhY2srK1xuICAgICAgcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXIucmVjb3JkaW5nID0gcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJTdGFjayA+IDBcbiAgICB9LFxuICAgIG9uU3VzcGVuZChjdHgpIHtcbiAgICAgIGNvbnN0IHBhdGNoUmVjb3JkZXJEYXRhID0gZ2V0UGF0Y2hSZWNvcmRlckRhdGEoY3R4KVxuICAgICAgcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJTdGFjay0tXG4gICAgICBwYXRjaFJlY29yZGVyRGF0YS5yZWNvcmRlci5yZWNvcmRpbmcgPSBwYXRjaFJlY29yZGVyRGF0YS5yZWNvcmRlclN0YWNrID4gMFxuICAgIH0sXG4gICAgb25GaW5pc2goY3R4KSB7XG4gICAgICBjb25zdCBwYXRjaFJlY29yZGVyRGF0YSA9IGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eClcbiAgICAgIGlmIChwYXRjaFJlY29yZGVyRGF0YSAmJiBwYXRjaFJlY29yZGVyRGF0YS51bmRvUm9vdENvbnRleHQgPT09IGN0eCkge1xuICAgICAgICBjb25zdCBwYXRjaFJlY29yZGVyID0gcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJcblxuICAgICAgICBpZiAocGF0Y2hSZWNvcmRlci5ldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuICAgICAgICAgIGNvbnN0IGludmVyc2VQYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgcGF0Y2hSZWNvcmRlci5ldmVudHMpIHtcbiAgICAgICAgICAgIHBhdGNoZXMucHVzaCguLi5ldmVudC5wYXRjaGVzKVxuICAgICAgICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaCguLi5ldmVudC5pbnZlcnNlUGF0Y2hlcylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFVuZG9FdmVudFR5cGUuU2luZ2xlLFxuICAgICAgICAgICAgdGFyZ2V0UGF0aDogZmFzdEdldFJvb3RQYXRoKGN0eC50YXJnZXQpLnBhdGgsXG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBjdHguYWN0aW9uTmFtZSxcbiAgICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgICBpbnZlcnNlUGF0Y2hlcyxcbiAgICAgICAgICB9IGFzIGNvbnN0XG5cbiAgICAgICAgICBjb25zdCBwYXJlbnRHcm91cCA9IHBhdGNoUmVjb3JkZXJEYXRhLmdyb3VwXG5cbiAgICAgICAgICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmUuX2FkZFVuZG9Ub1BhcmVudEdyb3VwKHBhcmVudEdyb3VwLCBldmVudClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFuYWdlci5zdG9yZS5fYWRkVW5kbyh7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICBhdHRhY2hlZFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgYmVmb3JlRXZlbnQ6IHBhdGNoUmVjb3JkZXJEYXRhLmF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudCxcbiAgICAgICAgICAgICAgICBhZnRlckV2ZW50OiBvcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5zYXZlKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGNoUmVjb3JkZXIuZGlzcG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcblxuICBtYW5hZ2VyID0gbmV3IFVuZG9NYW5hZ2VyKG1pZGRsZXdhcmVEaXNwb3Nlciwgc3VidHJlZVJvb3QsIHN0b3JlLCBvcHRpb25zKVxuICByZXR1cm4gbWFuYWdlclxufVxuXG5sZXQgX2lzR2xvYmFsVW5kb1JlY29yZGluZ0Rpc2FibGVkID0gZmFsc2VcblxuLyoqXG4gKiBSZXR1cm5zIGlmIHRoZSB1bmRvIHJlY29yZGluZyBtZWNoYW5pc20gaXMgY3VycmVudGx5IGRpc2FibGVkLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBjdXJyZW50bHkgZGlzYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQoKSB7XG4gIHJldHVybiBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWRcbn1cblxuLyoqXG4gKiBHbG9iYWxseSBza2lwcyB0aGUgdW5kbyByZWNvcmRpbmcgbWVjaGFuaXNtIGZvciB0aGUgY29kZSBibG9jayB0aGF0IGdldHMgcnVuIHN5bmNocm9ub3VzbHkgaW5zaWRlLlxuICogQ29uc2lkZXIgdXNpbmcgdGhlIGB3aXRob3V0VW5kb2AgbWV0aG9kIG9mIGEgcGFydGljdWxhciBgVW5kb01hbmFnZXJgIGluc3RlYWQuXG4gKlxuICogQHR5cGVwYXJhbSBUIENvZGUgYmxvY2sgcmV0dXJuIHR5cGUuXG4gKiBAcGFyYW0gZm4gQ29kZSBibG9jayB0byBydW4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0VW5kbzxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBzYXZlZFVuZG9EaXNhYmxlZCA9IF9pc0dsb2JhbFVuZG9SZWNvcmRpbmdEaXNhYmxlZFxuICBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSB0cnVlXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKClcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSBzYXZlZFVuZG9EaXNhYmxlZFxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBDWTtVQUFBOzs7QUFHWixHQUhZO0FBbURaLHdCQUNFLE9BQ0E7TUFFSSxNQUFNLFNBQVMsY0FBYztXQUFlLENBQUMsS0FBSztBQUFBLE9BQ2pEO1VBQ0csUUFBMkI7ZUFDdEIsS0FBSyxNQUFNLFFBQVE7VUFDeEIsU0FBUztjQUNMLFFBQVEsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQUEsYUFDbkM7Y0FDQyxLQUFLLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUFBOztXQUduQztBQUFBO0FBRVg7SUFPYSxZQUFiLE1BQWEsbUJBQWtCLE1BQU07QUFBQSxFQUVuQyxZQUFZLE1BQU0sV0FBVyxnQkFBMkIsR0FBRyxNQUFNLEVBQUU7QUFBQSxFQUNuRSxZQUFZLE1BQU0sV0FBVyxnQkFBMkIsR0FBRyxNQUFNLEVBQUU7Q0FDcEU7RUFKRDtBQUFBO0FBMkRVLHVDQUFnQzs7RUFsRHhDO2dCQUNjO1dBQ0wsV0FBVyxTQUFTO0FBQUEsS0FDMUI7QUFBQTtFQU9IO2dCQUNjO1dBQ0wsV0FBVyxTQUFTO0FB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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { modelIdKey } from "../model/metadata.mjs";
|
|
2
|
+
import { isModel } from "../model/utils.mjs";
|
|
3
|
+
function rootPathToTargetPathIds(rootPath) {
|
|
4
|
+
var _a;
|
|
5
|
+
const targetPathIds = [];
|
|
6
|
+
for (let i = 0; i < rootPath.path.length; i++) {
|
|
7
|
+
const targetObj = rootPath.pathObjects[i + 1];
|
|
8
|
+
const targetObjId = isModel(targetObj) ? (_a = targetObj[modelIdKey]) != null ? _a : null : null;
|
|
9
|
+
targetPathIds.push(targetObjId);
|
|
10
|
+
}
|
|
11
|
+
return targetPathIds;
|
|
12
|
+
}
|
|
13
|
+
function pathToTargetPathIds(root, path) {
|
|
14
|
+
var _a;
|
|
15
|
+
const targetPathIds = [];
|
|
16
|
+
let current = root;
|
|
17
|
+
for (let i = 0; i < path.length; i++) {
|
|
18
|
+
current = current[path[i]];
|
|
19
|
+
const targetObjId = isModel(current) ? (_a = current[modelIdKey]) != null ? _a : null : null;
|
|
20
|
+
targetPathIds.push(targetObjId);
|
|
21
|
+
}
|
|
22
|
+
return targetPathIds;
|
|
23
|
+
}
|
|
24
|
+
export { pathToTargetPathIds, rootPathToTargetPathIds };
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMubWpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uTWlkZGxld2FyZXMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWxJZEtleSB9IGZyb20gXCIuLi9tb2RlbC9tZXRhZGF0YVwiXG5pbXBvcnQgeyBpc01vZGVsIH0gZnJvbSBcIi4uL21vZGVsL3V0aWxzXCJcbmltcG9ydCB0eXBlIHsgUm9vdFBhdGggfSBmcm9tIFwiLi4vcGFyZW50L3BhdGhcIlxuaW1wb3J0IHR5cGUgeyBQYXRoIH0gZnJvbSBcIi4uL3BhcmVudC9wYXRoVHlwZXNcIlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdFBhdGhUb1RhcmdldFBhdGhJZHMocm9vdFBhdGg6IFJvb3RQYXRoPGFueT4pOiAoc3RyaW5nIHwgbnVsbClbXSB7XG4gIGNvbnN0IHRhcmdldFBhdGhJZHM6IChzdHJpbmcgfCBudWxsKVtdID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvb3RQYXRoLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YXJnZXRPYmogPSByb290UGF0aC5wYXRoT2JqZWN0c1tpICsgMV0gLy8gZmlyc3QgaXMgcm9vdCwgd2UgZG9uJ3QgY2FyZSBhYm91dCBpdHMgSURcbiAgICBjb25zdCB0YXJnZXRPYmpJZCA9IGlzTW9kZWwodGFyZ2V0T2JqKSA/IHRhcmdldE9ialttb2RlbElkS2V5XSA/PyBudWxsIDogbnVsbFxuICAgIHRhcmdldFBhdGhJZHMucHVzaCh0YXJnZXRPYmpJZClcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRQYXRoSWRzXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9UYXJnZXRQYXRoSWRzKHJvb3Q6IGFueSwgcGF0aDogUGF0aCk6IChzdHJpbmcgfCBudWxsKVtdIHtcbiAgY29uc3QgdGFyZ2V0UGF0aElkczogKHN0cmluZyB8IG51bGwpW10gPSBbXVxuICBsZXQgY3VycmVudCA9IHJvb3QgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcm9vdCBJRFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhbaV1dXG4gICAgY29uc3QgdGFyZ2V0T2JqSWQgPSBpc01vZGVsKGN1cnJlbnQpID8gY3VycmVudFttb2RlbElkS2V5XSA/PyBudWxsIDogbnVsbFxuICAgIHRhcmdldFBhdGhJZHMucHVzaCh0YXJnZXRPYmpJZClcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRQYXRoSWRzXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7aUNBUXdDOztRQUNoQyxnQkFBbUM7V0FFaEMsSUFBSSxHQUFHLElBQUksU0FBUyxLQUFLLFFBQVEsS0FBSztVQUN2QyxZQUFZLFNBQVMsWUFBWSxJQUFJO1VBQ3JDLGNBQWMsUUFBUSxTQUFTLElBQUksZ0JBQVUsZ0JBQVYsWUFBeUIsT0FBTztrQkFDM0QsS0FBSyxXQUFXO0FBQUE7U0FHekI7QUFDVDs2QkFLb0MsTUFBVzs7UUFDdkMsZ0JBQW1DO01BQ3JDLFVBQVU7V0FFTCxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztjQUMxQixRQUFRLEtBQUs7VUFDakIsY0FBYyxRQUFRLE9BQU8sSUFBSSxjQUFRLGdCQUFSLFlBQXVCLE9BQU87a0JBQ3ZELEtBQUssV0FBVztBQUFBO1NBR3pCO0FBQ1Q7OyJ9
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { computed } from "mobx";
|
|
2
|
+
import { readonlyMiddleware } from "../actionMiddlewares/readonlyMiddleware.mjs";
|
|
3
|
+
import { createContext } from "../context/context.mjs";
|
|
4
|
+
import { isDataModelClass } from "../dataModel/utils.mjs";
|
|
5
|
+
import { isModelClass } from "../model/utils.mjs";
|
|
6
|
+
import { isTreeNode } from "../tweaker/core.mjs";
|
|
7
|
+
import { tweak, tryUntweak } from "../tweaker/tweak.mjs";
|
|
8
|
+
import { failure, addLateInitializationFunction, runBeforeOnInitSymbol } from "../utils/index.mjs";
|
|
9
|
+
import { getOrCreate } from "../utils/mapUtils.mjs";
|
|
10
|
+
const computedTreeContext = createContext(false);
|
|
11
|
+
function isComputedTreeNode(node) {
|
|
12
|
+
return computedTreeContext.get(node);
|
|
13
|
+
}
|
|
14
|
+
const tweakedComputedTreeNodes = /* @__PURE__ */ new WeakSet();
|
|
15
|
+
function tweakComputedTreeNode(newValue, parent, path) {
|
|
16
|
+
const tweakedValue = tweak(newValue, { parent, path });
|
|
17
|
+
if (isTreeNode(tweakedValue) && !tweakedComputedTreeNodes.has(tweakedValue)) {
|
|
18
|
+
tweakedComputedTreeNodes.add(tweakedValue);
|
|
19
|
+
readonlyMiddleware(tweakedValue);
|
|
20
|
+
computedTreeContext.set(tweakedValue, true);
|
|
21
|
+
}
|
|
22
|
+
return tweakedValue;
|
|
23
|
+
}
|
|
24
|
+
const computedTreeNodeInfo = /* @__PURE__ */ new WeakMap();
|
|
25
|
+
function getOrCreateComputedTreeNodeInfo(instance) {
|
|
26
|
+
return getOrCreate(computedTreeNodeInfo, instance, () => /* @__PURE__ */ new Map());
|
|
27
|
+
}
|
|
28
|
+
function computedTree(target, propertyKey, descriptor) {
|
|
29
|
+
if (!descriptor.get) {
|
|
30
|
+
throw failure("@computedTree requires a 'get' accessor");
|
|
31
|
+
}
|
|
32
|
+
const targetClass = target.constructor;
|
|
33
|
+
if (!isModelClass(targetClass) && !isDataModelClass(targetClass)) {
|
|
34
|
+
throw failure("@computedTree can only decorate 'get' accessors of class or data models");
|
|
35
|
+
}
|
|
36
|
+
const original = descriptor.get;
|
|
37
|
+
descriptor.get = function() {
|
|
38
|
+
const entry = getOrCreateComputedTreeNodeInfo(this).get(propertyKey);
|
|
39
|
+
const oldValue = entry.value;
|
|
40
|
+
const newValue = entry.computed.get();
|
|
41
|
+
if (oldValue === newValue) {
|
|
42
|
+
return entry.tweakedValue;
|
|
43
|
+
}
|
|
44
|
+
tweak(oldValue, void 0);
|
|
45
|
+
tryUntweak(oldValue);
|
|
46
|
+
const tweakedValue = tweakComputedTreeNode(newValue, this, propertyKey);
|
|
47
|
+
entry.value = newValue;
|
|
48
|
+
entry.tweakedValue = tweakedValue;
|
|
49
|
+
return tweakedValue;
|
|
50
|
+
};
|
|
51
|
+
addLateInitializationFunction(target, runBeforeOnInitSymbol, (instance) => {
|
|
52
|
+
const c = computed(() => original.call(instance), { keepAlive: true });
|
|
53
|
+
const newValue = c.get();
|
|
54
|
+
const tweakedValue = tweakComputedTreeNode(newValue, instance, propertyKey);
|
|
55
|
+
getOrCreateComputedTreeNodeInfo(instance).set(propertyKey, {
|
|
56
|
+
computed: c,
|
|
57
|
+
value: newValue,
|
|
58
|
+
tweakedValue
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export { computedTree, isComputedTreeNode };
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZWRUcmVlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXB1dGVkVHJlZS9jb21wdXRlZFRyZWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIlxuaW1wb3J0IHsgcmVhZG9ubHlNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL2FjdGlvbk1pZGRsZXdhcmVzL3JlYWRvbmx5TWlkZGxld2FyZVwiXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvY29udGV4dFwiXG5pbXBvcnQgeyBpc0RhdGFNb2RlbENsYXNzIH0gZnJvbSBcIi4uL2RhdGFNb2RlbC91dGlsc1wiXG5pbXBvcnQgeyBpc01vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vbW9kZWwvdXRpbHNcIlxuaW1wb3J0IHsgaXNUcmVlTm9kZSB9IGZyb20gXCIuLi90d2Vha2VyL2NvcmVcIlxuaW1wb3J0IHsgdHJ5VW50d2VhaywgdHdlYWsgfSBmcm9tIFwiLi4vdHdlYWtlci90d2Vha1wiXG5pbXBvcnQgeyBhZGRMYXRlSW5pdGlhbGl6YXRpb25GdW5jdGlvbiwgZmFpbHVyZSwgcnVuQmVmb3JlT25Jbml0U3ltYm9sIH0gZnJvbSBcIi4uL3V0aWxzXCJcbmltcG9ydCB7IGdldE9yQ3JlYXRlIH0gZnJvbSBcIi4uL3V0aWxzL21hcFV0aWxzXCJcblxuY29uc3QgY29tcHV0ZWRUcmVlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoZmFsc2UpXG5cbi8qKlxuICogUmV0dXJucyBpZiBhIGdpdmVuIG5vZGUgaXMgYSBjb21wdXRlZCB0cmVlIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIGNvbXB1dGVkIHRyZWUgbm9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXB1dGVkVHJlZU5vZGUobm9kZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21wdXRlZFRyZWVDb250ZXh0LmdldChub2RlKVxufVxuXG5jb25zdCB0d2Vha2VkQ29tcHV0ZWRUcmVlTm9kZXMgPSBuZXcgV2Vha1NldDxvYmplY3Q+KClcblxuZnVuY3Rpb24gdHdlYWtDb21wdXRlZFRyZWVOb2RlPFQ+KG5ld1ZhbHVlOiBULCBwYXJlbnQ6IHVua25vd24sIHBhdGg6IHN0cmluZyk6IFQge1xuICBjb25zdCB0d2Vha2VkVmFsdWUgPSB0d2VhayhuZXdWYWx1ZSwgeyBwYXJlbnQsIHBhdGggfSlcbiAgaWYgKGlzVHJlZU5vZGUodHdlYWtlZFZhbHVlKSAmJiAhdHdlYWtlZENvbXB1dGVkVHJlZU5vZGVzLmhhcyh0d2Vha2VkVmFsdWUpKSB7XG4gICAgdHdlYWtlZENvbXB1dGVkVHJlZU5vZGVzLmFkZCh0d2Vha2VkVmFsdWUpXG4gICAgcmVhZG9ubHlNaWRkbGV3YXJlKHR3ZWFrZWRWYWx1ZSlcbiAgICBjb21wdXRlZFRyZWVDb250ZXh0LnNldCh0d2Vha2VkVmFsdWUsIHRydWUpXG4gIH1cbiAgcmV0dXJuIHR3ZWFrZWRWYWx1ZVxufVxuXG5jb25zdCBjb21wdXRlZFRyZWVOb2RlSW5mbyA9IG5ldyBXZWFrTWFwPFxuICBvYmplY3QsXG4gIE1hcDxzdHJpbmcsIHsgY29tcHV0ZWQ6IElDb21wdXRlZFZhbHVlPHVua25vd24+OyB2YWx1ZTogdW5rbm93bjsgdHdlYWtlZFZhbHVlOiB1bmtub3duIH0+XG4+KClcblxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb21wdXRlZFRyZWVOb2RlSW5mbyhpbnN0YW5jZTogb2JqZWN0KSB7XG4gIHJldHVybiBnZXRPckNyZWF0ZShjb21wdXRlZFRyZWVOb2RlSW5mbywgaW5zdGFuY2UsICgpID0+IG5ldyBNYXAoKSlcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIHR1cm5pbmcgYSBjb21wdXRlZCBwcm9wZXJ0eSBpbnRvIGEgY29tcHV0ZWQgdHJlZSB3aGljaCBzdXBwb3J0cyB0cmVlIHRyYXZlcnNhbFxuICogZnVuY3Rpb25zLCBjb250ZXh0cywgcmVmZXJlbmNlcywgZXRjLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgUHJvdG90eXBlIG9mIHRoZSBjbGFzcy5cbiAqIEBwYXJhbSBwcm9wZXJ0eUtleSBOYW1lIG9mIHRoZSBtZW1iZXIuXG4gKiBAcGFyYW0gZGVzY3JpcHRvciBQcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRUcmVlKFxuICB0YXJnZXQ6IGFueSxcbiAgcHJvcGVydHlLZXk6IHN0cmluZyxcbiAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXG4pOiB2b2lkIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmdldCkge1xuICAgIHRocm93IGZhaWx1cmUoXCJAY29tcHV0ZWRUcmVlIHJlcXVpcmVzIGEgJ2dldCcgYWNjZXNzb3JcIilcbiAgfVxuXG4gIGNvbnN0IHRhcmdldENsYXNzID0gdGFyZ2V0LmNvbnN0cnVjdG9yXG4gIGlmICghaXNNb2RlbENsYXNzKHRhcmdldENsYXNzKSAmJiAhaXNEYXRhTW9kZWxDbGFzcyh0YXJnZXRDbGFzcykpIHtcbiAgICB0aHJvdyBmYWlsdXJlKFwiQGNvbXB1dGVkVHJlZSBjYW4gb25seSBkZWNvcmF0ZSAnZ2V0JyBhY2Nlc3NvcnMgb2YgY2xhc3Mgb3IgZGF0YSBtb2RlbHNcIilcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci5nZXRcblxuICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlbnRyeSA9IGdldE9yQ3JlYXRlQ29tcHV0ZWRUcmVlTm9kZUluZm8odGhpcykuZ2V0KHByb3BlcnR5S2V5KSFcblxuICAgIGNvbnN0IG9sZFZhbHVlID0gZW50cnkudmFsdWVcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGVudHJ5LmNvbXB1dGVkLmdldCgpXG5cbiAgICBpZiAob2xkVmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZW50cnkudHdlYWtlZFZhbHVlXG4gICAgfVxuXG4gICAgdHdlYWsob2xkVmFsdWUsIHVuZGVmaW5lZClcbiAgICB0cnlVbnR3ZWFrKG9sZFZhbHVlKVxuXG4gICAgY29uc3QgdHdlYWtlZFZhbHVlID0gdHdlYWtDb21wdXRlZFRyZWVOb2RlKG5ld1ZhbHVlLCB0aGlzLCBwcm9wZXJ0eUtleSlcbiAgICBlbnRyeS52YWx1ZSA9IG5ld1ZhbHVlXG4gICAgZW50cnkudHdlYWtlZFZhbHVlID0gdHdlYWtlZFZhbHVlXG4gICAgcmV0dXJuIHR3ZWFrZWRWYWx1ZVxuICB9XG5cbiAgYWRkTGF0ZUluaXRpYWxpemF0aW9uRnVuY3Rpb24odGFyZ2V0LCBydW5CZWZvcmVPbkluaXRTeW1ib2wsIChpbnN0YW5jZSkgPT4ge1xuICAgIGNvbnN0IGMgPSBjb21wdXRlZCgoKSA9PiBvcmlnaW5hbC5jYWxsKGluc3RhbmNlKSwgeyBrZWVwQWxpdmU6IHRydWUgfSlcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGMuZ2V0KClcbiAgICBjb25zdCB0d2Vha2VkVmFsdWUgPSB0d2Vha0NvbXB1dGVkVHJlZU5vZGUobmV3VmFsdWUsIGluc3RhbmNlLCBwcm9wZXJ0eUtleSlcblxuICAgIGdldE9yQ3JlYXRlQ29tcHV0ZWRUcmVlTm9kZUluZm8oaW5zdGFuY2UpLnNldChwcm9wZXJ0eUtleSwge1xuICAgICAgY29tcHV0ZWQ6IGMsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICB0d2Vha2VkVmFsdWUsXG4gICAgfSlcbiAgfSlcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQSxNQUFNLHNCQUFzQixjQUFjLEtBQUs7NEJBUVo7U0FDMUIsb0JBQW9CLElBQUksSUFBSTtBQUNyQztBQUVBLE1BQU0sK0NBQStCO0FBRXJDLCtCQUFrQyxVQUFhLFFBQWlCO1FBQ3hELGVBQWUsTUFBTSxVQUFVLEVBQUUsUUFBUSxNQUFNO01BQ2pELFdBQVcsWUFBWSxLQUFLLENBQUMseUJBQXlCLElBQUksWUFBWSxHQUFHOzZCQUNsRCxJQUFJLFlBQVk7dUJBQ3RCLFlBQVk7d0JBQ1gsSUFBSSxjQUFjLElBQUk7QUFBQTtTQUVyQztBQUNUO0FBRUEsTUFBTSwyQ0FBMkI7QUFLakMseUNBQXlDO1NBQ2hDLFlBQVksc0JBQXNCLFVBQVUsMEJBQVUsS0FBSztBQUNwRTtzQkFXRSxRQUNBLGFBQ0E7TUFFSSxDQUFDLFdBQVcsS0FBSztVQUNiLFFBQVEseUNBQXlDO0FBQUE7UUFHbkQsY0FBYyxPQUFPO01BQ3ZCLENBQUMsYUFBYSxXQUFXLEtBQUssQ0FBQyxpQkFBaUIsV0FBVyxHQUFHO1VBQzFELFFBQVEseUVBQXlFO0FBQUE7UUFHbkYsV0FBVyxXQUFXO2FBRWpCLE1BQU07VUFDVCxRQUFRLGdDQUFnQyxJQUFJLEVBQUUsSUFBSSxXQUFXO1VBRTdELFdBQVcsTUFBTTtVQUNqQixXQUFXLE1BQU0sU0FBUztRQUU1QixhQUFhLFVBQVU7YUFDbEIsTUFBTTtBQUFBO1VBR1QsVUFBVSxNQUFTO2VBQ2QsUUFBUTtVQUViLGVBQWUsc0JBQXNCLFVBQVUsTUFBTSxXQUFXO1VBQ2hFLFFBQVE7VUFDUixlQUFlO1dBQ2Q7QUFBQTtnQ0FHcUIsUUFBUSx1QkFBdUIsQ0FBQztVQUN0RCxJQUFJLFNBQVMsTUFBTSxTQUFTLEtBQUssUUFBUSxHQUFHLEVBQUUsV0FBVyxNQUFNO1VBQy9ELFdBQVcsRUFBRTtVQUNiLGVBQWUsc0JBQXNCLFVBQVUsVUFBVSxXQUFXO29DQUUxQyxRQUFRLEVBQUUsSUFBSSxhQUFhO0FBQUEsTUFDekQsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLE1BQ1A7QUFBQSxLQUNEO0FBQUEsR0FDRjtBQUNIOzsifQ==
|