UNPKG

mobx-state-tree

Version:

Opinionated, transactional, MobX powered state container

2 lines • 82.2 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("mobx")):"function"==typeof define&&define.amd?define(["exports","mobx"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).mobxStateTree={},e.mobx)}(this,(function(e,t){"use strict";let n="warn";function i(e){n=e}function r(){return n}var s;function a(e){return he(e).type}function o(e,t){return he(e).onPatch(t)}function l(e,t){he(e).applyPatches(je(t))}function c(e,t){return he(e).applySnapshot(t)}function u(e,t=!0){const n=he(e);return t?n.snapshot:n.type.getSnapshot(n,!1)}function h(e){return he(e).root.storedValue}function p(e){return he(e).path}function d(e){return he(e).identifier}function f(e,t){const n=ye(he(e),t,!1);if(void 0!==n)try{return n.value}catch(e){return}}function b(e){return he(e).observableIsAlive}function y(e){let t;return t=ue(e)?a(e):e,{name:t.name,properties:Object.assign({},t.properties)}}!function(e){e.afterCreate="afterCreate",e.afterAttach="afterAttach",e.afterCreationFinalization="afterCreationFinalization",e.beforeDetach="beforeDetach",e.beforeDestroy="beforeDestroy"}(s||(s={}));class g{get subpath(){return this._subpath}get subpathUponDeath(){return this._subpathUponDeath}get pathUponDeath(){return this._pathUponDeath}get value(){return this.type.getValue(this)}get state(){return this._state}set state(e){const t=this.isAlive;this._state=e;const n=this.isAlive;this.aliveAtom&&t!==n&&this.aliveAtom.reportChanged()}fireInternalHook(e){this._hookSubscribers&&this._hookSubscribers.emit(e,this,e)}registerHook(e,t){return this._hookSubscribers||(this._hookSubscribers=new xe),this._hookSubscribers.register(e,t)}get parent(){return this._parent}constructor(e,t,n,i){Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"environment",{enumerable:!0,configurable:!0,writable:!0,value:i}),Object.defineProperty(this,"_escapedSubpath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_subpath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_subpathUponDeath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pathUponDeath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"storedValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"aliveAtom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_state",{enumerable:!0,configurable:!0,writable:!0,value:ce.INITIALIZING}),Object.defineProperty(this,"_hookSubscribers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_parent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pathAtom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.environment=i,this.baseSetParent(t,n)}getReconciliationType(){return this.type}baseSetParent(e,t){this._parent=e,this._subpath=t,this._escapedSubpath=void 0,this.pathAtom&&this.pathAtom.reportChanged()}get path(){return this.getEscapedPath(!0)}getEscapedPath(e){return e&&(this.pathAtom||(this.pathAtom=t.createAtom("path")),this.pathAtom.reportObserved()),this.parent?(void 0===this._escapedSubpath&&(this._escapedSubpath=this._subpath?He(this._subpath):""),this.parent.getEscapedPath(e)+"/"+this._escapedSubpath):""}get isRoot(){return null===this.parent}get isAlive(){return this.state!==ce.DEAD}get isDetaching(){return this.state===ce.DETACHING}get observableIsAlive(){return this.aliveAtom||(this.aliveAtom=t.createAtom("alive")),this.aliveAtom.reportObserved(),this.isAlive}baseFinalizeCreation(e){if(this.state===ce.CREATED){if(this.parent){if(this.parent.state!==ce.FINALIZED)return;this.fireHook(s.afterAttach)}this.state=ce.FINALIZED,e&&e()}}baseFinalizeDeath(){this._hookSubscribers&&this._hookSubscribers.clearAll(),this._subpathUponDeath=this._subpath,this._pathUponDeath=this.getEscapedPath(!1),this.baseSetParent(null,""),this.state=ce.DEAD}baseAboutToDie(){this.fireHook(s.beforeDestroy)}}class v extends g{constructor(e,t,n,i,r){super(e,t,n,i);try{this.storedValue=e.createNewInstance(r)}catch(e){throw this.state=ce.DEAD,e}this.state=ce.CREATED,this.finalizeCreation()}get root(){if(!this.parent)throw new Se("This scalar node is not part of a tree");return this.parent.root}setParent(e,t){const n=this.parent!==e,i=this.subpath!==t;(n||i)&&(this.environment=void 0,this.baseSetParent(this.parent,t))}get snapshot(){return this.getSnapshot()}getSnapshot(){return this.type.getSnapshot(this)}toString(){const e=(this.isAlive?this.path:this.pathUponDeath)||"<root>";return`${this.type.name}@${e}${this.isAlive?"":" [dead]"}`}die(){this.isAlive&&this.state!==ce.DETACHING&&(this.aboutToDie(),this.finalizeDeath())}finalizeCreation(){this.baseFinalizeCreation()}aboutToDie(){this.baseAboutToDie()}finalizeDeath(){this.baseFinalizeDeath()}fireHook(e){this.fireInternalHook(e)}}v.prototype.die=t.action(v.prototype.die);let m=1;var w,P;!function(e){e[e.UNINITIALIZED=0]="UNINITIALIZED",e[e.CREATING=1]="CREATING",e[e.CREATED=2]="CREATED"}(w||(w={})),function(e){e.Dispose="dispose",e.Patch="patch",e.Snapshot="snapshot"}(P||(P={}));const _={onError(e){throw e}};class S extends g{applyPatches(e){this.createObservableInstanceIfNeeded(),this._applyPatches(e)}applySnapshot(e){this.createObservableInstanceIfNeeded(),this._applySnapshot(e)}constructor(e,n,i,r,s){if(super(e,n,i,r),Object.defineProperty(this,"nodeId",{enumerable:!0,configurable:!0,writable:!0,value:++m}),Object.defineProperty(this,"identifierAttribute",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"identifier",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"unnormalizedIdentifier",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"identifierCache",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isProtectionEnabled",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"middlewares",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"hasSnapshotPostProcessor",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_applyPatches",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_applySnapshot",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_autoUnbox",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"_isRunningAction",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_hasSnapshotReaction",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_endOfActionCallbacks",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_observableInstanceState",{enumerable:!0,configurable:!0,writable:!0,value:w.UNINITIALIZED}),Object.defineProperty(this,"_childNodes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_initialSnapshot",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_cachedInitialSnapshot",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_cachedInitialSnapshotCreated",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_snapshotComputed",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_snapshotUponDeath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_internalEvents",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._snapshotComputed=t.computed(()=>this.getSnapshot()),this.unbox=this.unbox.bind(this),this._initialSnapshot=s,this.identifierAttribute=e.identifierAttribute,n||(this.identifierCache=new ae),this._childNodes=e.initializeChildNodes(this,this._initialSnapshot),this.identifier=null,this.unnormalizedIdentifier=null,this.identifierAttribute&&this._initialSnapshot){let e=this._initialSnapshot[this.identifierAttribute];if(void 0===e){const t=this._childNodes[this.identifierAttribute];t&&(e=t.value)}if("string"!=typeof e&&"number"!=typeof e&&"bigint"!=typeof e)throw new Se(`Instance identifier '${this.identifierAttribute}' for type '${this.type.name}' must be a string, a number or a bigint`);this.identifier=Zt(e),this.unnormalizedIdentifier=e}n?n.root.identifierCache.addNodeToCache(this):this.identifierCache.addNodeToCache(this)}createObservableInstanceIfNeeded(e=!0){this._observableInstanceState===w.UNINITIALIZED&&this.createObservableInstance(e)}createObservableInstance(e=!0){this._observableInstanceState=w.CREATING;const t=[];let n=this.parent;for(;n&&n._observableInstanceState===w.UNINITIALIZED;)t.unshift(n),n=n.parent;for(const e of t)e.createObservableInstanceIfNeeded(!1);const i=this.type;try{this.storedValue=i.createNewInstance(this._childNodes),this.preboot(),this._isRunningAction=!0,i.finalizeNewInstance(this,this.storedValue)}catch(e){throw this.state=ce.DEAD,e}finally{this._isRunningAction=!1}if(this._observableInstanceState=w.CREATED,this._snapshotComputed.trackAndCompute(),this.isRoot&&this._addSnapshotReaction(),this._childNodes=Pe,this.state=ce.CREATED,e){this.fireHook(s.afterCreate),this.finalizeCreation();for(const e of t.reverse())e.fireHook(s.afterCreate),e.finalizeCreation()}}get root(){const e=this.parent;return e?e.root:this}enqueueEndOfAction(e){const t=this.root;t._endOfActionCallbacks||(t._endOfActionCallbacks=[]),t._endOfActionCallbacks.push(e)}flushEndOfActionCallbacks(){const e=this.root;for(;e._endOfActionCallbacks&&e._endOfActionCallbacks.length>0;){const t=e._endOfActionCallbacks;e._endOfActionCallbacks=void 0,t.forEach(e=>{e()})}}clearParent(){if(!this.parent)return;this.fireHook(s.beforeDetach);const e=this.state;this.state=ce.DETACHING;const t=this.root,n=t.environment,i=t.identifierCache.splitCache(this);try{this.parent.removeChild(this.subpath),this.baseSetParent(null,""),this.environment=n,this.identifierCache=i}finally{this.state=e}}setParent(e,t){const n=e!==this.parent,i=t!==this.subpath;(n||i)&&(n?(this.environment=void 0,e.root.identifierCache.mergeCache(this),this.baseSetParent(e,t),this.fireHook(s.afterAttach)):i&&this.baseSetParent(this.parent,t))}fireHook(e){this.fireInternalHook(e);const n=this.storedValue&&"object"==typeof this.storedValue&&this.storedValue[e];"function"==typeof n&&(t._allowStateChangesInsideComputed?t._allowStateChangesInsideComputed(()=>{n.apply(this.storedValue)}):n.apply(this.storedValue))}get snapshot(){return this.hasSnapshotPostProcessor&&this.createObservableInstanceIfNeeded(),this._snapshotComputed.get()}getSnapshot(){return this.isAlive?this._observableInstanceState===w.CREATED?this._getActualSnapshot():this._getCachedInitialSnapshot():this._snapshotUponDeath}_getActualSnapshot(){return this.type.getSnapshot(this)}_getCachedInitialSnapshot(){if(!this._cachedInitialSnapshotCreated){const e=this.type,t=this._childNodes,n=this._initialSnapshot;this._cachedInitialSnapshot=e.processInitialSnapshot(t,n),this._cachedInitialSnapshotCreated=!0}return this._cachedInitialSnapshot}isRunningAction(){return!!this._isRunningAction||!this.isRoot&&this.parent.isRunningAction()}assertAlive(e){const t=r();if(!this.isAlive&&"ignore"!==t){const i=this._getAssertAliveError(e);switch(t){case"error":throw new Se(i);case"warn":n=i,console.warn(new Error("[mobx-state-tree] "+n))}}var n}_getAssertAliveError(e){const t=this.getEscapedPath(!1)||this.pathUponDeath||"",n=e.subpath&&He(e.subpath)||"";let i=e.actionContext||F();i&&"action"!==i.type&&i.parentActionEvent&&(i=i.parentActionEvent);let r="";if(i&&null!=i.name){r=`${i&&i.context&&p(i.context)||t}.${i.name}()`}return`You are trying to read or write to an object that is no longer part of a state tree. (Object type: '${this.type.name}', Path upon death: '${t}', Subpath: '${n}', Action: '${r}'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.`}getChildNode(e){this.assertAlive({subpath:e}),this._autoUnbox=!1;try{return this._observableInstanceState===w.CREATED?this.type.getChildNode(this,e):this._childNodes[e]}finally{this._autoUnbox=!0}}getChildren(){this.assertAlive(Pe),this._autoUnbox=!1;try{return this._observableInstanceState===w.CREATED?this.type.getChildren(this):ve(this._childNodes)}finally{this._autoUnbox=!0}}getChildType(e){return this.type.getChildType(e)}get isProtected(){return this.root.isProtectionEnabled}assertWritable(e){if(this.assertAlive(e),!this.isRunningAction()&&this.isProtected)throw new Se(`Cannot modify '${this}', the object is protected and can only be modified by using an action.`)}removeChild(e){this.type.removeChild(this,e)}unbox(e){return e?(this.assertAlive({subpath:e.subpath||e.subpathUponDeath}),this._autoUnbox?e.value:e):e}toString(){const e=(this.isAlive?this.path:this.pathUponDeath)||"<root>",t=this.identifier?`(id: ${this.identifier})`:"";return`${this.type.name}@${e}${t}${this.isAlive?"":" [dead]"}`}finalizeCreation(){this.baseFinalizeCreation(()=>{for(let e of this.getChildren())e.finalizeCreation();this.fireInternalHook(s.afterCreationFinalization)})}detach(){if(!this.isAlive)throw new Se("Error while detaching, node is not alive.");this.clearParent()}preboot(){const e=this;this._applyPatches=U(this.storedValue,"@APPLY_PATCHES",t=>{t.forEach(t=>{if(!t.path)return void e.type.applySnapshot(e,t.value);const n=We(t.path);ge(e,n.slice(0,-1)).applyPatchLocally(n[n.length-1],t)})}),this._applySnapshot=U(this.storedValue,"@APPLY_SNAPSHOT",t=>{if(t!==e.snapshot)return e.type.applySnapshot(e,t)}),Ve(this.storedValue,"$treenode",this),Ve(this.storedValue,"toJSON",de)}die(){this.isAlive&&this.state!==ce.DETACHING&&(this.aboutToDie(),this.finalizeDeath())}aboutToDie(){this._observableInstanceState!==w.UNINITIALIZED&&(this.getChildren().forEach(e=>{e.aboutToDie()}),this.baseAboutToDie(),this._internalEventsEmit(P.Dispose),this._internalEventsClear(P.Dispose))}finalizeDeath(){this.getChildren().forEach(e=>{e.finalizeDeath()}),this.root.identifierCache.notifyDied(this);const e=this.snapshot;this._snapshotUponDeath=e,this._internalEventsClearAll(),this.baseFinalizeDeath()}onSnapshot(e){return this._addSnapshotReaction(),this._internalEventsRegister(P.Snapshot,e)}emitSnapshot(e){this._internalEventsEmit(P.Snapshot,e)}onPatch(e){return this._internalEventsRegister(P.Patch,e)}hasPatchSubscribers(){return!!this._internalEventsHasSubscribers(P.Patch)||!!this.parent&&this.parent.hasPatchSubscribers()}emitPatch(e,t){if(this._internalEventsHasSubscribers(P.Patch)){const n=function(e,...t){for(let n=0;n<t.length;n++){const i=t[n];for(let t in i)e[t]=i[t]}return e}({},e,{path:t.path.substr(this.path.length)+(e.path?"/"+e.path:"")}),[i,r]=function(e){if(!("oldValue"in e))throw new Se("Patches without `oldValue` field cannot be inversed");return[Me(e),Le(e)]}(n);this._internalEventsEmit(P.Patch,i,r)}this.parent&&this.parent.emitPatch(e,t)}hasDisposer(e){return this._internalEventsHas(P.Dispose,e)}addDisposer(e){if(this.hasDisposer(e))throw new Se("cannot add a disposer when it is already registered for execution");this._internalEventsRegister(P.Dispose,e,!0)}removeDisposer(e){if(!this._internalEventsHas(P.Dispose,e))throw new Se("cannot remove a disposer which was never registered for execution");this._internalEventsUnregister(P.Dispose,e)}removeMiddleware(e){if(this.middlewares){const t=this.middlewares.indexOf(e);t>=0&&this.middlewares.splice(t,1)}}addMiddleWare(e,t=!0){const n={handler:e,includeHooks:t};return this.middlewares?this.middlewares.push(n):this.middlewares=[n],()=>{this.removeMiddleware(n)}}applyPatchLocally(e,t){this.assertWritable({subpath:e}),this.createObservableInstanceIfNeeded(),this.type.applyPatchLocally(this,e,t)}_addSnapshotReaction(){if(!this._hasSnapshotReaction){const e=t.reaction(()=>this.snapshot,e=>this.emitSnapshot(e),_);this.addDisposer(e),this._hasSnapshotReaction=!0}}_internalEventsHasSubscribers(e){return!!this._internalEvents&&this._internalEvents.hasSubscribers(e)}_internalEventsRegister(e,t,n=!1){return this._internalEvents||(this._internalEvents=new xe),this._internalEvents.register(e,t,n)}_internalEventsHas(e,t){return!!this._internalEvents&&this._internalEvents.has(e,t)}_internalEventsUnregister(e,t){this._internalEvents&&this._internalEvents.unregister(e,t)}_internalEventsEmit(e,...t){this._internalEvents&&this._internalEvents.emit(e,...t)}_internalEventsClear(e){this._internalEvents&&this._internalEvents.clear(e)}_internalEventsClearAll(){this._internalEvents&&this._internalEvents.clearAll()}}var A,O;S.prototype.createObservableInstance=t.action(S.prototype.createObservableInstance),S.prototype.detach=t.action(S.prototype.detach),S.prototype.die=t.action(S.prototype.die),function(e){e[e.String=1]="String",e[e.Number=2]="Number",e[e.Boolean=4]="Boolean",e[e.Date=8]="Date",e[e.Literal=16]="Literal",e[e.Array=32]="Array",e[e.Map=64]="Map",e[e.Object=128]="Object",e[e.Frozen=256]="Frozen",e[e.Optional=512]="Optional",e[e.Reference=1024]="Reference",e[e.Identifier=2048]="Identifier",e[e.Late=4096]="Late",e[e.Refinement=8192]="Refinement",e[e.Union=16384]="Union",e[e.Null=32768]="Null",e[e.Undefined=65536]="Undefined",e[e.Integer=131072]="Integer",e[e.Custom=262144]="Custom",e[e.SnapshotProcessor=524288]="SnapshotProcessor",e[e.Lazy=1048576]="Lazy",e[e.Finite=2097152]="Finite",e[e.Float=4194304]="Float",e[e.BigInt=8388608]="BigInt"}(O||(O={}));const I=Symbol("$type");class j{constructor(e){Object.defineProperty(this,A,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"C",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"S",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"T",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"N",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isType",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=e}create(e,t){return ie(this,e),this.instantiate(null,"",t,e).value}getSnapshot(e,t){throw new Se("unimplemented method")}isAssignableFrom(e){return e===this}validate(e,t){if(pe(e)){const n=a(e);return this.isAssignableFrom(n)?ee():te(t,e)}return this.isValidSnapshot(e,t)}is(e){return 0===this.validate(e,[{path:"",type:this}]).length}get Type(){throw new Se("Factory.Type should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.Type`")}get TypeWithoutSTN(){throw new Se("Factory.TypeWithoutSTN should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.TypeWithoutSTN`")}get SnapshotType(){throw new Se("Factory.SnapshotType should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.SnapshotType`")}get CreationType(){throw new Se("Factory.CreationType should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.CreationType`")}}A=I,j.prototype.create=t.action(j.prototype.create);class T extends j{constructor(e){super(e),Object.defineProperty(this,"identifierAttribute",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}create(e=this.getDefaultSnapshot(),t){return super.create(e,t)}getValue(e){return e.createObservableInstanceIfNeeded(),e.storedValue}isMatchingSnapshotId(e,t){return!e.identifierAttribute||e.identifier===Zt(t[e.identifierAttribute])}tryToReconcileNode(e,t){return!e.isDetaching&&(e.snapshot===t||(!(!ue(t)||he(t)!==e)||!(e.type!==this||!Ce(t)||ue(t)||!this.isMatchingSnapshotId(e,t))&&(e.applySnapshot(t),!0)))}reconcile(e,t,n,i){if(this.tryToReconcileNode(e,t))return e.setParent(n,i),e;if(e.die(),ue(t)&&this.isAssignableFrom(a(t))){const e=he(t);return e.setParent(n,i),e}return this.instantiate(n,i,void 0,t)}getSubTypes(){return null}}T.prototype.create=t.action(T.prototype.create);class C extends j{createNewInstance(e){return e}getValue(e){return e.storedValue}getSnapshot(e){return e.storedValue}reconcile(e,t,n,i){if(!e.isDetaching&&e.type===this&&e.storedValue===t)return e;const r=this.instantiate(n,i,void 0,t);return e.die(),r}getSubTypes(){return null}}function E(e,t,n){const i=t.getReconciliationType(),r=function e(t){const n=t.getSubTypes();if(!n||Array.isArray(n)||"cannotDetermine"===n||!function(e){const t=O.Optional|O.Late,n=O.Refinement|O.SnapshotProcessor|O.Union;return(e.flags&t)>0&&0==(e.flags&n)}(t))return t;return e(n)}(e);return t instanceof S&&i===r&&i instanceof T&&Ce(n)&&!ue(n)&&i.isMatchingSnapshotId(t,n)}function N(e){return"object"==typeof e&&e&&!0===e.isType}const V=new Map;class D{constructor(e,t){Object.defineProperty(this,"hooks",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"call",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"flowsPending",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"running",{enumerable:!0,configurable:!0,writable:!0,value:!0}),e&&e.onStart(t)}finish(e){this.running&&(this.running=!1,this.hooks&&this.hooks.onFinish(this.call,e))}incFlowsPending(){this.flowsPending++}decFlowsPending(){this.flowsPending--}get hasFlowsPending(){return this.flowsPending>0}}function x(e){return{$MST_UNSERIALIZABLE:!0,type:e}}function $(e,n){t.runInAction(()=>{je(n).forEach(t=>function(e,t){const n=f(e,t.path||"");if(!n)throw new Se("Invalid action path: "+(t.path||""));const i=he(n);if("@APPLY_PATCHES"===t.name)return l.call(null,n,t.args[0]);if("@APPLY_SNAPSHOT"===t.name)return c.call(null,n,t.args[0]);if("function"!=typeof n[t.name])throw new Se(`Action '${t.name}' does not exist in '${i.path}'`);return n[t.name].apply(n,t.args?t.args.map(e=>{return(t=e)&&"object"==typeof t&&"$MST_DATE"in t?new Date(t.$MST_DATE):t;var t}):[])}(e,t))})}function k(e,t,n=!1){return B(e,(function(i,r){if("action"===i.type&&i.id===i.rootId){const s=he(i.context),o={name:i.name,path:be(he(e),s),args:i.args.map((e,t)=>function(e,t,n,i){if(i instanceof Date)return{$MST_DATE:i.getTime()};if(Ee(i))return i;if(ue(i))return x(`[MSTNode: ${a(i).name}]`);if("function"==typeof i)return x("[function]");if("object"==typeof i&&!Te(i)&&!Ie(i))return x(`[object ${i&&i.constructor&&i.constructor.name||"Complex Object"}]`);try{return JSON.stringify(i),i}catch(e){return x(""+e)}}(0,i.name,0,e))};if(n){const e=r(i);return t(o),e}return t(o),r(i)}return r(i)}))}let R,z=1;function F(){return R}function M(){return z++}function L(e,n){const i=he(e.context);"action"===e.type&&i.assertAlive({actionContext:e});const r=i._isRunningAction;i._isRunningAction=!0;const a=R,o=!a;R=e;try{return function(e,n,i,r){function a(n,i){const s=()=>{let t,s;try{t=i.apply(null,n.args)}catch(e){s=e}if(r||!n.parentActionEvent)try{e.root.flushEndOfActionCallbacks()}catch(e){s||(s=e)}if(s)throw s;return t};return n.name?t.action(n.name,s)():t.action(s)()}const o=new W(e,i);if(o.isEmpty)return a(n,i);let l=null;return function e(t){const n=o.getNextMiddleware(),c=n&&n.handler;if(!c)return a(t,i);if(!n.includeHooks&&s[t.name])return e(t);let u=!1;return c(t,(function(t,n){l=e(t),n&&(l=n(l))}),(function(e){u=!0,l=e})),!u||!r&&t.parentActionEvent?l:a(t,()=>l)}(n)}(i,e,n,o)}finally{R=a,i._isRunningAction=r}}function H(e){if(e)return"action"===e.type?e:e.parentActionEvent}function U(e,t,n){const i=function(){const i=M(),r=R,s=H(r);return L({type:"action",name:t,id:i,args:$e(arguments),context:e,tree:h(e),rootId:r?r.rootId:i,parentId:r?r.id:0,allParentIds:r?[...r.allParentIds,r.id]:[],parentEvent:r,parentActionEvent:s},n)};return i._isMSTAction=!0,i._isFlowAction=n._isFlowAction,i}function B(e,t,n=!0){return he(e).addMiddleWare(t,n)}class W{constructor(e,t){Object.defineProperty(this,"arrayIndex",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"inArrayIndex",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"middlewares",{enumerable:!0,configurable:!0,writable:!0,value:[]}),t.$mst_middleware&&this.middlewares.push(t.$mst_middleware);let n=e;for(;n;)n.middlewares&&this.middlewares.push(n.middlewares),n=n.parent}get isEmpty(){return this.middlewares.length<=0}getNextMiddleware(){const e=this.middlewares[this.arrayIndex];if(!e)return;const t=e[this.inArrayIndex++];return t||(this.arrayIndex++,this.inArrayIndex=0,this.getNextMiddleware())}}function G(){let e=F();for(;e&&"action"!==e.type;)e=e.parentActionEvent;return e}function Z(e,t,n){const i="number"==typeof t?t:t.id;let r=n?e:e.parentActionEvent;for(;r;){if(r.id===i)return!0;r=r.parentActionEvent}return!1}let Y=Object.assign({},{enabled:!1,indent:2,maxStringLength:100,maxArrayLength:10,maxPropertyCount:30,maxDepth:5});function J(){return Object.assign({},Y)}function q(e,t){try{return JSON.stringify(e,null,t)}catch(e){return`<Unserializable: ${e}>`}}function K(e){if("function"==typeof e)return`<function${e.name?" "+e.name:""}>`;if(ue(e))return`<${e}>`;const t=J();if(!t.enabled)return`\`${q(e)}\``;return`\`${q(function e(t,n,i){if("string"==typeof t)return t.length>i.maxStringLength?`${t.slice(0,i.maxStringLength)}… (${t.length-i.maxStringLength} more characters)`:t;if(Array.isArray(t)){if(n>=i.maxDepth)return"[…]";const r=t.slice(0,i.maxArrayLength).map(t=>e(t,n+1,i));return t.length>i.maxArrayLength&&r.push(`… ${t.length-i.maxArrayLength} more items`),r}if(Te(t)){if(n>=i.maxDepth)return"{…}";const r={},s=Object.keys(t);return s.slice(0,i.maxPropertyCount).forEach(s=>{r[s]=e(t[s],n+1,i)}),s.length>i.maxPropertyCount&&(r["…"]=s.length-i.maxPropertyCount+" more keys"),r}return t}(e,0,t),t.indent||void 0)}\``}function Q(e){const{value:t}=e,n=e.context[e.context.length-1].type,i=e.context.map(({path:e})=>e).filter(e=>e.length>0).join("/"),r=i.length>0?`at path "/${i}" `:"",s=ue(t)?`value of type ${he(t).type.name}:`:Ee(t)?"value":"snapshot",a=n&&ue(t)&&n.is(he(t).snapshot),o=J();return`${r}${s} ${K(t)} is not assignable ${n?`to type: \`${n.name}\``:""}`+(e.message?` (${e.message})`:"")+(n?wt(n)||Ee(t)?".":`, expected an instance of \`${n.name}\` or a snapshot like \`${l=n,o.enabled?function(e,t){if(t<=0)return e;try{const n=" ".repeat(t);let i="",r=0,s=null,a=!1;const o=()=>{i=i.replace(/[ \t]+$/,""),i+="\n"+n.repeat(Math.max(0,r))};for(let t=0;t<e.length;t++){const n=e[t];if(s)i+=n,a?a=!1:"\\"===n?a=!0:n===s&&(s=null);else switch(n){case'"':case"'":s=n,i+=n;break;case"{":for(r++,i+="{",o();" "===e[t+1];)t++;break;case"}":r--,o(),i+="}";break;case";":for(i+=";",o();" "===e[t+1];)t++;break;default:i+=n}}return i}catch(t){return e}}(l.describe(),o.indent):l.describe()}\` instead.`+(a?" (Note that a snapshot of the provided value is compatible with the targeted type)":""):".");var l}function X(e,t,n){return e.concat([{path:t,type:n}])}function ee(){return we}function te(e,t,n){return[{context:e,value:t,message:n}]}function ne(e){return e.reduce((e,t)=>e.concat(t),[])}function ie(e,t){"undefined"!=typeof process&&process.env&&"true"===process.env.ENABLE_TYPE_CHECK&&re(e,t)}function re(e,t){const n=e.validate(t,[{path:"",type:e}]);if(n.length>0)throw new Se(function(e,t,n){if(0===n.length)return;const i=K(t);return`Error while converting ${J().enabled?i:(r=i,r.length<280?r:`${r.substring(0,272)}......${r.substring(r.length-8)}`)} to \`${e.name}\`:\n\n    `+n.map(Q).join("\n    ");var r}(e,t,n))}let se=0;class ae{constructor(){Object.defineProperty(this,"cacheId",{enumerable:!0,configurable:!0,writable:!0,value:se++}),Object.defineProperty(this,"cache",{enumerable:!0,configurable:!0,writable:!0,value:t.observable.map()}),Object.defineProperty(this,"lastCacheModificationPerId",{enumerable:!0,configurable:!0,writable:!0,value:t.observable.map()})}updateLastCacheModificationPerId(e){const t=this.lastCacheModificationPerId.get(e);this.lastCacheModificationPerId.set(e,void 0===t?1:t+1)}getLastCacheModificationPerId(e){const t=this.lastCacheModificationPerId.get(e)||0;return`${this.cacheId}-${t}`}addNodeToCache(e,n=!0){if(e.identifierAttribute){const i=e.identifier;this.cache.has(i)||this.cache.set(i,t.observable.array([],_e));const r=this.cache.get(i);if(-1!==r.indexOf(e))throw new Se("Already registered");r.push(e),n&&this.updateLastCacheModificationPerId(i)}}mergeCache(e){t.values(e.identifierCache.cache).forEach(e=>e.forEach(e=>{this.addNodeToCache(e)}))}notifyDied(e){if(e.identifierAttribute){const t=e.identifier,n=this.cache.get(t);n&&(n.remove(e),n.length||this.cache.delete(t),this.updateLastCacheModificationPerId(e.identifier))}}splitCache(e){const n=new ae,i=e.path+"/";return t.entries(this.cache).forEach(([t,r])=>{let s=!1;for(let a=r.length-1;a>=0;a--){const o=r[a];o!==e&&0!==o.path.indexOf(i)||(n.addNodeToCache(o,!1),r.splice(a,1),r.length||this.cache.delete(t),s=!0)}s&&this.updateLastCacheModificationPerId(t)}),n}has(e,t){const n=this.cache.get(t);return!!n&&n.some(t=>e.isAssignableFrom(t.type))}resolve(e,t){const n=this.cache.get(t);if(!n)return null;const i=n.filter(t=>e.isAssignableFrom(t.type));switch(i.length){case 0:return null;case 1:return i[0];default:throw new Se(`Cannot resolve a reference to type '${e.name}' with id: '${t}' unambigously, there are multiple candidates: ${i.map(e=>e.path).join(", ")}`)}}}function oe(e,t,n,i,r){const s=pe(r);if(s){if(s.parent)throw new Se(`Cannot add an object to a state tree if it is already part of the same or another state tree. Tried to assign an object to '${t?t.path:""}/${n}', but it lives already at '${s.path}'`);return t&&s.setParent(t,n),s}return new S(e,t,n,i,r)}function le(e,t,n,i,r){return new v(e,t,n,i,r)}var ce;function ue(e){return!(!e||!e.$treenode)}function he(e){if(!ue(e))throw new Se(`Value ${e} is no MST Node`);return e.$treenode}function pe(e){return e&&e.$treenode||null}function de(){return he(this).snapshot}!function(e){e[e.INITIALIZING=0]="INITIALIZING",e[e.CREATED=1]="CREATED",e[e.FINALIZED=2]="FINALIZED",e[e.DETACHING=3]="DETACHING",e[e.DEAD=4]="DEAD"}(ce||(ce={}));const fe=e=>"..";function be(e,t){if(e.root!==t.root)throw new Se(`Cannot calculate relative path: objects '${e}' and '${t}' are not part of the same object tree`);const n=We(e.path),i=We(t.path);let r=0;for(;r<n.length&&n[r]===i[r];r++);return n.slice(r).map(fe).join("/")+Be(i.slice(r))}function ye(e,t,n=!0){return ge(e,We(t),n)}function ge(e,t,n=!0){let i=e;try{for(let e=0;e<t.length;e++){const n=t[e];if(".."===n){if(i=i.parent,i)continue}else{if("."===n)continue;if(i){if(i instanceof v){const e=i.value;ue(e)&&(i=he(e))}if(i instanceof S){if(i.getChildType(n)&&(i=i.getChildNode(n),i))continue}}}throw new Se(`Could not resolve '${n}' in path '${Be(t.slice(0,e))||"/"}' while resolving '${Be(t)}'`)}}catch(e){if(!n)return;throw e}return i}function ve(e){if(!e)return we;const t=Object.keys(e);if(!t.length)return we;const n=new Array(t.length);return t.forEach((t,i)=>{n[i]=e[t]}),n}const me=Object.toString(),we=Object.freeze([]),Pe=Object.freeze({}),_e={deep:!1};Object.freeze(_e);class Se extends Error{constructor(e="Illegal state"){super("[mobx-state-tree] "+e)}}function Ae(e){return e}const Oe=Number.isInteger;function Ie(e){return Array.isArray(e)||t.isObservableArray(e)}function je(e){return e?Ie(e)?e:[e]:we}function Te(e){var t;if(null===e||"object"!=typeof e)return!1;const n=Object.getPrototypeOf(e);return null==n||(null===(t=n.constructor)||void 0===t?void 0:t.toString())===me}function Ce(e){return!(null===e||"object"!=typeof e||e instanceof Date||e instanceof RegExp)}function Ee(e,t=!0){return null==e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e||t&&e instanceof Date}function Ne(e){return"function"!=typeof e}function Ve(e,n,i){!function(e,n,i){t.isObservableObject(e)?t.defineProperty(e,n,i):Object.defineProperty(e,n,i)}(e,n,{enumerable:!1,writable:!1,configurable:!0,value:i})}class De{constructor(){Object.defineProperty(this,"handlers",{enumerable:!0,configurable:!0,writable:!0,value:[]})}get hasSubscribers(){return this.handlers.length>0}register(e,t=!1){return t?this.handlers.unshift(e):this.handlers.push(e),()=>{this.unregister(e)}}has(e){return this.handlers.indexOf(e)>=0}unregister(e){const t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}clear(){this.handlers.length=0}emit(...e){this.handlers.slice().forEach(t=>t(...e))}}class xe{constructor(){Object.defineProperty(this,"eventHandlers",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}hasSubscribers(e){const t=this.eventHandlers&&this.eventHandlers[e];return!!t&&t.hasSubscribers}register(e,t,n=!1){this.eventHandlers||(this.eventHandlers={});let i=this.eventHandlers[e];return i||(i=this.eventHandlers[e]=new De),i.register(t,n)}has(e,t){const n=this.eventHandlers&&this.eventHandlers[e];return!!n&&n.has(t)}unregister(e,t){const n=this.eventHandlers&&this.eventHandlers[e];n&&n.unregister(t)}clear(e){this.eventHandlers&&delete this.eventHandlers[e]}clearAll(){this.eventHandlers=void 0}emit(e,...t){const n=this.eventHandlers&&this.eventHandlers[e];n&&n.emit(...t)}}function $e(e){const t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=e[n];return t}function ke(e,t){return 0===e.indexOf(t)}const Re=function(e,t){};function ze(e){"function"==typeof queueMicrotask?queueMicrotask(e):"function"==typeof setImmediate?setImmediate(e):setTimeout(e,1)}function Fe(e){return function(e,t){const n=function(){const i=M(),r=F();if(!r)throw new Se("a mst flow must always have a parent context");const s=H(r);if(!s)throw new Se("a mst flow must always have a parent action context");const a={name:e,id:i,tree:r.tree,context:r.context,parentId:r.id,allParentIds:[...r.allParentIds,r.id],rootId:r.rootId,parentEvent:r,parentActionEvent:s},o=arguments;function l(e,t,i){return e.$mst_middleware=n.$mst_middleware,L(Object.assign(Object.assign({},a),{type:t,args:[i]}),e)}return new Promise((function(e,i){let r;const s=function(){r=t.apply(null,arguments),c(void 0)};function c(e){let t;try{const n=l(e=>{t=r.next(e)},"flow_resume",e);n instanceof Error&&(t=r.throw(n))}catch(e){return void ze(()=>{l(t=>{i(e)},"flow_throw",e)})}h(t)}function u(e){let t;try{l(e=>{t=r.throw(e)},"flow_resume_error",e)}catch(e){return void ze(()=>{l(t=>{i(e)},"flow_throw",e)})}h(t)}function h(t){if(!t.done){if(!t.value||"function"!=typeof t.value.then)throw new Se("Only promises can be yielded to `async`, got: "+t);return t.value.then(c,u)}ze(()=>{l(t=>{e(t)},"flow_return",t.value)})}s.$mst_middleware=n.$mst_middleware,L(Object.assign(Object.assign({},a),{type:"flow_spawn",args:$e(o)}),s)}))};return n._isFlowAction=!0,n}(e.name,e)}function Me(e){switch(e.op){case"add":return{op:"add",path:e.path,value:e.value};case"remove":return{op:"remove",path:e.path};case"replace":return{op:"replace",path:e.path,value:e.value}}}function Le(e){switch(e.op){case"add":return{op:"remove",path:e.path};case"remove":return{op:"add",path:e.path,value:e.oldValue};case"replace":return{op:"replace",path:e.path,value:e.oldValue}}}function He(e){return!0==("number"==typeof e)?""+e:-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function Ue(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Be(e){if(0===e.length)return"";const t=e=>e.map(He).join("/");return"."===e[0]||".."===e[0]?t(e):"/"+t(e)}function We(e){const t=e.split("/").map(Ue);if(!(""===e||"."===e||".."===e||ke(e,"/")||ke(e,"./")||ke(e,"../")))throw new Se(`a json path must be either rooted, empty or relative, but got '${e}'`);return""===t[0]&&t.shift(),t}Re.ids={};const Ge=Symbol("$preProcessorFailed");class Ze extends j{get flags(){return this._subtype.flags|O.SnapshotProcessor}constructor(e,t,n){super(n||e.name),Object.defineProperty(this,"_subtype",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"_processors",{enumerable:!0,configurable:!0,writable:!0,value:t})}describe(){return`snapshotProcessor(${this._subtype.describe()})`}preProcessSnapshot(e){return this._processors.preProcessor?this._processors.preProcessor.call(null,e):e}preProcessSnapshotSafe(e){try{return this.preProcessSnapshot(e)}catch(e){return Ge}}postProcessSnapshot(e,t){return this._processors.postProcessor?this._processors.postProcessor.call(null,e,t.storedValue):e}_fixNode(e){!function(e,t,...n){for(const i of n)e[i]=t[i].bind(t)}(e.type,this,"create"),e instanceof S&&(e.hasSnapshotPostProcessor=!!this._processors.postProcessor);const t=e.getSnapshot;e.getSnapshot=()=>this.postProcessSnapshot(t.call(e),e),It(this._subtype)||(e.getReconciliationType=()=>this)}instantiate(e,t,n,i){const r=ue(i)?i:this.preProcessSnapshot(i),s=this._subtype.instantiate(e,t,n,r);return this._fixNode(s),s}reconcile(e,t,n,i){const r=this._subtype.reconcile(e,ue(t)?t:this.preProcessSnapshot(t),n,i);return r!==e&&this._fixNode(r),r}getSnapshot(e,t=!0){const n=this._subtype.getSnapshot(e);return t?this.postProcessSnapshot(n,e):n}isValidSnapshot(e,t){const n=this.preProcessSnapshotSafe(e);return n===Ge?te(t,e,"Failed to preprocess value"):this._subtype.validate(n,t)}getSubTypes(){return this._subtype}is(e){const t=N(e)?this._subtype:ue(e)?e:this.preProcessSnapshotSafe(e);return t!==Ge&&0===this._subtype.validate(t,[{path:"",type:this._subtype}]).length}isAssignableFrom(e){return this._subtype.isAssignableFrom(e)}isMatchingSnapshotId(e,t){if(!(this._subtype instanceof T))return!1;const n=this.preProcessSnapshot(t);return this._subtype.isMatchingSnapshotId(e,n)}}const Ye="Map.put can only be used to store complex values that have an identifier type attribute";var Je;!function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.YES=1]="YES",e[e.NO=2]="NO"}(Je||(Je={}));class qe extends t.ObservableMap{constructor(e,t){super(e,e=>e,t)}get(e){return super.get(""+e)}has(e){return super.has(""+e)}delete(e){return super.delete(""+e)}set(e,t){return super.set(""+e,t)}put(e){if(!e)throw new Se("Map.put cannot be used to set empty values");if(ue(e)){const t=he(e);if(null===t.identifier)throw new Se(Ye);return this.set(t.identifier,e),e}if(Ce(e)){const t=he(this),n=t.type;if(n.identifierMode!==Je.YES)throw new Se(Ye);const i=e[n.mapIdentifierAttribute];if(!Yt(i)){const i=this.put(n.getChildType().create(e,t.environment));return this.put(u(i))}const r=Zt(i);return this.set(r,e),this.get(r)}throw new Se("Map.put can only be used to store complex values")}}class Ke extends T{constructor(e,t,n=[]){super(e),Object.defineProperty(this,"_subType",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"identifierMode",{enumerable:!0,configurable:!0,writable:!0,value:Je.UNKNOWN}),Object.defineProperty(this,"mapIdentifierAttribute",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Map}),Object.defineProperty(this,"hookInitializers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this._determineIdentifierMode(),this.hookInitializers=n}hooks(e){const t=this.hookInitializers.length>0?this.hookInitializers.concat(e):[e];return new Ke(this.name,this._subType,t)}instantiate(e,t,n,i){return this._determineIdentifierMode(),oe(this,e,t,n,i)}_determineIdentifierMode(){if(this.identifierMode!==Je.UNKNOWN)return;const e=[];if(function e(t,n){const i=t.getSubTypes();if("cannotDetermine"===i)return!1;if(i){const t=je(i);for(const i of t)if(!e(i,n))return!1}return t instanceof st&&n.push(t),!0}(this._subType,e)){const t=e.reduce((e,t)=>{if(!t.identifierAttribute)return e;if(e&&e!==t.identifierAttribute)throw new Se(`The objects in a map should all have the same identifier attribute, expected '${e}', but child of type '${t.name}' declared attribute '${t.identifierAttribute}' as identifier`);return t.identifierAttribute},void 0);t?(this.identifierMode=Je.YES,this.mapIdentifierAttribute=t):this.identifierMode=Je.NO}}initializeChildNodes(e,t={}){const n=e.type._subType,i={};return Object.keys(t).forEach(r=>{i[r]=n.instantiate(e,r,void 0,t[r])}),i}createNewInstance(e){return new qe(e,this.name)}finalizeNewInstance(e,n){t._interceptReads(n,e.unbox);e.type.hookInitializers.forEach(e=>{const t=e(n);Object.keys(t).forEach(e=>{const i=t[e],r=U(n,e,i);Ve(n,e,r)})}),t.intercept(n,this.willChange),t.observe(n,this.didChange)}describe(){return this.name}getChildren(e){return t.values(e.storedValue)}getChildNode(e,t){const n=e.storedValue.get(""+t);if(!n)throw new Se("Not a child "+t);return n}willChange(e){const t=he(e.object),n=e.name;t.assertWritable({subpath:n});const i=t.type,r=i._subType;switch(e.type){case"update":{const{newValue:s}=e;if(s===e.object.get(n))return null;ie(r,s),e.newValue=r.reconcile(t.getChildNode(n),e.newValue,t,n),i.processIdentifier(n,e.newValue)}break;case"add":ie(r,e.newValue),e.newValue=r.instantiate(t,n,void 0,e.newValue),i.processIdentifier(n,e.newValue)}return e}processIdentifier(e,t){if(this.identifierMode===Je.YES&&t instanceof S){const n=t.identifier;if(n!==e)throw new Se(`A map of objects containing an identifier should always store the object under their own identifier. Trying to store key '${n}', but expected: '${e}'`)}}getSnapshot(e){const t={};return e.getChildren().forEach(e=>{t[e.subpath]=e.snapshot}),t}processInitialSnapshot(e){const t={};return Object.keys(e).forEach(n=>{t[n]=e[n].getSnapshot()}),t}didChange(e){const t=he(e.object);switch(e.type){case"update":return void t.emitPatch({op:"replace",path:He(e.name),value:e.newValue.snapshot,oldValue:e.oldValue?e.oldValue.snapshot:void 0},t);case"add":return void t.emitPatch({op:"add",path:He(e.name),value:e.newValue.snapshot,oldValue:void 0},t);case"delete":const n=e.oldValue.snapshot;return e.oldValue.die(),void t.emitPatch({op:"remove",path:He(e.name),oldValue:n},t)}}applyPatchLocally(e,t,n){const i=e.storedValue;switch(n.op){case"add":case"replace":i.set(t,n.value);break;case"remove":i.delete(t)}}applySnapshot(e,t){if(!Te(t))return void ie(this,t);const n=e.storedValue,i=this.getChildType();Array.from(n.keys()).forEach(r=>{if(!Object.prototype.hasOwnProperty.call(t,r))return void n.delete(r);const s=e.getChildNode(r),a=t[r];s.snapshot!==a&&(E(i,s,a)?s.applySnapshot(a):n.set(r,a))});for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&!n.has(e)&&n.set(e,t[e])}getChildType(){return this._subType}isValidSnapshot(e,t){return Te(e)?ne(Object.keys(e).map(n=>this._subType.validate(e[n],X(t,n,this._subType)))):te(t,e,"Value is not a plain object")}getDefaultSnapshot(){return Pe}removeChild(e,t){e.storedValue.delete(t)}}Ke.prototype.applySnapshot=t.action(Ke.prototype.applySnapshot);class Qe extends T{constructor(e,t,n=[]){super(e),Object.defineProperty(this,"_subType",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Array}),Object.defineProperty(this,"hookInitializers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.hookInitializers=n}hooks(e){const t=this.hookInitializers.length>0?this.hookInitializers.concat(e):[e];return new Qe(this.name,this._subType,t)}instantiate(e,t,n,i){return oe(this,e,t,n,i)}initializeChildNodes(e,t=[]){const n=e.type._subType,i={};return t.forEach((t,r)=>{const s=""+r;i[s]=n.instantiate(e,s,void 0,t)}),i}createNewInstance(e){const n=Object.assign(Object.assign({},_e),{name:this.name});return t.observable.array(ve(e),n)}finalizeNewInstance(e,n){t._getAdministration(n).dehancer=e.unbox;e.type.hookInitializers.forEach(e=>{const t=e(n);Object.keys(t).forEach(e=>{const i=t[e],r=U(n,e,i);Ve(n,e,r)})}),t.intercept(n,this.willChange),t.observe(n,this.didChange)}describe(){return this.name}getChildren(e){return e.storedValue.slice()}getChildNode(e,t){const n=Number(t);if(n<e.storedValue.length)return e.storedValue[n];throw new Se("Not a child: "+t)}willChange(e){const t=he(e.object);t.assertWritable({subpath:""+e.index});const n=t.type._subType,i=t.getChildren();switch(e.type){case"update":{if(e.newValue===e.object[e.index])return null;const r=Xe(t,n,[i[e.index]],[e.newValue],[e.index]);if(!r)return null;e.newValue=r[0]}break;case"splice":{const{index:r,removedCount:s,added:a}=e,o=Xe(t,n,i.slice(r,r+s),a,a.map((e,t)=>r+t));if(!o)return null;e.added=o;for(let e=r+s;e<i.length;e++)i[e].setParent(t,""+(e+a.length-s))}}return e}getSnapshot(e){return e.getChildren().map(e=>e.snapshot)}processInitialSnapshot(e){const t=[];return Object.keys(e).forEach(n=>{t.push(e[n].getSnapshot())}),t}didChange(e){const t=he(e.object);switch(e.type){case"update":return void t.emitPatch({op:"replace",path:""+e.index,value:e.newValue.snapshot,oldValue:e.oldValue?e.oldValue.snapshot:void 0},t);case"splice":if(e.removedCount&&e.addedCount===e.object.length)return void t.emitPatch({op:"replace",path:"",value:t.snapshot,oldValue:e.removed.map(e=>e.snapshot)},t);for(let n=e.removedCount-1;n>=0;n--)t.emitPatch({op:"remove",path:""+(e.index+n),oldValue:e.removed[n].snapshot},t);for(let n=0;n<e.addedCount;n++)t.emitPatch({op:"add",path:""+(e.index+n),value:e.added[n].snapshot,oldValue:void 0},t);return}}applyPatchLocally(e,t,n){const i=e.storedValue,r="-"===t?i.length:Number(t);switch(n.op){case"replace":i[r]=n.value;break;case"add":i.splice(r,0,n.value);break;case"remove":i.splice(r,1)}}applySnapshot(e,t){if(!Ie(t))return void ie(this,t);const n=e.storedValue,i=e.getChildren(),r=i.length,s=t.length,a=this.getChildType(),o=function(e,t,n){let i=0;for(;i<n&&e[i].snapshot===t[i];)i++;return i}(i,t,Math.min(r,s));if(o===r&&o===s)return;if(r!==s||e.hasPatchSubscribers())return void n.replace(t);if(function(e,t,n,i){for(let r=i;r<t.length;r++){const i=t[r];if(i.snapshot!==n[r]){if(!E(e,i,n[r]))return!1;if(!i.identifierAttribute||null===i.identifier)return!1}}return!0}(a,i,t,o))return void function(e,t,n){for(let i=n;i<e.length;i++){const n=e[i];n.snapshot!==t[i]&&n.applySnapshot(t[i])}}(i,t,o);const l=[];for(let e=o;e<r;e++)i[e].snapshot!==t[e]&&l.push(e);for(const e of l)n[e]=t[e]}getChildType(){return this._subType}isValidSnapshot(e,t){return Ie(e)?ne(e.map((e,n)=>this._subType.validate(e,X(t,""+n,this._subType)))):te(t,e,"Value is not an array")}getDefaultSnapshot(){return we}removeChild(e,t){e.storedValue.splice(Number(t),1)}}function Xe(e,t,n,i,r){let s=!0;for(let o=0;;o++){const l=o<=i.length-1,c=n[o];let u=l?i[o]:void 0;const h=""+r[o];if(((a=u)instanceof v||a instanceof S)&&(u=u.storedValue),!c&&!l)break;if(l)if(c)if(tt(c,u))n[o]=et(t,e,h,u,c);else{let i=void 0;for(let e=o;e<n.length;e++)if(tt(n[e],u)){i=n.splice(e,1)[0];break}s=!1;const r=et(t,e,h,u,i);n.splice(o,0,r)}else{if(ue(u)&&he(u).parent===e)throw new Se(`Cannot add an object to a state tree if it is already part of the same or another state tree. Tried to assign an object to '${e.path}/${h}', but it lives already at '${he(u).path}'`);s=!1;const i=et(t,e,h,u);n.splice(o,0,i)}else s=!1,n.splice(o,1),c instanceof S&&c.createObservableInstanceIfNeeded(),c.die(),o--}var a;return s?null:n}function et(e,t,n,i,r){ie(e,i);const s=function(){if(ue(i)){const e=he(i);if(e.assertAlive(Pe),null!==e.parent&&e.parent===t)return e.setParent(t,n),e}return r?e.reconcile(r,i,t,n):e.instantiate(t,n,void 0,i)}();return r&&r!==s&&(r instanceof S&&r.createObservableInstanceIfNeeded(),r.die()),s}function tt(e,t){if(!e.isAlive)return!1;if(ue(t)){const n=he(t);return n.isAlive&&n===e}if(e.snapshot===t)return!0;if(!(e instanceof S))return!1;const n=e.getReconciliationType();return null!==e.identifier&&e.identifierAttribute&&Te(t)&&n.is(t)&&n.isMatchingSnapshotId(e,t)}Qe.prototype.applySnapshot=t.action(Qe.prototype.applySnapshot),"function"==typeof SuppressedError&&SuppressedError;function nt(){return he(this).toString()}const it={name:"AnonymousModel",properties:{},initializers:we};function rt(e){const t=Object.keys(e),n=new Set;return t.forEach(e=>{if(n.has(e))throw new Se(e+" is declared twice in the model. Model should not contain the same keys");n.add(e)}),t.reduce((t,n)=>{if(n in s)throw new Se(`Hook '${n}' was defined as property. Hooks should be defined as part of the actions`);const i=Object.getOwnPropertyDescriptor(e,n);if("get"in i)throw new Se("Getters are not supported as properties. Please use views instead");const r=i.value;if(null==r)throw new Se("The default value of an attribute cannot be null or undefined as the type cannot be inferred. Did you mean `types.maybe(someType)`?");if(Ee(r))t[n]=Tt(function(e){switch(typeof e){case"string":return lt;case"number":return ct;case"boolean":return bt;case"bigint":return ft;case"object":if(e instanceof Date)return mt}throw new Se("Cannot determine primitive type from value "+e)}(r),r);else if(r instanceof Ke)t[n]=Tt(r,{});else if(r instanceof Qe)t[n]=Tt(r,[]);else if(!N(r))throw new Se(`Invalid type definition for property '${n}', cannot infer a type from a value like '${r}' (${typeof r})`);return t},Object.assign({},e))}class st extends T{constructor(e){super(e.name||it.name),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Object}),Object.defineProperty(this,"initializers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"properties",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"preProcessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"postProcessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"propertyNames",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"named",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.cloneAndEnhance({name:e})}),Object.defineProperty(this,"props",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.cloneAndEnhance({properties:e})}),Object.defineProperty(this,"preProcessSnapshot",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=this.preProcessor;return t?this.cloneAndEnhance({preProcessor:n=>t(e(n))}):this.cloneAndEnhance({preProcessor:e})}}),Object.defineProperty(this,"postProcessSnapshot",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=this.postProcessor;return t?this.cloneAndEnhance({postProcessor:n=>e(t(n))}):this.cloneAndEnhance({postProcessor:e})}}),Object.assign(this,it,e),this.properties=rt(this.properties),this.properties,this.propertyNames=Object.keys(this.properties),this.identifierAttribute=this._getIdentifierAttribute()}_getIdentifierAttribute(){let e=void 0;return this.forAllProps((t,n)=>{if(n.flags&O.Identifier){if(e)throw new Se(`Cannot define property '${t}' as object identifier, property '${e}' is already defined as identifier property`);e=t}}),e}cloneAndEnhance(e){return new st({name:e.name||this.name,properties:Object.assign({},this.properties,e.properties),initializers:this.initializers.concat(e.initializers||[]),preProcessor:e.preProcessor||this.preProcessor,postProcessor:e.postProcessor||this.postProcessor})}actions(e){return this.cloneAndEnhance({initializers:[t=>(this.instantiateActions(t,e(t)),t)]})}instantiateActions(e,t){if(!Te(t))throw new Se("actions initializer should return a plain object containing actions");Object.getOwnPropertyNames(t).forEach(n=>{if(n in this.properties)throw new Se(`'${n}' is a property and cannot be declared as an action`);if("preProcessSnapshot"===n)throw new Se("Cannot define action 'preProcessSnapshot', it should be defined using 'type.preProcessSnapshot(fn)' instead");if("postProcessSnapshot"===n)throw new Se("Cannot define action 'postProcessSnapshot', it should be defined using 'type.postProcessSnapshot(fn)' instead");let i=t[n],r=e[n];if(n in s&&r){let e=i;i=function(){r.apply(null,arguments),e.apply(null,arguments)}}const a=i.$mst_middleware;let o=i.bind(t);o._isFlowAction=i._isFlowAction||!1,o.$mst_middleware=a;const l=U(e,n,o);t[n]=l,Ve(e,n,l)})}volatile(e){if("function"!=typeof e)throw new Se(`You passed an ${typeof e} to volatile state as an argument, when function is expected`);return this.cloneAndEnhance({initializers:[t=>(this.instantiateVolatileState(t,e(t)),t)]})}instantiateVolatileState(e,n){if(!Te(n))throw new Se("volatile state initializer should return a plain object containing state");Object.getOwnPropertyNames(n).forEach(i=>{if(i in this.properties)throw new Se(`'${i}' is a property and cannot be declared as volatile state`);t.set(e,i,n[i])})}extend(e){return this.cloneAndEnhance({initializers:[t=>{const n=e(t),{actions:i,views:r,state:s}=n,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(n,["actions","views","state"]);for(let e in a)throw new Se(`The \`extend\` function should return an object with a subset of the fields 'actions', 'views' and 'state'. Found invalid key '${e}'`);return s&&this.instantiateVolatileState(t,s),r&&this.instantiateViews(t,r),i&&this.instantiateActions(t,i),t}]})}views(e){return this.cloneAndEnhance({initializers:[t=>(this.instantiateViews(t,e(t)),t)]})}instantiateViews(e,n){if(!Te(n))throw new Se("views initializer should return a plain object containing views");Object.getOwnPropertyNames(n).forEach(i=>{if(i in this.properties)throw new Se(`'${i}' is a property and cannot be declared as a view`);const r=Object.getOwnPropertyDescriptor(n,i);if("get"in r)t.defineProperty(e,i,r),t.makeObservable(e,{[i]:t.computed});else{if("function"!=typeof r.value)throw new Se("A view member should either be a function or getter based property");Ve(e,i,r.value)}})}instantiate(e,t,n,i){return oe(this,e,t,n,ue(i)?i:this.applySnapshotPreProcessor(i))}initializeChildNodes(e,t={}){const n=e.type,i={};return n.forAllProps((n,r)=>{i[n]=r.instantiate(e,n,void 0,t[n])}),i}createNewInstance(e){const n=Object.assign(Object.assign({},_e),{name:this.name});return t.observable.object(e,Pe,n)}finalizeNewInstance(e,n){Ve(n,"toString",nt),this.forAllProps(i=>{t._interceptReads(n,i,e.unbox)}),this.initializers.reduce((e,t)=>t(e),n),t.intercept(n,this.willChange),t.observe(n,this.didChange)}willChange(e){const t=e,n=he(t.object),i=t.name;n.assertWritable({subpath:i});const r=n.type.properties[i];return r&&(ie(r,t.newValue),t.newValue=r.reconcile(n.getChildNode(i),t.newValue,n,i)),t}didChange(e){const t=e,n=he(t.object);if(!n.type.properties[t.name])return;const i=t.oldValue?t.oldValue.snapshot:void 0;n.emitPatch({op:"replace",path:He(t.name),value:t.newValue.snapshot,oldValue:i},n)}getChildren(e){const t=[];return this.forAllProps(n=>{t.push(this.getChildNode(e,n))}),t}getChildNode(e,n){var i;if(!(n in this.properties))throw new Se("Not a value property: "+n);const r=t._getAdministration(e.storedValue,n),s=null===(i=r.raw)||void 0===i?void 0:i.call(r);if(!s)throw new Se("Node not available for property "+n);return s}getSnapshot(e,n=!0){const i={};return this.forAllProps((n,r)=>{t.getAtom(e.storedValue,n).reportObserved(),i[n]=this.getChildNode(e,n).snapshot}),n?this.applySnapshotPostProcessor(i):i}processInitialSnapshot(e){const t={};return Object.keys(e).forEach(n=>{t[n]=e[n].getSnapshot()}),this.applySnapshotPostProcessor(t)}applyPatchLocally(e,t,n){if("replace"!==n.op&&"add"!==n.op)throw new Se("object does not support operation "+n.op);e.storedValue[t]=n.value}applySnapshot(e,t){const n=this.applySnapshotPreProcessor(t),i=!Te(n);(Te(t)&&!i||(ie(this,t),!i))&&this.forAllProps((t,i)=>{const r=e.getChildNode(t),s=n[t];r.snapshot!==s&&(E(i,r,s)?r.applySnapshot(s):e.storedValue[t]=s)})}applySnapshotPreProcessor(e){const t=this.preProcessor;return t?t.call(null,e):e}applySnapshotPostProcessor(e){const t=this.postProcessor;return t?t.call(null,e):e}getChildType(e){return this.properties[e]}isValidSnapshot(e,t){let n=this.applySnapshotPreProcessor(e);return Te(n)?ne(this.propertyNames.map(e=>this.properties[e].validate(n[e],X(t,e,this.properties[e])))):te(t,n,"Value is not a plain object")}forAllProps(e){this.propertyNames.forEach(t=>e(t,this.properties[t]))}describe(){return"{ "+this.propertyNames.map(e=>e+": "+this.properties[e].describe()).join("; ")+" }"}getDefaultSnapshot(){return Pe}removeChild(e,t){e.storedValue[t]=void 0}}function at(e){return N(e)&&(e.flags&O.Object)>0}st.prototype.applySnapshot=t.action(st.prototype.applySnapshot);class ot extends C{constructor(e,t,n,i=Ae){super(e),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"checker",{enumerable:!0,configurable:!0,writable:!0,value:n}),Object.defineProperty(this,"initializer",{enumerable:!0,configurable:!0,writable:!0,value:i}),this.flags=t}describe(){return this.name}instantiate(e,t,n,i){return le(this,e,t,n,i)}createNewInstance(e){return this.initializer(e)}isValidSnapshot(e,t){if(Ee(e)&&this.checker(e))return ee();return te(t,e,"Value is not a "+("Date"===this.name?"Date or a unix milliseconds timestamp":this.name))}}const lt=new ot("string",O.String,e=>"string"==typeof e),ct=new ot("number",O.Number,e=>"number"==typeof e),ut=new ot("integer",O.Integer,e=>Oe(e)),ht=new ot("float",O.Float,e=>{return t=e,Number(t)===t&&t%1!=0;var t}),pt=new ot("finite",O.Finite,e=>{return t=e,Number.isFinite(t);var t}),dt=new ot("bigint",O.BigInt,e=>{if("bigint"==typeof e)return!0;if("string"==typeof e||"number"==typeof e)try{return BigInt(e),!0}catch(e){}return!1},e=>"bigint"==typeof e?e:BigInt(e));dt.getSnapshot=function(e){return String(e.storedValue)};const ft=dt,bt=new ot("boolean",O.Boolean,e=>"boolean"==typeof e),yt=new ot("null",O.Null,e=>null===e),gt=new ot("undefined",O.Undefined,e=>void 0===e),vt=new ot("Date",O.Date,e=>"number"==typeof e||e instanceof Date,e=>e instanceof Date?e:new Date(e));vt.getSnapshot=function(e){return e.storedValue.getTime()};const mt=vt;function wt(e){return N(e)&&(e.flags&(O.String|O.Number|O.Integer|O.Boolean|O.Date|O.BigInt))>0}class Pt extends C{constructor(e){super(JSON.stringify(e)),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Literal}),this.value=e}instantiate(e,t,n,i){return le(this,e,t,n,i)}describe(){return JSON.stringify(this.value)}isValidSnapshot(e,t){return Ee(e)&&e===this.value?ee():te(t,e,"Value is not a literal "+JSON.stringify(this.value))}}function _t(e){return new Pt(e)}class St extends j{get flags(){return this._subtype.flags|O.Refinement}constructor(e,t,n,i){super(e),Object.defineProperty(this,"_subtype",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"_predicate",{enumerable:!0,configurable:!0,writable:!0,value:n}),Object.defineProperty(this,"_message",{enumerable:!0,configurable:!0,writable:!0,value:i})}describe(){return this.name}instantiate(e,t,n,i){return this._subtype.instantiate(e,t,n,i)}isAssignableFrom(e){return this._subtype.isAssignableFrom(e)}isValidSnapshot(e,t){const n=this._subtype.validate(e,t);if(n.length>0)return n;const i=ue(e)?he(e).snapshot:e;return this._predicate(i)?ee():te(t,e,this._message(e))}reconcile(e,t,n,i){return this._subtype.reconcile(e,t,n,i)}getSubTypes(){return this._subtype}}class At extends j{get flags(){let e=O.Union;return this._types.forEach(t=>{e|=t.flags}),e}constructor(e,t,n){super(e),Object.defineProperty(this,"_types",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"_dispatcher",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_eager",{enumerable:!0,configurable:!0,writable:!0,value:!0}),n=Object.assign({eager:!0,dispatcher:void 0},n),this._dispatcher=n.dispatcher,n.eager||(this._eager=!1)}isAssignableFrom(e){return this._types.some(t=>t.isAssignableFrom(e))}describe(){return"("+this._types.map(e=>e.describe()).join(" | ")+")"}instantiate(e,t,n,i){const r=this.determineType(i,void 0);if(!r)throw new Se("No matching type for union "+this.describe());return r.instantiate(e,t,n,i)}reconcile(e,t,n,i){const r=this.determineType(t,e.getReconciliationType());if(!r)throw new Se("No matching type for union "+this.describe());return r.reconcile(e,t,n,i)}determineType(e,t){return this._dispatcher?this._dispatcher(e):t?t.is(e)?t:this._types.filter(e=>e!==t).find(t=>t.is(e)):this._types.find(t=>t.is(e))}isValidSnapshot(e,t){if(this._dispatcher)return this._dispatcher(e).validate(e,t);const n=[];let i=0;for(let r=0;r<this._types.length;r++){const s=this._types[r].validate(e,t);if(0===s.length){if(this._eager)return ee();i++}else n.push(s)}return 1===i?ee():te(t,e,"No type is applicable for the union").concat(ne(n))}getSubTypes(){return this._types}}function Ot(e,...t){const n=N(e)?void 0:e,i=N(e)?[e,...t]:t,r="("+i.map(e=>e.name).join(" | ")+")";return new At(r,i,n)}function It(e){return N(e)&&(e.flags&O.Union)>0}class jt extends j{get flags(){return this._subtype.flags|O.Optional}constructor(e,t,n){super(e.name),Object.defineProperty(this,"_subtype",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"_defaultValue",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"optionalValues",{enumerable:!0,configurable:!0,writable:!0,value:n})}describe(){return this._subtype.describe()+"?"}instantiate(e,t,n,i){if(this.optionalValues.indexOf(i)>=0){const i=this.getDefaultInstanceOrSnapshot();return this._subtype.instantiate(e,t,n,i)}return this._subtype.instantiate(e,t,n,i)}reconcile(e,t,n,i){return this._subtype.reconcile(e,this.optionalValues.indexOf(t)<0&&this._subtype.is(t)?t:this.getDefaultInstanceOrSnapshot(),n,i)}getDefaultInstanceOrSnapshot(){const e="function"==typeof this._defaultValue?this._defaultValue():this._defaultValue;return"function"==typeof this._defaultValue&&ie(this,e),e}isValidSnapshot(e,t){return this.optionalValues.indexOf(e)>=0?ee():this._subtype.validate(e,t)}isAssignableFrom(e){return this._subtype.isAssignableFrom(e)}getSubTypes(){return this._subtype}}function Tt(e,t,n){return function(e,t){if("function"!=typeof t&&ue(t))throw new Se("default value cannot be an instance, pass a snapshot or a function that creates an instance/snapshot instead")}(0,t),new jt(e,t,n||Ct)}const Ct=[void 0];const Et=Tt(gt,void 0),Nt=Tt(yt,null);function Vt(e){return Ot(e,Et)}class Dt extends j{get flags(){return(this._subType?this._subType.flags:0)|O.Late}getSubType(e){if(!this._subType){let t=void 0;try{t=this._definition()}catch(e){if(!(e instanceof ReferenceError))throw e;t=void 0}if(e&&void 0===t)throw new Se("Late type seems to be used too early, the definition (still) returns undefined");t&&(this._subType=t)}return this._subType}constructor(e,t){super(e),Object.defineProperty(this,"_definition",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"_subType",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}instantiate(e,t,n,i){return this.getSubType(!0).instantiate(e,t,n,i)}reconcile(e,t,n,i){return this.getSubType(!0).reconcile(e,t,n,i)}describe(){const e=this.getSubType(!1);return e?e.name:"<uknown late type>"}isValidSnapshot(e,t){const n=this.getSubType(!1);return n?n.validate(e,t):ee()}isAssignableFrom(e){const t=this.getSubType(!1);return!!t&&t.isAssignableFrom(e)}getSubTypes(){const e=this.getSubType(!1);return e||"cannotDetermine"}}class xt extends C{constructor(e,n){super(e),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:n}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Lazy}),Object.defineProperty(this,"loadedType",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pendingNodeList",{enumerable:!0,configurable:!0,writable:!0,value:t.observable.array()}),t.when(()=>this.pendingNodeList.length>0&&this.pendingNodeList.some(e=>e.isAlive&&this.options.shouldLoadPredicate(e.parent?e.parent.value:null)),()=>{this.options.loadType().then(t.action(e=>{this.loadedType=e,this.pendingNodeList.forEach(e=>{e.parent&&this.loadedType&&e.parent.applyPatches([{op:"replace",path:"/"+e.subpath,value:e.snapshot}])})}))})}describe(){return`<lazy ${this.name}>`}instantiate(e,n,i,r){if(this.loadedType)return this.loadedType.instantiate(e,n,i,r);const s=le(this,e,n,i,r);return this.pendingNodeList.push(s),t.when(()=>!s.isAlive,()=>this.pendingNodeList.splice(this.pendingNodeList.indexOf(s),1)),s}isValidSnapshot(e,t){return this.loadedType?this.loadedType.validate(e,t):Ne(e)?ee():te(t,e,"Value is not serializable and cannot be lazy")}reconcile(e,t,n,i){return this.loadedType?(e.die(),this.loadedType.instantiate(n,i,n.environment,t)):super.reconcile(e,t,n,i)}}class $t extends C{constructor(e){super(e?`frozen(${e.name})`:"frozen"),Object.defineProperty(this,"subType",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Frozen})}describe(){return"<any immutable value>"}instantiate(e,t,n,i){return le(this,e,t,n,i)}isValidSnapshot(e,t){return Ne(e)?this.subType?this.subType.validate(e,t):ee():te(t,e,"Value is not serializable and cannot be frozen")}}const kt=new $t;class Rt{constructor(e,t){if(Object.defineProperty(this,"targetType",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"identifier",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"node",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"resolvedReference",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Yt(e))this.identifier=e;else{if(!ue(e))throw new Se(`Can only store references to tree nodes or identifiers, got: '${e}'`);{const t=he(e);if(!t.identifierAttribute)throw new Se("Can only store references with a defined identifier attribute.");const n=t.unnormalizedIdentifier;if(null==n)throw new Se("Can only store references to tree nodes with a defined identifier.");this.identifier=n}}}updateResolvedReference(e){const t=Zt(this.identifier),n=e.root,i=n.identifierCache.getLastCacheModificationPerId(t);if(!this.resolvedReference||this.resolvedReference.lastCacheModification!==i){const{targetType:r}=this,s=n.identifierCache.resolve(r,t);if(!s)throw new zt(`[mobx-state-tree] Failed to resolve reference '${this.identifier}' to type '${this.targetType.name}' (from node: ${e.path})`);this.resolvedReference={node:s,lastCacheModification:i}}}get resolvedValue(){return this.updateResolvedReference(this.node),this.resolvedReference.node.value}}class zt extends Error{constructor(e){super(e),Object.setPrototypeOf(this,zt.prototype)}}class Ft extends C{constructor(e,t){super(`reference(${e.name})`),Object.defineProperty(this,"targetType",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"onInvalidated",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Reference})}describe(){return this.name}isAssignableFrom(e){return this.targetType.isAssignableFrom(e)}isValidSnapshot(e,t){return Yt(e)?ee():te(t,e,"Value is not a valid identifier, which is a string, number or a bigint")}fireInvalidated(e,t,n,i){const r=t.parent;if(!r||!r.isAlive)return;const s=r.storedValue;s&&this.onInvalidated({cause:e,parent:s,invalidTarget:i?i.storedValue:void 0,invalidId:n,replaceRef(e){l(t.root.storedValue,{op:"replace",value:e,path:t.path})},removeRef(){at(r.type)?this.replaceRef(void 0):l(t.root.storedValue,{op:"remove",path:t.path})}})}addTargetNodeWatcher(e,t){const n=this.getValue(e);if(!n)return;const i=he(n),r=(n,r)=>{const a=function(e){switch(e){case s.beforeDestroy:return"destroy";case s.beforeDetach:return"detach";default:return}}(r);a&&this.fireInvalidated(a,e,t,i)},a=i.registerHook(s.beforeDetach,r),o=i.registerHook(s.beforeDestroy,r);return()=>{a(),o()}}watchTargetNodeForInvalidations(e,t,n){if(!this.onInvalidated)return;let i;e.registerHook(s.beforeDestroy,()=>{i&&i()});const r=()=>{const n=()=>{e.isAlive&&this.getSnapshot(e)===t&&a(!1)};F()?e.root.enqueueEndOfAction(n):ze(n)},a=s=>{i&&i();const a=e.parent,o=a&&a.storedValue;if(a&&a.isAlive&&o){let a;a=n?!!n.get(t,o):e.root.identifierCache.has(this.targetType,Zt(t)),a?i=this.addTargetNodeWatcher(e,t):s?r():this.fireInvalidated("invalidSnapshotReference",e,t,null)}};e.state===ce.FINALIZED?a(!0):(e.isRoot||e.root.registerHook(s.afterCreationFinalization,()=>{e.parent&&e.parent.createObservableInstanceIfNeeded()}),e.registerHook(s.afterAttach,()=>{a(!1)}))}}class Mt extends Ft{constructor(e,t){super(e,t)}getValue(e){if(!e.isAlive)return;return e.storedValue.resolvedValue}getSnapshot(e){return e.storedValue.identifier}instantiate(e,t,n,i){const r=ue(i)?d(i):i,s=new Rt(i,this.targetType),a=le(this,e,t,n,s);return s.node=a,this.watchTargetNodeForInvalidations(a,r,void 0),a}reconcile(e,t,n,i){if(!e.isDetaching&&e.type===this){const r=ue(t),s=e.storedValue;if(!r&&s.identifier===t||r&&s.resolvedValue===t)return e.setParent(n,i),e}const r=this.instantiate(n,i,void 0,t);return e.die(),r}}class Lt extends Ft{constructor(e,t,n){super(e,n),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:t})}getValue(e){if(!e.isAlive)return;return this.options.get(e.storedValue,e.parent?e.parent.storedValue:null)}getSnapshot(e){return e.storedValue}instantiate(e,t,n,i){const r=ue(i)?this.options.set(i,e?e.storedValue:null):i,s=le(this,e,t,n,r);return this.watchTargetNodeForInvalidations(s,r,this.options),s}reconcile(e,t,n,i){const r=ue(t)?this.options.set(t,e?e.storedValue:null):t;if(!e.isDetaching&&e.type===this&&e.storedValue===r)return e.setParent(n,i),e;const s=this.instantiate(n,i,void 0,r);return e.die(),s}}function Ht(e,t){const n=t||void 0,i=t?t.onInvalidated:void 0;return n&&(n.get||n.set)?new Lt(e,{get:n.get,set:n.set},i):new Mt(e,i)}class Ut extends C{constructor(e,t){super(e),Object.defineProperty(this,"validType",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Identifier})}instantiate(e,t,n,i){if(!(e&&e.type instanceof st))throw new Se("Identifier types can only be instantiated as direct child of a model type");return le(this,e,t,n,i)}reconcile(e,t,n,i){if(e.storedValue!==t)throw new Se(`Tried to change identifier from '${e.storedValue}' to '${t}'. Changing identifiers is not allowed.`);return e.setParent(n,i),e}isValidSnapshot(e,t){return typeof e!==this.validType?te(t,e,`Value is not a valid ${this.describe()}, expected a ${this.validType}`):ee()}}const Bt=new class extends Ut{constructor(){super("identifier","string"),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Identifier})}describe(){return"identifier"}},Wt=new class extends Ut{constructor(){super("identifierNumber","number")}getSnapshot(e){return e.storedValue}describe(){return"identifierNumber"}};const Gt=new class extends C{constructor(){super("identifierBigint"),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Identifier})}createNewInstance(e){return"bigint"==typeof e?e:BigInt(e)}instantiate(e,t,n,i){if(!(e&&e.type instanceof st))throw new Se("Identifier types can only be instantiated as direct child of a model type");return le(this,e,t,n,i)}reconcile(e,t,n,i){const r=e.storedValue,s="bigint"==typeof t?t:BigInt(t);if(r!==s)throw new Se(`Tried to change identifier from '${r}' to '${s}'. Changing identifiers is not allowed.`);return e.setParent(n,i),e}isValidSnapshot(e,t){if("bigint"==typeof e)return ee();if("string"==typeof e||"number"==typeof e)try{return BigInt(e),ee()}catch(n){const i=n instanceof Error?n.message:String(n);return te(t,e,`Value is not a valid ${this.describe()}: ${i}`)}return te(t,e,`Value is not a valid ${this.describe()}, expected a bigint, a string or a number`)}getSnapshot(e){return String(e.storedValue)}describe(){return"identifierBigint"}};function Zt(e){return""+e}function Yt(e){return"string"==typeof e||"number"==typeof e||"bigint"==typeof e}class Jt extends C{constructor(e){super(e.name),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"flags",{enumerable:!0,configurable:!0,writable:!0,value:O.Custom})}describe(){return this.name}isValidSnapshot(e,t){if(this.options.isTargetType(e))return ee();const n=this.options.getValidationMessage(e);return n?te(t,e,`Invalid value for type '${this.name}': ${n}`):ee()}getSnapshot(e){return this.options.toSnapshot(e.storedValue)}instantiate(e,t,n,i){return le(this,e,t,n,this.options.isTargetType(i)?i:this.options.fromSnapshot(i,e&&e.root.environment))}reconcile(e,t,n,i){const r=!this.options.isTargetType(t);if(!e.isDetaching){if(e.type===this&&(r?t===e.snapshot:t===e.storedValue))return e.setParent(n,i),e}const s=r?this.options.fromSnapshot(t,n.root.environment):t,a=this.instantiate(n,i,void 0,s);return e.die(),a}}const qt={enumeration:function(e,t){const n=Ot(...("string"==typeof e?t:e).map(e=>_t(e)));return"string"==typeof e&&(n.name=e),n},model:function(...e){const t="string"==typeof e[0]?e.shift():"AnonymousModel",n=e.shift()||{};return new st({name:t,properties:n})},compose:function(...e){const t="string"==typeof e[0],n=t?e[0]:"AnonymousModel";return t&&e.shift(),e.reduce((e,t)=>e.cloneAndEnhance({name:e.name+"_"+t.name,properties:t.properties,initializers:t.initializers,preProcessor:n=>t.applySnapshotPreProcessor(e.applySnapshotPreProcessor(n)),postProcessor:n=>t.applySnapshotPostProcessor(e.applySnapshotPostProcessor(n))})).named(n)},custom:function(e){return new Jt(e)},reference:Ht,safeReference:function(e,t){const n=Ht(e,Object.assign(Object.assign({},t),{onInvalidated(e){t&&t.onInvalidated&&t.onInvalidated(e),e.removeRef()}}));return t&&!1===t.acceptsUndefined?n:Vt(n)},union:Ot,optional:Tt,literal:_t,maybe:Vt,maybeNull:function(e){return Ot(e,Nt)},refinement:function(...e){const t="string"==typeof e[0]?e.shift():N(e[0])?e[0].name:null,n=e[0],i=e[1],r=e[2]?e[2]:e=>"Value does not respect the refinement predicate";return new St(t,n,i,r)},string:lt,boolean:bt,number:ct,integer:ut,float:ht,finite:pt,bigint:ft,Date:mt,map:function(e){return new Ke(`Map<string, ${e.name}>`,e)},array:function(e){return new Qe(e.name+"[]",e)},frozen:function(e){return 0===arguments.length?kt:N(e)?new $t(e):Tt(kt,e)},identifier:Bt,identifierNumber:Wt,identifierBigint:Gt,late:function(e,t){const n="string"==typeof e?e:`late(${e.toString()})`;return new Dt(n,"string"==typeof e?t:e)},lazy:function(e,t){return new xt(e,t)},undefined:gt,null:yt,snapshotProcessor:function(e,t,n){return new Ze(e,t,n)}};e.addDisposer=function(e,t){return he(e).addDisposer(t),t},e.addMiddleware=B,e.applyAction=$,e.applyPatch=l,e.applySnapshot=c,e.cast=function(e){return e},e.castFlowReturn=function(e){return e},e.castToReferenceSnapshot=function(e){return e},e.castToSnapshot=function(e){return e},e.clone=function(e,t=!0){const n=he(e);return n.type.create(n.snapshot,!0===t?n.root.environment:!1===t?void 0:t)},e.createActionTrackingMiddleware=function(e){return function(t,n,i){switch(t.type){case"action":if(e.filter&&!0!==e.filter(t))return n(t);{const i=e.onStart(t);e.onResume(t,i),V.set(t.id,{call:t,context:i,async:!1});try{const r=n(t);return e.onSuspend(t,i),!1===V.get(t.id).async&&(V.delete(t.id),e.onSuccess(t,i,r)),r}catch(n){throw V.delete(t.id),e.onFail(t,i,n),n}}case"flow_spawn":return V.get(t.rootId).async=!0,n(t);case"flow_resume":case"flow_resume_error":{const i=V.get(t.rootId);e.onResume(t,i.context);try{return n(t)}finally{e.onSuspend(t,i.context)}}case"flow_throw":{const i=V.get(t.rootId);return V.delete(t.rootId),e.onFail(t,i.context,t.args[0]),n(t)}case"flow_return":{const i=V.get(t.rootId);return V.delete(t.rootId),e.onSuccess(t,i.context,t.args[0]),n(t)}}}},e.createActionTrackingMiddleware2=function(e){const t=new Map;return function(n,i){const r=n.parentActionEvent?t.get(n.parentActionEvent.id):void 0;if("action"===n.type){const s=Object.assign(Object.assign({},n),{env:r&&r.call.env,parentCall:r&&r.call}),a=!e.filter||e.filter(s),o=new D(a?e:void 0,s);let l;t.set(n.id,o);try{l=i(n)}catch(e){throw t.delete(n.id),o.finish(e),e}return o.hasFlowsPending||(t.delete(n.id),o.finish()),l}if(!r)return i(n);switch(n.type){case"flow_spawn":return r.incFlowsPending(),i(n);case"flow_resume":case"flow_resume_error":return i(n);case"flow_throw":{const e=n.args[0];try{return i(n)}finally{r.decFlowsPending(),r.hasFlowsPending||(t.delete(n.parentActionEvent.id),r.finish(e))}}case"flow_return":try{return i(n)}finally{r.decFlowsPending(),r.hasFlowsPending||(t.delete(n.parentActionEvent.id),r.finish())}}}},e.decorate=function(e,t,n=!0){const i={handler:e,includeHooks:n};return t.$mst_middleware=t.$mst_middleware||[],t.$mst_middleware.push(i),t},e.destroy=function(e){const t=he(e);t.isRoot?t.die():t.parent.removeChild(t.subpath)},e.detach=function(e){return he(e).detach(),e},e.escapeJsonPath=He,e.flow=Fe,e.getChildType=function(e,t){return he(e).getChildType(t)},e.getEnv=function(e){const t=he(e),n=t.root.environment;if(!n)throw new Se(`Failed to find the environment of ${t} ${t.path}`);return n},e.getErrorFormatting=J,e.getIdentifier=d,e.getLivelinessChecking=r,e.getMembers=function(e){const n=he(e).type,i=Object.assign(Object.assign({},y(n)),{actions:[],volatile:[],views:[],flowActions:[]});return Object.getOwnPropertyNames(e).forEach(n=>{if(n in i.properties)return;const r=Object.getOwnPropertyDescriptor(e,n);r.get?t.isComputedProp(e,n)?i.views.push(n):i.volatile.push(n):(!0===r.value._isFlowAction&&i.flowActions.push(n),!0===r.value._isMSTAction?i.actions.push(n):t.isObservableProp(e,n)?i.volatile.push(n):i.views.push(n))}),i},e.getNodeId=function(e){return he(e).nodeId},e.getParent=function(e,t=1){let n=t,i=he(e).parent;for(;i;){if(0==--n)return i.storedValue;i=i.parent}throw new Se(`Failed to find the parent of ${he(e)} at depth ${t}`)},e.getParentOfType=function(e,t){let n=he(e).parent;for(;n;){if(t.is(n.storedValue))return n.storedValue;n=n.parent}throw new Se(`Failed to find the parent of ${he(e)} of a given type`)},e.getPath=p,e.getPathParts=function(e){return We(he(e).path)},e.getPropertyMembers=y,e.getRelativePath=function(e,t){return be(he(e),he(t))},e.getRoot=h,e.getRunningActionContext=G,e.getSnapshot=u,e.getType=a,e.hasEnv=function(e){return!!he(e).root.environment},e.hasParent=function(e,t=1){let n=he(e).parent;for(;n;){if(0==--t)return!0;n=n.parent}return!1},e.hasParentOfType=function(e,t){let n=he(e).parent;for(;n;){if(t.is(n.storedValue))return!0;n=n.parent}return!1},e.isActionContextChildOf=function(e,t){return Z(e,t,!1)},e.isActionContextThisOrChildOf=function(e,t){return Z(e,t,!0)},e.isAlive=b,e.isArrayType=function(e){return N(e)&&(e.flags&O.Array)>0},e.isFrozenType=function(e){return N(e)&&(e.flags&O.Frozen)>0},e.isIdentifierType=function(e){return N(e)&&(e.flags&O.Identifier)>0},e.isLateType=function(e){return N(e)&&(e.flags&O.Late)>0},e.isLiteralType=function(e){return N(e)&&(e.flags&O.Literal)>0},e.isMapType=function(e){return N(e)&&(e.flags&O.Map)>0},e.isModelType=at,e.isOptionalType=function(e){return N(e)&&(e.flags&O.Optional)>0},e.isPrimitiveType=wt,e.isProtected=function(e){return he(e).isProtected},e.isReferenceType=function(e){return N(e)&&(e.flags&O.Reference)>0},e.isRefinementType=function(e){return N(e)&&(e.flags&O.Refinement)>0},e.isRoot=function(e){return he(e).isRoot},e.isStateTreeNode=ue,e.isType=N,e.isUnionType=It,e.isValidReference=function(e,t=!0){try{const n=e();if(null==n)return!1;if(ue(n))return!t||b(n);throw new Se("The reference to be checked is not one of node, null or undefined")}catch(e){if(e instanceof zt)return!1;throw e}},e.joinJsonPath=Be,e.onAction=k,e.onPatch=o,e.onSnapshot=function(e,t){return he(e).onSnapshot(t)},e.process=function(e){return Re(),Fe(e)},e.protect=function(e){const t=he(e);if(!t.isRoot)throw new Se("`protect` can only be invoked on root nodes");t.isProtectionEnabled=!0},e.recordActions=function(e,t){const n=[],i=e=>{(!t||t(e,G()))&&n.push(e)};let r;const s={actions:n,get recording(){return!!r},stop(){r&&(r(),r=void 0)},resume(){r||(r=k(e,i))},replay(e){$(e,n)}};return s.resume(),s},e.recordPatches=function(e,t){const n={patches:[],inversePatches:[]},i={};let r;const s={get recording(){return!!r},get patches(){return i.patches||(i.patches=n.patches.slice()),i.patches},get reversedInversePatches(){return i.reversedInversePatches||(i.reversedInversePatches=n.inversePatches.slice().reverse()),i.reversedInversePatches},get inversePatches(){return i.inversePatches||(i.inversePatches=n.inversePatches.slice()),i.inversePatches},stop(){r&&(r(),r=void 0)},resume(){r||(r=o(e,(e,r)=>{t&&!t(e,r,G())||(n.patches.push(e),n.inversePatches.push(r),i.patches=void 0,i.inversePatches=void 0,i.reversedInversePatches=void 0)}))},replay(t){l(t||e,n.patches)},undo(t){l(t||e,n.inversePatches.slice().reverse())}};return s.resume(),s},e.resolveIdentifier=function(e,t,n){const i=he(t).root.identifierCache.resolve(e,Zt(n));return null==i?void 0:i.value},e.resolvePath=function(e,t){const n=ye(he(e),t);return n?n.value:void 0},e.setErrorFormatting=function(e){Y=Object.assign(Object.assign({},Y),e)},e.setLivelinessChecking=i,e.setLivelynessChecking=function(e){i(e)},e.splitJsonPath=We,e.t=qt,e.toGenerator=function*(e){return yield e},e.toGeneratorFunction=function(e){return function*(...t){return yield e(...t)}},e.tryReference=function(e,t=!0){try{const n=e();if(null==n)return;if(ue(n))return t?b(n)?n:void 0:n;throw new Se("The reference to be checked is not one of node, null or undefined")}catch(e){if(e instanceof zt)return;throw e}},e.tryResolve=f,e.typecheck=re,e.types=qt,e.unescapeJsonPath=Ue,e.unprotect=function(e){const t=he(e);if(!t.isRoot)throw new Se("`unprotect` can only be invoked on root nodes");t.isProtectionEnabled=!1},e.walk=function e(t,n){const i=he(t);i.getChildren().forEach(t=>{ue(t.storedValue)&&e(t.storedValue,n)}),n(i.storedValue)},Object.defineProperty(e,"__esModule",{value:!0})}));