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.
Files changed (350) hide show
  1. package/dist/_virtual/_tslib.mjs +12 -0
  2. package/dist/node_modules/fast-deep-equal/es6/index.mjs +68 -0
  3. package/dist/node_modules/nanoid/non-secure/index.mjs +11 -0
  4. package/dist/src/action/actionDecoratorUtils.mjs +25 -0
  5. package/dist/src/action/applyAction.mjs +54 -0
  6. package/dist/src/action/applyDelete.mjs +20 -0
  7. package/dist/src/action/applyMethodCall.mjs +19 -0
  8. package/dist/src/action/applySet.mjs +25 -0
  9. package/dist/src/action/builtInActions.mjs +15 -0
  10. package/dist/src/action/context.mjs +22 -0
  11. package/dist/src/action/hookActions.mjs +13 -0
  12. package/dist/src/action/isModelAction.mjs +6 -0
  13. package/dist/src/action/middleware.mjs +84 -0
  14. package/dist/src/action/modelAction.mjs +34 -0
  15. package/dist/src/action/modelFlow.mjs +251 -0
  16. package/dist/src/action/pendingActions.mjs +30 -0
  17. package/dist/src/action/protection.mjs +19 -0
  18. package/dist/src/action/runUnprotected.mjs +24 -0
  19. package/dist/src/action/wrapInAction.mjs +90 -0
  20. package/dist/src/actionMiddlewares/actionSerialization/actionSerialization.mjs +131 -0
  21. package/dist/src/actionMiddlewares/actionSerialization/applySerializedAction.mjs +110 -0
  22. package/dist/src/actionMiddlewares/actionSerialization/arraySerializer.mjs +15 -0
  23. package/dist/src/actionMiddlewares/actionSerialization/core.mjs +3 -0
  24. package/dist/src/actionMiddlewares/actionSerialization/dateSerializer.mjs +15 -0
  25. package/dist/src/actionMiddlewares/actionSerialization/mapSerializer.mjs +32 -0
  26. package/dist/src/actionMiddlewares/actionSerialization/objectPathSerializer.mjs +33 -0
  27. package/dist/src/actionMiddlewares/actionSerialization/objectSnapshotSerializer.mjs +18 -0
  28. package/dist/src/actionMiddlewares/actionSerialization/plainObjectSerializer.mjs +27 -0
  29. package/dist/src/actionMiddlewares/actionSerialization/primitiveSerializer.mjs +39 -0
  30. package/dist/src/actionMiddlewares/actionSerialization/setSerializer.mjs +29 -0
  31. package/dist/src/actionMiddlewares/actionTrackingMiddleware.mjs +239 -0
  32. package/dist/src/actionMiddlewares/onActionMiddleware.mjs +44 -0
  33. package/dist/src/actionMiddlewares/readonlyMiddleware.mjs +49 -0
  34. package/dist/src/actionMiddlewares/transactionMiddleware.mjs +69 -0
  35. package/dist/src/actionMiddlewares/undoMiddleware.mjs +472 -0
  36. package/dist/src/actionMiddlewares/utils.mjs +25 -0
  37. package/dist/src/computedTree/computedTree.mjs +63 -0
  38. package/dist/src/context/context.mjs +141 -0
  39. package/dist/src/dataModel/BaseDataModel.mjs +108 -0
  40. package/dist/src/dataModel/DataModel.mjs +32 -0
  41. package/dist/src/dataModel/actions.mjs +12 -0
  42. package/dist/src/dataModel/getDataModelMetadata.mjs +14 -0
  43. package/dist/src/dataModel/newDataModel.mjs +31 -0
  44. package/dist/src/dataModel/utils.mjs +29 -0
  45. package/dist/src/frozen/Frozen.mjs +68 -0
  46. package/dist/src/globalConfig/globalConfig.mjs +57 -0
  47. package/dist/src/index.mjs +97 -0
  48. package/dist/src/model/BaseModel.mjs +118 -0
  49. package/dist/src/model/Model.mjs +36 -0
  50. package/dist/src/model/getModelMetadata.mjs +19 -0
  51. package/dist/src/model/metadata.mjs +7 -0
  52. package/dist/src/model/newModel.mjs +95 -0
  53. package/dist/src/model/utils.mjs +33 -0
  54. package/dist/src/modelShared/BaseModelShared.mjs +9 -0
  55. package/dist/src/modelShared/Model.mjs +249 -0
  56. package/dist/src/modelShared/checkModelDecoratorArgs.mjs +21 -0
  57. package/dist/src/modelShared/modelClassInitializer.mjs +14 -0
  58. package/dist/src/modelShared/modelDecorator.mjs +117 -0
  59. package/dist/src/modelShared/modelInfo.mjs +7 -0
  60. package/dist/src/modelShared/modelPropsInfo.mjs +9 -0
  61. package/dist/src/modelShared/modelSymbols.mjs +5 -0
  62. package/dist/src/modelShared/newModel.mjs +13 -0
  63. package/dist/src/modelShared/prop.mjs +138 -0
  64. package/dist/src/modelShared/utils.mjs +10 -0
  65. package/dist/src/parent/core.mjs +34 -0
  66. package/dist/src/parent/coreObjectChildren.mjs +98 -0
  67. package/dist/src/parent/detach.mjs +32 -0
  68. package/dist/src/parent/findChildren.mjs +16 -0
  69. package/dist/src/parent/findParent.mjs +30 -0
  70. package/dist/src/parent/getChildrenObjects.mjs +12 -0
  71. package/dist/src/parent/onChildAttachedTo.mjs +101 -0
  72. package/dist/src/parent/path.mjs +149 -0
  73. package/dist/src/parent/path2.mjs +12 -0
  74. package/dist/src/parent/setParent.mjs +83 -0
  75. package/dist/src/parent/walkTree.mjs +104 -0
  76. package/dist/src/patch/applyPatches.mjs +118 -0
  77. package/dist/src/patch/emitPatch.mjs +100 -0
  78. package/dist/src/patch/jsonPatch.mjs +60 -0
  79. package/dist/src/patch/patchRecorder.mjs +75 -0
  80. package/dist/src/redux/connectReduxDevTools.mjs +153 -0
  81. package/dist/src/redux/redux.mjs +60 -0
  82. package/dist/src/ref/Ref.mjs +38 -0
  83. package/dist/src/ref/core.mjs +179 -0
  84. package/dist/src/ref/customRef.mjs +9 -0
  85. package/dist/src/ref/rootRef.mjs +34 -0
  86. package/dist/src/rootStore/attachDetach.mjs +53 -0
  87. package/dist/src/rootStore/rootStore.mjs +50 -0
  88. package/dist/src/snapshot/SnapshotterAndReconcilerPriority.mjs +9 -0
  89. package/dist/src/snapshot/applySnapshot.mjs +92 -0
  90. package/dist/src/snapshot/clone.mjs +29 -0
  91. package/dist/src/snapshot/fromArraySnapshot.mjs +23 -0
  92. package/dist/src/snapshot/fromFrozenSnapshot.mjs +13 -0
  93. package/dist/src/snapshot/fromModelSnapshot.mjs +38 -0
  94. package/dist/src/snapshot/fromPlainObjectSnapshot.mjs +26 -0
  95. package/dist/src/snapshot/fromSnapshot.mjs +91 -0
  96. package/dist/src/snapshot/getSnapshot.mjs +27 -0
  97. package/dist/src/snapshot/internal.mjs +97 -0
  98. package/dist/src/snapshot/onSnapshot.mjs +16 -0
  99. package/dist/src/snapshot/reconcileArraySnapshot.mjs +40 -0
  100. package/dist/src/snapshot/reconcileFrozenSnapshot.mjs +19 -0
  101. package/dist/src/snapshot/reconcileModelSnapshot.mjs +77 -0
  102. package/dist/src/snapshot/reconcilePlainObjectSnapshot.mjs +47 -0
  103. package/dist/src/snapshot/reconcileSnapshot.mjs +49 -0
  104. package/dist/src/snapshot/registerDefaultReconcilers.mjs +17 -0
  105. package/dist/src/snapshot/registerDefaultSnapshotters.mjs +17 -0
  106. package/dist/src/standardActions/actions.mjs +35 -0
  107. package/dist/src/standardActions/arrayActions.mjs +66 -0
  108. package/dist/src/standardActions/objectActions.mjs +36 -0
  109. package/dist/src/standardActions/standaloneActions.mjs +9 -0
  110. package/dist/src/transforms/ImmutableDate.mjs +51 -0
  111. package/dist/src/transforms/asMap.mjs +29 -0
  112. package/dist/src/transforms/asSet.mjs +12 -0
  113. package/dist/src/transforms/bigint.mjs +14 -0
  114. package/dist/src/transforms/date.mjs +27 -0
  115. package/dist/src/treeUtils/deepEquals.mjs +40 -0
  116. package/dist/src/treeUtils/draft.mjs +116 -0
  117. package/dist/src/treeUtils/sandbox.mjs +158 -0
  118. package/dist/src/tweaker/TweakerPriority.mjs +9 -0
  119. package/dist/src/tweaker/core.mjs +38 -0
  120. package/dist/src/tweaker/registerDefaultTweakers.mjs +17 -0
  121. package/dist/src/tweaker/tweak.mjs +109 -0
  122. package/dist/src/tweaker/tweakArray.mjs +272 -0
  123. package/dist/src/tweaker/tweakFrozen.mjs +28 -0
  124. package/dist/src/tweaker/tweakModel.mjs +26 -0
  125. package/dist/src/tweaker/tweakPlainObject.mjs +205 -0
  126. package/dist/src/tweaker/typeChecking.mjs +46 -0
  127. package/dist/src/tweaker/withoutTypeChecking.mjs +15 -0
  128. package/dist/src/types/TypeCheckError.mjs +31 -0
  129. package/dist/src/types/TypeChecker.mjs +165 -0
  130. package/dist/src/types/arrayBased/array.mjs +68 -0
  131. package/dist/src/types/arrayBased/tuple.mjs +71 -0
  132. package/dist/src/types/getTypeInfo.mjs +12 -0
  133. package/dist/src/types/objectBased/arraySet.mjs +83 -0
  134. package/dist/src/types/objectBased/dataModelData.mjs +95 -0
  135. package/dist/src/types/objectBased/model.mjs +133 -0
  136. package/dist/src/types/objectBased/object.mjs +119 -0
  137. package/dist/src/types/objectBased/objectMap.mjs +90 -0
  138. package/dist/src/types/objectBased/record.mjs +80 -0
  139. package/dist/src/types/objectBased/ref.mjs +62 -0
  140. package/dist/src/types/primitiveBased/enum.mjs +20 -0
  141. package/dist/src/types/primitiveBased/primitives.mjs +59 -0
  142. package/dist/src/types/primitiveBased/refinedPrimitives.mjs +6 -0
  143. package/dist/src/types/registerDefaultStandardTypeResolvers.mjs +13 -0
  144. package/dist/src/types/resolveTypeChecker.mjs +52 -0
  145. package/dist/src/types/tProp.mjs +53 -0
  146. package/dist/src/types/typeCheck.mjs +11 -0
  147. package/dist/src/types/types.mjs +69 -0
  148. package/dist/src/types/utility/maybe.mjs +10 -0
  149. package/dist/src/types/utility/or.mjs +99 -0
  150. package/dist/src/types/utility/refinement.mjs +52 -0
  151. package/dist/src/types/utility/unchecked.mjs +10 -0
  152. package/dist/src/utils/ModelPool.mjs +50 -0
  153. package/dist/src/utils/chainFns.mjs +15 -0
  154. package/dist/src/utils/index.mjs +228 -0
  155. package/dist/src/utils/mapUtils.mjs +10 -0
  156. package/dist/src/utils/tag.mjs +16 -0
  157. package/dist/src/wrappers/ArraySet.mjs +85 -0
  158. package/dist/src/wrappers/ObjectMap.mjs +96 -0
  159. package/dist/src/wrappers/asMap.mjs +181 -0
  160. package/dist/src/wrappers/asSet.mjs +97 -0
  161. package/package.json +8 -11
  162. package/src/dist/action/actionDecoratorUtils.d.ts +5 -0
  163. package/src/dist/action/applyAction.d.ts +36 -0
  164. package/src/dist/action/applyDelete.d.ts +7 -0
  165. package/src/dist/action/applyMethodCall.d.ts +9 -0
  166. package/src/dist/action/applySet.d.ts +8 -0
  167. package/src/dist/action/builtInActions.d.ts +39 -0
  168. package/src/dist/action/context.d.ts +85 -0
  169. package/src/dist/action/hookActions.d.ts +32 -0
  170. package/src/dist/action/index.d.ts +12 -0
  171. package/src/dist/action/isModelAction.d.ts +7 -0
  172. package/src/dist/action/middleware.d.ts +34 -0
  173. package/src/dist/action/modelAction.d.ts +9 -0
  174. package/src/dist/action/modelFlow.d.ts +34 -0
  175. package/src/dist/action/pendingActions.d.ts +1 -0
  176. package/src/dist/action/protection.d.ts +1 -0
  177. package/src/dist/action/runUnprotected.d.ts +19 -0
  178. package/src/dist/action/wrapInAction.d.ts +1 -0
  179. package/src/dist/actionMiddlewares/actionSerialization/actionSerialization.d.ts +84 -0
  180. package/src/dist/actionMiddlewares/actionSerialization/applySerializedAction.d.ts +45 -0
  181. package/src/dist/actionMiddlewares/actionSerialization/arraySerializer.d.ts +3 -0
  182. package/src/dist/actionMiddlewares/actionSerialization/core.d.ts +28 -0
  183. package/src/dist/actionMiddlewares/actionSerialization/dateSerializer.d.ts +2 -0
  184. package/src/dist/actionMiddlewares/actionSerialization/index.d.ts +3 -0
  185. package/src/dist/actionMiddlewares/actionSerialization/mapSerializer.d.ts +6 -0
  186. package/src/dist/actionMiddlewares/actionSerialization/objectPathSerializer.d.ts +8 -0
  187. package/src/dist/actionMiddlewares/actionSerialization/objectSnapshotSerializer.d.ts +2 -0
  188. package/src/dist/actionMiddlewares/actionSerialization/plainObjectSerializer.d.ts +2 -0
  189. package/src/dist/actionMiddlewares/actionSerialization/primitiveSerializer.d.ts +2 -0
  190. package/src/dist/actionMiddlewares/actionSerialization/setSerializer.d.ts +3 -0
  191. package/src/dist/actionMiddlewares/actionTrackingMiddleware.d.ts +122 -0
  192. package/src/dist/actionMiddlewares/index.d.ts +6 -0
  193. package/src/dist/actionMiddlewares/onActionMiddleware.d.ts +26 -0
  194. package/src/dist/actionMiddlewares/readonlyMiddleware.d.ts +35 -0
  195. package/src/dist/actionMiddlewares/transactionMiddleware.d.ts +21 -0
  196. package/src/dist/actionMiddlewares/undoMiddleware.d.ts +283 -0
  197. package/src/dist/actionMiddlewares/utils.d.ts +1 -0
  198. package/src/dist/computedTree/computedTree.d.ts +16 -0
  199. package/src/dist/computedTree/index.d.ts +1 -0
  200. package/src/dist/context/context.d.ts +84 -0
  201. package/src/dist/context/index.d.ts +1 -0
  202. package/src/dist/dataModel/BaseDataModel.d.ts +52 -0
  203. package/src/dist/dataModel/DataModel.d.ts +47 -0
  204. package/src/dist/dataModel/DataModelConstructorOptions.d.ts +1 -0
  205. package/src/dist/dataModel/actions.d.ts +1 -0
  206. package/src/dist/dataModel/getDataModelMetadata.d.ts +19 -0
  207. package/src/dist/dataModel/index.d.ts +4 -0
  208. package/src/dist/dataModel/newDataModel.d.ts +1 -0
  209. package/src/dist/dataModel/utils.d.ts +8 -0
  210. package/src/dist/frozen/Frozen.d.ts +50 -0
  211. package/src/dist/frozen/index.d.ts +1 -0
  212. package/src/dist/globalConfig/globalConfig.d.ts +51 -0
  213. package/src/dist/globalConfig/index.d.ts +1 -0
  214. package/src/dist/index.d.ts +23 -0
  215. package/src/dist/mobx-keystone.umd.js +8201 -0
  216. package/src/dist/model/BaseModel.d.ts +125 -0
  217. package/src/dist/model/Model.d.ts +94 -0
  218. package/src/dist/model/ModelConstructorOptions.d.ts +1 -0
  219. package/src/dist/model/getModelMetadata.d.ts +27 -0
  220. package/src/dist/model/index.d.ts +5 -0
  221. package/src/dist/model/metadata.d.ts +8 -0
  222. package/src/dist/model/newModel.d.ts +1 -0
  223. package/src/dist/model/utils.d.ts +8 -0
  224. package/src/dist/modelShared/BaseModelShared.d.ts +76 -0
  225. package/src/dist/modelShared/Model.d.ts +15 -0
  226. package/src/dist/modelShared/checkModelDecoratorArgs.d.ts +1 -0
  227. package/src/dist/modelShared/index.d.ts +3 -0
  228. package/src/dist/modelShared/modelClassInitializer.d.ts +1 -0
  229. package/src/dist/modelShared/modelDecorator.d.ts +24 -0
  230. package/src/dist/modelShared/modelInfo.d.ts +1 -0
  231. package/src/dist/modelShared/modelPropsInfo.d.ts +1 -0
  232. package/src/dist/modelShared/modelSymbols.d.ts +3 -0
  233. package/src/dist/modelShared/newModel.d.ts +4 -0
  234. package/src/dist/modelShared/prop.d.ts +179 -0
  235. package/src/dist/modelShared/utils.d.ts +1 -0
  236. package/src/dist/parent/core.d.ts +1 -0
  237. package/src/dist/parent/coreObjectChildren.d.ts +1 -0
  238. package/src/dist/parent/detach.d.ts +9 -0
  239. package/src/dist/parent/findChildren.d.ts +13 -0
  240. package/src/dist/parent/findParent.d.ts +41 -0
  241. package/src/dist/parent/getChildrenObjects.d.ts +11 -0
  242. package/src/dist/parent/index.d.ts +9 -0
  243. package/src/dist/parent/onChildAttachedTo.d.ts +22 -0
  244. package/src/dist/parent/path.d.ts +107 -0
  245. package/src/dist/parent/path2.d.ts +16 -0
  246. package/src/dist/parent/pathTypes.d.ts +12 -0
  247. package/src/dist/parent/setParent.d.ts +1 -0
  248. package/src/dist/parent/walkTree.d.ts +25 -0
  249. package/src/dist/patch/Patch.d.ts +16 -0
  250. package/src/dist/patch/applyPatches.d.ts +9 -0
  251. package/src/dist/patch/emitPatch.d.ts +29 -0
  252. package/src/dist/patch/index.d.ts +5 -0
  253. package/src/dist/patch/jsonPatch.d.ts +45 -0
  254. package/src/dist/patch/patchRecorder.d.ts +70 -0
  255. package/src/dist/redux/connectReduxDevTools.d.ts +12 -0
  256. package/src/dist/redux/index.d.ts +2 -0
  257. package/src/dist/redux/redux.d.ts +47 -0
  258. package/src/dist/ref/Ref.d.ts +53 -0
  259. package/src/dist/ref/core.d.ts +46 -0
  260. package/src/dist/ref/customRef.d.ts +38 -0
  261. package/src/dist/ref/index.d.ts +4 -0
  262. package/src/dist/ref/rootRef.d.ts +33 -0
  263. package/src/dist/rootStore/attachDetach.d.ts +1 -0
  264. package/src/dist/rootStore/index.d.ts +1 -0
  265. package/src/dist/rootStore/rootStore.d.ts +33 -0
  266. package/src/dist/snapshot/SnapshotOf.d.ts +47 -0
  267. package/src/dist/snapshot/SnapshotterAndReconcilerPriority.d.ts +1 -0
  268. package/src/dist/snapshot/applySnapshot.d.ts +17 -0
  269. package/src/dist/snapshot/clone.d.ts +18 -0
  270. package/src/dist/snapshot/fromArraySnapshot.d.ts +1 -0
  271. package/src/dist/snapshot/fromFrozenSnapshot.d.ts +1 -0
  272. package/src/dist/snapshot/fromModelSnapshot.d.ts +1 -0
  273. package/src/dist/snapshot/fromPlainObjectSnapshot.d.ts +1 -0
  274. package/src/dist/snapshot/fromSnapshot.d.ts +36 -0
  275. package/src/dist/snapshot/getSnapshot.d.ts +22 -0
  276. package/src/dist/snapshot/index.d.ts +6 -0
  277. package/src/dist/snapshot/internal.d.ts +1 -0
  278. package/src/dist/snapshot/onSnapshot.d.ts +18 -0
  279. package/src/dist/snapshot/reconcileArraySnapshot.d.ts +1 -0
  280. package/src/dist/snapshot/reconcileFrozenSnapshot.d.ts +1 -0
  281. package/src/dist/snapshot/reconcileModelSnapshot.d.ts +1 -0
  282. package/src/dist/snapshot/reconcilePlainObjectSnapshot.d.ts +1 -0
  283. package/src/dist/snapshot/reconcileSnapshot.d.ts +1 -0
  284. package/src/dist/snapshot/registerDefaultReconcilers.d.ts +1 -0
  285. package/src/dist/snapshot/registerDefaultSnapshotters.d.ts +1 -0
  286. package/src/dist/standardActions/actions.d.ts +1 -0
  287. package/src/dist/standardActions/arrayActions.d.ts +18 -0
  288. package/src/dist/standardActions/index.d.ts +3 -0
  289. package/src/dist/standardActions/objectActions.d.ts +7 -0
  290. package/src/dist/standardActions/standaloneActions.d.ts +16 -0
  291. package/src/dist/transforms/ImmutableDate.d.ts +1 -0
  292. package/src/dist/transforms/asMap.d.ts +3 -0
  293. package/src/dist/transforms/asSet.d.ts +2 -0
  294. package/src/dist/transforms/bigint.d.ts +2 -0
  295. package/src/dist/transforms/date.d.ts +3 -0
  296. package/src/dist/transforms/index.d.ts +4 -0
  297. package/src/dist/treeUtils/deepEquals.d.ts +20 -0
  298. package/src/dist/treeUtils/draft.d.ts +70 -0
  299. package/src/dist/treeUtils/index.d.ts +3 -0
  300. package/src/dist/treeUtils/sandbox.d.ts +85 -0
  301. package/src/dist/tweaker/TweakerPriority.d.ts +1 -0
  302. package/src/dist/tweaker/core.d.ts +14 -0
  303. package/src/dist/tweaker/index.d.ts +2 -0
  304. package/src/dist/tweaker/registerDefaultTweakers.d.ts +1 -0
  305. package/src/dist/tweaker/tweak.d.ts +22 -0
  306. package/src/dist/tweaker/tweakArray.d.ts +1 -0
  307. package/src/dist/tweaker/tweakFrozen.d.ts +1 -0
  308. package/src/dist/tweaker/tweakModel.d.ts +1 -0
  309. package/src/dist/tweaker/tweakPlainObject.d.ts +1 -0
  310. package/src/dist/tweaker/typeChecking.d.ts +1 -0
  311. package/src/dist/tweaker/withoutTypeChecking.d.ts +2 -0
  312. package/src/dist/types/TypeCheckError.d.ts +22 -0
  313. package/src/dist/types/TypeChecker.d.ts +8 -0
  314. package/src/dist/types/arrayBased/array.d.ts +23 -0
  315. package/src/dist/types/arrayBased/tuple.d.ts +24 -0
  316. package/src/dist/types/getTypeInfo.d.ts +9 -0
  317. package/src/dist/types/index.d.ts +5 -0
  318. package/src/dist/types/objectBased/arraySet.d.ts +24 -0
  319. package/src/dist/types/objectBased/dataModelData.d.ts +44 -0
  320. package/src/dist/types/objectBased/model.d.ts +43 -0
  321. package/src/dist/types/objectBased/object.d.ts +63 -0
  322. package/src/dist/types/objectBased/objectMap.d.ts +24 -0
  323. package/src/dist/types/objectBased/record.d.ts +24 -0
  324. package/src/dist/types/objectBased/ref.d.ts +21 -0
  325. package/src/dist/types/primitiveBased/enum.d.ts +34 -0
  326. package/src/dist/types/primitiveBased/primitives.d.ts +81 -0
  327. package/src/dist/types/primitiveBased/refinedPrimitives.d.ts +18 -0
  328. package/src/dist/types/registerDefaultStandardTypeResolvers.d.ts +1 -0
  329. package/src/dist/types/resolveTypeChecker.d.ts +1 -0
  330. package/src/dist/types/schemas.d.ts +53 -0
  331. package/src/dist/types/tProp.d.ts +92 -0
  332. package/src/dist/types/typeCheck.d.ts +11 -0
  333. package/src/dist/types/types.d.ts +51 -0
  334. package/src/dist/types/utility/maybe.d.ts +29 -0
  335. package/src/dist/types/utility/or.d.ts +35 -0
  336. package/src/dist/types/utility/refinement.d.ts +45 -0
  337. package/src/dist/types/utility/unchecked.d.ts +22 -0
  338. package/src/dist/utils/ModelPool.d.ts +7 -0
  339. package/src/dist/utils/chainFns.d.ts +1 -0
  340. package/src/dist/utils/index.d.ts +6 -0
  341. package/src/dist/utils/mapUtils.d.ts +2 -0
  342. package/src/dist/utils/tag.d.ts +13 -0
  343. package/src/dist/utils/types.d.ts +39 -0
  344. package/src/dist/wrappers/ArraySet.d.ts +29 -0
  345. package/src/dist/wrappers/ObjectMap.d.ts +32 -0
  346. package/src/dist/wrappers/asMap.d.ts +29 -0
  347. package/src/dist/wrappers/asSet.d.ts +15 -0
  348. package/src/dist/wrappers/index.d.ts +4 -0
  349. package/dist/mobx-keystone.es.js +0 -7934
  350. package/dist/mobx-keystone.es.mjs +0 -7934
@@ -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