@jbrowse/mobx-state-tree 5.8.7 → 5.9.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mobx-state-tree.cjs","sources":["../src/core/node/livelinessChecking.ts","../src/core/node/Hook.ts","../src/core/mst-operations.ts","../src/core/node/BaseNode.ts","../src/core/node/scalar-node.ts","../src/core/node/object-node.ts","../src/core/type/type.ts","../src/middlewares/create-action-tracking-middleware.ts","../src/middlewares/createActionTrackingMiddleware2.ts","../src/middlewares/on-action.ts","../src/core/action.ts","../src/core/actionContext.ts","../src/core/type/type-checker.ts","../src/core/node/identifier-cache.ts","../src/core/node/create-node.ts","../src/core/node/node-utils.ts","../src/core/process.ts","../src/utils.ts","../src/core/flow.ts","../src/core/json-patch.ts","../src/types/utility-types/snapshotProcessor.ts","../src/types/complex-types/map.ts","../src/types/complex-types/array.ts","../src/types/complex-types/model.ts","../src/types/primitives.ts","../src/types/utility-types/literal.ts","../src/types/utility-types/refinement.ts","../src/types/utility-types/enumeration.ts","../src/types/utility-types/union.ts","../src/types/utility-types/optional.ts","../src/types/utility-types/maybe.ts","../src/types/utility-types/late.ts","../src/types/utility-types/lazy.ts","../src/types/utility-types/frozen.ts","../src/types/utility-types/reference.ts","../src/types/utility-types/identifier.ts","../src/types/utility-types/custom.ts","../src/types/utility-types/resilient.ts","../src/types/index.ts"],"sourcesContent":["/**\n * Defines what MST should do when running into reads / writes to objects that have died.\n * - `\"warn\"`: Print a warning (default).\n * - `\"error\"`: Throw an exception.\n * - \"`ignore`\": Do nothing.\n */\nexport type LivelinessMode = \"warn\" | \"error\" | \"ignore\"\n\nlet livelinessChecking: LivelinessMode = \"warn\"\n\n/**\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function setLivelinessChecking(mode: LivelinessMode) {\n livelinessChecking = mode\n}\n\n/**\n * Returns the current liveliness checking mode.\n *\n * @returns `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function getLivelinessChecking(): LivelinessMode {\n return livelinessChecking\n}\n\n/**\n * @deprecated use LivelinessMode instead\n * @hidden\n */\nexport type LivelynessMode = LivelinessMode\n\n/**\n * @deprecated use setLivelinessChecking instead\n * @hidden\n *\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function setLivelynessChecking(mode: LivelinessMode) {\n setLivelinessChecking(mode)\n}\n","/**\n * @hidden\n */\nexport enum Hook {\n afterCreate = \"afterCreate\",\n afterAttach = \"afterAttach\",\n afterCreationFinalization = \"afterCreationFinalization\",\n beforeDetach = \"beforeDetach\",\n beforeDestroy = \"beforeDestroy\"\n}\n\nexport interface IHooks {\n [Hook.afterCreate]?: () => void\n [Hook.afterAttach]?: () => void\n [Hook.beforeDetach]?: () => void\n [Hook.beforeDestroy]?: () => void\n}\n\nexport type IHooksGetter<T> = (self: T) => IHooks\n","import { isComputedProp, isObservableProp } from \"mobx\"\n\nimport {\n EMPTY_OBJECT,\n InvalidReferenceError,\n asArray,\n assertArg,\n assertIsFunction,\n assertIsNumber,\n assertIsStateTreeNode,\n assertIsString,\n assertIsType,\n assertIsValidIdentifier,\n fail,\n freeze,\n getRelativePathBetweenNodes,\n getRunningActionContext,\n getStateTreeNode,\n isModelType,\n isStateTreeNode,\n normalizeIdentifier,\n resolveNodeByPath,\n splitJsonPath\n} from \"../internal.ts\"\n\nimport type {\n AnyObjectNode,\n IActionContext,\n IAnyComplexType,\n IAnyModelType,\n IAnyStateTreeNode,\n IAnyType,\n IDisposer,\n IJsonPatch,\n IStateTreeNode,\n IType,\n ReferenceIdentifier,\n TypeOfValue\n} from \"../internal.ts\"\n\n/** @hidden */\nexport type TypeOrStateTreeNodeToStateTreeNode<\n T extends IAnyType | IAnyStateTreeNode\n> = T extends IType<any, any, infer TT> ? TT & IStateTreeNode<T> : T\n\n/**\n * Returns the _actual_ type of the given tree node. (Or throws)\n *\n * @param object\n * @returns\n */\nexport function getType(object: IAnyStateTreeNode): IAnyComplexType {\n assertIsStateTreeNode(object, 1)\n\n return getStateTreeNode(object).type\n}\n\n/**\n * Returns the _declared_ type of the given sub property of an object, array or map.\n * In the case of arrays and maps the property name is optional and will be ignored.\n *\n * Example:\n * ```ts\n * const Box = types.model({ x: 0, y: 0 })\n * const box = Box.create()\n *\n * console.log(getChildType(box, \"x\").name) // 'number'\n * ```\n *\n * @param object\n * @param propertyName\n * @returns\n */\nexport function getChildType(\n object: IAnyStateTreeNode,\n propertyName?: string\n): IAnyType {\n assertIsStateTreeNode(object, 1)\n\n return getStateTreeNode(object).getChildType(propertyName)\n}\n\n/**\n * Registers a function that will be invoked for each mutation that is applied to the provided model instance, or to any of its children.\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details. onPatch events are emitted immediately and will not await the end of a transaction.\n * Patches can be used to deeply observe a model tree.\n *\n * @param target the model instance from which to receive patches\n * @param callback the callback that is invoked for each patch. The reversePatch is a patch that would actually undo the emitted patch\n * @returns function to remove the listener\n */\nexport function onPatch(\n target: IAnyStateTreeNode,\n callback: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(callback, 2)\n\n return getStateTreeNode(target).onPatch(callback)\n}\n\n/**\n * Registers a function that is invoked whenever a new snapshot for the given model instance is available.\n * The listener will only be fire at the end of the current MobX (trans)action.\n * See [snapshots](https://github.com/mobxjs/mobx-state-tree#snapshots) for more details.\n *\n * @param target\n * @param callback\n * @returns\n */\nexport function onSnapshot<S>(\n target: IStateTreeNode<IType<any, S, any>>,\n callback: (snapshot: S) => void\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(callback, 2)\n\n return getStateTreeNode(target).onSnapshot(callback)\n}\n\n/**\n * Applies a JSON-patch to the given model instance or bails out if the patch couldn't be applied\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details.\n *\n * Can apply a single past, or an array of patches.\n *\n * @param target\n * @param patch\n * @returns\n */\nexport function applyPatch(\n target: IAnyStateTreeNode,\n patch: IJsonPatch | ReadonlyArray<IJsonPatch>\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertArg(patch, p => typeof p === \"object\", \"object or array\", 2)\n\n getStateTreeNode(target).applyPatches(asArray(patch))\n}\n\nexport interface IPatchRecorder {\n patches: ReadonlyArray<IJsonPatch>\n inversePatches: ReadonlyArray<IJsonPatch>\n reversedInversePatches: ReadonlyArray<IJsonPatch>\n readonly recording: boolean\n stop(): void\n resume(): void\n replay(target?: IAnyStateTreeNode): void\n undo(target?: IAnyStateTreeNode): void\n}\n\n/**\n * Small abstraction around `onPatch` and `applyPatch`, attaches a patch listener to a tree and records all the patches.\n * Returns a recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IPatchRecorder {\n * // the recorded patches\n * patches: IJsonPatch[]\n * // the inverse of the recorded patches\n * inversePatches: IJsonPatch[]\n * // true if currently recording\n * recording: boolean\n * // stop recording patches\n * stop(): void\n * // resume recording patches\n * resume(): void\n * // apply all the recorded patches on the given target (the original subject if omitted)\n * replay(target?: IAnyStateTreeNode): void\n * // reverse apply the recorded patches on the given target (the original subject if omitted)\n * // stops the recorder if not already stopped\n * undo(): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain patches.\n *\n * @param subject\n * @param filter\n * @returns\n */\nexport function recordPatches(\n subject: IAnyStateTreeNode,\n filter?: (\n patch: IJsonPatch,\n inversePatch: IJsonPatch,\n actionContext: IActionContext | undefined\n ) => boolean\n): IPatchRecorder {\n // check all arguments\n assertIsStateTreeNode(subject, 1)\n\n interface IPatches {\n patches: IJsonPatch[]\n reversedInversePatches: IJsonPatch[]\n inversePatches: IJsonPatch[]\n }\n\n const data: Pick<IPatches, \"patches\" | \"inversePatches\"> = {\n patches: [],\n inversePatches: []\n }\n\n // we will generate the immutable copy of patches on demand for public consumption\n const publicData: Partial<IPatches> = {}\n\n let disposer: IDisposer | undefined\n\n const recorder: IPatchRecorder = {\n get recording() {\n return !!disposer\n },\n get patches() {\n if (!publicData.patches) {\n publicData.patches = data.patches.slice()\n }\n return publicData.patches\n },\n get reversedInversePatches() {\n if (!publicData.reversedInversePatches) {\n publicData.reversedInversePatches = data.inversePatches\n .slice()\n .reverse()\n }\n return publicData.reversedInversePatches\n },\n get inversePatches() {\n if (!publicData.inversePatches) {\n publicData.inversePatches = data.inversePatches.slice()\n }\n return publicData.inversePatches\n },\n stop() {\n if (disposer) {\n disposer()\n disposer = undefined\n }\n },\n resume() {\n if (disposer) {\n return\n }\n disposer = onPatch(subject, (patch, inversePatch) => {\n // skip patches that are asked to be filtered if there's a filter in place\n if (filter && !filter(patch, inversePatch, getRunningActionContext())) {\n return\n }\n data.patches.push(patch)\n data.inversePatches.push(inversePatch)\n\n // mark immutable public patches as dirty\n publicData.patches = undefined\n publicData.inversePatches = undefined\n publicData.reversedInversePatches = undefined\n })\n },\n replay(target?: IAnyStateTreeNode) {\n applyPatch(target || subject, data.patches)\n },\n undo(target?: IAnyStateTreeNode) {\n applyPatch(target || subject, data.inversePatches.slice().reverse())\n }\n }\n\n recorder.resume()\n return recorder\n}\n\n/**\n * The inverse of `unprotect`.\n *\n * @param target\n */\nexport function protect(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (!node.isRoot) {\n throw fail(\"`protect` can only be invoked on root nodes\")\n }\n node.isProtectionEnabled = true\n}\n\n/**\n * By default it is not allowed to directly modify a model. Models can only be modified through actions.\n * However, in some cases you don't care about the advantages (like replayability, traceability, etc) this yields.\n * For example because you are building a PoC or don't have any middleware attached to your tree.\n *\n * In that case you can disable this protection by calling `unprotect` on the root of your tree.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * done: false\n * }).actions(self => ({\n * toggle() {\n * self.done = !self.done\n * }\n * }))\n *\n * const todo = Todo.create()\n * todo.done = true // throws!\n * todo.toggle() // OK\n * unprotect(todo)\n * todo.done = false // OK\n * ```\n */\nexport function unprotect(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (!node.isRoot) {\n throw fail(\"`unprotect` can only be invoked on root nodes\")\n }\n node.isProtectionEnabled = false\n}\n\n/**\n * Returns true if the object is in protected mode, @see protect\n */\nexport function isProtected(target: IAnyStateTreeNode): boolean {\n return getStateTreeNode(target).isProtected\n}\n\n/**\n * Applies a snapshot to a given model instances. Patch and snapshot listeners will be invoked as usual.\n *\n * @param target\n * @param snapshot\n * @returns\n */\nexport function applySnapshot<C>(\n target: IStateTreeNode<IType<C, any, any>>,\n snapshot: C\n) {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).applySnapshot(snapshot)\n}\n\n/**\n * Calculates a snapshot from the given model instance. The snapshot will always reflect the latest state but use\n * structural sharing where possible. Doesn't require MobX transactions to be completed.\n *\n * @param target\n * @param applyPostProcess If true (the default) then postProcessSnapshot gets applied.\n * @returns\n */\nexport function getSnapshot<S>(\n target: IStateTreeNode<IType<any, S, any>>,\n applyPostProcess = true\n): S {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (applyPostProcess) {\n return node.snapshot\n }\n\n return freeze(node.type.getSnapshot(node, false))\n}\n\n/**\n * Given a model instance, returns `true` if the object has a parent, that is, is part of another object, map or array.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nexport function hasParent(\n target: IAnyStateTreeNode,\n depth: number = 1\n): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsNumber(depth, 2, 0)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (--depth === 0) {\n return true\n }\n parent = parent.parent\n }\n return false\n}\n\n/**\n * Returns the immediate parent of this object, or throws.\n *\n * Note that the immediate parent can be either an object, map or array, and\n * doesn't necessarily refer to the parent model.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nexport function getParent<IT extends IAnyStateTreeNode | IAnyComplexType>(\n target: IAnyStateTreeNode,\n depth = 1\n): TypeOrStateTreeNodeToStateTreeNode<IT> {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsNumber(depth, 2, 0)\n\n let d = depth\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (--d === 0) {\n return parent.storedValue as any\n }\n parent = parent.parent\n }\n throw fail(\n `Failed to find the parent of ${getStateTreeNode(target)} at depth ${depth}`\n )\n}\n\n/**\n * Given a model instance, returns `true` if the object has a parent of given type, that is, is part of another object, map or array\n *\n * @param target\n * @param type\n * @returns\n */\nexport function hasParentOfType(\n target: IAnyStateTreeNode,\n type: IAnyComplexType\n): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsType(type, 2)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (type.is(parent.storedValue)) {\n return true\n }\n parent = parent.parent\n }\n return false\n}\n\n/**\n * Returns the target's parent of a given type, or throws.\n *\n * @param target\n * @param type\n * @returns\n */\nexport function getParentOfType<IT extends IAnyComplexType>(\n target: IAnyStateTreeNode,\n type: IT\n): IT[\"Type\"] {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsType(type, 2)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (type.is(parent.storedValue)) {\n return parent.storedValue\n }\n parent = parent.parent\n }\n throw fail(\n `Failed to find the parent of ${getStateTreeNode(target)} of a given type`\n )\n}\n\n/**\n * Given an object in a model tree, returns the root object of that tree.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @returns\n */\nexport function getRoot<IT extends IAnyComplexType | IAnyStateTreeNode>(\n target: IAnyStateTreeNode\n): TypeOrStateTreeNodeToStateTreeNode<IT> {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).root.storedValue\n}\n\n/**\n * Returns the path of the given object in the model tree\n *\n * @param target\n * @returns\n */\nexport function getPath(target: IAnyStateTreeNode): string {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).path\n}\n\n/**\n * Returns the path of the given object as unescaped string array.\n *\n * @param target\n * @returns\n */\nexport function getPathParts(target: IAnyStateTreeNode): string[] {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return splitJsonPath(getStateTreeNode(target).path)\n}\n\n/**\n * Returns true if the given object is the root of a model tree.\n *\n * @param target\n * @returns\n */\nexport function isRoot(target: IAnyStateTreeNode): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).isRoot\n}\n\n/**\n * Resolves a path relatively to a given object.\n * Returns undefined if no value can be found.\n *\n * @param target\n * @param path escaped json path\n * @returns\n */\nexport function resolvePath(target: IAnyStateTreeNode, path: string): any {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsString(path, 2)\n\n const node = resolveNodeByPath(getStateTreeNode(target), path)\n return node ? node.value : undefined\n}\n\n/**\n * Resolves a model instance given a root target, the type and the identifier you are searching for.\n * Returns undefined if no value can be found.\n *\n * @param type\n * @param target\n * @param identifier\n * @returns\n */\nexport function resolveIdentifier<IT extends IAnyModelType>(\n type: IT,\n target: IAnyStateTreeNode,\n identifier: ReferenceIdentifier\n): IT[\"Type\"] | undefined {\n // check all arguments\n assertIsType(type, 1)\n assertIsStateTreeNode(target, 2)\n assertIsValidIdentifier(identifier, 3)\n\n const node = getStateTreeNode(target).root.identifierCache!.resolve(\n type,\n normalizeIdentifier(identifier)\n )\n return node?.value\n}\n\n/**\n * Returns the identifier of the target node.\n * This is the *string normalized* identifier, which might not match the type of the identifier attribute\n *\n * @param target\n * @returns\n */\nexport function getIdentifier(target: IAnyStateTreeNode): string | null {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).identifier\n}\n\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns such reference if the check passes,\n * else it returns undefined.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nexport function tryReference<N extends IAnyStateTreeNode>(\n getter: () => N | null | undefined,\n checkIfAlive = true\n): N | undefined {\n try {\n const node = getter()\n if (node === undefined || node === null) {\n return undefined\n } else if (isStateTreeNode(node)) {\n if (!checkIfAlive) {\n return node\n } else {\n return isAlive(node) ? node : undefined\n }\n } else {\n throw fail(\n \"The reference to be checked is not one of node, null or undefined\"\n )\n }\n } catch (e) {\n if (e instanceof InvalidReferenceError) {\n return undefined\n }\n throw e\n }\n}\n\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns if the check passes or not.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nexport function isValidReference<N extends IAnyStateTreeNode>(\n getter: () => N | null | undefined,\n checkIfAlive = true\n): boolean {\n try {\n const node = getter()\n if (node === undefined || node === null) {\n return false\n } else if (isStateTreeNode(node)) {\n return checkIfAlive ? isAlive(node) : true\n } else {\n throw fail(\n \"The reference to be checked is not one of node, null or undefined\"\n )\n }\n } catch (e) {\n if (e instanceof InvalidReferenceError) {\n return false\n }\n throw e\n }\n}\n\n/**\n * Try to resolve a given path relative to a given node.\n *\n * @param target\n * @param path\n * @returns\n */\nexport function tryResolve(target: IAnyStateTreeNode, path: string): any {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsString(path, 2)\n\n const node = resolveNodeByPath(getStateTreeNode(target), path, false)\n if (node === undefined) {\n return undefined\n }\n try {\n return node.value\n } catch (_e) {\n // For what ever reason not resolvable (e.g. totally not existing path, or value that cannot be fetched)\n // see test / issue: 'try resolve doesn't work #686'\n return undefined\n }\n}\n\n/**\n * Given two state tree nodes that are part of the same tree,\n * returns the shortest jsonpath needed to navigate from the one to the other\n *\n * @param base\n * @param target\n * @returns\n */\nexport function getRelativePath(\n base: IAnyStateTreeNode,\n target: IAnyStateTreeNode\n): string {\n // check all arguments\n assertIsStateTreeNode(base, 1)\n assertIsStateTreeNode(target, 2)\n\n return getRelativePathBetweenNodes(\n getStateTreeNode(base),\n getStateTreeNode(target)\n )\n}\n\n/**\n * Returns a deep copy of the given state tree node as new tree.\n * Shorthand for `snapshot(x) = getType(x).create(getSnapshot(x))`\n *\n * _Tip: clone will create a literal copy, including the same identifiers. To modify identifiers etc. during cloning, don't use clone but take a snapshot of the tree, modify it, and create new instance_\n *\n * @param source\n * @param keepEnvironment indicates whether the clone should inherit the same environment (`true`, the default), or not have an environment (`false`). If an object is passed in as second argument, that will act as the environment for the cloned tree.\n * @returns\n */\nexport function clone<T extends IAnyStateTreeNode>(\n source: T,\n keepEnvironment: boolean | any = true\n): T {\n // check all arguments\n assertIsStateTreeNode(source, 1)\n\n const node = getStateTreeNode(source)\n return node.type.create(\n node.snapshot,\n keepEnvironment === true\n ? node.root.environment\n : keepEnvironment === false\n ? undefined\n : keepEnvironment\n ) // it's an object or something else\n}\n\n/**\n * Removes a model element from the state tree, and let it live on as a new state tree\n */\nexport function detach<T extends IAnyStateTreeNode>(target: T): T {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n getStateTreeNode(target).detach()\n return target\n}\n\n/**\n * Removes a model element from the state tree, and mark it as end-of-life; the element should not be used anymore\n */\nexport function destroy(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (node.isRoot) {\n node.die()\n } else {\n node.parent!.removeChild(node.subpath)\n }\n}\n\n/**\n * Returns true if the given state tree node is not killed yet.\n * This means that the node is still a part of a tree, and that `destroy`\n * has not been called. If a node is not alive anymore, the only thing one can do with it\n * is requesting it's last path and snapshot\n *\n * @param target\n * @returns\n */\nexport function isAlive(target: IAnyStateTreeNode): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).observableIsAlive\n}\n\n/**\n * Use this utility to register a function that should be called whenever the\n * targeted state tree node is destroyed. This is a useful alternative to managing\n * cleanup methods yourself using the `beforeDestroy` hook.\n *\n * This methods returns the same disposer that was passed as argument.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * title: types.string\n * }).actions(self => ({\n * afterCreate() {\n * const autoSaveDisposer = reaction(\n * () => getSnapshot(self),\n * snapshot => sendSnapshotToServerSomehow(snapshot)\n * )\n * // stop sending updates to server if this\n * // instance is destroyed\n * addDisposer(self, autoSaveDisposer)\n * }\n * }))\n * ```\n *\n * @param target\n * @param disposer\n * @returns The same disposer that was passed as argument\n */\nexport function addDisposer(\n target: IAnyStateTreeNode,\n disposer: IDisposer\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(disposer, 2)\n\n const node = getStateTreeNode(target)\n node.addDisposer(disposer)\n return disposer\n}\n\n/**\n * Returns the environment of the current state tree. For more info on environments,\n * see [Dependency injection](https://github.com/mobxjs/mobx-state-tree#dependency-injection)\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired\n *\n * Returns an empty environment if the tree wasn't initialized with an environment\n *\n * @param target\n * @returns\n */\nexport function getEnv<T = any>(target: IAnyStateTreeNode): T {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n const env = node.root.environment\n if (!env) {\n return EMPTY_OBJECT as T\n }\n return env\n}\n\n/**\n * Performs a depth first walk through a tree.\n */\nexport function walk(\n target: IAnyStateTreeNode,\n processor: (item: IAnyStateTreeNode) => void\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(processor, 2)\n\n const node = getStateTreeNode(target)\n // tslint:disable-next-line:no_unused-variable\n node.getChildren().forEach(child => {\n if (isStateTreeNode(child.storedValue)) {\n walk(child.storedValue, processor)\n }\n })\n processor(node.storedValue)\n}\n\nexport interface IModelReflectionPropertiesData {\n name: string\n properties: { [K: string]: IAnyType }\n}\n\n/**\n * Returns a reflection of the model type properties and name for either a model type or model node.\n *\n * @param typeOrNode\n * @returns\n */\nexport function getPropertyMembers(\n typeOrNode: IAnyModelType | IAnyStateTreeNode\n): IModelReflectionPropertiesData {\n let type: IAnyModelType\n\n if (isStateTreeNode(typeOrNode)) {\n type = getType(typeOrNode) as IAnyModelType\n } else {\n type = typeOrNode as IAnyModelType\n }\n\n assertArg(type, t => isModelType(t), \"model type or model instance\", 1)\n\n return {\n name: type.name,\n properties: { ...type.properties }\n }\n}\n\nexport interface IModelReflectionData extends IModelReflectionPropertiesData {\n actions: string[]\n views: string[]\n volatile: string[]\n flowActions: string[]\n}\n\n/**\n * Returns a reflection of the model node, including name, properties, views, volatile state,\n * and actions. `flowActions` is also provided as a separate array of names for any action that\n * came from a flow generator as well.\n *\n * In the case where a model has two actions: `doSomething` and `doSomethingWithFlow`, where\n * `doSomethingWithFlow` is a flow generator, the `actions` array will contain both actions,\n * i.e. [\"doSomething\", \"doSomethingWithFlow\"], and the `flowActions` array will contain only\n * the flow action, i.e. [\"doSomethingWithFlow\"].\n *\n * @param target\n * @returns\n */\nexport function getMembers(target: IAnyStateTreeNode): IModelReflectionData {\n const type = getStateTreeNode(target).type as unknown as IAnyModelType\n\n const reflected: IModelReflectionData = {\n ...getPropertyMembers(type),\n actions: [],\n volatile: [],\n views: [],\n flowActions: []\n }\n\n const props = Object.getOwnPropertyNames(target)\n props.forEach(key => {\n if (key in reflected.properties) {\n return\n }\n const descriptor = Object.getOwnPropertyDescriptor(target, key)!\n if (descriptor.get) {\n if (isComputedProp(target, key)) {\n reflected.views.push(key)\n } else {\n reflected.volatile.push(key)\n }\n return\n }\n if (descriptor.value._isFlowAction === true) {\n reflected.flowActions.push(key)\n }\n if (descriptor.value._isMSTAction === true) {\n reflected.actions.push(key)\n } else if (isObservableProp(target, key)) {\n reflected.volatile.push(key)\n } else {\n reflected.views.push(key)\n }\n })\n return reflected\n}\n\nexport function cast<\n O extends string | number | boolean | null | undefined = never\n>(snapshotOrInstance: O): O\nexport function cast<O = never>(\n snapshotOrInstance:\n | TypeOfValue<O>[\"CreationType\"]\n | TypeOfValue<O>[\"SnapshotType\"]\n | TypeOfValue<O>[\"Type\"]\n): O\n/**\n * Casts a node snapshot or instance type to an instance type so it can be assigned to a type instance.\n * Note that this is just a cast for the type system, this is, it won't actually convert a snapshot to an instance,\n * but just fool typescript into thinking so.\n * Either way, casting when outside an assignation operation won't compile.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * }).actions(self => ({\n * someAction() {\n * // this will allow the compiler to assign a snapshot to the property\n * self.innerModel = cast({ a: 5 })\n * }\n * }))\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object cast as an instance\n */\nexport function cast(snapshotOrInstance: any): any {\n return snapshotOrInstance as any\n}\n\n/**\n * Casts a node instance type to a snapshot type so it can be assigned to a type snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * })\n *\n * const a = ModelA.create({ n: 5 });\n * // this will allow the compiler to use a model as if it were a snapshot\n * const b = ModelB.create({ innerModel: castToSnapshot(a)})\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object cast as an input (creation) snapshot\n */\nexport function castToSnapshot<I>(\n snapshotOrInstance: I\n): Extract<I, IAnyStateTreeNode> extends never\n ? I\n : TypeOfValue<I>[\"CreationType\"] {\n return snapshotOrInstance as any\n}\n\n/**\n * Casts a node instance type to a reference snapshot type so it can be assigned to a reference snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a reference snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * id: types.identifier,\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * refA: types.reference(ModelA)\n * })\n *\n * const a = ModelA.create({ id: 'someId', n: 5 });\n * // this will allow the compiler to use a model as if it were a reference snapshot\n * const b = ModelB.create({ refA: castToReferenceSnapshot(a)})\n * ```\n *\n * @param instance Instance\n * @returns The same object cast as a reference snapshot (string or number)\n */\nexport function castToReferenceSnapshot<I>(\n instance: I\n): Extract<I, IAnyStateTreeNode> extends never ? I : ReferenceIdentifier {\n return instance as any\n}\n\n/**\n * Returns the unique node id (not to be confused with the instance identifier) for a\n * given instance.\n * This id is a number that is unique for each instance.\n *\n * @export\n * @param target\n * @returns\n */\nexport function getNodeId(target: IAnyStateTreeNode): number {\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).nodeId\n}\n","import { type IAtom, createAtom } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n EventHandlers,\n Hook,\n type IAnyType,\n type IDisposer,\n NodeLifeCycle,\n devMode,\n escapeJsonPath,\n fail\n} from \"../../internal.ts\"\n\ntype HookSubscribers = {\n [Hook.afterAttach]: (node: AnyNode, hook: Hook) => void\n [Hook.afterCreate]: (node: AnyNode, hook: Hook) => void\n [Hook.afterCreationFinalization]: (node: AnyNode, hook: Hook) => void\n [Hook.beforeDestroy]: (node: AnyNode, hook: Hook) => void\n [Hook.beforeDetach]: (node: AnyNode, hook: Hook) => void\n}\n\n/**\n * @internal\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport abstract class BaseNode<C, S, T> {\n private _escapedSubpath?: string\n\n private _subpath!: string\n get subpath() {\n return this._subpath\n }\n\n private _subpathUponDeath?: string\n get subpathUponDeath() {\n return this._subpathUponDeath\n }\n\n private _pathUponDeath?: string\n protected get pathUponDeath() {\n return this._pathUponDeath\n }\n\n storedValue!: any // usually the same type as the value, but not always (such as with references)\n get value(): T {\n return (this.type as any).getValue(this)\n }\n\n private aliveAtom?: IAtom\n private _state = NodeLifeCycle.INITIALIZING\n get state() {\n return this._state\n }\n set state(val: NodeLifeCycle) {\n const wasAlive = this.isAlive\n this._state = val\n const isAlive = this.isAlive\n\n if (this.aliveAtom && wasAlive !== isAlive) {\n this.aliveAtom.reportChanged()\n }\n }\n\n private _hookSubscribers?: EventHandlers<HookSubscribers>\n\n protected abstract fireHook(name: Hook): void\n\n protected fireInternalHook(name: Hook) {\n if (this._hookSubscribers) {\n this._hookSubscribers.emit(name, this, name)\n }\n }\n\n registerHook<H extends Hook>(\n hook: H,\n hookHandler: HookSubscribers[H]\n ): IDisposer {\n if (!this._hookSubscribers) {\n this._hookSubscribers = new EventHandlers()\n }\n return this._hookSubscribers.register(hook, hookHandler)\n }\n\n private _parent!: AnyObjectNode | null\n get parent() {\n return this._parent\n }\n\n constructor(\n readonly type: IAnyType,\n parent: AnyObjectNode | null,\n subpath: string,\n public environment: any\n ) {\n this.environment = environment\n this.baseSetParent(parent, subpath)\n }\n\n getReconciliationType() {\n return this.type\n }\n\n private pathAtom?: IAtom\n protected baseSetParent(parent: AnyObjectNode | null, subpath: string) {\n this._parent = parent\n this._subpath = subpath\n this._escapedSubpath = undefined // regenerate when needed\n if (this.pathAtom) {\n this.pathAtom.reportChanged()\n }\n }\n\n /*\n * Returns (escaped) path representation as string\n */\n get path(): string {\n return this.getEscapedPath(true)\n }\n\n protected getEscapedPath(reportObserved: boolean): string {\n if (reportObserved) {\n if (!this.pathAtom) {\n this.pathAtom = createAtom(`path`)\n }\n this.pathAtom.reportObserved()\n }\n if (!this.parent) {\n return \"\"\n }\n // regenerate escaped subpath if needed\n if (this._escapedSubpath === undefined) {\n this._escapedSubpath = !this._subpath ? \"\" : escapeJsonPath(this._subpath)\n }\n return (\n this.parent.getEscapedPath(reportObserved) + \"/\" + this._escapedSubpath\n )\n }\n\n get isRoot(): boolean {\n return this.parent === null\n }\n\n abstract get root(): AnyObjectNode\n\n abstract setParent(\n newParent: AnyObjectNode | null,\n subpath: string | null\n ): void\n\n abstract get snapshot(): S\n abstract getSnapshot(): S\n\n get isAlive() {\n return this.state !== NodeLifeCycle.DEAD\n }\n\n get isDetaching() {\n return this.state === NodeLifeCycle.DETACHING\n }\n\n get observableIsAlive() {\n if (!this.aliveAtom) {\n this.aliveAtom = createAtom(`alive`)\n }\n this.aliveAtom.reportObserved()\n return this.isAlive\n }\n\n abstract die(): void\n\n abstract finalizeCreation(): void\n\n protected baseFinalizeCreation(whenFinalized?: () => void) {\n if (devMode()) {\n if (!this.isAlive) {\n // istanbul ignore next\n throw fail(\n \"assertion failed: cannot finalize the creation of a node that is already dead\"\n )\n }\n }\n\n // goal: afterCreate hooks runs depth-first. After attach runs parent first, so on afterAttach the parent has completed already\n if (this.state === NodeLifeCycle.CREATED) {\n if (this.parent) {\n if (this.parent.state !== NodeLifeCycle.FINALIZED) {\n // parent not ready yet, postpone\n return\n }\n this.fireHook(Hook.afterAttach)\n }\n\n this.state = NodeLifeCycle.FINALIZED\n\n if (whenFinalized) {\n whenFinalized()\n }\n }\n }\n\n abstract finalizeDeath(): void\n\n protected baseFinalizeDeath() {\n if (this._hookSubscribers) {\n this._hookSubscribers.clearAll()\n }\n\n this._subpathUponDeath = this._subpath\n this._pathUponDeath = this.getEscapedPath(false)\n this.baseSetParent(null, \"\")\n this.state = NodeLifeCycle.DEAD\n }\n\n abstract aboutToDie(): void\n\n protected baseAboutToDie() {\n this.fireHook(Hook.beforeDestroy)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyNode = BaseNode<any, any, any>\n","import { action } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n BaseNode,\n Hook,\n NodeLifeCycle,\n SimpleType,\n devMode,\n fail,\n freeze\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class ScalarNode<C, S, T> extends BaseNode<C, S, T> {\n // note about hooks:\n // - afterCreate is not emmited in scalar nodes, since it would be emitted in the\n // constructor, before it can be subscribed by anybody\n // - afterCreationFinalization could be emitted, but there's no need for it right now\n // - beforeDetach is never emitted for scalar nodes, since they cannot be detached\n\n declare readonly type: SimpleType<C, S, T>\n\n constructor(\n simpleType: SimpleType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialSnapshot: C\n ) {\n super(simpleType, parent, subpath, environment)\n try {\n this.storedValue = simpleType.createNewInstance(initialSnapshot)\n } catch (e) {\n // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n this.state = NodeLifeCycle.DEAD\n throw e\n }\n\n this.state = NodeLifeCycle.CREATED\n // for scalar nodes there's no point in firing this event since it would fire on the constructor, before\n // anybody can actually register for/listen to it\n // this.fireHook(Hook.AfterCreate)\n\n this.finalizeCreation()\n }\n\n get root(): AnyObjectNode {\n // future optimization: store root ref in the node and maintain it\n if (!this.parent) {\n throw fail(`This scalar node is not part of a tree`)\n }\n return this.parent.root\n }\n\n setParent(newParent: AnyObjectNode, subpath: string): void {\n const parentChanged = this.parent !== newParent\n const subpathChanged = this.subpath !== subpath\n\n if (!parentChanged && !subpathChanged) {\n return\n }\n\n if (devMode()) {\n if (!subpath) {\n // istanbul ignore next\n throw fail(\"assertion failed: subpath expected\")\n }\n if (!newParent) {\n // istanbul ignore next\n throw fail(\"assertion failed: parent expected\")\n }\n if (parentChanged) {\n // istanbul ignore next\n throw fail(\"assertion failed: scalar nodes cannot change their parent\")\n }\n }\n\n this.environment = undefined // use parent's\n this.baseSetParent(this.parent, subpath)\n }\n\n get snapshot(): S {\n return freeze(this.getSnapshot())\n }\n\n getSnapshot(): S {\n return this.type.getSnapshot(this)\n }\n\n toString(): string {\n const path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\"\n return `${this.type.name}@${path}${this.isAlive ? \"\" : \" [dead]\"}`\n }\n\n die(): void {\n if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {\n return\n }\n this.aboutToDie()\n this.finalizeDeath()\n }\n\n finalizeCreation(): void {\n this.baseFinalizeCreation()\n }\n\n aboutToDie(): void {\n this.baseAboutToDie()\n }\n\n finalizeDeath(): void {\n this.baseFinalizeDeath()\n }\n\n protected fireHook(name: Hook): void {\n this.fireInternalHook(name)\n }\n}\nScalarNode.prototype.die = action(ScalarNode.prototype.die)\n","import {\n type IComputedValue,\n _allowStateChangesInsideComputed,\n action,\n computed,\n reaction\n} from \"mobx\"\n\nimport {\n BaseNode,\n ComplexType,\n EMPTY_OBJECT,\n EventHandlers,\n Hook,\n IdentifierCache,\n NodeLifeCycle,\n addHiddenFinalProp,\n convertChildNodesToArray,\n createActionInvoker,\n devMode,\n escapeJsonPath,\n extend,\n fail,\n freeze,\n getCurrentActionContext,\n getLivelinessChecking,\n getPath,\n normalizeIdentifier,\n resolveNodeByPathParts,\n splitJsonPath,\n splitPatch,\n toJSON,\n warnError\n} from \"../../internal.ts\"\n\nimport type {\n AnyNode,\n ArgumentTypes,\n IAnyType,\n IDisposer,\n IJsonPatch,\n IMiddleware,\n IMiddlewareEvent,\n IMiddlewareHandler,\n IReversibleJsonPatch,\n IStateTreeNode,\n IType,\n ReferenceIdentifier\n} from \"../../internal.ts\"\n\nlet nextNodeId = 1\n\nconst enum ObservableInstanceLifecycle {\n // the actual observable instance has not been created yet\n UNINITIALIZED,\n // the actual observable instance is being created\n CREATING,\n // the actual observable instance has been created\n CREATED\n}\n\nconst enum InternalEvents {\n Dispose = \"dispose\",\n Patch = \"patch\",\n Snapshot = \"snapshot\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport interface IChildNodesMap {\n [key: string]: AnyNode\n}\n\nconst snapshotReactionOptions = {\n onError(e: any) {\n throw e\n }\n}\n\ntype InternalEventHandlers<S> = {\n [InternalEvents.Dispose]: IDisposer\n [InternalEvents.Patch]: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n [InternalEvents.Snapshot]: (snapshot: S) => void\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ObjectNode<C, S, T> extends BaseNode<C, S, T> {\n declare readonly type: ComplexType<C, S, T>\n declare storedValue: T & IStateTreeNode<IType<C, S, T>>\n\n readonly nodeId = ++nextNodeId\n readonly identifierAttribute?: string\n readonly identifier: string | null // Identifier is always normalized to string, even if the identifier property isn't\n readonly unnormalizedIdentifier: ReferenceIdentifier | null\n\n identifierCache?: IdentifierCache\n isProtectionEnabled = true\n middlewares?: IMiddleware[]\n hasSnapshotPostProcessor = false\n\n private _applyPatches?: (patches: IJsonPatch[]) => void\n\n applyPatches(patches: IJsonPatch[]): void {\n this.createObservableInstanceIfNeeded()\n this._applyPatches!(patches)\n }\n\n private _applySnapshot?: (snapshot: C) => void\n\n applySnapshot(snapshot: C): void {\n this.createObservableInstanceIfNeeded()\n this._applySnapshot!(snapshot)\n }\n\n private _autoUnbox = true // unboxing is disabled when reading child nodes\n _isRunningAction = false // only relevant for root\n private _hasSnapshotReaction = false\n\n private _observableInstanceState = ObservableInstanceLifecycle.UNINITIALIZED\n private _childNodes: IChildNodesMap\n private _initialSnapshot: C\n private _cachedInitialSnapshot?: S\n private _cachedInitialSnapshotCreated = false\n private _snapshotComputed: IComputedValue<S>\n\n constructor(\n complexType: ComplexType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ) {\n super(complexType, parent, subpath, environment)\n this._snapshotComputed = computed<S>(() => freeze(this.getSnapshot()))\n\n this.unbox = this.unbox.bind(this)\n\n this._initialSnapshot = freeze(initialValue)\n this.identifierAttribute = complexType.identifierAttribute\n\n if (!parent) {\n this.identifierCache = new IdentifierCache()\n }\n\n this._childNodes = complexType.initializeChildNodes(\n this,\n this._initialSnapshot\n )\n\n // identifier can not be changed during lifecycle of a node\n // so we safely can read it from initial snapshot\n this.identifier = null\n this.unnormalizedIdentifier = null\n if (this.identifierAttribute && this._initialSnapshot) {\n let id = (this._initialSnapshot as any)[this.identifierAttribute]\n if (id === undefined) {\n // try with the actual node if not (for optional identifiers)\n const childNode = this._childNodes[this.identifierAttribute]\n if (childNode) {\n id = childNode.value\n }\n }\n\n if (typeof id !== \"string\" && typeof id !== \"number\") {\n throw fail(\n `Instance identifier '${this.identifierAttribute}' for type '${this.type.name}' must be a string or a number`\n )\n }\n\n // normalize internal identifier to string\n this.identifier = normalizeIdentifier(id)\n this.unnormalizedIdentifier = id\n }\n\n if (!parent) {\n this.identifierCache!.addNodeToCache(this)\n } else {\n parent.root.identifierCache!.addNodeToCache(this)\n }\n }\n\n createObservableInstanceIfNeeded(fireHooks = true): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n this.createObservableInstance(fireHooks)\n }\n }\n\n createObservableInstance(fireHooks = true): void {\n if (devMode()) {\n if (this.state !== NodeLifeCycle.INITIALIZING) {\n // istanbul ignore next\n throw fail(\n \"assertion failed: the creation of the observable instance must be done on the initializing phase\"\n )\n }\n }\n this._observableInstanceState = ObservableInstanceLifecycle.CREATING\n\n // make sure the parent chain is created as well\n\n // array with parent chain from parent to child\n const parentChain = []\n\n let parent = this.parent\n // for performance reasons we never go back further than the most direct\n // uninitialized parent\n // this is done to avoid traversing the whole tree to the root when using\n // the same reference again\n while (\n parent &&\n parent._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n parentChain.unshift(parent)\n parent = parent.parent\n }\n\n // initialize the uninitialized parent chain from parent to child\n for (const p of parentChain) {\n // delay firing hooks until after all parents have been created\n p.createObservableInstanceIfNeeded(false)\n }\n\n const type = this.type\n\n try {\n // @ts-expect-error storedValue type mismatch during initialization\n this.storedValue = type.createNewInstance(this._childNodes)\n this.preboot()\n\n this._isRunningAction = true\n type.finalizeNewInstance(this, this.storedValue)\n } catch (e) {\n // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n this.state = NodeLifeCycle.DEAD\n throw e\n } finally {\n this._isRunningAction = false\n }\n\n this._observableInstanceState = ObservableInstanceLifecycle.CREATED\n\n // NOTE: we need to touch snapshot, because non-observable\n // \"_observableInstanceState\" field was touched\n ;(this._snapshotComputed as any).trackAndCompute()\n\n if (this.isRoot) {\n this._addSnapshotReaction()\n }\n\n this._childNodes = EMPTY_OBJECT\n\n this.state = NodeLifeCycle.CREATED\n\n if (fireHooks) {\n this.fireHook(Hook.afterCreate)\n // Note that the parent might not be finalized at this point\n // so afterAttach won't be called until later in that case\n this.finalizeCreation()\n\n // fire the hooks of the parents that we created\n for (const p of parentChain.reverse()) {\n p.fireHook(Hook.afterCreate)\n // This will call afterAttach on the child if necessary\n p.finalizeCreation()\n }\n }\n }\n\n get root(): AnyObjectNode {\n const parent = this.parent\n return parent ? parent.root : this\n }\n\n clearParent(): void {\n if (!this.parent) {\n return\n }\n\n // detach if attached\n this.fireHook(Hook.beforeDetach)\n const previousState = this.state\n this.state = NodeLifeCycle.DETACHING\n\n const root = this.root\n const newEnv = root.environment\n const newIdCache = root.identifierCache!.splitCache(this)\n\n try {\n this.parent.removeChild(this.subpath)\n this.baseSetParent(null, \"\")\n this.environment = newEnv\n this.identifierCache = newIdCache\n } finally {\n this.state = previousState\n }\n }\n\n setParent(newParent: AnyObjectNode, subpath: string): void {\n const parentChanged = newParent !== this.parent\n const subpathChanged = subpath !== this.subpath\n\n if (!parentChanged && !subpathChanged) {\n return\n }\n\n if (devMode()) {\n if (!subpath) {\n // istanbul ignore next\n throw fail(\"assertion failed: subpath expected\")\n }\n if (!newParent) {\n // istanbul ignore next\n throw fail(\"assertion failed: new parent expected\")\n }\n\n if (this.parent && parentChanged) {\n throw fail(\n `A node cannot exists twice in the state tree. Failed to add ${this} to path '${newParent.path}/${subpath}'.`\n )\n }\n if (!this.parent && newParent.root === this) {\n throw fail(\n `A state tree is not allowed to contain itself. Cannot assign ${this} to path '${newParent.path}/${subpath}'`\n )\n }\n if (\n !this.parent &&\n !!this.environment &&\n this.environment !== newParent.root.environment\n ) {\n throw fail(\n `A state tree cannot be made part of another state tree as long as their environments are different.`\n )\n }\n }\n\n if (parentChanged) {\n // attach to new parent\n this.environment = undefined // will use root's\n newParent.root.identifierCache!.mergeCache(this)\n this.baseSetParent(newParent, subpath)\n this.fireHook(Hook.afterAttach)\n } else if (subpathChanged) {\n // moving to a new subpath on the same parent\n this.baseSetParent(this.parent, subpath)\n }\n }\n\n protected fireHook(name: Hook): void {\n this.fireInternalHook(name)\n\n const fn =\n this.storedValue &&\n typeof this.storedValue === \"object\" &&\n (this.storedValue as any)[name]\n if (typeof fn === \"function\") {\n // we check for it to allow old mobx peer dependencies that don't have the method to work (even when still bugged)\n if (_allowStateChangesInsideComputed) {\n _allowStateChangesInsideComputed(() => {\n fn.apply(this.storedValue)\n })\n } else {\n fn.apply(this.storedValue)\n }\n }\n }\n\n private _snapshotUponDeath?: S\n\n // advantage of using computed for a snapshot is that nicely respects transactions etc.\n get snapshot(): S {\n if (this.hasSnapshotPostProcessor) {\n this.createObservableInstanceIfNeeded()\n }\n return this._snapshotComputed.get()\n }\n\n // NOTE: we use this method to get snapshot without creating @computed overhead\n getSnapshot(): S {\n if (!this.isAlive) {\n return this._snapshotUponDeath!\n }\n return this._observableInstanceState === ObservableInstanceLifecycle.CREATED\n ? this._getActualSnapshot()\n : this._getCachedInitialSnapshot()\n }\n\n private _getActualSnapshot(): S {\n return this.type.getSnapshot(this)\n }\n\n private _getCachedInitialSnapshot(): S {\n if (!this._cachedInitialSnapshotCreated) {\n const type = this.type\n const childNodes = this._childNodes\n const snapshot = this._initialSnapshot\n\n this._cachedInitialSnapshot = type.processInitialSnapshot(\n childNodes,\n snapshot\n )\n this._cachedInitialSnapshotCreated = true\n }\n\n return this._cachedInitialSnapshot!\n }\n\n private isRunningAction(): boolean {\n if (this._isRunningAction) {\n return true\n }\n if (this.isRoot) {\n return false\n }\n return this.parent!.isRunningAction()\n }\n\n assertAlive(context: AssertAliveContext): void {\n const livelinessChecking = getLivelinessChecking()\n if (!this.isAlive && livelinessChecking !== \"ignore\") {\n const error = this._getAssertAliveError(context)\n switch (livelinessChecking) {\n case \"error\":\n throw fail(error)\n case \"warn\":\n warnError(error)\n }\n }\n }\n\n private _getAssertAliveError(context: AssertAliveContext): string {\n const escapedPath = this.getEscapedPath(false) || this.pathUponDeath || \"\"\n const subpath = (context.subpath && escapeJsonPath(context.subpath)) || \"\"\n\n let actionContext = context.actionContext || getCurrentActionContext()\n\n // try to use a real action context if possible since it includes the action name\n if (\n actionContext &&\n actionContext.type !== \"action\" &&\n actionContext.parentActionEvent\n ) {\n actionContext = actionContext.parentActionEvent\n }\n\n let actionFullPath = \"\"\n if (actionContext && actionContext.name != null) {\n // try to use the context, and if it not available use the node one\n const actionPath =\n (actionContext &&\n actionContext.context &&\n getPath(actionContext.context)) ||\n escapedPath\n actionFullPath = `${actionPath}.${actionContext.name}()`\n }\n\n 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: '${escapedPath}', Subpath: '${subpath}', Action: '${actionFullPath}'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.`\n }\n\n getChildNode(subpath: string): AnyNode {\n this.assertAlive({\n subpath\n })\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildNode(this, subpath)\n : this._childNodes![subpath]\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildren(): ReadonlyArray<AnyNode> {\n this.assertAlive(EMPTY_OBJECT)\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildren(this)\n : convertChildNodesToArray(this._childNodes)\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildType(propertyName?: string): IAnyType {\n return this.type.getChildType(propertyName)\n }\n\n get isProtected(): boolean {\n return this.root.isProtectionEnabled\n }\n\n assertWritable(context: AssertAliveContext): void {\n this.assertAlive(context)\n if (!this.isRunningAction() && this.isProtected) {\n throw fail(\n `Cannot modify '${this}', the object is protected and can only be modified by using an action.`\n )\n }\n }\n\n removeChild(subpath: string): void {\n this.type.removeChild(this, subpath)\n }\n\n // bound on the constructor\n unbox(childNode: AnyNode | undefined): AnyNode | undefined {\n if (!childNode) {\n return childNode\n }\n\n this.assertAlive({\n subpath: childNode.subpath || childNode.subpathUponDeath\n })\n return this._autoUnbox ? childNode.value : childNode\n }\n\n toString(): string {\n const path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\"\n const identifier = this.identifier ? `(id: ${this.identifier})` : \"\"\n return `${this.type.name}@${path}${identifier}${this.isAlive ? \"\" : \" [dead]\"}`\n }\n\n finalizeCreation(): void {\n this.baseFinalizeCreation(() => {\n for (const child of this.getChildren()) {\n child.finalizeCreation()\n }\n\n this.fireInternalHook(Hook.afterCreationFinalization)\n })\n }\n\n detach(): void {\n if (!this.isAlive) {\n throw fail(`Error while detaching, node is not alive.`)\n }\n\n this.clearParent()\n }\n\n private preboot(): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n this._applyPatches = createActionInvoker(\n this.storedValue,\n \"@APPLY_PATCHES\",\n (patches: IJsonPatch[]) => {\n patches.forEach(patch => {\n if (!patch.path) {\n self.type.applySnapshot(self, patch.value)\n return\n }\n const parts = splitJsonPath(patch.path)\n const node = resolveNodeByPathParts(\n self,\n parts.slice(0, -1)\n ) as AnyObjectNode\n node.applyPatchLocally(parts[parts.length - 1], patch)\n })\n }\n )\n this._applySnapshot = createActionInvoker(\n this.storedValue,\n \"@APPLY_SNAPSHOT\",\n (snapshot: C) => {\n // if the snapshot is the same as the current one, avoid performing a reconcile\n if (snapshot === (self.snapshot as any)) {\n return\n }\n // else, apply it by calling the type logic\n return self.type.applySnapshot(self, snapshot as any)\n }\n )\n\n addHiddenFinalProp(this.storedValue, \"$treenode\", this)\n addHiddenFinalProp(this.storedValue, \"toJSON\", toJSON)\n }\n\n die(): void {\n if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {\n return\n }\n this.aboutToDie()\n this.finalizeDeath()\n }\n\n aboutToDie(): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n return\n }\n\n this.getChildren().forEach(node => {\n node.aboutToDie()\n })\n\n // beforeDestroy should run before the disposers since else we could end up in a situation where\n // a disposer added with addDisposer at this stage (beforeDestroy) is actually never released\n this.baseAboutToDie()\n\n this._internalEventsEmit(InternalEvents.Dispose)\n this._internalEventsClear(InternalEvents.Dispose)\n }\n\n finalizeDeath(): void {\n // invariant: not called directly but from \"die\"\n this.getChildren().forEach(node => {\n node.finalizeDeath()\n })\n this.root.identifierCache!.notifyDied(this)\n\n // \"kill\" the computed prop and just store the last snapshot\n const snapshot = this.snapshot\n this._snapshotUponDeath = snapshot\n\n this._internalEventsClearAll()\n\n this.baseFinalizeDeath()\n }\n\n onSnapshot(onChange: (snapshot: S) => void): IDisposer {\n this._addSnapshotReaction()\n return this._internalEventsRegister(InternalEvents.Snapshot, onChange)\n }\n\n protected emitSnapshot(snapshot: S): void {\n this._internalEventsEmit(InternalEvents.Snapshot, snapshot)\n }\n\n onPatch(\n handler: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n ): IDisposer {\n return this._internalEventsRegister(InternalEvents.Patch, handler)\n }\n\n emitPatch(basePatch: IReversibleJsonPatch, source: AnyNode): void {\n if (this._internalEventsHasSubscribers(InternalEvents.Patch)) {\n const localizedPatch: IReversibleJsonPatch = extend({}, basePatch, {\n path: source.path.substr(this.path.length) + \"/\" + basePatch.path // calculate the relative path of the patch\n })\n const [patch, reversePatch] = splitPatch(localizedPatch)\n this._internalEventsEmit(InternalEvents.Patch, patch, reversePatch)\n }\n if (this.parent) {\n this.parent.emitPatch(basePatch, source)\n }\n }\n\n hasDisposer(disposer: () => void): boolean {\n return this._internalEventsHas(InternalEvents.Dispose, disposer)\n }\n\n addDisposer(disposer: () => void): void {\n if (!this.hasDisposer(disposer)) {\n this._internalEventsRegister(InternalEvents.Dispose, disposer, true)\n return\n }\n throw fail(\n \"cannot add a disposer when it is already registered for execution\"\n )\n }\n\n removeDisposer(disposer: () => void): void {\n if (!this._internalEventsHas(InternalEvents.Dispose, disposer)) {\n throw fail(\n \"cannot remove a disposer which was never registered for execution\"\n )\n }\n this._internalEventsUnregister(InternalEvents.Dispose, disposer)\n }\n\n private removeMiddleware(middleware: IMiddleware): void {\n if (this.middlewares) {\n const index = this.middlewares.indexOf(middleware)\n if (index >= 0) {\n this.middlewares.splice(index, 1)\n }\n }\n }\n\n addMiddleWare(\n handler: IMiddlewareHandler,\n includeHooks: boolean = true\n ): IDisposer {\n const middleware = { handler, includeHooks }\n if (!this.middlewares) {\n this.middlewares = [middleware]\n } else {\n this.middlewares.push(middleware)\n }\n\n return () => {\n this.removeMiddleware(middleware)\n }\n }\n\n applyPatchLocally(subpath: string, patch: IJsonPatch): void {\n this.assertWritable({\n subpath\n })\n this.createObservableInstanceIfNeeded()\n this.type.applyPatchLocally(this, subpath, patch)\n }\n\n private _addSnapshotReaction(): void {\n if (!this._hasSnapshotReaction) {\n const snapshotDisposer = reaction(\n () => this.snapshot,\n snapshot => this.emitSnapshot(snapshot),\n snapshotReactionOptions\n )\n this.addDisposer(snapshotDisposer)\n this._hasSnapshotReaction = true\n }\n }\n\n // #region internal event handling\n\n private _internalEvents?: EventHandlers<InternalEventHandlers<S>>\n\n // we proxy the methods to avoid creating an EventHandlers instance when it is not needed\n\n private _internalEventsHasSubscribers(event: InternalEvents): boolean {\n return !!this._internalEvents && this._internalEvents.hasSubscribers(event)\n }\n\n private _internalEventsRegister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE],\n atTheBeginning = false\n ): IDisposer {\n if (!this._internalEvents) {\n this._internalEvents = new EventHandlers()\n }\n return this._internalEvents.register(event, eventHandler, atTheBeginning)\n }\n\n private _internalEventsHas<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): boolean {\n return (\n !!this._internalEvents && this._internalEvents.has(event, eventHandler)\n )\n }\n\n private _internalEventsUnregister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): void {\n if (this._internalEvents) {\n this._internalEvents.unregister(event, eventHandler)\n }\n }\n\n private _internalEventsEmit<IE extends InternalEvents>(\n event: IE,\n ...args: ArgumentTypes<InternalEventHandlers<S>[IE]>\n ): void {\n if (this._internalEvents) {\n this._internalEvents.emit(event, ...args)\n }\n }\n\n private _internalEventsClear(event: InternalEvents): void {\n if (this._internalEvents) {\n this._internalEvents.clear(event)\n }\n }\n\n private _internalEventsClearAll(): void {\n if (this._internalEvents) {\n this._internalEvents.clearAll()\n }\n }\n\n // #endregion\n}\nObjectNode.prototype.createObservableInstance = action(\n ObjectNode.prototype.createObservableInstance\n)\nObjectNode.prototype.detach = action(ObjectNode.prototype.detach)\nObjectNode.prototype.die = action(ObjectNode.prototype.die)\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyObjectNode = ObjectNode<any, any, any>\n\n/**\n * @internal\n * @hidden\n */\nexport interface AssertAliveContext {\n subpath?: string\n actionContext?: IMiddlewareEvent\n}\n","import { action } from \"mobx\"\n\nimport {\n BaseNode,\n assertArg,\n fail,\n getStateTreeNode,\n getStateTreeNodeSafe,\n getType,\n isMutable,\n isStateTreeNode,\n normalizeIdentifier,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n// Cache for validation results to avoid re-validating the same object against the same type\n// Uses WeakMap so cached objects can be garbage collected\nconst validationCache = new WeakMap<\n object,\n WeakMap<BaseType<any, any, any, any>, IValidationResult>\n>()\n\nimport type {\n AnyNode,\n AnyObjectNode,\n IChildNodesMap,\n IJsonPatch,\n IStateTreeNode,\n IValidationContext,\n IValidationResult,\n ModelPrimitive,\n ObjectNode,\n ScalarNode\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport enum TypeFlags {\n String = 1,\n Number = 1 << 1,\n Boolean = 1 << 2,\n Date = 1 << 3,\n Literal = 1 << 4,\n Array = 1 << 5,\n Map = 1 << 6,\n Object = 1 << 7,\n Frozen = 1 << 8,\n Optional = 1 << 9,\n Reference = 1 << 10,\n Identifier = 1 << 11,\n Late = 1 << 12,\n Refinement = 1 << 13,\n Union = 1 << 14,\n Null = 1 << 15,\n Undefined = 1 << 16,\n Integer = 1 << 17,\n Custom = 1 << 18,\n SnapshotProcessor = 1 << 19,\n Lazy = 1 << 20,\n Finite = 1 << 21,\n Float = 1 << 22\n}\n\n/**\n * @internal\n * @hidden\n */\nexport const cannotDetermineSubtype = \"cannotDetermine\"\n\n/**\n * A state tree node value.\n * @hidden\n */\nexport type STNValue<T, IT extends IAnyType> = T extends object\n ? T & IStateTreeNode<IT>\n : T\n\n/** @hidden */\nconst $type: unique symbol = Symbol(\"$type\")\n\n/**\n * A type, either complex or simple.\n */\nexport interface IType<C, S, T> {\n // fake, will never be present, just for typing\n /** @hidden */\n readonly [$type]: undefined\n\n /**\n * Friendly type name.\n */\n name: string\n\n /**\n * Name of the identifier attribute or null if none.\n */\n readonly identifierAttribute?: string\n\n /**\n * Creates an instance for the type given an snapshot input.\n *\n * @returns An instance of that type.\n */\n create(snapshot?: C, env?: any): this[\"Type\"]\n\n /**\n * Checks if a given snapshot / instance is of the given type.\n *\n * @param thing Snapshot or instance to be checked.\n * @returns true if the value is of the current type, false otherwise.\n */\n is(thing: any): thing is C | this[\"Type\"]\n\n /**\n * Run's the type's typechecker on the given value with the given validation context.\n *\n * @param thing Value to be checked, either a snapshot or an instance.\n * @param context Validation context, an array of { subpaths, subtypes } that should be validated\n * @returns The validation result, an array with the list of validation errors.\n */\n validate(thing: C, context: IValidationContext): IValidationResult\n\n /**\n * Gets the textual representation of the type as a string.\n */\n describe(): string\n\n /**\n * @deprecated use `Instance<typeof MyType>` instead.\n * @hidden\n */\n readonly Type: STNValue<T, this>\n\n /**\n * @deprecated do not use.\n * @hidden\n */\n readonly TypeWithoutSTN: T\n\n /**\n * @deprecated use `SnapshotOut<typeof MyType>` instead.\n * @hidden\n */\n readonly SnapshotType: S\n\n /**\n * @deprecated use `SnapshotIn<typeof MyType>` instead.\n * @hidden\n */\n readonly CreationType: C\n\n // Internal api's\n\n /**\n * @internal\n * @hidden\n */\n flags: TypeFlags\n /**\n * @internal\n * @hidden\n */\n isType: true\n /**\n * @internal\n * @hidden\n */\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n ): BaseNode<C, S, T>\n /**\n * @internal\n * @hidden\n */\n reconcile(\n current: BaseNode<C, S, T>,\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): BaseNode<C, S, T>\n /**\n * @internal\n * @hidden\n */\n getSnapshot(node: BaseNode<C, S, T>, applyPostProcess?: boolean): S\n /**\n * @internal\n * @hidden\n */\n isAssignableFrom(type: IAnyType): boolean\n /**\n * @internal\n * @hidden\n */\n getSubTypes(): IAnyType[] | IAnyType | null | typeof cannotDetermineSubtype\n}\n\n/**\n * Any kind of type.\n */\nexport interface IAnyType extends IType<any, any, any> {}\n\n/**\n * A simple type, this is, a type where the instance and the snapshot representation are the same.\n */\nexport interface ISimpleType<T> extends IType<T, T, T> {}\n\n/** @hidden */\nexport type Primitives = ModelPrimitive | null | undefined\n\n/**\n * A complex type.\n * @deprecated just for compatibility with old versions, could be deprecated on the next major version\n * @hidden\n */\nexport interface IComplexType<C, S, T> extends IType<C, S, T & object> {}\n\n/**\n * Any kind of complex type.\n */\nexport interface IAnyComplexType extends IType<any, any, object> {}\n\n/** @hidden */\nexport type ExtractCSTWithoutSTN<\n IT extends {\n [$type]: undefined\n CreationType: any\n SnapshotType: any\n TypeWithoutSTN: any\n }\n> = IT[\"CreationType\"] | IT[\"SnapshotType\"] | IT[\"TypeWithoutSTN\"]\n/** @hidden */\nexport type ExtractCSTWithSTN<\n IT extends {\n [$type]: undefined\n CreationType: any\n SnapshotType: any\n Type: any\n }\n> = IT[\"CreationType\"] | IT[\"SnapshotType\"] | IT[\"Type\"]\n\n/**\n * The instance representation of a given type.\n */\nexport type Instance<T> = T extends { [$type]: undefined; Type: any }\n ? T[\"Type\"]\n : T\n\n/**\n * The input (creation) snapshot representation of a given type.\n */\nexport type SnapshotIn<T> = T extends { [$type]: undefined; CreationType: any }\n ? T[\"CreationType\"]\n : T extends IStateTreeNode<infer IT>\n ? IT[\"CreationType\"]\n : T\n\n/**\n * The output snapshot representation of a given type.\n */\nexport type SnapshotOut<T> = T extends { [$type]: undefined; SnapshotType: any }\n ? T[\"SnapshotType\"]\n : T extends IStateTreeNode<infer IT>\n ? IT[\"SnapshotType\"]\n : T\n\n/**\n * A type which is equivalent to the union of SnapshotIn and Instance types of a given typeof TYPE or typeof VARIABLE.\n * For primitives it defaults to the primitive itself.\n *\n * For example:\n * - `SnapshotOrInstance<typeof ModelA> = SnapshotIn<typeof ModelA> | Instance<typeof ModelA>`\n * - `SnapshotOrInstance<typeof self.a (where self.a is a ModelA)> = SnapshotIn<typeof ModelA> | Instance<typeof ModelA>`\n *\n * Usually you might want to use this when your model has a setter action that sets a property.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * })\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * }).actions(self => ({\n * // this will accept as property both the snapshot and the instance, whichever is preferred\n * setInnerModel(m: SnapshotOrInstance<typeof self.innerModel>) {\n * self.innerModel = cast(m)\n * }\n * }))\n * ```\n */\nexport type SnapshotOrInstance<T> = SnapshotIn<T> | Instance<T>\n\n/**\n * A base type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nexport abstract class BaseType<\n C,\n S,\n T,\n N extends BaseNode<any, any, any> = BaseNode<C, S, T>\n> implements IType<C, S, T> {\n [$type]!: undefined\n\n // these are just to make inner types avaialable to inherited classes\n readonly C!: C\n readonly S!: S\n readonly T!: T\n readonly N!: N\n\n readonly isType = true\n readonly name: string\n\n constructor(name: string) {\n this.name = name\n }\n\n create(snapshot?: C, environment?: any) {\n typecheckInternal(this, snapshot)\n return this.instantiate(null, \"\", environment, snapshot!).value\n }\n\n getSnapshot(_node: N, _applyPostProcess?: boolean): S {\n // istanbul ignore next\n throw fail(\"unimplemented method\")\n }\n\n abstract reconcile(\n current: N,\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): N\n\n abstract instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n ): N\n\n declare abstract flags: TypeFlags\n abstract describe(): string\n\n abstract isValidSnapshot(\n value: C,\n context: IValidationContext\n ): IValidationResult\n\n isAssignableFrom(type: IAnyType): boolean {\n return type === this\n }\n\n validate(value: C | T, context: IValidationContext): IValidationResult {\n const node = getStateTreeNodeSafe(value)\n if (node) {\n const valueType = getType(value)\n return this.isAssignableFrom(valueType)\n ? typeCheckSuccess()\n : typeCheckFailure(context, value)\n // it is tempting to compare snapshots, but in that case we should always clone on assignments...\n }\n\n // check cache for object values (only at root level to avoid context mismatches)\n if (typeof value === \"object\" && value !== null && context.length === 1) {\n const typeCache = validationCache.get(value)\n if (typeCache) {\n const cached = typeCache.get(this)\n if (cached !== undefined) {\n return cached\n }\n }\n }\n\n const result = this.isValidSnapshot(value as C, context)\n\n // cache result for object values (only at root level)\n if (typeof value === \"object\" && value !== null && context.length === 1) {\n let typeCache = validationCache.get(value)\n if (!typeCache) {\n typeCache = new WeakMap()\n validationCache.set(value, typeCache)\n }\n typeCache.set(this, result)\n }\n\n return result\n }\n\n is(thing: any): thing is any {\n return this.validate(thing, [{ path: \"\", type: this }]).length === 0\n }\n\n get Type(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get TypeWithoutSTN(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get SnapshotType(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get CreationType(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n\n abstract getSubTypes():\n | IAnyType[]\n | IAnyType\n | null\n | typeof cannotDetermineSubtype\n}\nBaseType.prototype.create = action(BaseType.prototype.create)\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyBaseType = BaseType<any, any, any, any>\n\n/**\n * @internal\n * @hidden\n */\nexport type ExtractNodeType<IT extends IAnyType> =\n IT extends BaseType<any, any, any, infer N> ? N : never\n\n/**\n * A complex type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nexport abstract class ComplexType<C, S, T> extends BaseType<\n C,\n S,\n T,\n ObjectNode<C, S, T>\n> {\n identifierAttribute?: string\n\n constructor(name: string) {\n super(name)\n }\n\n create(snapshot: C = this.getDefaultSnapshot(), environment?: any) {\n return super.create(snapshot, environment)\n }\n\n getValue(node: this[\"N\"]): T {\n node.createObservableInstanceIfNeeded()\n return node.storedValue\n }\n\n abstract getDefaultSnapshot(): C\n\n abstract createNewInstance(childNodes: IChildNodesMap): T\n abstract finalizeNewInstance(node: this[\"N\"], instance: any): void\n\n abstract applySnapshot(node: this[\"N\"], snapshot: C): void\n abstract applyPatchLocally(\n node: this[\"N\"],\n subpath: string,\n patch: IJsonPatch\n ): void\n abstract processInitialSnapshot(childNodes: IChildNodesMap, snapshot: C): S\n\n abstract getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode>\n abstract getChildNode(node: this[\"N\"], key: string): AnyNode\n abstract getChildType(propertyName?: string): IAnyType\n abstract initializeChildNodes(node: this[\"N\"], snapshot: any): IChildNodesMap\n abstract removeChild(node: this[\"N\"], subpath: string): void\n\n isMatchingSnapshotId(current: this[\"N\"], snapshot: C): boolean {\n return (\n !current.identifierAttribute ||\n current.identifier ===\n normalizeIdentifier((snapshot as any)[current.identifierAttribute])\n )\n }\n\n private tryToReconcileNode(current: this[\"N\"], newValue: C | T) {\n if (current.isDetaching) {\n return false\n }\n if ((current.snapshot as any) === newValue) {\n // newValue is the current snapshot of the node, noop\n return true\n }\n if (isStateTreeNode(newValue) && getStateTreeNode(newValue) === current) {\n // the current node is the same as the new one\n return true\n }\n if (\n current.type === this &&\n isMutable(newValue) &&\n !isStateTreeNode(newValue) &&\n this.isMatchingSnapshotId(current, newValue as any)\n ) {\n // the newValue has no node, so can be treated like a snapshot\n // we can reconcile\n current.applySnapshot(newValue as C)\n return true\n }\n return false\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const nodeReconciled = this.tryToReconcileNode(current, newValue)\n if (nodeReconciled) {\n current.setParent(parent, subpath)\n return current\n }\n\n // current node cannot be recycled in any way\n current.die() // noop if detaching\n // attempt to reuse the new one\n if (isStateTreeNode(newValue) && this.isAssignableFrom(getType(newValue))) {\n // newValue is a Node as well, move it here..\n const newNode = getStateTreeNode(newValue)\n newNode.setParent(parent, subpath)\n return newNode\n }\n // nothing to do, we have to create a new node\n return this.instantiate(parent, subpath, undefined, newValue)\n }\n\n getSubTypes() {\n return null\n }\n}\nComplexType.prototype.create = action(ComplexType.prototype.create)\n\n/**\n * @internal\n * @hidden\n */\nexport abstract class SimpleType<C, S, T> extends BaseType<\n C,\n S,\n T,\n ScalarNode<C, S, T>\n> {\n abstract instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ): this[\"N\"]\n\n createNewInstance(snapshot: C): T {\n return snapshot as any\n }\n\n getValue(node: this[\"N\"]): T {\n // if we ever find a case where scalar nodes can be accessed without iterating through its parent\n // uncomment this to make sure the parent chain is created when this is accessed\n // if (node.parent) {\n // node.parent.createObservableInstanceIfNeeded()\n // }\n return node.storedValue\n }\n\n getSnapshot(node: this[\"N\"]): S {\n return node.storedValue\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: C,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n // reconcile only if type and value are still the same, and only if the node is not detaching\n if (\n !current.isDetaching &&\n current.type === this &&\n current.storedValue === newValue\n ) {\n return current\n }\n const res = this.instantiate(parent, subpath, undefined, newValue)\n current.die() // noop if detaching\n return res\n }\n\n getSubTypes() {\n return null\n }\n}\n\n/**\n * Returns if a given value represents a type.\n *\n * @param value Value to check.\n * @returns `true` if the value is a type.\n */\nexport function isType(value: any): value is IAnyType {\n return typeof value === \"object\" && value && value.isType === true\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsType(type: IAnyType, argNumber: number | number[]) {\n assertArg(type, isType, \"mobx-state-tree type\", argNumber)\n}\n","import { type IMiddlewareEvent, type IMiddlewareHandler } from \"../internal.ts\"\n\nconst runningActions = new Map<\n number,\n { async: boolean; call: IMiddlewareEvent; context: any }\n>()\n\nexport interface IActionTrackingMiddlewareHooks<T> {\n filter?: (call: IMiddlewareEvent) => boolean\n onStart: (call: IMiddlewareEvent) => T\n onResume: (call: IMiddlewareEvent, context: T) => void\n onSuspend: (call: IMiddlewareEvent, context: T) => void\n onSuccess: (call: IMiddlewareEvent, context: T, result: any) => void\n onFail: (call: IMiddlewareEvent, context: T, error: any) => void\n}\n\n/**\n * Note: Consider migrating to `createActionTrackingMiddleware2`, it is easier to use.\n *\n * Convenience utility to create action based middleware that supports async processes more easily.\n * All hooks are called for both synchronous and asynchronous actions. Except that either `onSuccess` or `onFail` is called\n *\n * The create middleware tracks the process of an action (assuming it passes the `filter`).\n * `onResume` can return any value, which will be passed as second argument to any other hook. This makes it possible to keep state during a process.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nexport function createActionTrackingMiddleware<T = any>(\n hooks: IActionTrackingMiddlewareHooks<T>\n): IMiddlewareHandler {\n return function actionTrackingMiddleware(\n call: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent) => any,\n _abort: (value: any) => any\n ) {\n switch (call.type) {\n case \"action\": {\n if (!hooks.filter || hooks.filter(call) === true) {\n const context = hooks.onStart(call)\n hooks.onResume(call, context)\n runningActions.set(call.id, {\n call,\n context,\n async: false\n })\n try {\n const res = next(call)\n hooks.onSuspend(call, context)\n if (runningActions.get(call.id)!.async === false) {\n runningActions.delete(call.id)\n hooks.onSuccess(call, context, res)\n }\n return res\n } catch (e) {\n runningActions.delete(call.id)\n hooks.onFail(call, context, e)\n throw e\n }\n } else {\n return next(call)\n }\n }\n case \"flow_spawn\": {\n const root = runningActions.get(call.rootId)!\n root.async = true\n return next(call)\n }\n case \"flow_resume\":\n case \"flow_resume_error\": {\n const root = runningActions.get(call.rootId)!\n hooks.onResume(call, root.context)\n try {\n return next(call)\n } finally {\n hooks.onSuspend(call, root.context)\n }\n }\n case \"flow_throw\": {\n const root = runningActions.get(call.rootId)!\n runningActions.delete(call.rootId)\n hooks.onFail(call, root.context, call.args[0])\n return next(call)\n }\n case \"flow_return\": {\n const root = runningActions.get(call.rootId)!\n runningActions.delete(call.rootId)\n hooks.onSuccess(call, root.context, call.args[0])\n return next(call)\n }\n }\n }\n}\n","import {\n type IActionContext,\n type IMiddlewareEvent,\n type IMiddlewareHandler\n} from \"../internal.ts\"\n\nexport interface IActionTrackingMiddleware2Call<\n TEnv\n> extends Readonly<IActionContext> {\n env: TEnv | undefined\n readonly parentCall?: IActionTrackingMiddleware2Call<TEnv>\n}\n\nexport interface IActionTrackingMiddleware2Hooks<TEnv> {\n filter?: (call: IActionTrackingMiddleware2Call<TEnv>) => boolean\n onStart: (call: IActionTrackingMiddleware2Call<TEnv>) => void\n onFinish: (call: IActionTrackingMiddleware2Call<TEnv>, error?: any) => void\n}\n\nclass RunningAction {\n private flowsPending = 0\n private running = true\n\n constructor(\n public readonly hooks: IActionTrackingMiddleware2Hooks<any> | undefined,\n readonly call: IActionTrackingMiddleware2Call<any>\n ) {\n if (hooks) {\n hooks.onStart(call)\n }\n }\n\n finish(error?: any) {\n if (this.running) {\n this.running = false\n if (this.hooks) {\n this.hooks.onFinish(this.call, error)\n }\n }\n }\n\n incFlowsPending() {\n this.flowsPending++\n }\n\n decFlowsPending() {\n this.flowsPending--\n }\n\n get hasFlowsPending() {\n return this.flowsPending > 0\n }\n}\n\n/**\n * Convenience utility to create action based middleware that supports async processes more easily.\n * The flow is like this:\n * - for each action: if filter passes -> `onStart` -> (inner actions recursively) -> `onFinish`\n *\n * Example: if we had an action `a` that called inside an action `b1`, then `b2` the flow would be:\n * - `filter(a)`\n * - `onStart(a)`\n * - `filter(b1)`\n * - `onStart(b1)`\n * - `onFinish(b1)`\n * - `filter(b2)`\n * - `onStart(b2)`\n * - `onFinish(b2)`\n * - `onFinish(a)`\n *\n * The flow is the same no matter if the actions are sync or async.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nexport function createActionTrackingMiddleware2<TEnv = any>(\n middlewareHooks: IActionTrackingMiddleware2Hooks<TEnv>\n): IMiddlewareHandler {\n const runningActions = new Map<number, RunningAction>()\n\n return function actionTrackingMiddleware(\n call: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent) => any\n ) {\n // find parentRunningAction\n const parentRunningAction = call.parentActionEvent\n ? runningActions.get(call.parentActionEvent.id)\n : undefined\n\n if (call.type === \"action\") {\n const newCall: IActionTrackingMiddleware2Call<TEnv> = {\n ...call,\n // make a shallow copy of the parent action env\n env: parentRunningAction && parentRunningAction.call.env,\n parentCall: parentRunningAction && parentRunningAction.call\n }\n\n const passesFilter =\n !middlewareHooks.filter || middlewareHooks.filter(newCall)\n const hooks = passesFilter ? middlewareHooks : undefined\n\n const runningAction = new RunningAction(hooks, newCall)\n runningActions.set(call.id, runningAction)\n\n let res\n try {\n res = next(call)\n } catch (e) {\n runningActions.delete(call.id)\n runningAction.finish(e)\n throw e\n }\n // sync action finished\n if (!runningAction.hasFlowsPending) {\n runningActions.delete(call.id)\n runningAction.finish()\n }\n return res\n } else {\n if (!parentRunningAction) {\n return next(call)\n }\n\n switch (call.type) {\n case \"flow_spawn\": {\n parentRunningAction.incFlowsPending()\n return next(call)\n }\n case \"flow_resume\":\n case \"flow_resume_error\": {\n return next(call)\n }\n case \"flow_throw\": {\n const error = call.args[0]\n try {\n return next(call)\n } finally {\n parentRunningAction.decFlowsPending()\n if (!parentRunningAction.hasFlowsPending) {\n runningActions.delete(call.parentActionEvent!.id)\n parentRunningAction.finish(error)\n }\n }\n }\n case \"flow_return\": {\n try {\n return next(call)\n } finally {\n parentRunningAction.decFlowsPending()\n if (!parentRunningAction.hasFlowsPending) {\n runningActions.delete(call.parentActionEvent!.id)\n parentRunningAction.finish()\n }\n }\n }\n }\n }\n }\n}\n","import { runInAction } from \"mobx\"\n\nimport {\n type AnyNode,\n type IActionContext,\n type IAnyStateTreeNode,\n type IDisposer,\n addMiddleware,\n applyPatch,\n applySnapshot,\n asArray,\n assertArg,\n assertIsStateTreeNode,\n devMode,\n fail,\n getRelativePathBetweenNodes,\n getRunningActionContext,\n getStateTreeNode,\n getType,\n isArray,\n isPlainObject,\n isPrimitive,\n isProtected,\n isRoot,\n isStateTreeNode,\n tryResolve,\n warnError\n} from \"../internal.ts\"\n\nexport interface ISerializedActionCall {\n name: string\n path?: string\n args?: any[]\n}\n\nexport interface IActionRecorder {\n actions: ReadonlyArray<ISerializedActionCall>\n readonly recording: boolean\n stop(): void\n resume(): void\n replay(target: IAnyStateTreeNode): void\n}\n\nfunction serializeArgument(\n node: AnyNode,\n actionName: string,\n index: number,\n arg: any\n): any {\n if (arg instanceof Date) {\n return { $MST_DATE: arg.getTime() }\n }\n if (isPrimitive(arg)) {\n return arg\n }\n // We should not serialize MST nodes, even if we can, because we don't know if the receiving party can handle a raw snapshot instead of an\n // MST type instance. So if one wants to serialize a MST node that was pass in, either explitly pass: 1: an id, 2: a (relative) path, 3: a snapshot\n if (isStateTreeNode(arg)) {\n return serializeTheUnserializable(`[MSTNode: ${getType(arg).name}]`)\n }\n if (typeof arg === \"function\") {\n return serializeTheUnserializable(`[function]`)\n }\n if (typeof arg === \"object\" && !isPlainObject(arg) && !isArray(arg)) {\n return serializeTheUnserializable(\n `[object ${\n (arg && (arg as any).constructor && (arg as any).constructor.name) ||\n \"Complex Object\"\n }]`\n )\n }\n try {\n // Check if serializable, cycle free etc...\n // MWE: there must be a better way....\n JSON.stringify(arg) // or throws\n return arg\n } catch (e) {\n return serializeTheUnserializable(\"\" + e)\n }\n}\n\nfunction deserializeArgument(adm: AnyNode, value: any): any {\n if (value && typeof value === \"object\" && \"$MST_DATE\" in value) {\n return new Date(value[\"$MST_DATE\"])\n }\n return value\n}\n\nfunction serializeTheUnserializable(baseType: string) {\n return {\n $MST_UNSERIALIZABLE: true,\n type: baseType\n }\n}\n\n/**\n * Applies an action or a series of actions in a single MobX transaction.\n * Does not return any value\n * Takes an action description as produced by the `onAction` middleware.\n *\n * @param target\n * @param actions\n */\nexport function applyAction(\n target: IAnyStateTreeNode,\n actions: ISerializedActionCall | ISerializedActionCall[]\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertArg(actions, a => typeof a === \"object\", \"object or array\", 2)\n\n runInAction(() => {\n asArray(actions).forEach(action => baseApplyAction(target, action))\n })\n}\n\nfunction baseApplyAction(\n target: IAnyStateTreeNode,\n action: ISerializedActionCall\n): any {\n const resolvedTarget = tryResolve(target, action.path || \"\")\n if (!resolvedTarget) {\n throw fail(`Invalid action path: ${action.path || \"\"}`)\n }\n const node = getStateTreeNode(resolvedTarget)\n\n // Reserved functions\n if (action.name === \"@APPLY_PATCHES\") {\n return applyPatch.call(null, resolvedTarget, action.args![0])\n }\n if (action.name === \"@APPLY_SNAPSHOT\") {\n return applySnapshot.call(null, resolvedTarget, action.args![0])\n }\n\n if (!(typeof resolvedTarget[action.name] === \"function\")) {\n throw fail(`Action '${action.name}' does not exist in '${node.path}'`)\n }\n return resolvedTarget[action.name](\n ...(action.args ? action.args.map(v => deserializeArgument(node, v)) : [])\n )\n}\n\n/**\n * Small abstraction around `onAction` and `applyAction`, attaches an action listener to a tree and records all the actions emitted.\n * Returns an recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IActionRecorder {\n * // the recorded actions\n * actions: ISerializedActionCall[]\n * // true if currently recording\n * recording: boolean\n * // stop recording actions\n * stop(): void\n * // resume recording actions\n * resume(): void\n * // apply all the recorded actions on the given object\n * replay(target: IAnyStateTreeNode): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain actions.\n *\n * @param subject\n * @returns\n */\nexport function recordActions(\n subject: IAnyStateTreeNode,\n filter?: (\n action: ISerializedActionCall,\n actionContext: IActionContext | undefined\n ) => boolean\n): IActionRecorder {\n // check all arguments\n assertIsStateTreeNode(subject, 1)\n\n const actions: ISerializedActionCall[] = []\n const listener = (call: ISerializedActionCall) => {\n const recordThis = filter ? filter(call, getRunningActionContext()) : true\n if (recordThis) {\n actions.push(call)\n }\n }\n\n let disposer: IDisposer | undefined\n const recorder: IActionRecorder = {\n actions,\n get recording() {\n return !!disposer\n },\n stop() {\n if (disposer) {\n disposer()\n disposer = undefined\n }\n },\n resume() {\n if (disposer) {\n return\n }\n disposer = onAction(subject, listener)\n },\n replay(target) {\n applyAction(target, actions)\n }\n }\n\n recorder.resume()\n return recorder\n}\n\n/**\n * Registers a function that will be invoked for each action that is called on the provided model instance, or to any of its children.\n * See [actions](https://github.com/mobxjs/mobx-state-tree#actions) for more details. onAction events are emitted only for the outermost called action in the stack.\n * Action can also be intercepted by middleware using addMiddleware to change the function call before it will be run.\n *\n * Not all action arguments might be serializable. For unserializable arguments, a struct like `{ $MST_UNSERIALIZABLE: true, type: \"someType\" }` will be generated.\n * MST Nodes are considered non-serializable as well (they could be serialized as there snapshot, but it is uncertain whether an replaying party will be able to handle such a non-instantiated snapshot).\n * Rather, when using `onAction` middleware, one should consider in passing arguments which are 1: an id, 2: a (relative) path, or 3: a snapshot. Instead of a real MST node.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.array(Todo)\n * }).actions(self => ({\n * add(todo) {\n * self.todos.push(todo);\n * }\n * }))\n *\n * const s = TodoStore.create({ todos: [] })\n *\n * let disposer = onAction(s, (call) => {\n * console.log(call);\n * })\n *\n * s.add({ task: \"Grab a coffee\" })\n * // Logs: { name: \"add\", path: \"\", args: [{ task: \"Grab a coffee\" }] }\n * ```\n *\n * @param target\n * @param listener\n * @param attachAfter (default false) fires the listener *after* the action has executed instead of before.\n * @returns\n */\nexport function onAction(\n target: IAnyStateTreeNode,\n listener: (call: ISerializedActionCall) => void,\n attachAfter = false\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n if (devMode()) {\n if (!isRoot(target)) {\n warnError(\n \"Warning: Attaching onAction listeners to non root nodes is dangerous: No events will be emitted for actions initiated higher up in the tree.\"\n )\n }\n if (!isProtected(target)) {\n warnError(\n \"Warning: Attaching onAction listeners to non protected nodes is dangerous: No events will be emitted for direct modifications without action.\"\n )\n }\n }\n\n return addMiddleware(target, function handler(rawCall, next) {\n if (rawCall.type === \"action\" && rawCall.id === rawCall.rootId) {\n const sourceNode = getStateTreeNode(rawCall.context)\n const info = {\n name: rawCall.name,\n path: getRelativePathBetweenNodes(getStateTreeNode(target), sourceNode),\n args: rawCall.args.map((arg: any, index: number) =>\n serializeArgument(sourceNode, rawCall.name, index, arg)\n )\n }\n if (attachAfter) {\n const res = next(rawCall)\n listener(info)\n return res\n } else {\n listener(info)\n return next(rawCall)\n }\n } else {\n return next(rawCall)\n }\n })\n}\n","import { action as mobxAction } from \"mobx\"\n\nimport {\n Hook,\n devMode,\n fail,\n getRoot,\n getStateTreeNode,\n warnError\n} from \"../internal.ts\"\n\nimport type {\n AnyObjectNode,\n IActionContext,\n IAnyStateTreeNode,\n IDisposer\n} from \"../internal.ts\"\n\nexport type IMiddlewareEventType =\n | \"action\"\n | \"flow_spawn\"\n | \"flow_resume\"\n | \"flow_resume_error\"\n | \"flow_return\"\n | \"flow_throw\"\n// | \"task_spawn TODO, see #273\"\n\nexport interface IMiddlewareEvent extends IActionContext {\n /** Event type */\n readonly type: IMiddlewareEventType\n\n /** Parent event unique id */\n readonly parentId: number\n /** Parent event object */\n readonly parentEvent: IMiddlewareEvent | undefined\n\n /** Root event unique id */\n readonly rootId: number\n /** Id of all events, from root until current (excluding current) */\n readonly allParentIds: number[]\n}\n\nexport interface FunctionWithFlag extends Function {\n _isMSTAction?: boolean\n _isFlowAction?: boolean\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type IMiddleware = {\n handler: IMiddlewareHandler\n includeHooks: boolean\n}\n\nexport type IMiddlewareHandler = (\n actionCall: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent, callback?: (value: any) => any) => void,\n abort: (value: any) => void\n) => any\n\nlet nextActionId = 1\nlet currentActionContext: IMiddlewareEvent | undefined\n\n/**\n * @internal\n * @hidden\n */\nexport function getCurrentActionContext() {\n return currentActionContext\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getNextActionId() {\n return nextActionId++\n}\n\n// TODO: optimize away entire action context if there is no middleware in tree?\n/**\n * @internal\n * @hidden\n */\nexport function runWithActionContext(context: IMiddlewareEvent, fn: Function) {\n const node = getStateTreeNode(context.context)\n\n if (context.type === \"action\") {\n node.assertAlive({\n actionContext: context\n })\n }\n\n const baseIsRunningAction = node._isRunningAction\n node._isRunningAction = true\n const previousContext = currentActionContext\n currentActionContext = context\n try {\n return runMiddleWares(node, context, fn)\n } finally {\n currentActionContext = previousContext\n node._isRunningAction = baseIsRunningAction\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getParentActionContext(\n parentContext: IMiddlewareEvent | undefined\n) {\n if (!parentContext) {\n return undefined\n }\n if (parentContext.type === \"action\") {\n return parentContext\n }\n return parentContext.parentActionEvent\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createActionInvoker<T extends FunctionWithFlag>(\n target: IAnyStateTreeNode,\n name: string,\n fn: T\n) {\n const res = function (...args: any[]) {\n const id = getNextActionId()\n const parentContext = currentActionContext\n const parentActionContext = getParentActionContext(parentContext)\n\n return runWithActionContext(\n {\n type: \"action\",\n name,\n id,\n args,\n context: target,\n tree: getRoot(target),\n rootId: parentContext ? parentContext.rootId : id,\n parentId: parentContext ? parentContext.id : 0,\n allParentIds: parentContext\n ? [...parentContext.allParentIds, parentContext.id]\n : [],\n parentEvent: parentContext,\n parentActionEvent: parentActionContext\n },\n fn\n )\n }\n ;(res as FunctionWithFlag)._isMSTAction = true\n ;(res as FunctionWithFlag)._isFlowAction = fn._isFlowAction\n return res\n}\n\n/**\n * Middleware can be used to intercept any action is invoked on the subtree where it is attached.\n * If a tree is protected (by default), this means that any mutation of the tree will pass through your middleware.\n *\n * For more details, see the [middleware docs](concepts/middleware.md)\n *\n * @param target Node to apply the middleware to.\n * @param middleware Middleware to apply.\n * @returns A callable function to dispose the middleware.\n */\nexport function addMiddleware(\n target: IAnyStateTreeNode,\n handler: IMiddlewareHandler,\n includeHooks: boolean = true\n): IDisposer {\n const node = getStateTreeNode(target)\n if (devMode()) {\n if (!node.isProtectionEnabled) {\n warnError(\n \"It is recommended to protect the state tree before attaching action middleware, as otherwise it cannot be guaranteed that all changes are passed through middleware. See `protect`\"\n )\n }\n }\n return node.addMiddleWare(handler, includeHooks)\n}\n\n/**\n * Binds middleware to a specific action.\n *\n * Example:\n * ```ts\n * type.actions(self => {\n * function takeA____() {\n * self.toilet.donate()\n * self.wipe()\n * self.wipe()\n * self.toilet.flush()\n * }\n * return {\n * takeA____: decorate(atomic, takeA____)\n * }\n * })\n * ```\n *\n * @param handler\n * @param fn\n * @param includeHooks\n * @returns The original function\n */\nexport function decorate<T extends Function>(\n handler: IMiddlewareHandler,\n fn: T,\n includeHooks = true\n): T {\n const middleware: IMiddleware = { handler, includeHooks }\n ;(fn as any).$mst_middleware = (fn as any).$mst_middleware || []\n ;(fn as any).$mst_middleware.push(middleware)\n return fn\n}\n\nclass CollectedMiddlewares {\n private arrayIndex = 0\n private inArrayIndex = 0\n private middlewares: IMiddleware[][] = []\n\n constructor(node: AnyObjectNode, fn: Function) {\n // we just push middleware arrays into an array of arrays to avoid making copies\n if ((fn as any).$mst_middleware) {\n this.middlewares.push((fn as any).$mst_middleware)\n }\n let n: AnyObjectNode | null = node\n // Find all middlewares. Optimization: cache this?\n while (n) {\n if (n.middlewares) {\n this.middlewares.push(n.middlewares)\n }\n n = n.parent\n }\n }\n\n get isEmpty() {\n return this.middlewares.length <= 0\n }\n\n getNextMiddleware(): IMiddleware | undefined {\n const array = this.middlewares[this.arrayIndex]\n if (!array) {\n return undefined\n }\n const item = array[this.inArrayIndex++]\n if (!item) {\n this.arrayIndex++\n this.inArrayIndex = 0\n return this.getNextMiddleware()\n }\n return item\n }\n}\n\nfunction runMiddleWares(\n node: AnyObjectNode,\n baseCall: IMiddlewareEvent,\n originalFn: Function\n): any {\n const middlewares = new CollectedMiddlewares(node, originalFn)\n // Short circuit\n if (middlewares.isEmpty) {\n return mobxAction(originalFn)(...baseCall.args)\n }\n\n let result: any = null\n\n function runNextMiddleware(call: IMiddlewareEvent): any {\n const middleware = middlewares.getNextMiddleware()\n const handler = middleware && middleware.handler\n\n if (!handler) {\n return mobxAction(originalFn)(...call.args)\n }\n\n // skip hooks if asked to\n if (!middleware!.includeHooks && (Hook as any)[call.name]) {\n return runNextMiddleware(call)\n }\n\n let nextInvoked = false\n function next(\n call2: IMiddlewareEvent,\n callback?: (value: any) => any\n ): void {\n nextInvoked = true\n // the result can contain\n // - the non manipulated return value from an action\n // - the non manipulated abort value\n // - one of the above but manipulated through the callback function\n result = runNextMiddleware(call2)\n if (callback) {\n result = callback(result)\n }\n }\n\n let abortInvoked = false\n function abort(value: any) {\n abortInvoked = true\n // overwrite the result\n // can be manipulated through middlewares earlier in the queue using the callback fn\n result = value\n }\n\n handler(call, next, abort)\n if (devMode()) {\n if (!nextInvoked && !abortInvoked) {\n const node2 = getStateTreeNode(call.tree)\n throw fail(\n `Neither the next() nor the abort() callback within the middleware ${handler.name} for the action: \"${call.name}\" on the node: ${node2.type.name} was invoked.`\n )\n } else if (nextInvoked && abortInvoked) {\n const node2 = getStateTreeNode(call.tree)\n throw fail(\n `The next() and abort() callback within the middleware ${handler.name} for the action: \"${call.name}\" on the node: ${node2.type.name} were invoked.`\n )\n }\n }\n return result\n }\n return runNextMiddleware(baseCall)\n}\n","import { type IAnyStateTreeNode, type IMiddlewareEvent } from \"../internal.ts\"\nimport { getCurrentActionContext } from \"./action.ts\"\n\nexport interface IActionContext {\n /** Event name (action name for actions) */\n readonly name: string\n\n /** Event unique id */\n readonly id: number\n\n /** Parent action event object */\n readonly parentActionEvent: IMiddlewareEvent | undefined\n\n /** Event context (node where the action was invoked) */\n readonly context: IAnyStateTreeNode\n /** Event tree (root node of the node where the action was invoked) */\n readonly tree: IAnyStateTreeNode\n\n /** Event arguments in an array (action arguments for actions) */\n readonly args: any[]\n}\n\n/**\n * Returns the currently executing MST action context, or undefined if none.\n */\nexport function getRunningActionContext(): IActionContext | undefined {\n let current = getCurrentActionContext()\n while (current && current.type !== \"action\") {\n current = current.parentActionEvent\n }\n return current\n}\n\nfunction _isActionContextThisOrChildOf(\n actionContext: IActionContext,\n sameOrParent: number | IActionContext | IMiddlewareEvent,\n includeSame: boolean\n) {\n const parentId =\n typeof sameOrParent === \"number\" ? sameOrParent : sameOrParent.id\n\n let current: IActionContext | IMiddlewareEvent | undefined = includeSame\n ? actionContext\n : actionContext.parentActionEvent\n while (current) {\n if (current.id === parentId) {\n return true\n }\n current = current.parentActionEvent\n }\n return false\n}\n\n/**\n * Returns if the given action context is a parent of this action context.\n */\nexport function isActionContextChildOf(\n actionContext: IActionContext,\n parent: number | IActionContext | IMiddlewareEvent\n) {\n return _isActionContextThisOrChildOf(actionContext, parent, false)\n}\n\n/**\n * Returns if the given action context is this or a parent of this action context.\n */\nexport function isActionContextThisOrChildOf(\n actionContext: IActionContext,\n parentOrThis: number | IActionContext | IMiddlewareEvent\n) {\n return _isActionContextThisOrChildOf(actionContext, parentOrThis, true)\n}\n","import {\n EMPTY_ARRAY,\n type ExtractCSTWithSTN,\n type IAnyType,\n fail,\n getStateTreeNode,\n isPrimitive,\n isPrimitiveType,\n isStateTreeNode,\n isTypeCheckingEnabled\n} from \"../../internal.ts\"\n\n/** Validation context entry, this is, where the validation should run against which type */\nexport interface IValidationContextEntry {\n /** Subpath where the validation should be run, or an empty string to validate it all */\n path: string\n /** Type to validate the subpath against */\n type: IAnyType\n}\n\n/** Array of validation context entries */\nexport type IValidationContext = IValidationContextEntry[]\n\n/** Type validation error */\nexport interface IValidationError {\n /** Validation context */\n context: IValidationContext\n /** Value that was being validated, either a snapshot or an instance */\n value: any\n /** Error message */\n message?: string\n}\n\n/** Type validation result, which is an array of type validation errors */\nexport type IValidationResult = IValidationError[]\n\nconst MAX_STRINGIFY_DEPTH = 3\n\nfunction safeStringify(value: any) {\n try {\n const ancestors: any[] = []\n return JSON.stringify(value, function (_key, val) {\n if (val !== null && typeof val === \"object\") {\n while (\n ancestors.length > 0 &&\n ancestors[ancestors.length - 1] !== this\n ) {\n ancestors.pop()\n }\n if (ancestors.length >= MAX_STRINGIFY_DEPTH) {\n return Array.isArray(val) ? \"[…]\" : \"{…}\"\n }\n ancestors.push(val)\n }\n return val\n })\n } catch (e) {\n // istanbul ignore next\n return `<Unserializable: ${e}>`\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function prettyPrintValue(value: any) {\n return typeof value === \"function\"\n ? `<function${value.name ? \" \" + value.name : \"\"}>`\n : isStateTreeNode(value)\n ? `<${value}>`\n : `\\`${safeStringify(value)}\\``\n}\n\nfunction shortenPrintValue(valueInString: string) {\n return valueInString.length < 280\n ? valueInString\n : `${valueInString.substring(0, 272)}......${valueInString.substring(valueInString.length - 8)}`\n}\n\nfunction toErrorString(error: IValidationError): string {\n const { value } = error\n const type = error.context[error.context.length - 1].type!\n const fullPath = error.context\n .map(({ path }) => path)\n .filter(path => path.length > 0)\n .join(\"/\")\n\n const pathPrefix = fullPath.length > 0 ? `at path \"/${fullPath}\" ` : ``\n\n const currentTypename = isStateTreeNode(value)\n ? `value of type ${getStateTreeNode(value).type.name}:`\n : isPrimitive(value)\n ? \"value\"\n : \"snapshot\"\n const isSnapshotCompatible =\n type && isStateTreeNode(value) && type.is(getStateTreeNode(value).snapshot)\n\n return (\n `${pathPrefix}${currentTypename} ${shortenPrintValue(prettyPrintValue(value))} is not assignable ${\n type ? `to type: \\`${type.name}\\`` : ``\n }` +\n (error.message ? ` (${error.message})` : \"\") +\n (type\n ? isPrimitiveType(type) || isPrimitive(value)\n ? `.`\n : `, expected an instance of \\`${(type as IAnyType).name}\\` or a snapshot like \\`${shortenPrintValue(\n (type as IAnyType).describe()\n )}\\` instead.` +\n (isSnapshotCompatible\n ? \" (Note that a snapshot of the provided value is compatible with the targeted type)\"\n : \"\")\n : `.`)\n )\n}\n\n/**\n * @internal\n * @hidden\n * Pushes a new entry onto the context array (mutates in place for performance).\n * Returns the same context array for chaining.\n */\nexport function getContextForPath(\n context: IValidationContext,\n path: string,\n type: IAnyType\n): IValidationContext {\n context.push({ path, type })\n return context\n}\n\n/**\n * @internal\n * @hidden\n * Pops the last entry from the context array (mutates in place).\n * Must be called after validation to restore context state.\n */\nexport function popContext(context: IValidationContext): void {\n context.pop()\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function typeCheckSuccess(): IValidationResult {\n return EMPTY_ARRAY as any\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function typeCheckFailure(\n context: IValidationContext,\n value: any,\n message?: string\n): IValidationResult {\n // Clone context since it may be mutated after this error is created\n return [{ context: context.slice(), value, message }]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function flattenTypeErrors(\n errors: IValidationResult[]\n): IValidationResult {\n return errors.flat()\n}\n\n// TODO; doublecheck: typecheck should only needed to be invoked from: type.create and array / map / value.property will change\n/**\n * @internal\n * @hidden\n */\nexport function typecheckInternal<IT extends IAnyType>(\n type: IAnyType,\n value: ExtractCSTWithSTN<IT>\n): void {\n // runs typeChecking if it is in dev-mode or through a process.env.ENABLE_TYPE_CHECK flag\n if (isTypeCheckingEnabled()) {\n typecheck(type, value)\n }\n}\n\n/**\n * Run's the typechecker for the given type on the given value, which can be a snapshot or an instance.\n * Throws if the given value is not according the provided type specification.\n * Use this if you need typechecks even in a production build (by default all automatic runtime type checks will be skipped in production builds)\n *\n * @param type Type to check against.\n * @param value Value to be checked, either a snapshot or an instance.\n */\nexport function typecheck<IT extends IAnyType>(\n type: IT,\n value: ExtractCSTWithSTN<IT>\n): void {\n const errors = type.validate(value, [{ path: \"\", type }])\n\n if (errors.length > 0) {\n throw fail(validationErrorsToString(type, value, errors))\n }\n}\n\nconst MAX_ERRORS_REPORTED = 10\n\nfunction validationErrorsToString<IT extends IAnyType>(\n type: IT,\n value: ExtractCSTWithSTN<IT>,\n errors: IValidationError[]\n): string | undefined {\n if (errors.length === 0) {\n return undefined\n }\n\n const shown = errors.slice(0, MAX_ERRORS_REPORTED).map(toErrorString)\n const overflow = errors.length - shown.length\n if (overflow > 0) {\n shown.push(`(… and ${overflow} more error${overflow === 1 ? \"\" : \"s\"})`)\n }\n\n return (\n `Error while converting ${shortenPrintValue(prettyPrintValue(value))} to \\`${\n type.name\n }\\`:\\n\\n ` + shown.join(\"\\n \")\n )\n}\n","import { type IObservableArray, entries, observable, values } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n type IAnyComplexType,\n ObjectNode,\n fail,\n mobxShallow\n} from \"../../internal.ts\"\n\nlet identifierCacheId = 0\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierCache {\n private cacheId = identifierCacheId++\n\n // n.b. in cache all identifiers are normalized to strings\n private cache = observable.map<string, IObservableArray<AnyObjectNode>>()\n\n // last time the cache (array) for a given time changed\n // n.b. it is not really the time, but just an integer that gets increased after each modification to the array\n private lastCacheModificationPerId = observable.map<string, number>()\n\n constructor() {}\n\n private updateLastCacheModificationPerId(identifier: string) {\n const lcm = this.lastCacheModificationPerId.get(identifier)\n // we start at 1 since 0 means no update since cache creation\n this.lastCacheModificationPerId.set(\n identifier,\n lcm === undefined ? 1 : lcm + 1\n )\n }\n\n getLastCacheModificationPerId(identifier: string): string {\n const modificationId = this.lastCacheModificationPerId.get(identifier) || 0\n return `${this.cacheId}-${modificationId}`\n }\n\n addNodeToCache(node: AnyObjectNode, lastCacheUpdate = true): void {\n if (node.identifierAttribute) {\n const identifier = node.identifier!\n if (!this.cache.has(identifier)) {\n this.cache.set(\n identifier,\n observable.array<AnyObjectNode>([], mobxShallow)\n )\n }\n const set = this.cache.get(identifier)!\n if (set.indexOf(node) !== -1) {\n throw fail(`Already registered`)\n }\n set.push(node)\n if (lastCacheUpdate) {\n this.updateLastCacheModificationPerId(identifier)\n }\n }\n }\n\n mergeCache(node: AnyObjectNode) {\n values(node.identifierCache!.cache).forEach(nodes =>\n nodes.forEach(child => {\n this.addNodeToCache(child)\n })\n )\n }\n\n notifyDied(node: AnyObjectNode) {\n if (node.identifierAttribute) {\n const id = node.identifier!\n const set = this.cache.get(id)\n if (set) {\n set.remove(node)\n // remove empty sets from cache\n if (!set.length) {\n this.cache.delete(id)\n }\n this.updateLastCacheModificationPerId(node.identifier!)\n }\n }\n }\n\n splitCache(splitNode: AnyObjectNode): IdentifierCache {\n const newCache = new IdentifierCache()\n // The slash is added here so we only match children of the splitNode. In version 5.1.8 and\n // earlier there was no trailing slash, so non children that started with the same path string\n // were being matched incorrectly.\n const basePath = splitNode.path + \"/\"\n entries(this.cache).forEach(([id, nodes]) => {\n let modified = false\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]\n if (node === splitNode || node.path.indexOf(basePath) === 0) {\n newCache.addNodeToCache(node, false) // no need to update lastUpdated since it is a whole new cache\n nodes.splice(i, 1)\n // remove empty sets from cache\n if (!nodes.length) {\n this.cache.delete(id)\n }\n modified = true\n }\n }\n if (modified) {\n this.updateLastCacheModificationPerId(id)\n }\n })\n return newCache\n }\n\n has(type: IAnyComplexType, identifier: string): boolean {\n const set = this.cache.get(identifier)\n if (!set) {\n return false\n }\n return set.some(candidate => type.isAssignableFrom(candidate.type))\n }\n\n resolve<IT extends IAnyComplexType>(\n type: IT,\n identifier: string\n ): ObjectNode<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n > | null {\n const set = this.cache.get(identifier)\n if (!set) {\n return null\n }\n const matches = set.filter(candidate =>\n type.isAssignableFrom(candidate.type)\n )\n switch (matches.length) {\n case 0:\n return null\n case 1:\n return matches[0]\n default:\n throw fail(\n `Cannot resolve a reference to type '${\n type.name\n }' with id: '${identifier}' unambigously, there are multiple candidates: ${matches\n .map(n => n.path)\n .join(\", \")}`\n )\n }\n }\n}\n","import {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n ObjectNode,\n ScalarNode,\n SimpleType,\n fail,\n getStateTreeNodeSafe\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport function createObjectNode<C, S, T>(\n type: ComplexType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n): ObjectNode<C, S, T> {\n const existingNode = getStateTreeNodeSafe(initialValue)\n if (existingNode) {\n if (existingNode.parent) {\n // istanbul ignore next\n throw fail(\n `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 '${\n parent ? parent.path : \"\"\n }/${subpath}', but it lives already at '${existingNode.path}'`\n )\n }\n\n if (parent) {\n existingNode.setParent(parent, subpath)\n }\n // else it already has no parent since it is a pre-requisite\n\n return existingNode\n }\n\n // not a node, a snapshot\n return new ObjectNode(type, parent, subpath, environment, initialValue as C)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createScalarNode<C, S, T>(\n type: SimpleType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n): ScalarNode<C, S, T> {\n return new ScalarNode(type, parent, subpath, environment, initialValue)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isNode(value: any): value is AnyNode {\n return value instanceof ScalarNode || value instanceof ObjectNode\n}\n","import {\n EMPTY_ARRAY,\n ObjectNode,\n ScalarNode,\n assertArg,\n fail,\n joinJsonPath,\n splitJsonPath\n} from \"../../internal.ts\"\n\nimport type {\n AnyNode,\n AnyObjectNode,\n IAnyComplexType,\n IAnyType,\n IChildNodesMap,\n IType,\n Instance,\n STNValue\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport enum NodeLifeCycle {\n INITIALIZING, // setting up\n CREATED, // afterCreate has run\n FINALIZED, // afterAttach has run\n DETACHING, // being detached from the tree\n DEAD // no coming back from this one\n}\n\n/** @hidden */\ndeclare const $stateTreeNodeType: unique symbol\n\n/**\n * Common interface that represents a node instance.\n * @hidden\n */\nexport interface IStateTreeNode<IT extends IAnyType = IAnyType> {\n /**\n * @internal\n */\n readonly $treenode?: any\n\n // fake, will never be present, just for typing\n // we use this weird trick to solve an issue with reference types\n readonly [$stateTreeNodeType]?: [IT] | [any]\n}\n\n/** @hidden */\nexport type TypeOfValue<T extends IAnyStateTreeNode> =\n T extends IStateTreeNode<infer IT> ? IT : never\n\n/**\n * Represents any state tree node instance.\n * @hidden\n */\nexport interface IAnyStateTreeNode extends STNValue<any, IAnyType> {}\n\n/**\n * Returns true if the given value is a node in a state tree.\n * More precisely, that is, if the value is an instance of a\n * `types.model`, `types.array` or `types.map`.\n *\n * @param value\n * @returns true if the value is a state tree node.\n */\nexport function isStateTreeNode<IT extends IAnyComplexType = IAnyComplexType>(\n value: any\n): value is STNValue<Instance<IT>, IT> {\n return !!(value && value.$treenode)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsStateTreeNode(\n value: IAnyStateTreeNode,\n argNumber: number | number[]\n): void {\n assertArg(value, isStateTreeNode, \"mobx-state-tree node\", argNumber)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getStateTreeNode(value: IAnyStateTreeNode): AnyObjectNode {\n if (!isStateTreeNode(value)) {\n // istanbul ignore next\n throw fail(`Value ${value} is no MST Node`)\n }\n return value.$treenode!\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getStateTreeNodeSafe(\n value: IAnyStateTreeNode\n): AnyObjectNode | null {\n return (value && value.$treenode) || null\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function toJSON<S>(this: IStateTreeNode<IType<any, S, any>>): S {\n return getStateTreeNode(this).snapshot\n}\n\nconst doubleDot = (_: any) => \"..\"\n\n/**\n * @internal\n * @hidden\n */\nexport function getRelativePathBetweenNodes(\n base: AnyObjectNode,\n target: AnyObjectNode\n): string {\n // PRE condition target is (a child of) base!\n if (base.root !== target.root) {\n throw fail(\n `Cannot calculate relative path: objects '${base}' and '${target}' are not part of the same object tree`\n )\n }\n\n const baseParts = splitJsonPath(base.path)\n const targetParts = splitJsonPath(target.path)\n let common = 0\n for (; common < baseParts.length; common++) {\n if (baseParts[common] !== targetParts[common]) {\n break\n }\n }\n // TODO: assert that no targetParts paths are \"..\", \".\" or \"\"!\n return (\n baseParts.slice(common).map(doubleDot).join(\"/\") +\n joinJsonPath(targetParts.slice(common))\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function resolveNodeByPath(\n base: AnyObjectNode,\n path: string,\n failIfResolveFails: boolean = true\n): AnyNode | undefined {\n return resolveNodeByPathParts(base, splitJsonPath(path), failIfResolveFails)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function resolveNodeByPathParts(\n base: AnyObjectNode,\n pathParts: string[],\n failIfResolveFails: boolean = true\n): AnyNode | undefined {\n let current: AnyNode | null = base\n try {\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i]\n if (part === \"..\") {\n current = current!.parent\n if (current) {\n continue\n } // not everything has a parent\n } else if (part === \".\") {\n continue\n } else if (current) {\n if (current instanceof ScalarNode) {\n // check if the value of a scalar resolves to a state tree node (e.g. references)\n // then we can continue resolving...\n const value: any = current.value\n if (isStateTreeNode(value)) {\n current = getStateTreeNode(value)\n // fall through\n }\n }\n if (current instanceof ObjectNode) {\n const subType = current.getChildType(part)\n if (subType) {\n current = current.getChildNode(part)\n if (current) {\n continue\n }\n }\n }\n }\n throw fail(\n `Could not resolve '${part}' in path '${\n joinJsonPath(pathParts.slice(0, i)) || \"/\"\n }' while resolving '${joinJsonPath(pathParts)}'`\n )\n }\n } catch (e) {\n if (!failIfResolveFails) {\n return undefined\n }\n throw e\n }\n return current!\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function convertChildNodesToArray(\n childNodes: IChildNodesMap | null\n): AnyNode[] {\n if (!childNodes) {\n return EMPTY_ARRAY as AnyNode[]\n }\n\n const keys = Object.keys(childNodes)\n if (!keys.length) {\n return EMPTY_ARRAY as AnyNode[]\n }\n\n const result = new Array(keys.length) as AnyNode[]\n keys.forEach((key, index) => {\n result[index] = childNodes![key]\n })\n return result\n}\n","import { createFlowSpawner, deprecated, flow } from \"../internal.ts\"\n\n// based on: https://github.com/mobxjs/mobx-utils/blob/master/src/async-action.ts\n/*\n All contents of this file are deprecated.\n\n The term `process` has been replaced with `flow` to avoid conflicts with the\n global `process` object.\n\n Refer to `flow.ts` for any further changes to this implementation.\n*/\n\nconst DEPRECATION_MESSAGE =\n \"See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information. \" +\n \"Note that the middleware event types starting with `process` now start with `flow`.\"\n\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<R>(\n generator: () => IterableIterator<any>\n): () => Promise<R>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1>(\n generator: (a1: A1) => IterableIterator<any>\n): (a1: A1) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2>(\n generator: (a1: A1, a2: A2) => IterableIterator<any>\n): (a1: A1, a2: A2) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3>(\n generator: (a1: A1, a2: A2, a3: A3) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4>(\n generator: (a1: A1, a2: A2, a3: A3, a4: A4) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5>(\n generator: (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6\n ) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6, A7>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7\n ) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6, A7, A8>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7,\n a8: A8\n ) => IterableIterator<any>\n): (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7,\n a8: A8\n) => Promise<any>\n/**\n * @hidden\n *\n * @deprecated has been renamed to `flow()`.\n * See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information.\n * Note that the middleware event types starting with `process` now start with `flow`.\n *\n * @returns {Promise}\n */\nexport function process(asyncAction: any): any {\n deprecated(\n \"process\",\n \"`process()` has been renamed to `flow()`. \" + DEPRECATION_MESSAGE\n )\n return flow(asyncAction)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createProcessSpawner(name: string, generator: Function) {\n deprecated(\n \"process\",\n \"`createProcessSpawner()` has been renamed to `createFlowSpawner()`. \" +\n DEPRECATION_MESSAGE\n )\n return createFlowSpawner(name, generator)\n}\n","import {\n _getGlobalState,\n defineProperty as mobxDefineProperty,\n isObservableArray,\n isObservableObject\n} from \"mobx\"\n\nimport type { Primitives } from \"./core/type/type.ts\"\n\nconst plainObjectString = Object.toString()\n\n/**\n * @internal\n * @hidden\n */\nexport const EMPTY_ARRAY: ReadonlyArray<any> = Object.freeze([])\n\n/**\n * @internal\n * @hidden\n */\n\nexport const EMPTY_OBJECT: {} = Object.freeze({})\n\n/**\n * @internal\n * @hidden\n */\nexport const mobxShallow = _getGlobalState().useProxies\n ? { deep: false }\n : { deep: false, proxy: false }\nObject.freeze(mobxShallow)\n\n/**\n * A generic disposer.\n */\nexport type IDisposer = () => void\n\n/**\n * @internal\n * @hidden\n */\nexport function fail(message = \"Illegal state\"): Error {\n return new Error(\"[mobx-state-tree] \" + message)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function identity(_: any): any {\n return _\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function noop() {}\n\n/**\n * @internal\n * @hidden\n */\nexport const isInteger = Number.isInteger\n\n/**\n * @internal\n * @hidden\n */\nexport function isFloat(val: any) {\n return Number(val) === val && val % 1 !== 0\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isFinite(val: any) {\n return Number.isFinite(val)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isArray(val: any): val is any[] {\n return Array.isArray(val) || isObservableArray(val)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function asArray<T>(\n val: undefined | null | T | T[] | ReadonlyArray<T>\n): T[] {\n if (!val) {\n return EMPTY_ARRAY as any as T[]\n }\n if (isArray(val)) {\n return val as T[]\n }\n return [val] as T[]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B>(a: A, b: B): A & B\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B, C>(a: A, b: B, c: C): A & B & C\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D\n/**\n * @internal\n * @hidden\n */\nexport function extend(a: any, ...b: any[]): any\n/**\n * @internal\n * @hidden\n */\nexport function extend(a: any, ...b: any[]) {\n for (let i = 0; i < b.length; i++) {\n const current = b[i]\n for (const key in current) {\n a[key] = current[key]\n }\n }\n return a\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isPlainObject(value: any): value is { [k: string]: any } {\n if (value === null || typeof value !== \"object\") {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n if (proto == null) {\n return true\n }\n return proto.constructor?.toString() === plainObjectString\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isMutable(value: any) {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isPrimitive(\n value: any,\n includeDate = true\n): value is Primitives {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n (includeDate && value instanceof Date)\n )\n}\n\n/**\n * @internal\n * @hidden\n * Freeze a value and return it (if not in production)\n */\nexport function freeze<T>(value: T): T {\n if (!devMode()) {\n return value\n }\n return isPrimitive(value) || isObservableArray(value)\n ? value\n : Object.freeze(value)\n}\n\n/**\n * @internal\n * @hidden\n * Recursively freeze a value (if not in production)\n */\nexport function deepFreeze<T>(value: T): T {\n if (!devMode()) {\n return value\n }\n freeze(value)\n\n if (isPlainObject(value)) {\n Object.keys(value).forEach(propKey => {\n if (\n !isPrimitive((value as any)[propKey]) &&\n !Object.isFrozen((value as any)[propKey])\n ) {\n deepFreeze((value as any)[propKey])\n }\n })\n }\n\n return value\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isSerializable(value: any) {\n return typeof value !== \"function\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function defineProperty(\n object: any,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n) {\n if (isObservableObject(object)) {\n mobxDefineProperty(object, key, descriptor)\n } else {\n Object.defineProperty(object, key, descriptor)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function addHiddenFinalProp(object: any, propName: string, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: false,\n configurable: true,\n value\n })\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function addHiddenWritableProp(\n object: any,\n propName: string,\n value: any\n) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: true,\n configurable: true,\n value\n })\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type ArgumentTypes<F extends Function> = F extends (\n ...args: infer A\n) => any\n ? A\n : never\n\n/**\n * @internal\n * @hidden\n */\nclass EventHandler<F extends Function> {\n private handlers: F[] = []\n private emitting = false\n private pendingUnregisters: F[] | null = null\n\n get hasSubscribers(): boolean {\n return this.handlers.length > 0\n }\n\n register(fn: F, atTheBeginning = false): IDisposer {\n if (atTheBeginning) {\n this.handlers.unshift(fn)\n } else {\n this.handlers.push(fn)\n }\n return () => {\n this.unregister(fn)\n }\n }\n\n has(fn: F): boolean {\n return this.handlers.indexOf(fn) >= 0\n }\n\n unregister(fn: F) {\n if (this.emitting) {\n // defer unregistration until emit is done\n if (!this.pendingUnregisters) {\n this.pendingUnregisters = []\n }\n this.pendingUnregisters.push(fn)\n return\n }\n const index = this.handlers.indexOf(fn)\n if (index >= 0) {\n this.handlers.splice(index, 1)\n }\n }\n\n clear() {\n this.handlers.length = 0\n }\n\n emit(...args: ArgumentTypes<F>) {\n // use emitting flag to defer unregistrations instead of copying array\n this.emitting = true\n try {\n for (const f of this.handlers) {\n f(...args)\n }\n } finally {\n this.emitting = false\n // process any deferred unregistrations\n if (this.pendingUnregisters) {\n for (const fn of this.pendingUnregisters) {\n const index = this.handlers.indexOf(fn)\n if (index >= 0) {\n this.handlers.splice(index, 1)\n }\n }\n this.pendingUnregisters = null\n }\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class EventHandlers<E extends { [k: string]: Function }> {\n private eventHandlers?: { [k in keyof E]?: EventHandler<Function> }\n\n hasSubscribers(event: keyof E): boolean {\n const handler = this.eventHandlers && this.eventHandlers[event]\n return !!handler && handler!.hasSubscribers\n }\n\n register<N extends keyof E>(\n event: N,\n fn: E[N],\n atTheBeginning = false\n ): IDisposer {\n if (!this.eventHandlers) {\n this.eventHandlers = {}\n }\n let handler = this.eventHandlers[event]\n if (!handler) {\n handler = this.eventHandlers[event] = new EventHandler()\n }\n return handler.register(fn, atTheBeginning)\n }\n\n has<N extends keyof E>(event: N, fn: E[N]): boolean {\n const handler = this.eventHandlers && this.eventHandlers[event]\n return !!handler && handler!.has(fn)\n }\n\n unregister<N extends keyof E>(event: N, fn: E[N]) {\n const handler = this.eventHandlers && this.eventHandlers[event]\n if (handler) {\n handler!.unregister(fn)\n }\n }\n\n clear<N extends keyof E>(event: N) {\n if (this.eventHandlers) {\n delete this.eventHandlers[event]\n }\n }\n\n clearAll() {\n this.eventHandlers = undefined\n }\n\n emit<N extends keyof E>(event: N, ...args: ArgumentTypes<E[N]>) {\n const handler = this.eventHandlers && this.eventHandlers[event]\n if (handler) {\n ;(handler!.emit as any)(...args)\n }\n }\n}\n\nconst prototypeHasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * @internal\n * @hidden\n */\nexport function hasOwnProperty(object: object, propName: string) {\n return prototypeHasOwnProperty.call(object, propName)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function argsToArray(args: IArguments): any[] {\n const res = new Array(args.length)\n for (let i = 0; i < args.length; i++) {\n res[i] = args[i]\n }\n return res\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function stringStartsWith(str: string, beginning: string) {\n return str.indexOf(beginning) === 0\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type DeprecatedFunction = Function & { ids?: { [id: string]: true } }\n\n/**\n * @internal\n * @hidden\n */\nexport const deprecated: DeprecatedFunction = function (\n id: string,\n message: string\n): void {\n // skip if running production\n if (!devMode()) {\n return\n }\n // warn if hasn't been warned before\n if (deprecated.ids && !deprecated.ids.hasOwnProperty(id)) {\n warnError(\"Deprecation warning: \" + message)\n }\n // mark as warned to avoid duplicate warn message\n if (deprecated.ids) {\n deprecated.ids[id] = true\n }\n}\ndeprecated.ids = {}\n\n/**\n * @internal\n * @hidden\n */\nexport function warnError(msg: string) {\n console.warn(new Error(`[mobx-state-tree] ${msg}`))\n}\n/**\n * @internal\n * @hidden\n */\nexport function isTypeCheckingEnabled() {\n return (\n devMode() ||\n (typeof process !== \"undefined\" &&\n process.env &&\n process.env.ENABLE_TYPE_CHECK === \"true\")\n )\n}\n\nlet _devMode = process.env.NODE_ENV !== \"production\"\n\n/**\n * @internal\n * @hidden\n */\nexport function devMode() {\n return _devMode\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function setDevMode(value: boolean) {\n _devMode = value\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertArg<T>(\n value: T,\n fn: (value: T) => boolean,\n typeName: string,\n argNumber: number | number[]\n) {\n if (devMode()) {\n if (!fn(value)) {\n // istanbul ignore next\n throw fail(\n `expected ${typeName} as argument ${asArray(argNumber).join(\" or \")}, got ${value} instead`\n )\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsFunction(\n value: Function,\n argNumber: number | number[]\n) {\n assertArg(value, fn => typeof fn === \"function\", \"function\", argNumber)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsNumber(\n value: number,\n argNumber: number | number[],\n min?: number,\n max?: number\n) {\n assertArg(value, n => typeof n === \"number\", \"number\", argNumber)\n if (min !== undefined) {\n assertArg(value, n => n >= min, `number greater than ${min}`, argNumber)\n }\n if (max !== undefined) {\n assertArg(value, n => n <= max, `number lesser than ${max}`, argNumber)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsString(\n value: string,\n argNumber: number | number[],\n canBeEmpty = true\n) {\n assertArg(value, s => typeof s === \"string\", \"string\", argNumber)\n if (!canBeEmpty) {\n assertArg(value, s => s !== \"\", \"not empty string\", argNumber)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function setImmediateWithFallback(fn: (...args: any[]) => void) {\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(fn)\n } else if (typeof setImmediate === \"function\") {\n setImmediate(fn)\n } else {\n setTimeout(fn, 1)\n }\n}\n","import { fail, setImmediateWithFallback } from \"../utils.ts\"\nimport {\n getCurrentActionContext,\n getNextActionId,\n getParentActionContext,\n runWithActionContext\n} from \"./action.ts\"\n\nimport type { FunctionWithFlag, IMiddlewareEventType } from \"./action.ts\"\n\n/**\n * @hidden\n */\nexport type FlowReturn<R> = R extends Promise<infer T> ? T : R\n\n/**\n * See [asynchronous actions](concepts/async-actions.md).\n *\n * @returns The flow as a promise.\n */\nexport function flow<R, Args extends any[]>(\n generator: (...args: Args) => Generator<PromiseLike<any>, R, any>\n): (...args: Args) => Promise<FlowReturn<R>> {\n return createFlowSpawner(generator.name, generator) as any\n}\n\n/**\n * @deprecated Not needed since TS3.6.\n * Used for TypeScript to make flows that return a promise return the actual promise result.\n *\n * @param val\n * @returns\n */\nexport function castFlowReturn<T>(val: T): T {\n return val as any\n}\n\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise-returning function to a generator-returning one.\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n * const getDataGen = toGeneratorFunction(getDataAsync);\n *\n * const someModel.actions(self => ({\n * someAction: flow(function*() {\n * // value is typed as number\n * const value = yield* getDataGen(\"input value\");\n * ...\n * })\n * }))\n * ```\n */\nexport function toGeneratorFunction<R, Args extends any[]>(\n p: (...args: Args) => Promise<R>\n) {\n return function* (...args: Args) {\n return (yield p(...args)) as R\n }\n}\n\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise to a generator yielding that promise\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n *\n * const someModel.actions(self => ({\n * someAction: flow(function*() {\n * // value is typed as number\n * const value = yield* toGenerator(getDataAsync(\"input value\"));\n * ...\n * })\n * }))\n * ```\n */\nexport function* toGenerator<R>(p: Promise<R>) {\n return (yield p) as R\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createFlowSpawner(name: string, generator: FunctionWithFlag) {\n const spawner = function flowSpawner(this: any, ...flowArgs: any[]) {\n // Implementation based on https://github.com/tj/co/blob/master/index.js\n const runId = getNextActionId()\n const parentContext = getCurrentActionContext()!\n if (!parentContext) {\n throw fail(\"a mst flow must always have a parent context\")\n }\n const parentActionContext = getParentActionContext(parentContext)\n if (!parentActionContext) {\n throw fail(\"a mst flow must always have a parent action context\")\n }\n\n const contextBase = {\n name,\n id: runId,\n tree: parentContext.tree,\n context: parentContext.context,\n parentId: parentContext.id,\n allParentIds: [...parentContext.allParentIds, parentContext.id],\n rootId: parentContext.rootId,\n parentEvent: parentContext,\n parentActionEvent: parentActionContext\n }\n\n function wrap(fn: any, type: IMiddlewareEventType, arg: any) {\n fn.$mst_middleware = (spawner as any).$mst_middleware // pick up any middleware attached to the flow\n return runWithActionContext(\n {\n ...contextBase,\n type,\n args: [arg]\n },\n fn\n )\n }\n\n return new Promise(function (resolve, reject) {\n let gen: any\n const init = function asyncActionInit(...initArgs: any[]) {\n gen = generator(...initArgs)\n onFulfilled(undefined) // kick off the flow\n }\n ;(init as any).$mst_middleware = (spawner as any).$mst_middleware\n\n runWithActionContext(\n {\n ...contextBase,\n type: \"flow_spawn\",\n args: flowArgs\n },\n init\n )\n\n function onFulfilled(res: any) {\n let ret\n try {\n // prettier-ignore\n const cancelError: any = wrap((_r: any) => { ret = gen.next(_r) }, \"flow_resume\", res)\n if (cancelError instanceof Error) {\n ret = gen.throw(cancelError)\n }\n } catch (e) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((_r: any) => { reject(e) }, \"flow_throw\", e)\n })\n return\n }\n next(ret)\n return\n }\n\n function onRejected(err: any) {\n let ret\n try {\n // prettier-ignore\n wrap((_r: any) => { ret = gen.throw(_r) }, \"flow_resume_error\", err) // or yieldError?\n } catch (e) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((_r: any) => { reject(e) }, \"flow_throw\", e)\n })\n return\n }\n next(ret)\n }\n\n function next(ret: any) {\n if (ret.done) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((r: any) => { resolve(r) }, \"flow_return\", ret.value)\n })\n return\n }\n // TODO: support more type of values? See https://github.com/tj/co/blob/249bbdc72da24ae44076afd716349d2089b31c4c/index.js#L100\n if (!ret.value || typeof ret.value.then !== \"function\") {\n // istanbul ignore next\n throw fail(\"Only promises can be yielded to `async`, got: \" + ret)\n }\n return ret.value.then(onFulfilled, onRejected)\n }\n })\n }\n ;(spawner as FunctionWithFlag)._isFlowAction = true\n return spawner\n}\n","import { fail, stringStartsWith } from \"../internal.ts\"\n\n/**\n * https://tools.ietf.org/html/rfc6902\n * http://jsonpatch.com/\n */\nexport interface IJsonPatch {\n readonly op: \"replace\" | \"add\" | \"remove\"\n readonly path: string\n readonly value?: any\n}\n\nexport interface IReversibleJsonPatch extends IJsonPatch {\n readonly oldValue: any // This goes beyond JSON-patch, but makes sure each patch can be inverse applied\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function splitPatch(\n patch: IReversibleJsonPatch\n): [IJsonPatch, IJsonPatch] {\n if (!(\"oldValue\" in patch)) {\n throw fail(`Patches without \\`oldValue\\` field cannot be inversed`)\n }\n return [stripPatch(patch), invertPatch(patch)]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function stripPatch(patch: IReversibleJsonPatch): IJsonPatch {\n // strips `oldvalue` information from the patch, so that it becomes a patch conform the json-patch spec\n // this removes the ability to undo the patch\n switch (patch.op) {\n case \"add\":\n return { op: \"add\", path: patch.path, value: patch.value }\n case \"remove\":\n return { op: \"remove\", path: patch.path }\n case \"replace\":\n return { op: \"replace\", path: patch.path, value: patch.value }\n }\n}\n\nfunction invertPatch(patch: IReversibleJsonPatch): IJsonPatch {\n switch (patch.op) {\n case \"add\":\n return {\n op: \"remove\",\n path: patch.path\n }\n case \"remove\":\n return {\n op: \"add\",\n path: patch.path,\n value: patch.oldValue\n }\n case \"replace\":\n return {\n op: \"replace\",\n path: patch.path,\n value: patch.oldValue\n }\n }\n}\n\n/**\n * Simple simple check to check it is a number.\n */\nfunction isNumber(x: string): boolean {\n return typeof x === \"number\"\n}\n\n/**\n * Escape slashes and backslashes.\n *\n * http://tools.ietf.org/html/rfc6901\n */\nexport function escapeJsonPath(path: string): string {\n if (isNumber(path) === true) {\n return \"\" + path\n }\n if (path.indexOf(\"/\") === -1 && path.indexOf(\"~\") === -1) {\n return path\n }\n return path.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\n/**\n * Unescape slashes and backslashes.\n */\nexport function unescapeJsonPath(path: string): string {\n return path.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\n/**\n * Generates a json-path compliant json path from path parts.\n *\n * @param path\n * @returns\n */\nexport function joinJsonPath(path: string[]): string {\n // `/` refers to property with an empty name, while `` refers to root itself!\n if (path.length === 0) {\n return \"\"\n }\n\n const getPathStr = (p: string[]) => p.map(escapeJsonPath).join(\"/\")\n if (path[0] === \".\" || path[0] === \"..\") {\n // relative\n return getPathStr(path)\n } else {\n // absolute\n return \"/\" + getPathStr(path)\n }\n}\n\n/**\n * Splits and decodes a json path into several parts.\n *\n * @param path\n * @returns\n */\nexport function splitJsonPath(path: string): string[] {\n // `/` refers to property with an empty name, while `` refers to root itself!\n const parts = path.split(\"/\").map(unescapeJsonPath)\n\n const valid =\n path === \"\" ||\n path === \".\" ||\n path === \"..\" ||\n stringStartsWith(path, \"/\") ||\n stringStartsWith(path, \"./\") ||\n stringStartsWith(path, \"../\")\n if (!valid) {\n throw fail(\n `a json path must be either rooted, empty or relative, but got '${path}'`\n )\n }\n\n // '/a/b/c' -> [\"a\", \"b\", \"c\"]\n // '../../b/c' -> [\"..\", \"..\", \"b\", \"c\"]\n // '' -> []\n // '/' -> ['']\n // './a' -> [\".\", \"a\"]\n // /./a' -> [\".\", \"a\"] equivalent to './a'\n\n if (parts[0] === \"\") {\n parts.shift()\n }\n return parts\n}\n","import {\n type AnyObjectNode,\n BaseType,\n ComplexType,\n type ExtractNodeType,\n type IAnyType,\n type Instance,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ObjectNode,\n TypeFlags,\n assertIsType,\n devMode,\n fail,\n getSnapshot,\n isStateTreeNode,\n isType,\n isUnionType,\n typeCheckFailure\n} from \"../../internal.ts\"\n\n/** @hidden */\ndeclare const $mstNotCustomized: unique symbol\n\n/** @hidden */\nconst $preProcessorFailed: unique symbol = Symbol(\"$preProcessorFailed\")\n\n/** @hidden */\n// tslint:disable-next-line:class-name\nexport interface _NotCustomized {\n // only for typings\n readonly [$mstNotCustomized]: undefined\n}\n/** @hidden */\nexport type _CustomOrOther<Custom, Other> = Custom extends _NotCustomized\n ? Other\n : Custom\n\nclass SnapshotProcessor<IT extends IAnyType, CustomC, CustomS> extends BaseType<\n _CustomOrOther<CustomC, IT[\"CreationType\"]>,\n _CustomOrOther<CustomS, IT[\"SnapshotType\"]>,\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.SnapshotProcessor\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _processors: ISnapshotProcessors<IT, CustomC, CustomS>,\n name?: string\n ) {\n super(name || _subtype.name)\n }\n\n describe() {\n return `snapshotProcessor(${this._subtype.describe()})`\n }\n\n private preProcessSnapshot(sn: this[\"C\"]): IT[\"CreationType\"] {\n if (this._processors.preProcessor) {\n return this._processors.preProcessor.call(null, sn)\n }\n return sn as any\n }\n\n private preProcessSnapshotSafe(\n sn: this[\"C\"]\n ): IT[\"CreationType\"] | typeof $preProcessorFailed {\n try {\n return this.preProcessSnapshot(sn)\n } catch (_e) {\n return $preProcessorFailed\n }\n }\n\n private postProcessSnapshot(\n sn: IT[\"SnapshotType\"],\n node: this[\"N\"]\n ): this[\"S\"] {\n if (this._processors.postProcessor) {\n return this._processors.postProcessor!.call(\n null,\n sn,\n node.storedValue\n ) as any\n }\n return sn\n }\n\n private _fixNode(node: this[\"N\"]): void {\n // the node has to use these methods rather than the original type ones\n proxyNodeTypeMethods(node.type, this, \"create\")\n\n if (node instanceof ObjectNode) {\n node.hasSnapshotPostProcessor = !!this._processors.postProcessor\n }\n const oldGetSnapshot = node.getSnapshot\n node.getSnapshot = () =>\n this.postProcessSnapshot(oldGetSnapshot.call(node), node) as any\n if (!isUnionType(this._subtype)) {\n node.getReconciliationType = () => {\n return this\n }\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const processedInitialValue = isStateTreeNode(initialValue)\n ? initialValue\n : this.preProcessSnapshot(initialValue)\n const node = this._subtype.instantiate(\n parent,\n subpath,\n environment,\n processedInitialValue\n ) as any\n this._fixNode(node)\n return node\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const node = this._subtype.reconcile(\n current,\n isStateTreeNode(newValue) ? newValue : this.preProcessSnapshot(newValue),\n parent,\n subpath\n ) as any\n if (node !== current) {\n this._fixNode(node)\n }\n return node\n }\n\n getSnapshot(node: this[\"N\"], applyPostProcess: boolean = true): this[\"S\"] {\n const sn = this._subtype.getSnapshot(node)\n return applyPostProcess ? this.postProcessSnapshot(sn, node) : sn\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const processedSn = this.preProcessSnapshotSafe(value)\n if (processedSn === $preProcessorFailed) {\n return typeCheckFailure(context, value, \"Failed to preprocess value\")\n }\n return this._subtype.validate(processedSn, context)\n }\n\n getSubTypes() {\n return this._subtype\n }\n\n is(thing: any): thing is any {\n const value = isType(thing)\n ? this._subtype\n : isStateTreeNode(thing)\n ? getSnapshot(thing, false)\n : this.preProcessSnapshotSafe(thing)\n if (value === $preProcessorFailed) {\n return false\n }\n return (\n this._subtype.validate(value, [{ path: \"\", type: this._subtype }])\n .length === 0\n )\n }\n\n isAssignableFrom(type: IAnyType): boolean {\n return this._subtype.isAssignableFrom(type)\n }\n\n isMatchingSnapshotId(current: this[\"N\"], snapshot: this[\"C\"]): boolean {\n if (!(this._subtype instanceof ComplexType)) {\n return false\n }\n const processedSn = this.preProcessSnapshot(snapshot)\n return this._subtype.isMatchingSnapshotId(current as any, processedSn)\n }\n}\n\nfunction proxyNodeTypeMethods(\n nodeType: any,\n snapshotProcessorType: any,\n ...methods: (keyof SnapshotProcessor<any, any, any>)[]\n) {\n for (const method of methods) {\n nodeType[method] = snapshotProcessorType[method].bind(snapshotProcessorType)\n }\n}\n\n// public API\n\n/**\n * A type that has its snapshots processed.\n */\nexport interface ISnapshotProcessor<\n IT extends IAnyType,\n CustomC,\n CustomS\n> extends IType<\n _CustomOrOther<CustomC, IT[\"CreationType\"]>,\n _CustomOrOther<CustomS, IT[\"SnapshotType\"]>,\n IT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * Snapshot processors.\n */\nexport interface ISnapshotProcessors<IT extends IAnyType, CustomC, CustomS> {\n /**\n * Function that transforms an input snapshot.\n */\n preProcessor?(snapshot: CustomC): IT[\"CreationType\"]\n /**\n * Function that transforms an output snapshot.\n * @param snapshot\n */\n postProcessor?(snapshot: IT[\"SnapshotType\"], node: Instance<IT>): CustomS\n}\n\n/**\n * `types.snapshotProcessor` - Runs a pre/post snapshot processor before/after serializing a given type.\n *\n * Example:\n * ```ts\n * const Todo1 = types.model({ text: types.string })\n * // in the backend the text type must be null when empty\n * interface BackendTodo {\n * text: string | null\n * }\n *\n * const Todo2 = types.snapshotProcessor(Todo1, {\n * // from snapshot to instance\n * preProcessor(snapshot: BackendTodo) {\n * return {\n * text: sn.text || \"\";\n * }\n * },\n *\n * // from instance to snapshot\n * postProcessor(snapshot, node): BackendTodo {\n * return {\n * text: !sn.text ? null : sn.text\n * }\n * }\n * })\n * ```\n *\n * @param type Type to run the processors over.\n * @param processors Processors to run.\n * @param name Type name, or undefined to inherit the inner type one.\n * @returns\n */\nexport function snapshotProcessor<\n IT extends IAnyType,\n CustomC = _NotCustomized,\n CustomS = _NotCustomized\n>(\n type: IT,\n processors: ISnapshotProcessors<IT, CustomC, CustomS>,\n name?: string\n): ISnapshotProcessor<IT, CustomC, CustomS> {\n assertIsType(type, 1)\n if (devMode()) {\n if (\n processors.postProcessor &&\n typeof processors.postProcessor !== \"function\"\n ) {\n // istanbul ignore next\n throw fail(\"postSnapshotProcessor must be a function\")\n }\n if (\n processors.preProcessor &&\n typeof processors.preProcessor !== \"function\"\n ) {\n // istanbul ignore next\n throw fail(\"preSnapshotProcessor must be a function\")\n }\n }\n\n return new SnapshotProcessor(type, processors, name)\n}\n","import {\n type IInterceptor,\n type IKeyValueMap,\n type IMapDidChange,\n type IMapWillChange,\n type IObservableMapInitialValues,\n type Lambda,\n ObservableMap,\n _interceptReads,\n action,\n intercept,\n observable,\n observe,\n values\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n EMPTY_OBJECT,\n type ExtractCSTWithSTN,\n type IAnyModelType,\n type IAnyStateTreeNode,\n type IAnyType,\n type IChildNodesMap,\n type IHooksGetter,\n type IJsonPatch,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ModelType,\n ObjectNode,\n TypeFlags,\n addHiddenFinalProp,\n addHiddenWritableProp,\n asArray,\n cannotDetermineSubtype,\n createActionInvoker,\n createObjectNode,\n devMode,\n escapeJsonPath,\n fail,\n getContextForPath,\n getSnapshot,\n getStateTreeNode,\n isMutable,\n isPlainObject,\n isStateTreeNode,\n isType,\n isValidIdentifier,\n normalizeIdentifier,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport interface IMapType<IT extends IAnyType> extends IType<\n IKeyValueMap<IT[\"CreationType\"]> | undefined,\n IKeyValueMap<IT[\"SnapshotType\"]>,\n IMSTMap<IT>\n> {\n hooks(hooks: IHooksGetter<IMSTMap<IT>>): IMapType<IT>\n}\n\n/** @hidden */\nexport interface IMSTMap<IT extends IAnyType> {\n // bases on ObservableMap, but fine tuned to the auto snapshot conversion of MST\n\n clear(): void\n delete(key: string): boolean\n forEach(\n callbackfn: (value: IT[\"Type\"], key: string | number, map: this) => void,\n thisArg?: any\n ): void\n get(key: string | number): IT[\"Type\"] | undefined\n has(key: string | number): boolean\n set(key: string | number, value: ExtractCSTWithSTN<IT>): this\n readonly size: number\n put(value: ExtractCSTWithSTN<IT>): IT[\"Type\"]\n keys(): IterableIterator<string>\n values(): IterableIterator<IT[\"Type\"]>\n entries(): IterableIterator<[string, IT[\"Type\"]]>\n [Symbol.iterator](): IterableIterator<[string, IT[\"Type\"]]>\n /** Merge another object into this map, returns self. */\n merge(\n other:\n | IMSTMap<IType<any, any, IT[\"TypeWithoutSTN\"]>>\n | IKeyValueMap<ExtractCSTWithSTN<IT>>\n | any\n ): this\n replace(\n values:\n | IMSTMap<IType<any, any, IT[\"TypeWithoutSTN\"]>>\n | IKeyValueMap<ExtractCSTWithSTN<IT>>\n | any\n ): this\n\n toJSON(): IKeyValueMap<IT[\"SnapshotType\"]>\n\n toString(): string\n [Symbol.toStringTag]: \"Map\"\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe(\n listener: (changes: IMapDidChange<string, IT[\"Type\"]>) => void,\n fireImmediately?: boolean\n ): Lambda\n intercept(handler: IInterceptor<IMapWillChange<string, IT[\"Type\"]>>): Lambda\n}\n\nconst needsIdentifierError = `Map.put can only be used to store complex values that have an identifier type attribute`\n\nfunction tryCollectModelTypes(\n type: IAnyType,\n modelTypes: Array<IAnyModelType>\n): boolean {\n const subtypes = type.getSubTypes()\n if (subtypes === cannotDetermineSubtype) {\n return false\n }\n if (subtypes) {\n const subtypesArray = asArray(subtypes)\n for (const subtype of subtypesArray) {\n if (!tryCollectModelTypes(subtype, modelTypes)) {\n return false\n }\n }\n }\n if (type instanceof ModelType) {\n modelTypes.push(type)\n }\n return true\n}\n\n/**\n * @internal\n * @hidden\n */\nexport enum MapIdentifierMode {\n UNKNOWN,\n YES,\n NO\n}\n\nclass MSTMap<IT extends IAnyType> extends ObservableMap<string, any> {\n constructor(\n initialData?: IObservableMapInitialValues<string, any> | undefined,\n name?: string\n ) {\n super(initialData, (observable.ref as any).enhancer, name)\n }\n\n get(key: string): IT[\"Type\"] | undefined {\n // maybe this is over-enthousiastic? normalize numeric keys to strings\n return super.get(\"\" + key)\n }\n\n has(key: string) {\n return super.has(\"\" + key)\n }\n\n delete(key: string) {\n return super.delete(\"\" + key)\n }\n\n set(key: string, value: ExtractCSTWithSTN<IT>): this {\n return super.set(\"\" + key, value)\n }\n\n put(value: ExtractCSTWithSTN<IT>): IT[\"Type\"] {\n if (!value) {\n throw fail(`Map.put cannot be used to set empty values`)\n }\n if (isStateTreeNode(value)) {\n const node = getStateTreeNode(value)\n if (devMode()) {\n if (!node.identifierAttribute) {\n throw fail(needsIdentifierError)\n }\n }\n if (node.identifier === null) {\n throw fail(needsIdentifierError)\n }\n this.set(node.identifier, value)\n return value as any\n } else if (!isMutable(value)) {\n throw fail(`Map.put can only be used to store complex values`)\n } else {\n const mapNode = getStateTreeNode(this as IAnyStateTreeNode)\n const mapType = mapNode.type as MapType<any>\n\n if (mapType.identifierMode !== MapIdentifierMode.YES) {\n throw fail(needsIdentifierError)\n }\n\n const idAttr = mapType.mapIdentifierAttribute!\n const id = (value as any)[idAttr]\n if (!isValidIdentifier(id)) {\n // try again but this time after creating a node for the value\n // since it might be an optional identifier\n const newNode = this.put(\n mapType.getChildType().create(value, mapNode.environment)\n )\n return this.put(getSnapshot(newNode))\n }\n const key = normalizeIdentifier(id)\n this.set(key, value)\n return this.get(key) as any\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class MapType<IT extends IAnyType> extends ComplexType<\n IKeyValueMap<IT[\"CreationType\"]> | undefined,\n IKeyValueMap<IT[\"SnapshotType\"]>,\n IMSTMap<IT>\n> {\n identifierMode: MapIdentifierMode = MapIdentifierMode.UNKNOWN\n mapIdentifierAttribute: string | undefined = undefined\n readonly flags = TypeFlags.Map\n\n private readonly hookInitializers: Array<IHooksGetter<IMSTMap<IT>>> = []\n\n constructor(\n name: string,\n private readonly _subType: IAnyType,\n hookInitializers: Array<IHooksGetter<IMSTMap<IT>>> = []\n ) {\n super(name)\n this._determineIdentifierMode()\n this.hookInitializers = hookInitializers\n }\n\n hooks(hooks: IHooksGetter<IMSTMap<IT>>) {\n const hookInitializers =\n this.hookInitializers.length > 0\n ? this.hookInitializers.concat(hooks)\n : [hooks]\n return new MapType(this.name, this._subType, hookInitializers)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n this._determineIdentifierMode()\n return createObjectNode(this, parent, subpath, environment, initialValue)\n }\n\n private _determineIdentifierMode() {\n if (this.identifierMode !== MapIdentifierMode.UNKNOWN) {\n return\n }\n\n const modelTypes: IAnyModelType[] = []\n if (tryCollectModelTypes(this._subType, modelTypes)) {\n const identifierAttribute: string | undefined = modelTypes.reduce(\n (current: IAnyModelType[\"identifierAttribute\"], type) => {\n if (!type.identifierAttribute) {\n return current\n }\n if (current && current !== type.identifierAttribute) {\n throw fail(\n `The objects in a map should all have the same identifier attribute, expected '${current}', but child of type '${type.name}' declared attribute '${type.identifierAttribute}' as identifier`\n )\n }\n return type.identifierAttribute\n },\n undefined as IAnyModelType[\"identifierAttribute\"]\n )\n\n if (identifierAttribute) {\n this.identifierMode = MapIdentifierMode.YES\n this.mapIdentifierAttribute = identifierAttribute\n } else {\n this.identifierMode = MapIdentifierMode.NO\n }\n }\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n initialSnapshot: this[\"C\"] = {}\n ): IChildNodesMap {\n const subType = (objNode.type as this)._subType\n const result: IChildNodesMap = {}\n Object.keys(initialSnapshot!).forEach(name => {\n result[name] = subType.instantiate(\n objNode,\n name,\n undefined,\n initialSnapshot[name]\n )\n })\n\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n return new MSTMap(childNodes, this.name) as any\n }\n\n finalizeNewInstance(\n node: this[\"N\"],\n instance: ObservableMap<string, any>\n ): void {\n _interceptReads(instance, node.unbox)\n\n const type = node.type as this\n type.hookInitializers.forEach(initializer => {\n const hooks = initializer(instance as unknown as IMSTMap<IT>)\n Object.keys(hooks).forEach(name => {\n const hook = hooks[name as keyof typeof hooks]!\n const actionInvoker = createActionInvoker(\n instance as IAnyStateTreeNode,\n name,\n hook\n )\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n instance,\n name,\n actionInvoker\n )\n })\n })\n\n intercept(instance, this.willChange)\n observe(instance, this.didChange)\n }\n\n describe() {\n return this.name\n }\n\n getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode> {\n // return (node.storedValue as ObservableMap<any>).values()\n return values(node.storedValue)\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n const childNode = node.storedValue.get(\"\" + key)\n if (!childNode) {\n throw fail(\"Not a child \" + key)\n }\n return childNode\n }\n\n willChange(\n change: IMapWillChange<string, AnyNode>\n ): IMapWillChange<string, AnyNode> | null {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n const key = change.name\n node.assertWritable({ subpath: key })\n const mapType = node.type as this\n const subType = mapType._subType\n\n switch (change.type) {\n case \"update\":\n {\n const { newValue } = change\n const oldValue = change.object.get(key)\n if (newValue === oldValue) {\n return null\n }\n typecheckInternal(subType, newValue)\n change.newValue = subType.reconcile(\n node.getChildNode(key),\n change.newValue,\n node,\n key\n )\n mapType.processIdentifier(key, change.newValue)\n }\n break\n case \"add\":\n {\n typecheckInternal(subType, change.newValue)\n change.newValue = subType.instantiate(\n node,\n key,\n undefined,\n change.newValue\n )\n mapType.processIdentifier(key, change.newValue)\n }\n break\n }\n return change\n }\n\n private processIdentifier(expected: string, node: AnyNode): void {\n if (\n this.identifierMode === MapIdentifierMode.YES &&\n node instanceof ObjectNode\n ) {\n const identifier = node.identifier!\n if (identifier !== expected) {\n throw fail(\n `A map of objects containing an identifier should always store the object under their own identifier. Trying to store key '${identifier}', but expected: '${expected}'`\n )\n }\n }\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n const res: any = {}\n node.getChildren().forEach(childNode => {\n res[childNode.subpath] = childNode.snapshot\n })\n return res\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed: any = {}\n Object.keys(childNodes).forEach(key => {\n processed[key] = childNodes[key].getSnapshot()\n })\n return processed\n }\n\n didChange(change: IMapDidChange<string, AnyNode>): void {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n switch (change.type) {\n case \"update\":\n return void node.emitPatch(\n {\n op: \"replace\",\n path: escapeJsonPath(change.name),\n value: change.newValue.snapshot,\n oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n },\n node\n )\n case \"add\":\n return void node.emitPatch(\n {\n op: \"add\",\n path: escapeJsonPath(change.name),\n value: change.newValue.snapshot,\n oldValue: undefined\n },\n node\n )\n case \"delete\":\n // a node got deleted, get the old snapshot and make the node die\n const oldSnapshot = change.oldValue.snapshot\n change.oldValue.die()\n // emit the patch\n return void node.emitPatch(\n {\n op: \"remove\",\n path: escapeJsonPath(change.name),\n oldValue: oldSnapshot\n },\n node\n )\n }\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n const target = node.storedValue\n switch (patch.op) {\n case \"add\":\n case \"replace\":\n target.set(subpath, patch.value)\n break\n case \"remove\":\n target.delete(subpath)\n break\n }\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const target = node.storedValue\n const currentKeys: { [key: string]: boolean } = {}\n Array.from(target.keys()).forEach(key => {\n currentKeys[key] = false\n })\n if (snapshot) {\n // Don't use target.replace, as it will throw away all existing items first\n for (const key in snapshot) {\n target.set(key, snapshot[key])\n currentKeys[\"\" + key] = true\n }\n }\n Object.keys(currentKeys).forEach(key => {\n if (currentKeys[key] === false) {\n target.delete(key)\n }\n })\n }\n\n getChildType(): IAnyType {\n return this._subType\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isPlainObject(value)) {\n return typeCheckFailure(context, value, \"Value is not a plain object\")\n }\n\n for (const key of Object.keys(value)) {\n getContextForPath(context, key, this._subType)\n const errors = this._subType.validate(value[key], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_OBJECT as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n node.storedValue.delete(subpath)\n }\n}\nMapType.prototype.applySnapshot = action(MapType.prototype.applySnapshot)\n\n/**\n * `types.map` - Creates a key based collection type who's children are all of a uniform declared type.\n * If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.\n *\n * This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * id: types.identifier,\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.map(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: {} })\n * unprotect(s)\n * s.todos.set(17, { task: \"Grab coffee\", id: 17 })\n * s.todos.put({ task: \"Grab cookie\", id: 18 }) // put will infer key from the identifier\n * console.log(s.todos.get(17).task) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nexport function map<IT extends IAnyType>(subtype: IT): IMapType<IT> {\n return new MapType<IT>(`Map<string, ${subtype.name}>`, subtype)\n}\n\n/**\n * Returns if a given value represents a map type.\n *\n * @param type\n * @returns `true` if it is a map type.\n */\nexport function isMapType<Items extends IAnyType = IAnyType>(\n type: IAnyType\n): type is IMapType<Items> {\n return isType(type) && (type.flags & TypeFlags.Map) > 0\n}\n","import {\n type IArrayDidChange,\n type IArraySplice,\n type IArrayWillChange,\n type IArrayWillSplice,\n type IObservableArray,\n _getAdministration,\n action,\n intercept,\n observable,\n observe\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n EMPTY_ARRAY,\n EMPTY_OBJECT,\n type ExtractCSTWithSTN,\n type IAnyStateTreeNode,\n type IAnyType,\n type IChildNodesMap,\n type IHooksGetter,\n type IJsonPatch,\n type IStateTreeNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ObjectNode,\n TypeFlags,\n addHiddenFinalProp,\n addHiddenWritableProp,\n assertIsType,\n convertChildNodesToArray,\n createActionInvoker,\n createObjectNode,\n devMode,\n fail,\n getContextForPath,\n getStateTreeNode,\n isArray,\n isNode,\n isPlainObject,\n isStateTreeNode,\n isType,\n mobxShallow,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport interface IMSTArray<IT extends IAnyType> extends IObservableArray<\n IT[\"Type\"]\n> {\n // needs to be split or else it will complain about not being compatible with the array interface\n push(...items: IT[\"Type\"][]): number\n push(...items: ExtractCSTWithSTN<IT>[]): number\n\n concat(...items: ConcatArray<IT[\"Type\"]>[]): IT[\"Type\"][]\n concat(...items: ConcatArray<ExtractCSTWithSTN<IT>>[]): IT[\"Type\"][]\n\n concat(...items: (IT[\"Type\"] | ConcatArray<IT[\"Type\"]>)[]): IT[\"Type\"][]\n concat(\n ...items: (ExtractCSTWithSTN<IT> | ConcatArray<ExtractCSTWithSTN<IT>>)[]\n ): IT[\"Type\"][]\n\n splice(start: number, deleteCount?: number): IT[\"Type\"][]\n splice(\n start: number,\n deleteCount: number,\n ...items: IT[\"Type\"][]\n ): IT[\"Type\"][]\n splice(\n start: number,\n deleteCount: number,\n ...items: ExtractCSTWithSTN<IT>[]\n ): IT[\"Type\"][]\n\n unshift(...items: IT[\"Type\"][]): number\n unshift(...items: ExtractCSTWithSTN<IT>[]): number\n}\n\n/** @hidden */\nexport interface IArrayType<IT extends IAnyType> extends IType<\n readonly IT[\"CreationType\"][] | undefined,\n IT[\"SnapshotType\"][],\n IMSTArray<IT>\n> {\n hooks(hooks: IHooksGetter<IMSTArray<IAnyType>>): IArrayType<IT>\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ArrayType<IT extends IAnyType> extends ComplexType<\n readonly IT[\"CreationType\"][] | undefined,\n IT[\"SnapshotType\"][],\n IMSTArray<IT>\n> {\n readonly flags = TypeFlags.Array\n private readonly hookInitializers: Array<IHooksGetter<IMSTArray<IT>>> = []\n constructor(\n name: string,\n private readonly _subType: IT,\n hookInitializers: Array<IHooksGetter<IMSTArray<IT>>> = []\n ) {\n super(name)\n this.hookInitializers = hookInitializers\n }\n\n hooks(hooks: IHooksGetter<IMSTArray<IT>>) {\n const hookInitializers =\n this.hookInitializers.length > 0\n ? this.hookInitializers.concat(hooks)\n : [hooks]\n return new ArrayType(this.name, this._subType, hookInitializers)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n return createObjectNode(this, parent, subpath, environment, initialValue)\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n snapshot: this[\"C\"] = []\n ): IChildNodesMap {\n const subType = (objNode.type as this)._subType\n const result: IChildNodesMap = {}\n snapshot.forEach((item, index) => {\n const subpath = \"\" + index\n result[subpath] = subType.instantiate(objNode, subpath, undefined, item)\n })\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n const options = { ...mobxShallow, name: this.name }\n return observable.array(\n convertChildNodesToArray(childNodes),\n options\n ) as this[\"T\"]\n }\n\n finalizeNewInstance(node: this[\"N\"], instance: this[\"T\"]): void {\n _getAdministration(instance).dehancer = node.unbox\n\n const type = node.type as this\n type.hookInitializers.forEach(initializer => {\n const hooks = initializer(instance)\n Object.keys(hooks).forEach(name => {\n const hook = hooks[name as keyof typeof hooks]!\n const actionInvoker = createActionInvoker(\n instance as IAnyStateTreeNode,\n name,\n hook\n )\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n instance,\n name,\n actionInvoker\n )\n })\n })\n\n intercept(instance as IObservableArray<AnyNode>, this.willChange)\n observe(instance as IObservableArray<AnyNode>, this.didChange)\n }\n\n describe() {\n return this.name\n }\n\n getChildren(node: this[\"N\"]): AnyNode[] {\n return node.storedValue.slice()\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n const index = Number(key)\n if (index < node.storedValue.length) {\n return node.storedValue[index]\n }\n throw fail(\"Not a child: \" + key)\n }\n\n willChange(\n change: IArrayWillChange<AnyNode> | IArrayWillSplice<AnyNode>\n ): IArrayWillChange<AnyNode> | IArrayWillSplice<AnyNode> | null {\n const node = getStateTreeNode(change.object as IStateTreeNode<this>)\n node.assertWritable({ subpath: \"\" + change.index })\n const subType = (node.type as this)._subType\n const childNodes = node.getChildren()\n\n switch (change.type) {\n case \"update\":\n {\n if (change.newValue === change.object[change.index]) {\n return null\n }\n\n const updatedNodes = reconcileArrayChildren(\n node,\n subType,\n [childNodes[change.index]],\n [change.newValue],\n [change.index]\n )\n if (!updatedNodes) {\n return null\n }\n change.newValue = updatedNodes[0]\n }\n break\n case \"splice\":\n {\n const { index, removedCount, added } = change\n\n const addedNodes = reconcileArrayChildren(\n node,\n subType,\n childNodes.slice(index, index + removedCount),\n added,\n added.map((_, i) => index + i)\n )\n if (!addedNodes) {\n return null\n }\n change.added = addedNodes\n\n // update paths of remaining items\n for (let i = index + removedCount; i < childNodes.length; i++) {\n childNodes[i].setParent(\n node,\n \"\" + (i + added.length - removedCount)\n )\n }\n }\n break\n }\n return change\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n return node.getChildren().map(childNode => childNode.snapshot)\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed: this[\"S\"] = []\n Object.keys(childNodes).forEach(key => {\n processed.push(childNodes[key].getSnapshot())\n })\n return processed\n }\n\n didChange(change: IArrayDidChange<AnyNode> | IArraySplice<AnyNode>): void {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n switch (change.type) {\n case \"update\":\n return void node.emitPatch(\n {\n op: \"replace\",\n path: \"\" + change.index,\n value: change.newValue.snapshot,\n oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n },\n node\n )\n case \"splice\":\n for (let i = change.removedCount - 1; i >= 0; i--) {\n node.emitPatch(\n {\n op: \"remove\",\n path: \"\" + (change.index + i),\n oldValue: change.removed[i].snapshot\n },\n node\n )\n }\n for (let i = 0; i < change.addedCount; i++) {\n node.emitPatch(\n {\n op: \"add\",\n path: \"\" + (change.index + i),\n value: node.getChildNode(\"\" + (change.index + i)).snapshot,\n oldValue: undefined\n },\n node\n )\n }\n return\n }\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n const target = node.storedValue\n const index = subpath === \"-\" ? target.length : Number(subpath)\n switch (patch.op) {\n case \"replace\":\n target[index] = patch.value\n break\n case \"add\":\n target.splice(index, 0, patch.value)\n break\n case \"remove\":\n target.splice(index, 1)\n break\n }\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const target = node.storedValue\n target.replace(snapshot as any)\n }\n\n getChildType(): IAnyType {\n return this._subType\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isArray(value)) {\n return typeCheckFailure(context, value, \"Value is not an array\")\n }\n\n for (let i = 0; i < value.length; i++) {\n getContextForPath(context, \"\" + i, this._subType)\n const errors = this._subType.validate(value[i], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_ARRAY as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n node.storedValue.splice(Number(subpath), 1)\n }\n}\nArrayType.prototype.applySnapshot = action(ArrayType.prototype.applySnapshot)\n\n/**\n * `types.array` - Creates an index based collection type who's children are all of a uniform declared type.\n *\n * This type will always produce [observable arrays](https://mobx.js.org/api.html#observablearray)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.array(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: [] })\n * unprotect(s) // needed to allow modifying outside of an action\n * s.todos.push({ task: \"Grab coffee\" })\n * console.log(s.todos[0]) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nexport function array<IT extends IAnyType>(subtype: IT): IArrayType<IT> {\n assertIsType(subtype, 1)\n return new ArrayType<IT>(`${subtype.name}[]`, subtype)\n}\n\nfunction reconcileArrayChildren<TT>(\n parent: AnyObjectNode,\n childType: IType<any, any, TT>,\n oldNodes: AnyNode[],\n newValues: TT[],\n newPaths: (string | number)[]\n): AnyNode[] | null {\n let nothingChanged = true\n\n for (let i = 0; ; i++) {\n const hasNewNode = i <= newValues.length - 1\n const oldNode = oldNodes[i]\n let newValue = hasNewNode ? newValues[i] : undefined\n const newPath = \"\" + newPaths[i]\n\n // for some reason, instead of newValue we got a node, fallback to the storedValue\n // TODO: https://github.com/mobxjs/mobx-state-tree/issues/340#issuecomment-325581681\n if (isNode(newValue)) {\n newValue = newValue.storedValue\n }\n\n if (!oldNode && !hasNewNode) {\n // both are empty, end\n break\n } else if (!hasNewNode) {\n // new one does not exists\n nothingChanged = false\n oldNodes.splice(i, 1)\n if (oldNode instanceof ObjectNode) {\n // since it is going to be returned by pop/splice/shift better create it before killing it\n // so it doesn't end up in an undead state\n oldNode.createObservableInstanceIfNeeded()\n }\n oldNode.die()\n i--\n } else if (!oldNode) {\n // there is no old node, create it\n // check if already belongs to the same parent. if so, avoid pushing item in. only swapping can occur.\n if (\n isStateTreeNode(newValue) &&\n getStateTreeNode(newValue).parent === parent\n ) {\n // this node is owned by this parent, but not in the reconcilable set, so it must be double\n throw fail(\n `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 '${\n parent.path\n }/${newPath}', but it lives already at '${getStateTreeNode(newValue).path}'`\n )\n }\n nothingChanged = false\n const newNode = valueAsNode(childType, parent, newPath, newValue)\n oldNodes.splice(i, 0, newNode)\n } else if (areSame(oldNode, newValue)) {\n // both are the same, reconcile\n oldNodes[i] = valueAsNode(childType, parent, newPath, newValue, oldNode)\n } else {\n // nothing to do, try to reorder\n let oldMatch = undefined\n\n // find a possible candidate to reuse\n for (let j = i; j < oldNodes.length; j++) {\n if (areSame(oldNodes[j], newValue)) {\n oldMatch = oldNodes.splice(j, 1)[0]\n break\n }\n }\n\n nothingChanged = false\n const newNode = valueAsNode(\n childType,\n parent,\n newPath,\n newValue,\n oldMatch\n )\n oldNodes.splice(i, 0, newNode)\n }\n }\n\n return nothingChanged ? null : oldNodes\n}\n\n/**\n * Convert a value to a node at given parent and subpath. Attempts to reuse old node if possible and given.\n */\nfunction valueAsNode(\n childType: IAnyType,\n parent: AnyObjectNode,\n subpath: string,\n newValue: any,\n oldNode?: AnyNode\n) {\n // ensure the value is valid-ish\n typecheckInternal(childType, newValue)\n\n function getNewNode() {\n // the new value has a MST node\n if (isStateTreeNode(newValue)) {\n const childNode = getStateTreeNode(newValue)\n childNode.assertAlive(EMPTY_OBJECT)\n\n // the node lives here\n if (childNode.parent !== null && childNode.parent === parent) {\n childNode.setParent(parent, subpath)\n return childNode\n }\n }\n // there is old node and new one is a value/snapshot\n if (oldNode) {\n return childType.reconcile(oldNode, newValue, parent, subpath)\n }\n\n // nothing to do, create from scratch\n return childType.instantiate(parent, subpath, undefined, newValue)\n }\n\n const newNode = getNewNode()\n if (oldNode && oldNode !== newNode) {\n if (oldNode instanceof ObjectNode) {\n // since it is going to be returned by pop/splice/shift better create it before killing it\n // so it doesn't end up in an undead state\n oldNode.createObservableInstanceIfNeeded()\n }\n oldNode.die()\n }\n return newNode\n}\n\n/**\n * Check if a node holds a value.\n */\nfunction areSame(oldNode: AnyNode, newValue: any) {\n // never consider dead old nodes for reconciliation\n if (!oldNode.isAlive) {\n return false\n }\n\n // the new value has the same node\n if (isStateTreeNode(newValue)) {\n const newNode = getStateTreeNode(newValue)\n return newNode.isAlive && newNode === oldNode\n }\n\n // the provided value is the snapshot of the old node\n if (oldNode.snapshot === newValue) {\n return true\n }\n\n // Non object nodes don't get reconciled\n if (!(oldNode instanceof ObjectNode)) {\n return false\n }\n\n const oldNodeType = oldNode.getReconciliationType()\n // new value is a snapshot with the correct identifier\n return (\n oldNode.identifier !== null &&\n oldNode.identifierAttribute &&\n isPlainObject(newValue) &&\n oldNodeType.is(newValue) &&\n (oldNodeType as any).isMatchingSnapshotId(oldNode, newValue)\n )\n}\n\n/**\n * Returns if a given value represents an array type.\n *\n * @param type\n * @returns `true` if the type is an array type.\n */\nexport function isArrayType<Items extends IAnyType = IAnyType>(\n type: IAnyType\n): type is IArrayType<Items> {\n return isType(type) && (type.flags & TypeFlags.Array) > 0\n}\n","import {\n type IObjectDidChange,\n type IObjectWillChange,\n _getAdministration,\n _interceptReads,\n action,\n computed,\n defineProperty,\n getAtom,\n intercept,\n makeObservable,\n observable,\n observe,\n set\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ArrayType,\n ComplexType,\n EMPTY_ARRAY,\n EMPTY_OBJECT,\n type FunctionWithFlag,\n Hook,\n type IAnyType,\n type IChildNodesMap,\n type IJsonPatch,\n type IStateTreeNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n type Instance,\n MapType,\n TypeFlags,\n type _CustomOrOther,\n type _NotCustomized,\n addHiddenFinalProp,\n addHiddenWritableProp,\n assertArg,\n assertIsString,\n createActionInvoker,\n createObjectNode,\n devMode,\n escapeJsonPath,\n fail,\n freeze,\n getContextForPath,\n getPrimitiveFactoryFromValue,\n getStateTreeNode,\n isPlainObject,\n isPrimitive,\n isStateTreeNode,\n isType,\n mobxShallow,\n optional,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\nconst PRE_PROCESS_SNAPSHOT = \"preProcessSnapshot\"\nconst POST_PROCESS_SNAPSHOT = \"postProcessSnapshot\"\n\n/** @hidden */\nexport interface ModelProperties {\n [key: string]: IAnyType\n}\n\n/** @hidden */\nexport type ModelPrimitive = string | number | boolean | Date\n\n/** @hidden */\nexport interface ModelPropertiesDeclaration {\n [key: string]: ModelPrimitive | IAnyType\n}\n\n/**\n * Unmaps syntax property declarations to a map of { propName: IType }\n *\n * @hidden\n */\nexport type ModelPropertiesDeclarationToProperties<\n T extends ModelPropertiesDeclaration\n> = T extends { [k: string]: IAnyType } // optimization to reduce nesting\n ? T\n : {\n [K in keyof T]: T[K] extends IAnyType // keep IAnyType check on the top to reduce nesting\n ? T[K]\n : T[K] extends string\n ? IType<string | undefined, string, string>\n : T[K] extends number\n ? IType<number | undefined, number, number>\n : T[K] extends boolean\n ? IType<boolean | undefined, boolean, boolean>\n : T[K] extends Date\n ? IType<number | Date | undefined, number, Date>\n : never\n }\n\n/**\n * Checks if a value is optional (undefined, any or unknown).\n * @hidden\n *\n * Examples:\n * - string = false\n * - undefined = true\n * - string | undefined = true\n * - string & undefined = false, but we don't care\n * - any = true\n * - unknown = true\n */\ntype IsOptionalValue<C, TV, FV> = undefined extends C ? TV : FV\n\n// type _A = IsOptionalValue<string, true, false> // false\n// type _B = IsOptionalValue<undefined, true, false> // true\n// type _C = IsOptionalValue<string | undefined, true, false> // true\n// type _D = IsOptionalValue<string & undefined, true, false> // false, but we don't care\n// type _E = IsOptionalValue<any, true, false> // true\n// type _F = IsOptionalValue<unknown, true, false> // true\n\n/**\n * Name of the properties of an object that can't be set to undefined, any or unknown\n * @hidden\n */\ntype DefinablePropsNames<T> = {\n [K in keyof T]: IsOptionalValue<T[K], never, K>\n}[keyof T]\n\n/** @hidden */\nexport declare const $nonEmptyObject: unique symbol\n\n/** @hidden */\nexport interface NonEmptyObject {\n [$nonEmptyObject]?: any\n}\n\n/** @hidden */\nexport type ExtractCFromProps<P extends ModelProperties> = {\n [k in keyof P]: P[k][\"CreationType\"]\n}\n\n/** @hidden */\nexport type ModelCreationType<PC> = {\n [P in DefinablePropsNames<PC>]: PC[P]\n} & Partial<PC> &\n NonEmptyObject\n\n/** @hidden */\nexport type ModelCreationType2<\n P extends ModelProperties,\n CustomC\n> = keyof P extends never\n ? // When there are no props, we want to prevent passing in any object. We have two objects we want to allow:\n // 1. The empty object\n // 2. An instance of this model\n //\n // The `IStateTreeNode` interface allows both. For (1), these props are optional so an empty object is allowed.\n // For (2), an instance will contain these two props, including the \"secret\" `$stateTreeNodeType` prop. TypeScript's\n // excess property checking will then ensure no other props are passed in.\n IStateTreeNode\n : _CustomOrOther<CustomC, ModelCreationType<ExtractCFromProps<P>>>\n\n/** @hidden */\nexport type ModelSnapshotType<P extends ModelProperties> = {\n [K in keyof P]: P[K][\"SnapshotType\"]\n} & NonEmptyObject\n\n/** @hidden */\nexport type ModelSnapshotType2<\n P extends ModelProperties,\n CustomS\n> = _CustomOrOther<CustomS, ModelSnapshotType<P>>\n\n/**\n * @hidden\n * we keep this separate from ModelInstanceType to shorten model instance types generated declarations\n */\nexport type ModelInstanceTypeProps<P extends ModelProperties> = {\n [K in keyof P]: P[K][\"Type\"]\n} & NonEmptyObject\n\n/**\n * @hidden\n * do not transform this to an interface or model instance type generated declarations will be longer\n */\nexport type ModelInstanceType<\n P extends ModelProperties,\n O\n> = ModelInstanceTypeProps<P> & O\n\n/** @hidden */\nexport interface ModelActions {\n [key: string]: FunctionWithFlag\n}\n\nexport interface IModelType<\n PROPS extends ModelProperties,\n OTHERS,\n CustomC = _NotCustomized,\n CustomS = _NotCustomized\n> extends IType<\n ModelCreationType2<PROPS, CustomC>,\n ModelSnapshotType2<PROPS, CustomS>,\n ModelInstanceType<PROPS, OTHERS>\n> {\n readonly properties: PROPS\n\n named(newName: string): IModelType<PROPS, OTHERS, CustomC, CustomS>\n\n // warning: redefining props after a process snapshot is used ends up on the fixed (custom) C, S typings being overridden\n // so it is recommended to use pre/post process snapshot after all props have been defined\n props<PROPS2 extends ModelPropertiesDeclaration>(\n props: PROPS2\n ): IModelType<\n PROPS & ModelPropertiesDeclarationToProperties<PROPS2>,\n OTHERS,\n CustomC,\n CustomS\n >\n\n views<V extends object>(\n fn: (self: Instance<this>) => V\n ): IModelType<PROPS, OTHERS & V, CustomC, CustomS>\n\n actions<A extends ModelActions>(\n fn: (self: Instance<this>) => A\n ): IModelType<PROPS, OTHERS & A, CustomC, CustomS>\n\n volatile<TP extends object>(\n fn: (self: Instance<this>) => TP\n ): IModelType<PROPS, OTHERS & TP, CustomC, CustomS>\n\n extend<\n A extends ModelActions = {},\n V extends object = {},\n VS extends object = {}\n >(\n fn: (self: Instance<this>) => { actions?: A; views?: V; state?: VS }\n ): IModelType<PROPS, OTHERS & A & V & VS, CustomC, CustomS>\n\n preProcessSnapshot<NewC = ModelCreationType2<PROPS, CustomC>>(\n fn: (snapshot: NewC) => ModelCreationType2<PROPS, CustomC>\n ): IModelType<PROPS, OTHERS, NewC, CustomS>\n\n postProcessSnapshot<NewS = ModelSnapshotType2<PROPS, CustomS>>(\n fn: (snapshot: ModelSnapshotType2<PROPS, CustomS>) => NewS\n ): IModelType<PROPS, OTHERS, CustomC, NewS>\n}\n\n/**\n * Any model type.\n */\nexport interface IAnyModelType extends IModelType<any, any, any, any> {}\n\n/** @hidden */\nexport type ExtractProps<T extends IAnyModelType> =\n T extends IModelType<infer P, any, any, any> ? P : never\n/** @hidden */\nexport type ExtractOthers<T extends IAnyModelType> =\n T extends IModelType<any, infer O, any, any> ? O : never\n\nfunction objectTypeToString(this: any) {\n return getStateTreeNode(this).toString()\n}\n\n/**\n * @internal\n * @hidden\n */\nexport interface ModelTypeConfig {\n name?: string\n properties?: ModelPropertiesDeclaration\n initializers?: ReadonlyArray<(instance: any) => any>\n preProcessor?: (snapshot: any) => any\n postProcessor?: (snapshot: any) => any\n}\n\nconst defaultObjectOptions = {\n name: \"AnonymousModel\",\n properties: {},\n initializers: EMPTY_ARRAY\n}\n\nfunction toPropertiesObject(\n declaredProps: ModelPropertiesDeclaration\n): ModelProperties {\n const keysList = Object.keys(declaredProps)\n const alreadySeenKeys = new Set<string>()\n\n keysList.forEach(key => {\n if (alreadySeenKeys.has(key)) {\n throw fail(\n `${key} is declared twice in the model. Model should not contain the same keys`\n )\n }\n alreadySeenKeys.add(key)\n })\n\n // loop through properties and ensures that all items are types\n return keysList.reduce(\n (props, key) => {\n // warn if user intended a HOOK\n if (key in Hook) {\n throw fail(\n `Hook '${key}' was defined as property. Hooks should be defined as part of the actions`\n )\n }\n\n // the user intended to use a view\n const descriptor = Object.getOwnPropertyDescriptor(declaredProps, key)!\n if (\"get\" in descriptor) {\n throw fail(\n \"Getters are not supported as properties. Please use views instead\"\n )\n }\n // undefined and null are not valid\n const value = descriptor.value\n if (value === null || value === undefined) {\n throw fail(\n \"The default value of an attribute cannot be null or undefined as the type cannot be inferred. Did you mean `types.maybe(someType)`?\"\n )\n }\n // its a primitive, convert to its type\n else if (isPrimitive(value)) {\n props[key] = optional(getPrimitiveFactoryFromValue(value), value)\n }\n // map defaults to empty object automatically for models\n else if (value instanceof MapType) {\n props[key] = optional(value, {})\n } else if (value instanceof ArrayType) {\n props[key] = optional(value, [])\n }\n // its already a type\n else if (isType(value)) {\n // do nothing, it's already a type\n }\n // its a function, maybe the user wanted a view?\n else if (devMode() && typeof value === \"function\") {\n throw fail(\n `Invalid type definition for property '${key}', it looks like you passed a function. Did you forget to invoke it, or did you intend to declare a view / action?`\n )\n }\n // no other complex values\n else if (devMode() && typeof value === \"object\") {\n throw fail(\n `Invalid type definition for property '${key}', it looks like you passed an object. Try passing another model type or a types.frozen.`\n )\n } else {\n throw fail(\n `Invalid type definition for property '${key}', cannot infer a type from a value like '${value}' (${typeof value})`\n )\n }\n\n return props\n },\n { ...declaredProps } as any\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ModelType<\n PROPS extends ModelProperties,\n OTHERS,\n CustomC,\n CustomS,\n MT extends IModelType<PROPS, OTHERS, CustomC, CustomS>\n>\n extends ComplexType<\n ModelCreationType2<PROPS, CustomC>,\n ModelSnapshotType2<PROPS, CustomS>,\n ModelInstanceType<PROPS, OTHERS>\n >\n implements IModelType<PROPS, OTHERS, CustomC, CustomS>\n{\n readonly flags = TypeFlags.Object\n\n /*\n * The original object definition\n */\n public readonly initializers!: ((instance: any) => any)[]\n public readonly properties!: PROPS\n\n private preProcessor!: (snapshot: any) => any | undefined\n private postProcessor!: (snapshot: any) => any | undefined\n readonly propertyNames: string[]\n\n constructor(opts: ModelTypeConfig) {\n super(opts.name || defaultObjectOptions.name)\n Object.assign(this, defaultObjectOptions, opts)\n // ensures that any default value gets converted to its related type\n this.properties = toPropertiesObject(this.properties) as PROPS\n freeze(this.properties) // make sure nobody messes with it\n this.propertyNames = Object.keys(this.properties)\n this.identifierAttribute = this._getIdentifierAttribute()\n }\n\n private _getIdentifierAttribute(): string | undefined {\n let identifierAttribute: string | undefined = undefined\n this.forAllProps((propName, propType) => {\n if (propType.flags & TypeFlags.Identifier) {\n if (identifierAttribute) {\n throw fail(\n `Cannot define property '${propName}' as object identifier, property '${identifierAttribute}' is already defined as identifier property`\n )\n }\n identifierAttribute = propName\n }\n })\n return identifierAttribute\n }\n\n cloneAndEnhance(opts: ModelTypeConfig): IAnyModelType {\n return new ModelType({\n name: opts.name || this.name,\n properties: Object.assign({}, this.properties, opts.properties),\n initializers: this.initializers.concat(opts.initializers || []),\n preProcessor: opts.preProcessor || this.preProcessor,\n postProcessor: opts.postProcessor || this.postProcessor\n })\n }\n\n actions<A extends ModelActions>(fn: (self: Instance<this>) => A) {\n const actionInitializer = (self: Instance<this>) => {\n this.instantiateActions(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [actionInitializer] })\n }\n\n private instantiateActions(self: this[\"T\"], actions: ModelActions): void {\n // check if return is correct\n if (!isPlainObject(actions)) {\n throw fail(\n `actions initializer should return a plain object containing actions`\n )\n }\n\n // bind actions to the object created\n Object.keys(actions).forEach(name => {\n // warn if preprocessor was given\n if (name === PRE_PROCESS_SNAPSHOT) {\n throw fail(\n `Cannot define action '${PRE_PROCESS_SNAPSHOT}', it should be defined using 'type.preProcessSnapshot(fn)' instead`\n )\n }\n // warn if postprocessor was given\n if (name === POST_PROCESS_SNAPSHOT) {\n throw fail(\n `Cannot define action '${POST_PROCESS_SNAPSHOT}', it should be defined using 'type.postProcessSnapshot(fn)' instead`\n )\n }\n\n let action2 = actions[name]\n\n // apply hook composition\n const baseAction = (self as any)[name]\n if (name in Hook && baseAction) {\n const specializedAction = action2\n action2 = function (...args: any[]) {\n baseAction(...args)\n specializedAction(...args)\n }\n }\n\n // the goal of this is to make sure actions using \"this\" can call themselves,\n // while still allowing the middlewares to register them\n const middlewares = (action2 as any).$mst_middleware // make sure middlewares are not lost\n const boundAction = action2.bind(actions)\n boundAction._isFlowAction =\n (action2 as FunctionWithFlag)._isFlowAction || false\n boundAction.$mst_middleware = middlewares\n const actionInvoker = createActionInvoker(self as any, name, boundAction)\n actions[name] = actionInvoker\n\n // See #646, allow models to be mocked\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n self,\n name,\n actionInvoker\n )\n })\n }\n\n named: MT[\"named\"] = name => {\n return this.cloneAndEnhance({ name })\n }\n\n props: MT[\"props\"] = properties => {\n return this.cloneAndEnhance({ properties })\n }\n\n volatile<TP extends object>(fn: (self: Instance<this>) => TP) {\n if (typeof fn !== \"function\") {\n throw fail(\n `You passed an ${typeof fn} to volatile state as an argument, when function is expected`\n )\n }\n const stateInitializer = (self: Instance<this>) => {\n this.instantiateVolatileState(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [stateInitializer] })\n }\n\n private instantiateVolatileState(\n self: this[\"T\"],\n state: {\n [key: string]: any\n }\n ): void {\n // check views return\n if (!isPlainObject(state)) {\n throw fail(\n `volatile state initializer should return a plain object containing state`\n )\n }\n set(self, state)\n }\n\n extend<\n A extends ModelActions = {},\n V extends object = {},\n VS extends object = {}\n >(fn: (self: Instance<this>) => { actions?: A; views?: V; state?: VS }) {\n const initializer = (self: Instance<this>) => {\n const { actions, views, state, ...rest } = fn(self)\n for (const key in rest) {\n throw fail(\n `The \\`extend\\` function should return an object with a subset of the fields 'actions', 'views' and 'state'. Found invalid key '${key}'`\n )\n }\n if (state) {\n this.instantiateVolatileState(self, state)\n }\n if (views) {\n this.instantiateViews(self, views)\n }\n if (actions) {\n this.instantiateActions(self, actions)\n }\n return self\n }\n return this.cloneAndEnhance({ initializers: [initializer] })\n }\n\n views<V extends object>(fn: (self: Instance<this>) => V) {\n const viewInitializer = (self: Instance<this>) => {\n this.instantiateViews(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [viewInitializer] })\n }\n\n private instantiateViews(self: this[\"T\"], views: object): void {\n // check views return\n if (!isPlainObject(views)) {\n throw fail(\n `views initializer should return a plain object containing views`\n )\n }\n Object.getOwnPropertyNames(views).forEach(key => {\n // is this a computed property?\n const descriptor = Object.getOwnPropertyDescriptor(views, key)!\n if (\"get\" in descriptor) {\n defineProperty(self, key, descriptor)\n makeObservable(self, { [key]: computed } as any)\n } else if (typeof descriptor.value === \"function\") {\n // this is a view function, merge as is!\n // See #646, allow models to be mocked\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n self,\n key,\n descriptor.value\n )\n } else {\n throw fail(\n `A view member should either be a function or getter based property`\n )\n }\n })\n }\n\n preProcessSnapshot: MT[\"preProcessSnapshot\"] = preProcessor => {\n const currentPreprocessor = this.preProcessor\n if (!currentPreprocessor) {\n return this.cloneAndEnhance({ preProcessor })\n } else {\n return this.cloneAndEnhance({\n preProcessor: snapshot => currentPreprocessor(preProcessor(snapshot))\n })\n }\n }\n\n postProcessSnapshot: MT[\"postProcessSnapshot\"] = postProcessor => {\n const currentPostprocessor = this.postProcessor\n if (!currentPostprocessor) {\n return this.cloneAndEnhance({ postProcessor })\n } else {\n return this.cloneAndEnhance({\n postProcessor: snapshot => postProcessor(currentPostprocessor(snapshot))\n })\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const value = isStateTreeNode(initialValue)\n ? initialValue\n : this.applySnapshotPreProcessor(initialValue)\n return createObjectNode(this, parent, subpath, environment, value)\n // Optimization: record all prop- view- and action names after first construction, and generate an optimal base class\n // that pre-reserves all these fields for fast object-member lookups\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n initialSnapshot: any = {}\n ): IChildNodesMap {\n const type = objNode.type as this\n const result: IChildNodesMap = {}\n type.forAllProps((name, childType) => {\n result[name] = childType.instantiate(\n objNode,\n name,\n undefined,\n (initialSnapshot as any)[name]\n )\n })\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n const options = { ...mobxShallow, name: this.name }\n return observable.object(childNodes, EMPTY_OBJECT, options) as any\n }\n\n finalizeNewInstance(node: this[\"N\"], instance: this[\"T\"]): void {\n addHiddenFinalProp(instance, \"toString\", objectTypeToString)\n\n this.forAllProps(name => {\n _interceptReads(instance, name, node.unbox)\n })\n\n this.initializers.reduce((self, fn) => fn(self), instance)\n intercept(instance, this.willChange)\n observe(instance, this.didChange)\n }\n\n private willChange(chg: IObjectWillChange): IObjectWillChange | null {\n // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop\n const change = chg as IObjectWillChange & { newValue?: any }\n\n const node = getStateTreeNode(change.object)\n const subpath = change.name as string\n node.assertWritable({ subpath })\n const childType = (node.type as this).properties[subpath]\n // only properties are typed, state are stored as-is references\n if (childType) {\n typecheckInternal(childType, change.newValue)\n change.newValue = childType.reconcile(\n node.getChildNode(subpath),\n change.newValue,\n node,\n subpath\n )\n }\n return change\n }\n\n private didChange(chg: IObjectDidChange) {\n // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop\n const change = chg as IObjectWillChange & { newValue?: any; oldValue?: any }\n\n const childNode = getStateTreeNode(change.object)\n const childType = (childNode.type as this).properties[change.name as string]\n if (!childType) {\n // don't emit patches for volatile state\n return\n }\n const oldChildValue = change.oldValue ? change.oldValue.snapshot : undefined\n childNode.emitPatch(\n {\n op: \"replace\",\n path: escapeJsonPath(change.name as string),\n value: change.newValue.snapshot,\n oldValue: oldChildValue\n },\n childNode\n )\n }\n\n getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode> {\n const res: AnyNode[] = []\n this.forAllProps(name => {\n res.push(this.getChildNode(node, name))\n })\n return res\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n if (!(key in this.properties)) {\n throw fail(\"Not a value property: \" + key)\n }\n const adm = _getAdministration(node.storedValue, key)\n const childNode = adm.raw?.()\n if (!childNode) {\n throw fail(\"Node not available for property \" + key)\n }\n return childNode\n }\n\n getSnapshot(node: this[\"N\"], applyPostProcess = true): this[\"S\"] {\n const res = {} as any\n this.forAllProps((name, _type) => {\n try {\n // TODO: FIXME, make sure the observable ref is used!\n const atom = getAtom(node.storedValue, name)\n ;(atom as any).reportObserved()\n } catch (_e) {\n throw fail(`${name} property is declared twice`)\n }\n res[name] = this.getChildNode(node, name).snapshot\n })\n if (applyPostProcess) {\n return this.applySnapshotPostProcessor(res)\n }\n return res\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed = {} as any\n Object.keys(childNodes).forEach(key => {\n processed[key] = childNodes[key].getSnapshot()\n })\n return this.applySnapshotPostProcessor(processed)\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n if (!(patch.op === \"replace\" || patch.op === \"add\")) {\n throw fail(`object does not support operation ${patch.op}`)\n }\n ;(node.storedValue as any)[subpath] = patch.value\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const preProcessedSnapshot = this.applySnapshotPreProcessor(snapshot)\n this.forAllProps(name => {\n ;(node.storedValue as any)[name] = preProcessedSnapshot[name]\n })\n }\n\n applySnapshotPreProcessor(snapshot: any) {\n const processor = this.preProcessor\n return processor ? processor.call(null, snapshot) : snapshot\n }\n\n applySnapshotPostProcessor(snapshot: any) {\n const postProcessor = this.postProcessor\n if (postProcessor) {\n return postProcessor.call(null, snapshot)\n }\n return snapshot\n }\n\n getChildType(propertyName: string): IAnyType {\n assertIsString(propertyName, 1)\n\n return this.properties[propertyName]\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const snapshot = this.applySnapshotPreProcessor(value)\n\n if (!isPlainObject(snapshot)) {\n return typeCheckFailure(context, snapshot, \"Value is not a plain object\")\n }\n\n for (const key of this.propertyNames) {\n const propType = this.properties[key]!\n getContextForPath(context, key, propType)\n const errors = propType.validate(snapshot[key], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n private forAllProps(fn: (name: string, type: IAnyType) => void) {\n this.propertyNames.forEach(key => fn(key, this.properties[key]))\n }\n\n describe() {\n // optimization: cache\n return (\n \"{ \" +\n this.propertyNames\n .map(key => key + \": \" + this.properties[key].describe())\n .join(\"; \") +\n \" }\"\n )\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_OBJECT as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n ;(node.storedValue as any)[subpath] = undefined\n }\n}\nModelType.prototype.applySnapshot = action(ModelType.prototype.applySnapshot)\n\nexport function model<P extends ModelPropertiesDeclaration = {}>(\n name: string,\n properties?: P\n): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>\nexport function model<P extends ModelPropertiesDeclaration = {}>(\n properties?: P\n): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>\n/**\n * `types.model` - Creates a new model type by providing a name, properties, volatile state and actions.\n *\n * See the [model type](/concepts/trees#creating-models) description or the [getting started](intro/getting-started.md#getting-started-1) tutorial.\n */\nexport function model(...args: any[]): any {\n if (devMode() && typeof args[0] !== \"string\" && args[1]) {\n throw fail(\n \"Model creation failed. First argument must be a string when two arguments are provided\"\n )\n }\n\n const name = typeof args[0] === \"string\" ? args.shift() : \"AnonymousModel\"\n const properties = args.shift() || {}\n return new ModelType({ name, properties })\n}\n\n// TODO: this can be simplified in TS3, since we can transform _NotCustomized to unknown, since unkonwn & X = X\n// and then back unknown to _NotCustomized if needed\n/** @hidden */\nexport type _CustomJoin<A, B> = A extends _NotCustomized ? B : A & B\n\n// generated with C:\\VSProjects\\github\\mobx-state-tree-upstream\\packages\\mobx-state-tree\\scripts\\generate-compose-type.js\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): IModelType<PA & PB, OA & OB, _CustomJoin<FCA, FCB>, _CustomJoin<FSA, FSB>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): IModelType<PA & PB, OA & OB, _CustomJoin<FCA, FCB>, _CustomJoin<FSA, FSB>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): IModelType<PA & PB & PC, OA & OB & OC, _CustomJoin<FCA, _CustomJoin<FCB, FCC>>, _CustomJoin<FSA, _CustomJoin<FSB, FSC>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): IModelType<PA & PB & PC, OA & OB & OC, _CustomJoin<FCA, _CustomJoin<FCB, FCC>>, _CustomJoin<FSA, _CustomJoin<FSB, FSC>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): IModelType<PA & PB & PC & PD, OA & OB & OC & OD, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, FCD>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, FSD>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): IModelType<PA & PB & PC & PD, OA & OB & OC & OD, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, FCD>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, FSD>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): IModelType<PA & PB & PC & PD & PE, OA & OB & OC & OD & OE, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, FCE>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, FSE>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(A:\n IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): IModelType<PA & PB & PC & PD & PE, OA & OB & OC & OD & OE, _CustomJoin<FCA,\n _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, FCE>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, FSE>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): IModelType<PA & PB & PC & PD & PE & PF, OA & OB & OC & OD & OE & OF, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, FCF>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, FSF>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): IModelType<PA & PB & PC & PD & PE & PF, OA & OB & OC & OD & OE & OF, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, FCF>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, FSF>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): IModelType<PA & PB & PC & PD & PE & PF & PG, OA & OB & OC & OD & OE & OF & OG, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, FCG>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, FSG>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): IModelType<PA & PB & PC & PD & PE & PF & PG, OA & OB & OC & OD & OE & OF & OG, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, FCG>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, FSG>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH, OA & OB & OC & OD & OE & OF & OG & OH, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, FCH>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, FSH>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH, OA & OB & OC & OD & OE & OF & OG & OH, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, FCH>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, FSH>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH & PI, OA & OB & OC & OD & OE & OF & OG & OH & OI, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, _CustomJoin<FCH, FCI>>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, _CustomJoin<FSH, FSI>>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH & PI, OA & OB & OC & OD & OE & OF & OG & OH & OI, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, _CustomJoin<FCH, FCI>>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, _CustomJoin<FSH, FSI>>>>>>>>>\n\n/**\n * `types.compose` - Composes a new model from one or more existing model types.\n * This method can be invoked in two forms:\n * Given 2 or more model types, the types are composed into a new Type.\n * Given first parameter as a string and 2 or more model types,\n * the types are composed into a new Type with the given name\n */\nexport function compose(...args: any[]): any {\n // TODO: just join the base type names if no name is provided\n const hasTypename = typeof args[0] === \"string\"\n const typeName: string = hasTypename ? args[0] : \"AnonymousModel\"\n if (hasTypename) {\n args.shift()\n }\n\n // check all parameters\n if (devMode()) {\n args.forEach((type, i) => {\n assertArg(\n type,\n isModelType,\n \"mobx-state-tree model type\",\n hasTypename ? i + 2 : i + 1\n )\n })\n }\n\n return args\n .reduce((prev, cur) =>\n prev.cloneAndEnhance({\n name: prev.name + \"_\" + cur.name,\n properties: cur.properties,\n initializers: cur.initializers,\n preProcessor: (snapshot: any) =>\n cur.applySnapshotPreProcessor(\n prev.applySnapshotPreProcessor(snapshot)\n ),\n postProcessor: (snapshot: any) =>\n cur.applySnapshotPostProcessor(\n prev.applySnapshotPostProcessor(snapshot)\n )\n })\n )\n .named(typeName)\n}\n\n/**\n * Returns if a given value represents a model type.\n *\n * @param type\n * @returns\n */\nexport function isModelType<IT extends IAnyModelType = IAnyModelType>(\n type: IAnyType\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Object) > 0\n}\n","import {\n SimpleType,\n TypeFlags,\n createScalarNode,\n fail,\n identity,\n isFinite,\n isFloat,\n isInteger,\n isPrimitive,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../internal.ts\"\n\nimport type {\n AnyNode,\n AnyObjectNode,\n ISimpleType,\n IType,\n IValidationContext,\n IValidationResult\n} from \"../internal.ts\"\n\n// TODO: implement CoreType using types.custom ?\n/**\n * @internal\n * @hidden\n */\nexport class CoreType<C, S, T> extends SimpleType<C, S, T> {\n constructor(\n name: string,\n readonly flags: TypeFlags,\n private readonly checker: (value: C) => boolean,\n private readonly initializer: (v: C) => T = identity\n ) {\n super(name)\n this.flags = flags\n }\n\n describe() {\n return this.name\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ): this[\"N\"] {\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n createNewInstance(snapshot: C) {\n return this.initializer(snapshot)\n }\n\n isValidSnapshot(value: C, context: IValidationContext): IValidationResult {\n if (isPrimitive(value) && this.checker(value as any)) {\n return typeCheckSuccess()\n }\n const typeName =\n this.name === \"Date\" ? \"Date or a unix milliseconds timestamp\" : this.name\n return typeCheckFailure(context, value, `Value is not a ${typeName}`)\n }\n}\n\n/**\n * `types.string` - Creates a type that can only contain a string value.\n * This type is used for string values by default\n *\n * Example:\n * ```ts\n * const Person = types.model({\n * firstName: types.string,\n * lastName: \"Doe\"\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const string: ISimpleType<string> = new CoreType<string, string, string>(\n \"string\",\n TypeFlags.String,\n v => typeof v === \"string\"\n)\n\n/**\n * `types.number` - Creates a type that can only contain a numeric value.\n * This type is used for numeric values by default\n *\n * Example:\n * ```ts\n * const Vector = types.model({\n * x: types.number,\n * y: 1.5\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const number: ISimpleType<number> = new CoreType<number, number, number>(\n \"number\",\n TypeFlags.Number,\n v => typeof v === \"number\"\n)\n\n/**\n * `types.integer` - Creates a type that can only contain an integer value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.integer,\n * height: 10\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const integer: ISimpleType<number> = new CoreType<\n number,\n number,\n number\n>(\"integer\", TypeFlags.Integer, v => isInteger(v))\n\n/**\n * `types.float` - Creates a type that can only contain an float value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.float,\n * height: 10\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const float: ISimpleType<number> = new CoreType<number, number, number>(\n \"float\",\n TypeFlags.Float,\n v => isFloat(v)\n)\n\n/**\n * `types.finite` - Creates a type that can only contain an finite value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.finite,\n * height: 10\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const finite: ISimpleType<number> = new CoreType<number, number, number>(\n \"finite\",\n TypeFlags.Finite,\n v => isFinite(v)\n)\n\n/**\n * `types.boolean` - Creates a type that can only contain a boolean value.\n * This type is used for boolean values by default\n *\n * Example:\n * ```ts\n * const Thing = types.model({\n * isCool: types.boolean,\n * isAwesome: false\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nexport const boolean: ISimpleType<boolean> = new CoreType<\n boolean,\n boolean,\n boolean\n>(\"boolean\", TypeFlags.Boolean, v => typeof v === \"boolean\")\n\n/**\n * `types.null` - The type of the value `null`\n */\nexport const nullType: ISimpleType<null> = new CoreType<null, null, null>(\n \"null\",\n TypeFlags.Null,\n v => v === null\n)\n\n/**\n * `types.undefined` - The type of the value `undefined`\n */\nexport const undefinedType: ISimpleType<undefined> = new CoreType<\n undefined,\n undefined,\n undefined\n>(\"undefined\", TypeFlags.Undefined, v => v === undefined)\n\nconst _DatePrimitive = new CoreType<number | Date, number, Date>(\n \"Date\",\n TypeFlags.Date,\n v => typeof v === \"number\" || v instanceof Date,\n v => (v instanceof Date ? v : new Date(v))\n)\n_DatePrimitive.getSnapshot = function (node: AnyNode) {\n return node.storedValue.getTime()\n}\n\n/**\n * `types.Date` - Creates a type that can only contain a javascript Date value.\n *\n * Example:\n * ```ts\n * const LogLine = types.model({\n * timestamp: types.Date,\n * })\n *\n * LogLine.create({ timestamp: new Date() })\n * ```\n */\nexport const DatePrimitive: IType<number | Date, number, Date> = _DatePrimitive\n\n/**\n * @internal\n * @hidden\n */\nexport function getPrimitiveFactoryFromValue(value: any): ISimpleType<any> {\n switch (typeof value) {\n case \"string\":\n return string\n case \"number\":\n return number // In the future, isInteger(value) ? integer : number would be interesting, but would be too breaking for now\n case \"boolean\":\n return boolean\n case \"object\":\n if (value instanceof Date) {\n return DatePrimitive\n }\n }\n throw fail(\"Cannot determine primitive type from value \" + value)\n}\n\n/**\n * Returns if a given value represents a primitive type.\n *\n * @param type\n * @returns\n */\nexport function isPrimitiveType<\n IT extends\n | ISimpleType<string>\n | ISimpleType<number>\n | ISimpleType<boolean>\n | typeof DatePrimitive\n>(type: IT): type is IT {\n return (\n isType(type) &&\n (type.flags &\n (TypeFlags.String |\n TypeFlags.Number |\n TypeFlags.Integer |\n TypeFlags.Boolean |\n TypeFlags.Date)) >\n 0\n )\n}\n","import {\n type AnyObjectNode,\n type ISimpleType,\n type IValidationContext,\n type IValidationResult,\n type Primitives,\n SimpleType,\n TypeFlags,\n createScalarNode,\n isPrimitive,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\nimport { assertArg } from \"../../utils.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class Literal<T> extends SimpleType<T, T, T> {\n readonly value: T\n readonly flags = TypeFlags.Literal\n\n constructor(value: T) {\n super(JSON.stringify(value))\n this.value = value\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"]\n ): this[\"N\"] {\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n describe() {\n return JSON.stringify(this.value)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (isPrimitive(value) && value === this.value) {\n return typeCheckSuccess()\n }\n return typeCheckFailure(\n context,\n value,\n `Value is not a literal ${JSON.stringify(this.value)}`\n )\n }\n}\n\n/**\n * `types.literal` - The literal type will return a type that will match only the exact given type.\n * The given value must be a primitive, in order to be serialized to a snapshot correctly.\n * You can use literal to match exact strings for example the exact male or female string.\n *\n * Example:\n * ```ts\n * const Person = types.model({\n * name: types.string,\n * gender: types.union(types.literal('male'), types.literal('female'))\n * })\n * ```\n *\n * @param value The value to use in the strict equal check\n * @returns\n */\nexport function literal<S extends Primitives>(value: S): ISimpleType<S> {\n // check that the given value is a primitive\n assertArg(value, isPrimitive, \"primitive\", 1)\n\n return new Literal<S>(value)\n}\n\n/**\n * Returns if a given value represents a literal type.\n *\n * @param type\n * @returns\n */\nexport function isLiteralType<IT extends ISimpleType<any>>(\n type: IT\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Literal) > 0\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n assertIsType,\n getStateTreeNode,\n isStateTreeNode,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\nimport { assertIsFunction, assertIsString } from \"../../utils.ts\"\n\nclass Refinement<IT extends IAnyType> extends BaseType<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.Refinement\n }\n\n constructor(\n name: string,\n private readonly _subtype: IT,\n private readonly _predicate: (v: IT[\"CreationType\"]) => boolean,\n private readonly _message: (v: IT[\"CreationType\"]) => string\n ) {\n super(name)\n }\n\n describe() {\n return this.name\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n // create the child type\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as any\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._subtype.isAssignableFrom(type)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const subtypeErrors = this._subtype.validate(value, context)\n if (subtypeErrors.length > 0) {\n return subtypeErrors\n }\n\n const snapshot = isStateTreeNode(value)\n ? getStateTreeNode(value).snapshot\n : value\n\n if (!this._predicate(snapshot)) {\n return typeCheckFailure(context, value, this._message(value))\n }\n\n return typeCheckSuccess()\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this._subtype.reconcile(current, newValue, parent, subpath) as any\n }\n\n getSubTypes() {\n return this._subtype\n }\n}\n\nexport function refinement<IT extends IAnyType>(\n name: string,\n type: IT,\n predicate: (snapshot: IT[\"CreationType\"]) => boolean,\n message?: string | ((v: IT[\"CreationType\"]) => string)\n): IT\nexport function refinement<IT extends IAnyType>(\n type: IT,\n predicate: (snapshot: IT[\"CreationType\"]) => boolean,\n message?: string | ((v: IT[\"CreationType\"]) => string)\n): IT\n\n/**\n * `types.refinement` - Creates a type that is more specific than the base type, e.g. `types.refinement(types.string, value => value.length > 5)` to create a type of strings that can only be longer then 5.\n *\n * @param name\n * @param type\n * @param predicate\n * @returns\n */\nexport function refinement(...args: any[]): IAnyType {\n const name =\n typeof args[0] === \"string\"\n ? args.shift()\n : isType(args[0])\n ? args[0].name\n : null\n const type = args[0]\n const predicate = args[1]\n const message = args[2]\n ? args[2]\n : (_v: any) => \"Value does not respect the refinement predicate\"\n // ensures all parameters are correct\n assertIsType(type, [1, 2])\n assertIsString(name, 1)\n assertIsFunction(predicate, [2, 3])\n assertIsFunction(message, [3, 4])\n\n return new Refinement(name, type, predicate, message)\n}\n\n/**\n * Returns if a given value is a refinement type.\n *\n * @param type\n * @returns\n */\nexport function isRefinementType<IT extends IAnyType>(type: IT): type is IT {\n return (type.flags & TypeFlags.Refinement) > 0\n}\n","import {\n type ISimpleType,\n assertIsString,\n devMode,\n literal,\n union\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport type UnionStringArray<T extends readonly string[]> = T[number]\n\n// strongly typed enumeration forms for plain and readonly string arrays (when passed directly to the function).\n// with these overloads, we get correct typing for native TS string enums when we use Object.values(Enum) as Enum[] as options.\n// these overloads also allow both mutable and immutable arrays, making types.enumeration<Enum>(Object.values(Enum)) possible.\n// the only case where this doesn't work is when passing to the function an array variable with a mutable type constraint;\n// for these cases, it will just fallback and assume the type is a generic string.\nexport function enumeration<T extends readonly string[]>(\n options: T\n): ISimpleType<UnionStringArray<T>>\nexport function enumeration<T extends string>(\n name: string,\n options: T[]\n): ISimpleType<UnionStringArray<T[]>>\n\n/**\n * `types.enumeration` - Can be used to create an string based enumeration.\n * (note: this methods is just sugar for a union of string literals)\n *\n * Example:\n * ```ts\n * const TrafficLight = types.model({\n * color: types.enumeration(\"Color\", [\"Red\", \"Orange\", \"Green\"])\n * })\n * ```\n *\n * @param name descriptive name of the enumeration (optional)\n * @param options possible values this enumeration can have\n * @returns\n */\nexport function enumeration(\n name: string | string[],\n options?: any\n): ISimpleType<string> {\n const realOptions: string[] = typeof name === \"string\" ? options! : name\n // check all options\n if (devMode()) {\n realOptions.forEach((option, i) => {\n assertIsString(option, i + 1)\n })\n }\n const type = union(...realOptions.map(option => literal(\"\" + option)))\n if (typeof name === \"string\") {\n type.name = name\n }\n return type\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type IAnyType,\n type IModelType,\n type IType,\n type IValidationContext,\n type IValidationError,\n type IValidationResult,\n type ModelCreationType2,\n type ModelInstanceType,\n type ModelProperties,\n type ModelSnapshotType2,\n ModelType,\n TypeFlags,\n type _NotCustomized,\n assertArg,\n assertIsType,\n devMode,\n fail,\n flattenTypeErrors,\n isPlainObject,\n isStateTreeNode,\n isType,\n isTypeCheckingEnabled,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport type ITypeDispatcher = (snapshot: any) => IAnyType\n\nexport interface UnionOptions {\n eager?: boolean\n dispatcher?: ITypeDispatcher\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class Union extends BaseType<any, any, any> {\n private readonly _dispatcher?: ITypeDispatcher\n private readonly _eager: boolean = true\n\n get flags() {\n let result: TypeFlags = TypeFlags.Union\n\n this._types.forEach(type => {\n result |= type.flags\n })\n\n return result\n }\n\n constructor(\n name: string,\n private readonly _types: IAnyType[],\n options?: UnionOptions\n ) {\n super(name)\n options = {\n eager: true,\n dispatcher: undefined,\n ...options\n }\n this._dispatcher = options.dispatcher\n if (!options.eager) {\n this._eager = false\n }\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._types.some(subType => subType.isAssignableFrom(type))\n }\n\n describe() {\n return (\n \"(\" + this._types.map(factory => factory.describe()).join(\" | \") + \")\"\n )\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const type = this.determineType(initialValue, undefined)\n if (!type) {\n throw fail(this.noMatchMessage(initialValue))\n } // can happen in prod builds\n return type.instantiate(parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const type = this.determineType(newValue, current.getReconciliationType())\n if (!type) {\n throw fail(this.noMatchMessage(newValue))\n } // can happen in prod builds\n return type.reconcile(current, newValue, parent, subpath)\n }\n\n private noMatchMessage(value: unknown): string {\n const discriminator =\n isPlainObject(value) && typeof (value as any).type === \"string\"\n ? ` for snapshot with type \"${(value as any).type}\"`\n : \"\"\n return `No matching type for union ${this.name}${discriminator}`\n }\n\n determineType(\n value: this[\"C\"] | this[\"T\"],\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // try the dispatcher, if defined\n if (this._dispatcher) {\n return this._dispatcher(value)\n }\n\n // fast path: when type checking is disabled, try quick structural matching first\n if (!isTypeCheckingEnabled()) {\n const quickMatch = this.tryQuickMatch(value, reconcileCurrentType)\n if (quickMatch) {\n return quickMatch\n }\n // for plain object snapshots that didn't match via quick path, try all types\n // with quick matching before falling back to full validation\n // (state tree nodes must go through full validation for type identity checks)\n if (isPlainObject(value) && !isStateTreeNode(value)) {\n for (const type of this._types) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n }\n }\n\n // find the most accomodating type\n // if we are using reconciliation try the current node type first (fix for #1045)\n if (reconcileCurrentType) {\n if (reconcileCurrentType.is(value)) {\n return reconcileCurrentType\n }\n return this._types\n .filter(t => t !== reconcileCurrentType)\n .find(type => type.is(value))\n } else {\n return this._types.find(type => type.is(value))\n }\n }\n\n private tryQuickMatch(\n value: any,\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // state tree nodes need full type compatibility checking\n // (e.g., A.is(B.create()) must return false even if snapshots are compatible)\n if (isStateTreeNode(value)) {\n return undefined\n }\n\n // for non-object values, try primitive matching\n if (!isPlainObject(value)) {\n return this.tryMatchPrimitive(value)\n }\n\n // for objects, try structural matching against model types\n const typesToCheck = reconcileCurrentType\n ? [\n reconcileCurrentType,\n ...this._types.filter(t => t !== reconcileCurrentType)\n ]\n : this._types\n\n for (const type of typesToCheck) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n return undefined\n }\n\n private tryMatchPrimitive(value: any): IAnyType | undefined {\n const valueType = typeof value\n for (const type of this._types) {\n const flags = type.flags\n if (\n (valueType === \"string\" && flags & TypeFlags.String) ||\n (valueType === \"number\" &&\n flags &\n (TypeFlags.Number |\n TypeFlags.Integer |\n TypeFlags.Float |\n TypeFlags.Finite)) ||\n (valueType === \"boolean\" && flags & TypeFlags.Boolean) ||\n (value === null && flags & TypeFlags.Null) ||\n (value === undefined && flags & TypeFlags.Undefined)\n ) {\n return type\n }\n // for literals, check exact value match\n if (flags & TypeFlags.Literal) {\n if (type.is(value)) {\n return type\n }\n }\n }\n return undefined\n }\n\n private snapshotLooksLikeType(value: any, type: IAnyType): boolean {\n // for model types, check if snapshot has all the required property keys\n // and that any literal-typed properties match exactly\n if (type instanceof ModelType) {\n const props = type.properties\n // use cached propertyNames from ModelType instead of Object.keys()\n for (const key of type.propertyNames) {\n const propType = props[key]!\n const isOptional = propType.flags & TypeFlags.Optional\n const propValue = value[key]\n\n // check required properties exist and are not undefined\n // (unless the type accepts undefined, which Optional types do)\n if (!isOptional) {\n if (!(key in value) || propValue === undefined) {\n return false\n }\n }\n\n // for literal types, verify the value matches exactly\n // this is critical for discriminated unions\n if (propType.flags & TypeFlags.Literal) {\n if (!propType.is(propValue)) {\n return false\n }\n }\n }\n return true\n }\n return false\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this._dispatcher) {\n return this._dispatcher(value).validate(value, context)\n }\n\n // for plain-object snapshots, prefer union members whose literal-typed\n // discriminator properties match the value (e.g. {type: \"MsaView\"})\n // so error output is scoped to the intended branch instead of every member\n const candidates =\n isPlainObject(value) && !isStateTreeNode(value)\n ? this._types.filter(t => this.snapshotLooksLikeType(value, t))\n : []\n const typesToValidate = candidates.length > 0 ? candidates : this._types\n\n const allErrors: IValidationError[][] = []\n let applicableTypes = 0\n for (const type of typesToValidate) {\n const errors = type.validate(value, context)\n if (errors.length === 0) {\n if (this._eager) {\n return typeCheckSuccess()\n } else {\n applicableTypes++\n }\n } else {\n allErrors.push(errors)\n }\n }\n\n if (applicableTypes === 1) {\n return typeCheckSuccess()\n }\n return typeCheckFailure(\n context,\n value,\n \"No type is applicable for the union\"\n ).concat(flattenTypeErrors(allErrors))\n }\n\n getSubTypes() {\n return this._types\n }\n}\n\n/**\n * Transform _NotCustomized | _NotCustomized... to _NotCustomized, _NotCustomized | A | B to A | B\n * @hidden\n */\nexport type _CustomCSProcessor<T> =\n Exclude<T, _NotCustomized> extends never\n ? _NotCustomized\n : Exclude<T, _NotCustomized>\n\n/** @hidden */\nexport interface ITypeUnion<C, S, T> extends IType<\n _CustomCSProcessor<C>,\n _CustomCSProcessor<S>,\n T\n> {}\n\n// generated with packages/mobx-state-tree/scripts/generate-union-types.js\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB,\n OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G:\n IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE,\n FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD,\n OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB |\n CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB | CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD |\n TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD | TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC |\n SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB,\n TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC | SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD |\n CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n\n// manually written\nexport function union(...types: IAnyType[]): IAnyType\nexport function union(\n dispatchOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType\n/**\n * `types.union` - Create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function of the form `(snapshot) => Type`.\n *\n * @param optionsOrType\n * @param otherTypes\n * @returns\n */\nexport function union(\n optionsOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType {\n const options = isType(optionsOrType) ? undefined : optionsOrType\n const types = isType(optionsOrType)\n ? [optionsOrType, ...otherTypes]\n : otherTypes\n const name = \"(\" + types.map(type => type.name).join(\" | \") + \")\"\n\n // check all options\n if (devMode()) {\n if (options) {\n assertArg(\n options,\n o => isPlainObject(o),\n \"object { eager?: boolean, dispatcher?: Function }\",\n 1\n )\n }\n types.forEach((type, i) => {\n assertIsType(type, options ? i + 2 : i + 1)\n })\n }\n return new Union(name, types, options)\n}\n\n/**\n * Returns if a given value represents a union type.\n *\n * @param type\n * @returns\n */\nexport function isUnionType<IT extends IAnyType>(type: IT): type is IT {\n return (type.flags & TypeFlags.Union) > 0\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractCSTWithSTN,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n assertIsType,\n devMode,\n fail,\n isStateTreeNode,\n isType,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\ntype IFunctionReturn<T> = () => T\n\ntype IOptionalValue<C, T> = C | IFunctionReturn<C | T>\n\n/** @hidden */\nexport type ValidOptionalValue = string | boolean | number | null | undefined\n\n/** @hidden */\nexport type ValidOptionalValues = [ValidOptionalValue, ...ValidOptionalValue[]]\n\n/**\n * @hidden\n * @internal\n */\nexport class OptionalValue<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n> extends BaseType<\n IT[\"CreationType\"] | OptionalVals[number],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.Optional\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _defaultValue: IOptionalValue<\n IT[\"CreationType\"],\n IT[\"Type\"]\n >,\n readonly optionalValues: OptionalVals\n ) {\n super(_subtype.name)\n }\n\n describe() {\n return this._subtype.describe() + \"?\"\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n if (this.optionalValues.indexOf(initialValue) >= 0) {\n const defaultInstanceOrSnapshot = this.getDefaultInstanceOrSnapshot()\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n defaultInstanceOrSnapshot\n )\n }\n return this._subtype.instantiate(parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this._subtype.reconcile(\n current,\n this.optionalValues.indexOf(newValue) < 0 && this._subtype.is(newValue)\n ? newValue\n : this.getDefaultInstanceOrSnapshot(),\n parent,\n subpath\n )\n }\n\n getDefaultInstanceOrSnapshot(): this[\"C\"] | this[\"T\"] {\n const defaultInstanceOrSnapshot =\n typeof this._defaultValue === \"function\"\n ? (this._defaultValue as IFunctionReturn<this[\"C\"] | this[\"T\"]>)()\n : this._defaultValue\n\n // while static values are already snapshots and checked on types.optional\n // generator functions must always be rechecked just in case\n if (typeof this._defaultValue === \"function\") {\n typecheckInternal(this, defaultInstanceOrSnapshot)\n }\n\n return defaultInstanceOrSnapshot\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n // defaulted values can be skipped\n if (this.optionalValues.indexOf(value) >= 0) {\n return typeCheckSuccess()\n }\n // bounce validation to the sub-type\n return this._subtype.validate(value, context)\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._subtype.isAssignableFrom(type)\n }\n\n getSubTypes() {\n return this._subtype\n }\n}\n\n/** @hidden */\nexport type OptionalDefaultValueOrFunction<IT extends IAnyType> =\n | IT[\"CreationType\"]\n | IT[\"SnapshotType\"]\n | (() => ExtractCSTWithSTN<IT>)\n\n/** @hidden */\nexport interface IOptionalIType<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n> extends IType<\n IT[\"CreationType\"] | OptionalVals[number],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n> {}\n\nfunction checkOptionalPreconditions<IT extends IAnyType>(\n type: IAnyType,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>\n) {\n // make sure we never pass direct instances\n if (\n typeof defaultValueOrFunction !== \"function\" &&\n isStateTreeNode(defaultValueOrFunction)\n ) {\n throw fail(\n \"default value cannot be an instance, pass a snapshot or a function that creates an instance/snapshot instead\"\n )\n }\n assertIsType(type, 1)\n if (devMode()) {\n // we only check default values if they are passed directly\n // if they are generator functions they will be checked once they are generated\n // we don't check generator function results here to avoid generating a node just for type-checking purposes\n // which might generate side-effects\n if (typeof defaultValueOrFunction !== \"function\") {\n typecheckInternal(type, defaultValueOrFunction)\n }\n }\n}\n\nexport function optional<IT extends IAnyType>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>\n): IOptionalIType<IT, [undefined]>\nexport function optional<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>,\n optionalValues: OptionalVals\n): IOptionalIType<IT, OptionalVals>\n/**\n * `types.optional` - Can be used to create a property with a default value.\n *\n * Depending on the third argument (`optionalValues`) there are two ways of operation:\n * - If the argument is not provided, then if a value is not provided in the snapshot (`undefined` or missing),\n * it will default to the provided `defaultValue`\n * - If the argument is provided, then if the value in the snapshot matches one of the optional values inside the array then it will\n * default to the provided `defaultValue`. Additionally, if one of the optional values inside the array is `undefined` then a missing\n * property is also valid.\n *\n * Note that it is also possible to include values of the same type as the intended subtype as optional values,\n * in this case the optional value will be transformed into the `defaultValue` (e.g. `types.optional(types.string, \"unnamed\", [undefined, \"\"])`\n * will transform the snapshot values `undefined` (and therefore missing) and empty strings into the string `\"unnamed\"` when it gets\n * instantiated).\n *\n * If `defaultValue` is a function, the function will be invoked for every new instance.\n * Applying a snapshot in which the optional value is one of the optional values (or `undefined`/_not_ present if none are provided) causes the\n * value to be reset.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * title: types.string,\n * subtitle1: types.optional(types.string, \"\", [null]),\n * subtitle2: types.optional(types.string, \"\", [null, undefined]),\n * done: types.optional(types.boolean, false),\n * created: types.optional(types.Date, () => new Date()),\n * })\n *\n * // if done is missing / undefined it will become false\n * // if created is missing / undefined it will get a freshly generated timestamp\n * // if subtitle1 is null it will default to \"\", but it cannot be missing or undefined\n * // if subtitle2 is null or undefined it will default to \"\"; since it can be undefined it can also be missing\n * const todo = Todo.create({ title: \"Get coffee\", subtitle1: null })\n * ```\n *\n * @param type\n * @param defaultValueOrFunction\n * @param optionalValues an optional array with zero or more primitive values (string, number, boolean, null or undefined)\n * that will be converted into the default. `[ undefined ]` is assumed when none is provided\n * @returns\n */\nexport function optional<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>,\n optionalValues?: OptionalVals\n): IOptionalIType<IT, OptionalVals> {\n checkOptionalPreconditions(type, defaultValueOrFunction)\n\n return new OptionalValue(\n type,\n defaultValueOrFunction,\n optionalValues ? optionalValues : undefinedAsOptionalValues\n )\n}\n\nconst undefinedAsOptionalValues: [undefined] = [undefined]\n\n/**\n * Returns if a value represents an optional type.\n *\n * @template IT\n * @param type\n * @returns\n */\nexport function isOptionalType<IT extends IAnyType>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Optional) > 0\n}\n","import {\n type IAnyType,\n type IType,\n assertIsType,\n nullType,\n optional,\n undefinedType,\n union\n} from \"../../internal.ts\"\n\nconst optionalUndefinedType = optional(undefinedType, undefined)\nconst optionalNullType = optional(nullType, null)\n\n/** @hidden */\nexport interface IMaybeIType<IT extends IAnyType, C, O> extends IType<\n IT[\"CreationType\"] | C,\n IT[\"SnapshotType\"] | O,\n IT[\"TypeWithoutSTN\"] | O\n> {}\n\n/** @hidden */\nexport interface IMaybe<IT extends IAnyType> extends IMaybeIType<\n IT,\n undefined,\n undefined\n> {}\n\n/** @hidden */\nexport interface IMaybeNull<IT extends IAnyType> extends IMaybeIType<\n IT,\n null | undefined,\n null\n> {}\n\n/**\n * `types.maybe` - Maybe will make a type nullable, and also optional.\n * The value `undefined` will be used to represent nullability.\n *\n * @param type\n * @returns\n */\nexport function maybe<IT extends IAnyType>(type: IT): IMaybe<IT> {\n assertIsType(type, 1)\n\n return union(type, optionalUndefinedType)\n}\n\n/**\n * `types.maybeNull` - Maybe will make a type nullable, and also optional.\n * The value `null` will be used to represent no value.\n *\n * @param type\n * @returns\n */\nexport function maybeNull<IT extends IAnyType>(type: IT): IMaybeNull<IT> {\n assertIsType(type, 1)\n\n return union(type, optionalNullType)\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n cannotDetermineSubtype,\n devMode,\n fail,\n isType,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nclass Late<IT extends IAnyType> extends BaseType<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n private _subType?: IT\n\n get flags() {\n return (this._subType ? this._subType.flags : 0) | TypeFlags.Late\n }\n\n getSubType(mustSucceed: true): IT\n getSubType(mustSucceed: false): IT | undefined\n getSubType(mustSucceed: boolean): IT | undefined {\n if (!this._subType) {\n let t = undefined\n try {\n t = this._definition()\n } catch (e) {\n if (\n e instanceof ReferenceError\n ) // can happen in strict ES5 code when a definition is self refering\n {\n t = undefined\n } else {\n throw e\n }\n }\n if (mustSucceed && t === undefined) {\n throw fail(\n \"Late type seems to be used too early, the definition (still) returns undefined\"\n )\n }\n if (t) {\n if (devMode() && !isType(t)) {\n throw fail(\n \"Failed to determine subtype, make sure types.late returns a type definition.\"\n )\n }\n this._subType = t\n }\n }\n return this._subType\n }\n\n constructor(\n name: string,\n private readonly _definition: () => IT\n ) {\n super(name)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n return this.getSubType(true).instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as any\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this.getSubType(true).reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as any\n }\n\n describe() {\n const t = this.getSubType(false)\n return t ? t.name : \"<uknown late type>\"\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const t = this.getSubType(false)\n if (!t) {\n // See #916; the variable the definition closure is pointing to wasn't defined yet, so can't be evaluted yet here\n return typeCheckSuccess()\n }\n return t.validate(value, context)\n }\n\n isAssignableFrom(type: IAnyType) {\n const t = this.getSubType(false)\n return t ? t.isAssignableFrom(type) : false\n }\n\n getSubTypes() {\n const subtype = this.getSubType(false)\n return subtype ? subtype : cannotDetermineSubtype\n }\n}\n\nexport function late<T extends IAnyType>(type: () => T): T\nexport function late<T extends IAnyType>(name: string, type: () => T): T\n/**\n * `types.late` - Defines a type that gets implemented later. This is useful when you have to deal with circular dependencies.\n * Please notice that when defining circular dependencies TypeScript isn't smart enough to inference them.\n *\n * Example:\n * ```ts\n * // TypeScript isn't smart enough to infer self referencing types.\n * const Node = types.model({\n * children: types.array(types.late((): IAnyModelType => Node)) // then typecast each array element to Instance<typeof Node>\n * })\n * ```\n *\n * @param name The name to use for the type that will be returned.\n * @param type A function that returns the type that will be defined.\n * @returns\n */\nexport function late(nameOrType: any, maybeType?: () => IAnyType): IAnyType {\n const name =\n typeof nameOrType === \"string\"\n ? nameOrType\n : `late(${nameOrType.toString()})`\n const type = typeof nameOrType === \"string\" ? maybeType : nameOrType\n // checks that the type is actually a late type\n if (devMode()) {\n if (!(typeof type === \"function\" && type.length === 0)) {\n throw fail(\n \"Invalid late type, expected a function with zero arguments that returns a type, got: \" +\n type\n )\n }\n }\n return new Late(name, type)\n}\n\n/**\n * Returns if a given value represents a late type.\n *\n * @param type\n * @returns\n */\nexport function isLateType<IT extends IAnyType>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Late) > 0\n}\n","import { type IObservableArray, action, observable, when } from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n deepFreeze,\n isSerializable,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\ninterface LazyOptions<T extends IType<any, any, any>, U> {\n loadType: () => Promise<T>\n shouldLoadPredicate: (parent: U) => boolean\n}\n\nexport function lazy<T extends IType<any, any, any>, U>(\n name: string,\n options: LazyOptions<T, U>\n): T {\n // TODO: fix this unknown casting to be stricter\n return new Lazy(name, options) as unknown as T\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class Lazy<T extends IType<any, any, any>, U> extends SimpleType<\n T,\n T,\n T\n> {\n flags = TypeFlags.Lazy\n\n private loadedType: T | null = null\n private pendingNodeList: IObservableArray<AnyNode> = observable.array()\n\n constructor(\n name: string,\n private readonly options: LazyOptions<T, U>\n ) {\n super(name)\n\n when(\n () =>\n this.pendingNodeList.length > 0 &&\n this.pendingNodeList.some(\n node =>\n node.isAlive &&\n this.options.shouldLoadPredicate(\n node.parent ? node.parent.value : null\n )\n ),\n () => {\n this.options.loadType().then(\n action((type: T) => {\n this.loadedType = type\n this.pendingNodeList.forEach(node => {\n if (!node.parent) {\n return\n }\n if (!this.loadedType) {\n return\n }\n\n node.parent.applyPatches([\n {\n op: \"replace\",\n path: `/${node.subpath}`,\n value: node.snapshot\n }\n ])\n })\n })\n )\n }\n )\n }\n\n describe() {\n return `<lazy ${this.name}>`\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n value: this[\"C\"]\n ): this[\"N\"] {\n if (this.loadedType) {\n return this.loadedType.instantiate(\n parent,\n subpath,\n environment,\n value\n ) as this[\"N\"]\n }\n\n const node = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n deepFreeze(value)\n )\n this.pendingNodeList.push(node)\n\n when(\n () => !node.isAlive,\n () => this.pendingNodeList.splice(this.pendingNodeList.indexOf(node), 1)\n )\n\n return node\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this.loadedType) {\n return this.loadedType.validate(value, context)\n }\n if (!isSerializable(value)) {\n return typeCheckFailure(\n context,\n value,\n \"Value is not serializable and cannot be lazy\"\n )\n }\n return typeCheckSuccess()\n }\n\n reconcile(\n current: this[\"N\"],\n value: T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (this.loadedType) {\n current.die()\n return this.loadedType.instantiate(\n parent,\n subpath,\n parent.environment,\n value\n ) as this[\"N\"]\n }\n return super.reconcile(current, value, parent, subpath)\n }\n}\n","import {\n type AnyObjectNode,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n deepFreeze,\n isSerializable,\n isType,\n optional,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class Frozen<T> extends SimpleType<T, T, T> {\n flags = TypeFlags.Frozen\n\n constructor(private subType?: IAnyType) {\n super(subType ? `frozen(${subType.name})` : \"frozen\")\n }\n\n describe() {\n return \"<any immutable value>\"\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n value: this[\"C\"]\n ): this[\"N\"] {\n // create the node\n return createScalarNode(\n this,\n parent,\n subpath,\n environment,\n deepFreeze(value)\n )\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isSerializable(value)) {\n return typeCheckFailure(\n context,\n value,\n \"Value is not serializable and cannot be frozen\"\n )\n }\n if (this.subType) {\n return this.subType.validate(value, context)\n }\n return typeCheckSuccess()\n }\n}\n\nconst untypedFrozenInstance = new Frozen()\n\nexport function frozen<C>(subType: IType<C, any, any>): IType<C, C, C>\nexport function frozen<T>(defaultValue: T): IType<T | undefined | null, T, T>\nexport function frozen<T = any>(): IType<T, T, T> // do not assume undefined by default, let the user specify it if needed\n/**\n * `types.frozen` - Frozen can be used to store any value that is serializable in itself (that is valid JSON).\n * Frozen values need to be immutable or treated as if immutable. They need be serializable as well.\n * Values stored in frozen will snapshotted as-is by MST, and internal changes will not be tracked.\n *\n * This is useful to store complex, but immutable values like vectors etc. It can form a powerful bridge to parts of your application that should be immutable, or that assume data to be immutable.\n *\n * Note: if you want to store free-form state that is mutable, or not serializeable, consider using volatile state instead.\n *\n * Frozen properties can be defined in three different ways\n * 1. `types.frozen(SubType)` - provide a valid MST type and frozen will check if the provided data conforms the snapshot for that type\n * 2. `types.frozen({ someDefaultValue: true})` - provide a primitive value, object or array, and MST will infer the type from that object, and also make it the default value for the field\n * 3. `types.frozen<TypeScriptType>()` - provide a typescript type, to help in strongly typing the field (design time only)\n *\n * Example:\n * ```ts\n * const GameCharacter = types.model({\n * name: string,\n * location: types.frozen({ x: 0, y: 0})\n * })\n *\n * const hero = GameCharacter.create({\n * name: \"Mario\",\n * location: { x: 7, y: 4 }\n * })\n *\n * hero.location = { x: 10, y: 2 } // OK\n * hero.location.x = 7 // Not ok!\n * ```\n *\n * ```ts\n * type Point = { x: number, y: number }\n * const Mouse = types.model({\n * loc: types.frozen<Point>()\n * })\n * ```\n *\n * @param defaultValueOrType\n * @returns\n */\nexport function frozen(arg?: any): any {\n if (arguments.length === 0) {\n return untypedFrozenInstance\n } else if (isType(arg)) {\n return new Frozen(arg)\n } else {\n return optional(untypedFrozenInstance, arg)\n }\n}\n\n/**\n * Returns if a given value represents a frozen type.\n *\n * @param type\n * @returns\n */\nexport function isFrozenType<IT extends IType<T | any, T, T>, T = any>(\n type: IT\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Frozen) > 0\n}\n","import {\n type AnyNode,\n type AnyObjectNode,\n Hook,\n type IAnyComplexType,\n type IAnyStateTreeNode,\n type IAnyType,\n type IDisposer,\n type IMaybe,\n type IStateTreeNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n NodeLifeCycle,\n type ReferenceIdentifier,\n SimpleType,\n TypeFlags,\n applyPatch,\n assertIsType,\n createScalarNode,\n devMode,\n fail,\n getIdentifier,\n getStateTreeNode,\n isModelType,\n isStateTreeNode,\n isValidIdentifier,\n maybe,\n normalizeIdentifier,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport type OnReferenceInvalidatedEvent<STN extends IAnyStateTreeNode> = {\n parent: IAnyStateTreeNode\n invalidTarget: STN | undefined\n invalidId: ReferenceIdentifier\n replaceRef: (newRef: STN | null | undefined) => void\n removeRef: () => void\n cause: \"detach\" | \"destroy\" | \"invalidSnapshotReference\"\n}\n\nexport type OnReferenceInvalidated<STN extends IAnyStateTreeNode> = (\n event: OnReferenceInvalidatedEvent<STN>\n) => void\n\nfunction getInvalidationCause(hook: Hook): \"detach\" | \"destroy\" | undefined {\n switch (hook) {\n case Hook.beforeDestroy:\n return \"destroy\"\n case Hook.beforeDetach:\n return \"detach\"\n default:\n return undefined\n }\n}\n\n/** @hidden */\nexport type ReferenceT<IT extends IAnyType> = IT[\"TypeWithoutSTN\"] &\n IStateTreeNode<IReferenceType<IT>>\n\nclass StoredReference<IT extends IAnyType> {\n readonly identifier!: ReferenceIdentifier\n node!: AnyNode\n\n private resolvedReference?: {\n node: AnyObjectNode\n lastCacheModification: string\n }\n\n constructor(\n value: ReferenceT<IT> | ReferenceIdentifier,\n private readonly targetType: IT\n ) {\n if (isValidIdentifier(value)) {\n this.identifier = value\n } else if (isStateTreeNode(value)) {\n const targetNode = getStateTreeNode(value)\n if (!targetNode.identifierAttribute) {\n throw fail(\n `Can only store references with a defined identifier attribute.`\n )\n }\n const id = targetNode.unnormalizedIdentifier\n if (id === null || id === undefined) {\n throw fail(\n `Can only store references to tree nodes with a defined identifier.`\n )\n }\n this.identifier = id\n } else {\n throw fail(\n `Can only store references to tree nodes or identifiers, got: '${value}'`\n )\n }\n }\n\n private updateResolvedReference(node: AnyNode) {\n const normalizedId = normalizeIdentifier(this.identifier)\n const root = node.root\n const lastCacheModification =\n root.identifierCache!.getLastCacheModificationPerId(normalizedId)\n if (\n !this.resolvedReference ||\n this.resolvedReference.lastCacheModification !== lastCacheModification\n ) {\n const { targetType } = this\n // reference was initialized with the identifier of the target\n\n const target = root.identifierCache!.resolve(targetType, normalizedId)\n\n if (!target) {\n throw new InvalidReferenceError(\n `[mobx-state-tree] Failed to resolve reference '${this.identifier}' to type '${this.targetType.name}' (from node: ${node.path})`\n )\n }\n\n this.resolvedReference = {\n node: target!,\n lastCacheModification: lastCacheModification\n }\n }\n }\n\n get resolvedValue(): ReferenceT<IT> {\n this.updateResolvedReference(this.node)\n return this.resolvedReference!.node.value\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class InvalidReferenceError extends Error {\n constructor(m: string) {\n super(m)\n\n Object.setPrototypeOf(this, InvalidReferenceError.prototype)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport abstract class BaseReferenceType<\n IT extends IAnyComplexType\n> extends SimpleType<\n ReferenceIdentifier,\n ReferenceIdentifier,\n IT[\"TypeWithoutSTN\"]\n> {\n readonly flags = TypeFlags.Reference\n\n constructor(\n protected readonly targetType: IT,\n private readonly onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(`reference(${targetType.name})`)\n }\n\n describe() {\n return this.name\n }\n\n isAssignableFrom(type: IAnyType): boolean {\n return this.targetType.isAssignableFrom(type)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n return isValidIdentifier(value)\n ? typeCheckSuccess()\n : typeCheckFailure(\n context,\n value,\n \"Value is not a valid identifier, which is a string or a number\"\n )\n }\n\n private fireInvalidated(\n cause: \"detach\" | \"destroy\" | \"invalidSnapshotReference\",\n storedRefNode: this[\"N\"],\n referenceId: ReferenceIdentifier,\n refTargetNode: AnyObjectNode | null\n ) {\n // to actually invalidate a reference we need an alive parent,\n // since it is a scalar value (immutable-ish) and we need to change it\n // from the parent\n const storedRefParentNode = storedRefNode.parent\n if (!storedRefParentNode || !storedRefParentNode.isAlive) {\n return\n }\n const storedRefParentValue = storedRefParentNode.storedValue\n if (!storedRefParentValue) {\n return\n }\n this.onInvalidated!({\n cause,\n parent: storedRefParentValue,\n invalidTarget: refTargetNode ? refTargetNode.storedValue : undefined,\n invalidId: referenceId,\n replaceRef(newRef) {\n applyPatch(storedRefNode.root.storedValue, {\n op: \"replace\",\n value: newRef,\n path: storedRefNode.path\n })\n },\n removeRef() {\n if (isModelType(storedRefParentNode.type)) {\n this.replaceRef(undefined as any)\n } else {\n applyPatch(storedRefNode.root.storedValue, {\n op: \"remove\",\n path: storedRefNode.path\n })\n }\n }\n })\n }\n\n private addTargetNodeWatcher(\n storedRefNode: this[\"N\"],\n referenceId: ReferenceIdentifier\n ): IDisposer | undefined {\n // this will make sure the target node becomes created\n const refTargetValue = this.getValue(storedRefNode)\n if (!refTargetValue) {\n return undefined\n }\n const refTargetNode = getStateTreeNode(refTargetValue)\n\n const hookHandler = (_: AnyNode, refTargetNodeHook: Hook) => {\n const cause = getInvalidationCause(refTargetNodeHook)\n if (!cause) {\n return\n }\n this.fireInvalidated(cause, storedRefNode, referenceId, refTargetNode)\n }\n\n const refTargetDetachHookDisposer = refTargetNode.registerHook(\n Hook.beforeDetach,\n hookHandler\n )\n const refTargetDestroyHookDisposer = refTargetNode.registerHook(\n Hook.beforeDestroy,\n hookHandler\n )\n\n return () => {\n refTargetDetachHookDisposer()\n refTargetDestroyHookDisposer()\n }\n }\n\n protected watchTargetNodeForInvalidations(\n storedRefNode: this[\"N\"],\n identifier: ReferenceIdentifier,\n customGetSet: ReferenceOptionsGetSet<IT> | undefined\n ) {\n if (!this.onInvalidated) {\n return\n }\n\n let onRefTargetDestroyedHookDisposer: IDisposer | undefined\n\n // get rid of the watcher hook when the stored ref node is destroyed\n // detached is ignored since scalar nodes (where the reference resides) cannot be detached\n storedRefNode.registerHook(Hook.beforeDestroy, () => {\n if (onRefTargetDestroyedHookDisposer) {\n onRefTargetDestroyedHookDisposer()\n }\n })\n\n const startWatching = (sync: boolean) => {\n // re-create hook in case the stored ref gets reattached\n if (onRefTargetDestroyedHookDisposer) {\n onRefTargetDestroyedHookDisposer()\n }\n\n // make sure the target node is actually there and initialized\n const storedRefParentNode = storedRefNode.parent\n const storedRefParentValue =\n storedRefParentNode && storedRefParentNode.storedValue\n if (\n storedRefParentNode &&\n storedRefParentNode.isAlive &&\n storedRefParentValue\n ) {\n let refTargetNodeExists: boolean\n if (customGetSet) {\n refTargetNodeExists = !!customGetSet.get(\n identifier,\n storedRefParentValue\n )\n } else {\n refTargetNodeExists = storedRefNode.root.identifierCache!.has(\n this.targetType,\n normalizeIdentifier(identifier)\n )\n }\n\n if (!refTargetNodeExists) {\n // we cannot change the reference in sync mode\n // since we are in the middle of a reconciliation/instantiation and the change would be overwritten\n // for those cases just let the wrong reference be assigned and fail upon usage\n // (like current references do)\n // this means that effectively this code will only run when it is created from a snapshot\n if (!sync) {\n this.fireInvalidated(\n \"invalidSnapshotReference\",\n storedRefNode,\n identifier,\n null\n )\n }\n } else {\n onRefTargetDestroyedHookDisposer = this.addTargetNodeWatcher(\n storedRefNode,\n identifier\n )\n }\n }\n }\n\n if (storedRefNode.state === NodeLifeCycle.FINALIZED) {\n // already attached, so the whole tree is ready\n startWatching(true)\n } else {\n if (!storedRefNode.isRoot) {\n // start watching once the whole tree is ready\n storedRefNode.root.registerHook(Hook.afterCreationFinalization, () => {\n // make sure to attach it so it can start listening\n if (storedRefNode.parent) {\n storedRefNode.parent.createObservableInstanceIfNeeded()\n }\n })\n }\n // start watching once the node is attached somewhere / parent changes\n storedRefNode.registerHook(Hook.afterAttach, () => {\n startWatching(false)\n })\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierReferenceType<\n IT extends IAnyComplexType\n> extends BaseReferenceType<IT> {\n constructor(\n targetType: IT,\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(targetType, onInvalidated)\n }\n\n getValue(storedRefNode: this[\"N\"]) {\n if (!storedRefNode.isAlive) {\n return undefined\n }\n const storedRef: StoredReference<IT> = storedRefNode.storedValue\n return storedRef.resolvedValue as any\n }\n\n getSnapshot(storedRefNode: this[\"N\"]) {\n const ref: StoredReference<IT> = storedRefNode.storedValue\n return ref.identifier\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const identifier = isStateTreeNode(initialValue)\n ? getIdentifier(initialValue)!\n : initialValue\n const storedRef = new StoredReference(initialValue, this.targetType as any)\n const storedRefNode: this[\"N\"] = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n storedRef as any\n )\n storedRef.node = storedRefNode\n this.watchTargetNodeForInvalidations(\n storedRefNode,\n identifier as string,\n undefined\n )\n return storedRefNode\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (!current.isDetaching && current.type === this) {\n const compareByValue = isStateTreeNode(newValue)\n const ref: StoredReference<IT> = current.storedValue\n if (\n (!compareByValue && ref.identifier === newValue) ||\n (compareByValue && ref.resolvedValue === newValue)\n ) {\n current.setParent(parent, subpath)\n return current\n }\n }\n const newNode = this.instantiate(parent, subpath, undefined, newValue)\n current.die() // noop if detaching\n return newNode\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class CustomReferenceType<\n IT extends IAnyComplexType\n> extends BaseReferenceType<IT> {\n constructor(\n targetType: IT,\n private readonly options: ReferenceOptionsGetSet<IT>,\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(targetType, onInvalidated)\n }\n\n getValue(storedRefNode: this[\"N\"]) {\n if (!storedRefNode.isAlive) {\n return undefined as any\n }\n const referencedNode = this.options.get(\n storedRefNode.storedValue,\n storedRefNode.parent ? storedRefNode.parent.storedValue : null\n )\n return referencedNode\n }\n\n getSnapshot(storedRefNode: this[\"N\"]) {\n return storedRefNode.storedValue\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n newValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const identifier = isStateTreeNode(newValue)\n ? this.options.set(newValue as any, parent ? parent.storedValue : null)\n : newValue\n const storedRefNode: this[\"N\"] = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n identifier as any\n )\n this.watchTargetNodeForInvalidations(\n storedRefNode,\n identifier as string,\n this.options\n )\n return storedRefNode\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const newIdentifier = isStateTreeNode(newValue)\n ? this.options.set(newValue as any, current ? current.storedValue : null)\n : newValue\n if (\n !current.isDetaching &&\n current.type === this &&\n current.storedValue === newIdentifier\n ) {\n current.setParent(parent, subpath)\n return current\n }\n const newNode = this.instantiate(parent, subpath, undefined, newIdentifier)\n current.die() // noop if detaching\n return newNode\n }\n}\n\nexport interface ReferenceOptionsGetSet<IT extends IAnyComplexType> {\n get(\n identifier: ReferenceIdentifier,\n parent: IAnyStateTreeNode | null\n ): ReferenceT<IT>\n set(\n value: ReferenceT<IT>,\n parent: IAnyStateTreeNode | null\n ): ReferenceIdentifier\n}\n\nexport interface ReferenceOptionsOnInvalidated<IT extends IAnyComplexType> {\n // called when the current reference is about to become invalid\n onInvalidated: OnReferenceInvalidated<ReferenceT<IT>>\n}\n\nexport type ReferenceOptions<IT extends IAnyComplexType> =\n | ReferenceOptionsGetSet<IT>\n | ReferenceOptionsOnInvalidated<IT>\n | (ReferenceOptionsGetSet<IT> & ReferenceOptionsOnInvalidated<IT>)\n\n/** @hidden */\nexport interface IReferenceType<IT extends IAnyComplexType> extends IType<\n ReferenceIdentifier,\n ReferenceIdentifier,\n IT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * `types.reference` - Creates a reference to another type, which should have defined an identifier.\n * See also the [reference and identifiers](https://github.com/mobxjs/mobx-state-tree#references-and-identifiers) section.\n */\nexport function reference<IT extends IAnyComplexType>(\n subType: IT,\n options?: ReferenceOptions<IT>\n): IReferenceType<IT> {\n assertIsType(subType, 1)\n if (devMode()) {\n if (options && typeof options === \"string\") {\n // istanbul ignore next\n throw fail(\n \"References with base path are no longer supported. Please remove the base path.\"\n )\n }\n }\n\n const getSetOptions = options\n ? (options as ReferenceOptionsGetSet<IT>)\n : undefined\n const onInvalidated = options\n ? (options as ReferenceOptionsOnInvalidated<IT>).onInvalidated\n : undefined\n\n if (getSetOptions && (getSetOptions.get || getSetOptions.set)) {\n if (devMode()) {\n if (!getSetOptions.get || !getSetOptions.set) {\n throw fail(\n \"reference options must either contain both a 'get' and a 'set' method or none of them\"\n )\n }\n }\n\n return new CustomReferenceType(\n subType,\n {\n get: getSetOptions.get,\n set: getSetOptions.set\n },\n onInvalidated\n )\n } else {\n return new IdentifierReferenceType(subType, onInvalidated)\n }\n}\n\n/**\n * Returns if a given value represents a reference type.\n *\n * @param type\n * @returns\n */\nexport function isReferenceType<IT extends IReferenceType<any>>(\n type: IT\n): type is IT {\n return (type.flags & TypeFlags.Reference) > 0\n}\n\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined: false\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IReferenceType<IT>\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options?: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined?: boolean\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IMaybe<IReferenceType<IT>>\n/**\n * `types.safeReference` - A safe reference is like a standard reference, except that it accepts the undefined value by default\n * and automatically sets itself to undefined (when the parent is a model) / removes itself from arrays and maps\n * when the reference it is pointing to gets detached/destroyed.\n *\n * The optional options parameter object accepts a parameter named `acceptsUndefined`, which is set to true by default, so it is suitable\n * for model properties.\n * When used inside collections (arrays/maps), it is recommended to set this option to false so it can't take undefined as value,\n * which is usually the desired in those cases.\n * Additionally, the optional options parameter object accepts a parameter named `onInvalidated`, which will be called when the reference target node that the reference is pointing to is about to be detached/destroyed\n *\n * Strictly speaking it is a `types.maybe(types.reference(X))` (when `acceptsUndefined` is set to true, the default) and\n * `types.reference(X)` (when `acceptsUndefined` is set to false), both of them with a customized `onInvalidated` option.\n *\n * @param subType\n * @param options\n * @returns\n */\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options?: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined?: boolean\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IReferenceType<IT> | IMaybe<IReferenceType<IT>> {\n const refType = reference(subType, {\n ...options,\n onInvalidated(ev) {\n if (options && options.onInvalidated) {\n options.onInvalidated(ev)\n }\n ev.removeRef()\n }\n })\n\n if (options && options.acceptsUndefined === false) {\n return refType\n } else {\n return maybe(refType)\n }\n}\n","import {\n type AnyObjectNode,\n type ISimpleType,\n type IValidationContext,\n type IValidationResult,\n ModelType,\n type ScalarNode,\n SimpleType,\n TypeFlags,\n assertArg,\n createScalarNode,\n fail,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nabstract class BaseIdentifierType<T> extends SimpleType<T, T, T> {\n readonly flags = TypeFlags.Identifier\n\n constructor(\n name: string,\n private readonly validType: \"string\" | \"number\"\n ) {\n super(name)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"]\n ): this[\"N\"] {\n if (!parent || !(parent.type instanceof ModelType)) {\n throw fail(\n `Identifier types can only be instantiated as direct child of a model type`\n )\n }\n\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"],\n parent: AnyObjectNode,\n subpath: string\n ) {\n // we don't consider detaching here since identifier are scalar nodes, and scalar nodes cannot be detached\n if (current.storedValue !== newValue) {\n throw fail(\n `Tried to change identifier from '${current.storedValue}' to '${newValue}'. Changing identifiers is not allowed.`\n )\n }\n current.setParent(parent, subpath)\n return current\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (typeof value !== this.validType) {\n return typeCheckFailure(\n context,\n value,\n `Value is not a valid ${this.describe()}, expected a ${this.validType}`\n )\n }\n return typeCheckSuccess()\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierType extends BaseIdentifierType<string> {\n readonly flags = TypeFlags.Identifier\n\n constructor() {\n super(`identifier`, \"string\")\n }\n\n describe() {\n return `identifier`\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierNumberType extends BaseIdentifierType<number> {\n constructor() {\n super(\"identifierNumber\", \"number\")\n }\n\n getSnapshot(node: ScalarNode<number, number, number>): number {\n return node.storedValue\n }\n\n describe() {\n return `identifierNumber`\n }\n}\n\n/**\n * `types.identifier` - Identifiers are used to make references, lifecycle events and reconciling works.\n * Inside a state tree, for each type can exist only one instance for each given identifier.\n * For example there couldn't be 2 instances of user with id 1. If you need more, consider using references.\n * Identifier can be used only as type property of a model.\n * This type accepts as parameter the value type of the identifier field that can be either string or number.\n *\n * Example:\n * ```ts\n * const Todo = types.model(\"Todo\", {\n * id: types.identifier,\n * title: types.string\n * })\n * ```\n *\n * @returns\n */\nexport const identifier: ISimpleType<string> = new IdentifierType()\n\n/**\n * `types.identifierNumber` - Similar to `types.identifier`. This one will serialize from / to a number when applying snapshots\n *\n * Example:\n * ```ts\n * const Todo = types.model(\"Todo\", {\n * id: types.identifierNumber,\n * title: types.string\n * })\n * ```\n *\n * @returns\n */\nexport const identifierNumber: ISimpleType<number> = new IdentifierNumberType()\n\n/**\n * Returns if a given value represents an identifier type.\n *\n * @param type\n * @returns\n */\nexport function isIdentifierType<\n IT extends typeof identifier | typeof identifierNumber\n>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Identifier) > 0\n}\n\n/**\n * Valid types for identifiers.\n */\nexport type ReferenceIdentifier = string | number\n\n/**\n * @internal\n * @hidden\n */\nexport function normalizeIdentifier(id: ReferenceIdentifier): string {\n return \"\" + id\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isValidIdentifier(id: any): id is ReferenceIdentifier {\n return typeof id === \"string\" || typeof id === \"number\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsValidIdentifier(\n id: ReferenceIdentifier,\n argNumber: number | number[]\n) {\n assertArg(id, isValidIdentifier, \"string or number (identifier)\", argNumber)\n}\n","import {\n type AnyObjectNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport interface CustomTypeOptions<S, T> {\n /** Friendly name */\n name: string\n /** given a serialized value and environment, how to turn it into the target type */\n fromSnapshot(snapshot: S, env?: any): T\n /** return the serialization of the current value */\n toSnapshot(value: T): S\n /** if true, this is a converted value, if false, it's a snapshot */\n isTargetType(value: T | S): boolean\n /** a non empty string is assumed to be a validation error */\n getValidationMessage(snapshot: S): string\n // TODO: isSnapshotEqual\n // TODO: isValueEqual\n}\n\n/**\n * `types.custom` - Creates a custom type. Custom types can be used for arbitrary immutable values, that have a serializable representation. For example, to create your own Date representation, Decimal type etc.\n *\n * The signature of the options is:\n * ```ts\n * export interface CustomTypeOptions<S, T> {\n * // Friendly name\n * name: string\n * // given a serialized value and environment, how to turn it into the target type\n * fromSnapshot(snapshot: S, env: any): T\n * // return the serialization of the current value\n * toSnapshot(value: T): S\n * // if true, this is a converted value, if false, it's a snapshot\n * isTargetType(value: T | S): value is T\n * // a non empty string is assumed to be a validation error\n * getValidationMessage?(snapshot: S): string\n * }\n * ```\n *\n * Example:\n * ```ts\n * const DecimalPrimitive = types.custom<string, Decimal>({\n * name: \"Decimal\",\n * fromSnapshot(value: string) {\n * return new Decimal(value)\n * },\n * toSnapshot(value: Decimal) {\n * return value.toString()\n * },\n * isTargetType(value: string | Decimal): boolean {\n * return value instanceof Decimal\n * },\n * getValidationMessage(value: string): string {\n * if (/^-?\\d+\\.\\d+$/.test(value)) return \"\" // OK\n * return `'${value}' doesn't look like a valid decimal number`\n * }\n * })\n *\n * const Wallet = types.model({\n * balance: DecimalPrimitive\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport function custom<S, T>(\n options: CustomTypeOptions<S, T>\n): IType<S | T, S, T> {\n return new CustomType<S, T>(options)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class CustomType<S, T> extends SimpleType<S | T, S, T> {\n readonly flags = TypeFlags.Custom\n\n constructor(protected readonly options: CustomTypeOptions<S, T>) {\n super(options.name)\n }\n\n describe() {\n return this.name\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this.options.isTargetType(value)) {\n return typeCheckSuccess()\n }\n\n const typeError: string = this.options.getValidationMessage(value as S)\n if (typeError) {\n return typeCheckFailure(\n context,\n value,\n `Invalid value for type '${this.name}': ${typeError}`\n )\n }\n return typeCheckSuccess()\n }\n\n getSnapshot(node: this[\"N\"]): S {\n return this.options.toSnapshot(node.storedValue)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: S | T\n ): this[\"N\"] {\n const valueToStore: T = this.options.isTargetType(initialValue)\n ? (initialValue as T)\n : this.options.fromSnapshot(\n initialValue as S,\n parent && parent.root.environment\n )\n return createScalarNode(this, parent, subpath, environment, valueToStore)\n }\n\n reconcile(\n current: this[\"N\"],\n value: S | T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const isSnapshot = !this.options.isTargetType(value)\n // in theory customs use scalar nodes which cannot be detached, but still...\n if (!current.isDetaching) {\n const unchanged =\n current.type === this &&\n (isSnapshot\n ? value === current.snapshot\n : value === current.storedValue)\n if (unchanged) {\n current.setParent(parent, subpath)\n return current\n }\n }\n const valueToStore: T = isSnapshot\n ? this.options.fromSnapshot(value as S, parent.root.environment)\n : (value as T)\n const newNode = this.instantiate(parent, subpath, undefined, valueToStore)\n current.die() // noop if detaching\n return newNode\n }\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n assertIsType,\n fail,\n isStateTreeNode,\n isType,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nclass Resilient<IT extends IAnyType, FT extends IAnyType> extends BaseType<\n IT[\"CreationType\"] | FT[\"CreationType\"],\n IT[\"SnapshotType\"] | FT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"] | FT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT> | ExtractNodeType<FT>\n> {\n get flags() {\n return this._subtype.flags\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _fallbackType: FT,\n private readonly _createFallbackSnapshot: (\n error: unknown,\n snapshot: any\n ) => FT[\"CreationType\"]\n ) {\n super(`resilient(${_subtype.name})`)\n }\n\n describe() {\n return `resilient(${this._subtype.describe()})`\n }\n\n private _instantiateFallback(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n originalSnapshot: any,\n originalError: unknown\n ): this[\"N\"] {\n let fallbackSnapshot: FT[\"CreationType\"]\n try {\n fallbackSnapshot = this._createFallbackSnapshot(\n originalError,\n originalSnapshot\n )\n } catch (e) {\n throw fail(\n `resilient: createFallbackSnapshot threw while handling error for '${this._subtype.name}': ${originalError}. createFallbackSnapshot error: ${e}`\n )\n }\n try {\n return this._fallbackType.instantiate(\n parent,\n subpath,\n environment,\n fallbackSnapshot\n ) as this[\"N\"]\n } catch (e) {\n throw fail(\n `resilient: fallback type '${this._fallbackType.name}' failed to instantiate while handling error for '${this._subtype.name}': ${originalError}. Fallback error: ${e}`\n )\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n if (isStateTreeNode(initialValue)) {\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as this[\"N\"]\n }\n try {\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as this[\"N\"]\n } catch (e) {\n return this._instantiateFallback(\n parent,\n subpath,\n environment,\n initialValue,\n e\n )\n }\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (isStateTreeNode(newValue)) {\n return this._subtype.reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as this[\"N\"]\n }\n if (this._fallbackType.isAssignableFrom(current.type)) {\n try {\n return this._subtype.instantiate(\n parent,\n subpath,\n undefined,\n newValue\n ) as this[\"N\"]\n } catch (e) {\n return this._fallbackType.reconcile(\n current,\n this._createFallbackSnapshot(e, newValue),\n parent,\n subpath\n ) as this[\"N\"]\n }\n }\n try {\n return this._subtype.reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as this[\"N\"]\n } catch (e) {\n current.die()\n return this._instantiateFallback(parent, subpath, undefined, newValue, e)\n }\n }\n\n isValidSnapshot(\n _value: this[\"C\"],\n _context: IValidationContext\n ): IValidationResult {\n return typeCheckSuccess()\n }\n\n is(thing: any): thing is any {\n if (isType(thing)) {\n return (\n this._subtype.isAssignableFrom(thing) ||\n this._fallbackType.isAssignableFrom(thing)\n )\n }\n try {\n if (this._subtype.is(thing)) {\n return true\n }\n } catch (_e) {\n // subtype.is() may throw (e.g. union dispatcher)\n }\n try {\n return this._fallbackType.is(thing)\n } catch (_e) {\n return false\n }\n }\n\n isAssignableFrom(type: IAnyType) {\n return (\n this._subtype.isAssignableFrom(type) ||\n this._fallbackType.isAssignableFrom(type)\n )\n }\n\n getSubTypes() {\n return [this._subtype, this._fallbackType]\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n return node.snapshot\n }\n}\n\nexport interface IResilientType<\n IT extends IAnyType,\n FT extends IAnyType\n> extends IType<\n IT[\"CreationType\"] | FT[\"CreationType\"],\n IT[\"SnapshotType\"] | FT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"] | FT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * `types.resilient` - Wraps a type so that instantiation errors are caught\n * and a fallback type is used instead. This is useful for loading data that\n * may contain unknown or invalid subtrees (e.g., plugin types that are not\n * installed) without crashing the entire state tree.\n *\n * The `createFallbackSnapshot` callback receives the caught error and the\n * original snapshot, and must return a valid snapshot for the fallback type.\n *\n * @param type The type to wrap.\n * @param fallbackType The fallback type to use when instantiation fails.\n * @param createFallbackSnapshot Callback that produces a fallback snapshot from the error and original snapshot.\n * @returns A resilient type.\n */\nexport function resilient<IT extends IAnyType, FT extends IAnyType>(\n type: IT,\n fallbackType: FT,\n createFallbackSnapshot: (error: unknown, snapshot: any) => FT[\"CreationType\"]\n): IResilientType<IT, FT> {\n assertIsType(type, 1)\n assertIsType(fallbackType, 2)\n return new Resilient(type, fallbackType, createFallbackSnapshot)\n}\n","// we import the types to re-export them inside types.\nimport {\n DatePrimitive,\n array,\n boolean,\n compose,\n custom,\n enumeration,\n finite,\n float,\n frozen,\n identifier,\n identifierNumber,\n integer,\n late,\n lazy,\n literal,\n map,\n maybe,\n maybeNull,\n model,\n nullType,\n number,\n optional,\n reference,\n refinement,\n safeReference,\n resilient,\n snapshotProcessor,\n string,\n undefinedType,\n union\n} from \"../internal.ts\"\n\nexport const types = {\n enumeration,\n model,\n compose,\n custom,\n reference,\n safeReference,\n union,\n optional,\n literal,\n maybe,\n maybeNull,\n refinement,\n string,\n boolean,\n number,\n integer,\n float,\n finite,\n Date: DatePrimitive,\n map,\n array,\n frozen,\n identifier,\n identifierNumber,\n late,\n lazy,\n undefined: undefinedType,\n null: nullType,\n snapshotProcessor,\n resilient\n}\n"],"names":["isComputedProp","isObservableProp","createAtom","action","computed","_allowStateChangesInsideComputed","reaction","runInAction","mobxAction","observable","values","entries","process","_getGlobalState","isObservableArray","isObservableObject","mobxDefineProperty","ObservableMap","_interceptReads","intercept","observe","_getAdministration","set","defineProperty","makeObservable","getAtom","when"],"mappings":"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"}
1
+ {"version":3,"file":"mobx-state-tree.cjs","sources":["../src/core/node/livelinessChecking.ts","../src/core/node/Hook.ts","../src/core/mst-operations.ts","../src/core/node/BaseNode.ts","../src/core/node/scalar-node.ts","../src/core/node/object-node.ts","../src/core/type/type.ts","../src/middlewares/create-action-tracking-middleware.ts","../src/middlewares/createActionTrackingMiddleware2.ts","../src/middlewares/on-action.ts","../src/core/action.ts","../src/core/actionContext.ts","../src/core/type/type-checker.ts","../src/core/node/identifier-cache.ts","../src/core/node/create-node.ts","../src/core/node/node-utils.ts","../src/core/process.ts","../src/utils.ts","../src/core/flow.ts","../src/core/json-patch.ts","../src/types/utility-types/snapshotProcessor.ts","../src/types/complex-types/map.ts","../src/types/complex-types/array.ts","../src/types/complex-types/model.ts","../src/types/primitives.ts","../src/types/utility-types/literal.ts","../src/types/utility-types/refinement.ts","../src/types/utility-types/enumeration.ts","../src/types/utility-types/union.ts","../src/types/utility-types/optional.ts","../src/types/utility-types/maybe.ts","../src/types/utility-types/late.ts","../src/types/utility-types/lazy.ts","../src/types/utility-types/frozen.ts","../src/types/utility-types/reference.ts","../src/types/utility-types/identifier.ts","../src/types/utility-types/custom.ts","../src/types/utility-types/resilient.ts","../src/types/index.ts"],"sourcesContent":["/**\n * Defines what MST should do when running into reads / writes to objects that have died.\n * - `\"warn\"`: Print a warning (default).\n * - `\"error\"`: Throw an exception.\n * - \"`ignore`\": Do nothing.\n */\nexport type LivelinessMode = \"warn\" | \"error\" | \"ignore\"\n\nlet livelinessChecking: LivelinessMode = \"warn\"\n\n/**\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function setLivelinessChecking(mode: LivelinessMode) {\n livelinessChecking = mode\n}\n\n/**\n * Returns the current liveliness checking mode.\n *\n * @returns `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function getLivelinessChecking(): LivelinessMode {\n return livelinessChecking\n}\n\n/**\n * @deprecated use LivelinessMode instead\n * @hidden\n */\nexport type LivelynessMode = LivelinessMode\n\n/**\n * @deprecated use setLivelinessChecking instead\n * @hidden\n *\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nexport function setLivelynessChecking(mode: LivelinessMode) {\n setLivelinessChecking(mode)\n}\n","/**\n * @hidden\n */\nexport enum Hook {\n afterCreate = \"afterCreate\",\n afterAttach = \"afterAttach\",\n afterCreationFinalization = \"afterCreationFinalization\",\n beforeDetach = \"beforeDetach\",\n beforeDestroy = \"beforeDestroy\"\n}\n\nexport interface IHooks {\n [Hook.afterCreate]?: () => void\n [Hook.afterAttach]?: () => void\n [Hook.beforeDetach]?: () => void\n [Hook.beforeDestroy]?: () => void\n}\n\nexport type IHooksGetter<T> = (self: T) => IHooks\n","import { isComputedProp, isObservableProp } from \"mobx\"\n\nimport {\n EMPTY_OBJECT,\n InvalidReferenceError,\n asArray,\n assertArg,\n assertIsFunction,\n assertIsNumber,\n assertIsStateTreeNode,\n assertIsString,\n assertIsType,\n assertIsValidIdentifier,\n fail,\n freeze,\n getRelativePathBetweenNodes,\n getRunningActionContext,\n getStateTreeNode,\n isModelType,\n isStateTreeNode,\n normalizeIdentifier,\n resolveNodeByPath,\n splitJsonPath\n} from \"../internal.ts\"\n\nimport type {\n AnyObjectNode,\n IActionContext,\n IAnyComplexType,\n IAnyModelType,\n IAnyStateTreeNode,\n IAnyType,\n IDisposer,\n IJsonPatch,\n IStateTreeNode,\n IType,\n ReferenceIdentifier,\n TypeOfValue\n} from \"../internal.ts\"\n\n/** @hidden */\nexport type TypeOrStateTreeNodeToStateTreeNode<\n T extends IAnyType | IAnyStateTreeNode\n> = T extends IType<any, any, infer TT> ? TT & IStateTreeNode<T> : T\n\n/**\n * Returns the _actual_ type of the given tree node. (Or throws)\n *\n * @param object\n * @returns\n */\nexport function getType(object: IAnyStateTreeNode): IAnyComplexType {\n assertIsStateTreeNode(object, 1)\n\n return getStateTreeNode(object).type\n}\n\n/**\n * Returns the _declared_ type of the given sub property of an object, array or map.\n * In the case of arrays and maps the property name is optional and will be ignored.\n *\n * Example:\n * ```ts\n * const Box = types.model({ x: 0, y: 0 })\n * const box = Box.create()\n *\n * console.log(getChildType(box, \"x\").name) // 'number'\n * ```\n *\n * @param object\n * @param propertyName\n * @returns\n */\nexport function getChildType(\n object: IAnyStateTreeNode,\n propertyName?: string\n): IAnyType {\n assertIsStateTreeNode(object, 1)\n\n return getStateTreeNode(object).getChildType(propertyName)\n}\n\n/**\n * Registers a function that will be invoked for each mutation that is applied to the provided model instance, or to any of its children.\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details. onPatch events are emitted immediately and will not await the end of a transaction.\n * Patches can be used to deeply observe a model tree.\n *\n * @param target the model instance from which to receive patches\n * @param callback the callback that is invoked for each patch. The reversePatch is a patch that would actually undo the emitted patch\n * @returns function to remove the listener\n */\nexport function onPatch(\n target: IAnyStateTreeNode,\n callback: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(callback, 2)\n\n return getStateTreeNode(target).onPatch(callback)\n}\n\n/**\n * Registers a function that is invoked whenever a new snapshot for the given model instance is available.\n * The listener will only be fire at the end of the current MobX (trans)action.\n * See [snapshots](https://github.com/mobxjs/mobx-state-tree#snapshots) for more details.\n *\n * @param target\n * @param callback\n * @returns\n */\nexport function onSnapshot<S>(\n target: IStateTreeNode<IType<any, S, any>>,\n callback: (snapshot: S) => void\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(callback, 2)\n\n return getStateTreeNode(target).onSnapshot(callback)\n}\n\n/**\n * Applies a JSON-patch to the given model instance or bails out if the patch couldn't be applied\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details.\n *\n * Can apply a single past, or an array of patches.\n *\n * @param target\n * @param patch\n * @returns\n */\nexport function applyPatch(\n target: IAnyStateTreeNode,\n patch: IJsonPatch | ReadonlyArray<IJsonPatch>\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertArg(patch, p => typeof p === \"object\", \"object or array\", 2)\n\n getStateTreeNode(target).applyPatches(asArray(patch))\n}\n\nexport interface IPatchRecorder {\n patches: ReadonlyArray<IJsonPatch>\n inversePatches: ReadonlyArray<IJsonPatch>\n reversedInversePatches: ReadonlyArray<IJsonPatch>\n readonly recording: boolean\n stop(): void\n resume(): void\n replay(target?: IAnyStateTreeNode): void\n undo(target?: IAnyStateTreeNode): void\n}\n\n/**\n * Small abstraction around `onPatch` and `applyPatch`, attaches a patch listener to a tree and records all the patches.\n * Returns a recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IPatchRecorder {\n * // the recorded patches\n * patches: IJsonPatch[]\n * // the inverse of the recorded patches\n * inversePatches: IJsonPatch[]\n * // true if currently recording\n * recording: boolean\n * // stop recording patches\n * stop(): void\n * // resume recording patches\n * resume(): void\n * // apply all the recorded patches on the given target (the original subject if omitted)\n * replay(target?: IAnyStateTreeNode): void\n * // reverse apply the recorded patches on the given target (the original subject if omitted)\n * // stops the recorder if not already stopped\n * undo(): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain patches.\n *\n * @param subject\n * @param filter\n * @returns\n */\nexport function recordPatches(\n subject: IAnyStateTreeNode,\n filter?: (\n patch: IJsonPatch,\n inversePatch: IJsonPatch,\n actionContext: IActionContext | undefined\n ) => boolean\n): IPatchRecorder {\n // check all arguments\n assertIsStateTreeNode(subject, 1)\n\n interface IPatches {\n patches: IJsonPatch[]\n reversedInversePatches: IJsonPatch[]\n inversePatches: IJsonPatch[]\n }\n\n const data: Pick<IPatches, \"patches\" | \"inversePatches\"> = {\n patches: [],\n inversePatches: []\n }\n\n // we will generate the immutable copy of patches on demand for public consumption\n const publicData: Partial<IPatches> = {}\n\n let disposer: IDisposer | undefined\n\n const recorder: IPatchRecorder = {\n get recording() {\n return !!disposer\n },\n get patches() {\n if (!publicData.patches) {\n publicData.patches = data.patches.slice()\n }\n return publicData.patches\n },\n get reversedInversePatches() {\n if (!publicData.reversedInversePatches) {\n publicData.reversedInversePatches = data.inversePatches\n .slice()\n .reverse()\n }\n return publicData.reversedInversePatches\n },\n get inversePatches() {\n if (!publicData.inversePatches) {\n publicData.inversePatches = data.inversePatches.slice()\n }\n return publicData.inversePatches\n },\n stop() {\n if (disposer) {\n disposer()\n disposer = undefined\n }\n },\n resume() {\n if (disposer) {\n return\n }\n disposer = onPatch(subject, (patch, inversePatch) => {\n // skip patches that are asked to be filtered if there's a filter in place\n if (filter && !filter(patch, inversePatch, getRunningActionContext())) {\n return\n }\n data.patches.push(patch)\n data.inversePatches.push(inversePatch)\n\n // mark immutable public patches as dirty\n publicData.patches = undefined\n publicData.inversePatches = undefined\n publicData.reversedInversePatches = undefined\n })\n },\n replay(target?: IAnyStateTreeNode) {\n applyPatch(target || subject, data.patches)\n },\n undo(target?: IAnyStateTreeNode) {\n applyPatch(target || subject, data.inversePatches.slice().reverse())\n }\n }\n\n recorder.resume()\n return recorder\n}\n\n/**\n * The inverse of `unprotect`.\n *\n * @param target\n */\nexport function protect(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (!node.isRoot) {\n throw fail(\"`protect` can only be invoked on root nodes\")\n }\n node.isProtectionEnabled = true\n}\n\n/**\n * By default it is not allowed to directly modify a model. Models can only be modified through actions.\n * However, in some cases you don't care about the advantages (like replayability, traceability, etc) this yields.\n * For example because you are building a PoC or don't have any middleware attached to your tree.\n *\n * In that case you can disable this protection by calling `unprotect` on the root of your tree.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * done: false\n * }).actions(self => ({\n * toggle() {\n * self.done = !self.done\n * }\n * }))\n *\n * const todo = Todo.create()\n * todo.done = true // throws!\n * todo.toggle() // OK\n * unprotect(todo)\n * todo.done = false // OK\n * ```\n */\nexport function unprotect(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (!node.isRoot) {\n throw fail(\"`unprotect` can only be invoked on root nodes\")\n }\n node.isProtectionEnabled = false\n}\n\n/**\n * Returns true if the object is in protected mode, @see protect\n */\nexport function isProtected(target: IAnyStateTreeNode): boolean {\n return getStateTreeNode(target).isProtected\n}\n\n/**\n * Applies a snapshot to a given model instances. Patch and snapshot listeners will be invoked as usual.\n *\n * @param target\n * @param snapshot\n * @returns\n */\nexport function applySnapshot<C>(\n target: IStateTreeNode<IType<C, any, any>>,\n snapshot: C\n) {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).applySnapshot(snapshot)\n}\n\n/**\n * Calculates a snapshot from the given model instance. The snapshot will always reflect the latest state but use\n * structural sharing where possible. Doesn't require MobX transactions to be completed.\n *\n * @param target\n * @param applyPostProcess If true (the default) then postProcessSnapshot gets applied.\n * @returns\n */\nexport function getSnapshot<S>(\n target: IStateTreeNode<IType<any, S, any>>,\n applyPostProcess = true\n): S {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (applyPostProcess) {\n return node.snapshot\n }\n\n return freeze(node.type.getSnapshot(node, false))\n}\n\n/**\n * Given a model instance, returns `true` if the object has a parent, that is, is part of another object, map or array.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nexport function hasParent(\n target: IAnyStateTreeNode,\n depth: number = 1\n): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsNumber(depth, 2, 0)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (--depth === 0) {\n return true\n }\n parent = parent.parent\n }\n return false\n}\n\n/**\n * Returns the immediate parent of this object, or throws.\n *\n * Note that the immediate parent can be either an object, map or array, and\n * doesn't necessarily refer to the parent model.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nexport function getParent<IT extends IAnyStateTreeNode | IAnyComplexType>(\n target: IAnyStateTreeNode,\n depth = 1\n): TypeOrStateTreeNodeToStateTreeNode<IT> {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsNumber(depth, 2, 0)\n\n let d = depth\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (--d === 0) {\n return parent.storedValue as any\n }\n parent = parent.parent\n }\n throw fail(\n `Failed to find the parent of ${getStateTreeNode(target)} at depth ${depth}`\n )\n}\n\n/**\n * Given a model instance, returns `true` if the object has a parent of given type, that is, is part of another object, map or array\n *\n * @param target\n * @param type\n * @returns\n */\nexport function hasParentOfType(\n target: IAnyStateTreeNode,\n type: IAnyComplexType\n): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsType(type, 2)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (type.is(parent.storedValue)) {\n return true\n }\n parent = parent.parent\n }\n return false\n}\n\n/**\n * Returns the target's parent of a given type, or throws.\n *\n * @param target\n * @param type\n * @returns\n */\nexport function getParentOfType<IT extends IAnyComplexType>(\n target: IAnyStateTreeNode,\n type: IT\n): IT[\"Type\"] {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsType(type, 2)\n\n let parent: AnyObjectNode | null = getStateTreeNode(target).parent\n while (parent) {\n if (type.is(parent.storedValue)) {\n return parent.storedValue\n }\n parent = parent.parent\n }\n throw fail(\n `Failed to find the parent of ${getStateTreeNode(target)} of a given type`\n )\n}\n\n/**\n * Given an object in a model tree, returns the root object of that tree.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @returns\n */\nexport function getRoot<IT extends IAnyComplexType | IAnyStateTreeNode>(\n target: IAnyStateTreeNode\n): TypeOrStateTreeNodeToStateTreeNode<IT> {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).root.storedValue\n}\n\n/**\n * Returns the path of the given object in the model tree\n *\n * @param target\n * @returns\n */\nexport function getPath(target: IAnyStateTreeNode): string {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).path\n}\n\n/**\n * Returns the path of the given object as unescaped string array.\n *\n * @param target\n * @returns\n */\nexport function getPathParts(target: IAnyStateTreeNode): string[] {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return splitJsonPath(getStateTreeNode(target).path)\n}\n\n/**\n * Returns true if the given object is the root of a model tree.\n *\n * @param target\n * @returns\n */\nexport function isRoot(target: IAnyStateTreeNode): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).isRoot\n}\n\n/**\n * Resolves a path relatively to a given object.\n * Returns undefined if no value can be found.\n *\n * @param target\n * @param path escaped json path\n * @returns\n */\nexport function resolvePath(target: IAnyStateTreeNode, path: string): any {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsString(path, 2)\n\n const node = resolveNodeByPath(getStateTreeNode(target), path)\n return node ? node.value : undefined\n}\n\n/**\n * Resolves a model instance given a root target, the type and the identifier you are searching for.\n * Returns undefined if no value can be found.\n *\n * @param type\n * @param target\n * @param identifier\n * @returns\n */\nexport function resolveIdentifier<IT extends IAnyModelType>(\n type: IT,\n target: IAnyStateTreeNode,\n identifier: ReferenceIdentifier\n): IT[\"Type\"] | undefined {\n // check all arguments\n assertIsType(type, 1)\n assertIsStateTreeNode(target, 2)\n assertIsValidIdentifier(identifier, 3)\n\n const node = getStateTreeNode(target).root.identifierCache!.resolve(\n type,\n normalizeIdentifier(identifier)\n )\n return node?.value\n}\n\n/**\n * Returns the identifier of the target node.\n * This is the *string normalized* identifier, which might not match the type of the identifier attribute\n *\n * @param target\n * @returns\n */\nexport function getIdentifier(target: IAnyStateTreeNode): string | null {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).identifier\n}\n\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns such reference if the check passes,\n * else it returns undefined.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nexport function tryReference<N extends IAnyStateTreeNode>(\n getter: () => N | null | undefined,\n checkIfAlive = true\n): N | undefined {\n try {\n const node = getter()\n if (node === undefined || node === null) {\n return undefined\n } else if (isStateTreeNode(node)) {\n if (!checkIfAlive) {\n return node\n } else {\n return isAlive(node) ? node : undefined\n }\n } else {\n throw fail(\n \"The reference to be checked is not one of node, null or undefined\"\n )\n }\n } catch (e) {\n if (e instanceof InvalidReferenceError) {\n return undefined\n }\n throw e\n }\n}\n\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns if the check passes or not.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nexport function isValidReference<N extends IAnyStateTreeNode>(\n getter: () => N | null | undefined,\n checkIfAlive = true\n): boolean {\n try {\n const node = getter()\n if (node === undefined || node === null) {\n return false\n } else if (isStateTreeNode(node)) {\n return checkIfAlive ? isAlive(node) : true\n } else {\n throw fail(\n \"The reference to be checked is not one of node, null or undefined\"\n )\n }\n } catch (e) {\n if (e instanceof InvalidReferenceError) {\n return false\n }\n throw e\n }\n}\n\n/**\n * Try to resolve a given path relative to a given node.\n *\n * @param target\n * @param path\n * @returns\n */\nexport function tryResolve(target: IAnyStateTreeNode, path: string): any {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsString(path, 2)\n\n const node = resolveNodeByPath(getStateTreeNode(target), path, false)\n if (node === undefined) {\n return undefined\n }\n try {\n return node.value\n } catch (_e) {\n // For what ever reason not resolvable (e.g. totally not existing path, or value that cannot be fetched)\n // see test / issue: 'try resolve doesn't work #686'\n return undefined\n }\n}\n\n/**\n * Given two state tree nodes that are part of the same tree,\n * returns the shortest jsonpath needed to navigate from the one to the other\n *\n * @param base\n * @param target\n * @returns\n */\nexport function getRelativePath(\n base: IAnyStateTreeNode,\n target: IAnyStateTreeNode\n): string {\n // check all arguments\n assertIsStateTreeNode(base, 1)\n assertIsStateTreeNode(target, 2)\n\n return getRelativePathBetweenNodes(\n getStateTreeNode(base),\n getStateTreeNode(target)\n )\n}\n\n/**\n * Returns a deep copy of the given state tree node as new tree.\n * Shorthand for `snapshot(x) = getType(x).create(getSnapshot(x))`\n *\n * _Tip: clone will create a literal copy, including the same identifiers. To modify identifiers etc. during cloning, don't use clone but take a snapshot of the tree, modify it, and create new instance_\n *\n * @param source\n * @param keepEnvironment indicates whether the clone should inherit the same environment (`true`, the default), or not have an environment (`false`). If an object is passed in as second argument, that will act as the environment for the cloned tree.\n * @returns\n */\nexport function clone<T extends IAnyStateTreeNode>(\n source: T,\n keepEnvironment: boolean | any = true\n): T {\n // check all arguments\n assertIsStateTreeNode(source, 1)\n\n const node = getStateTreeNode(source)\n return node.type.create(\n node.snapshot,\n keepEnvironment === true\n ? node.root.environment\n : keepEnvironment === false\n ? undefined\n : keepEnvironment\n ) // it's an object or something else\n}\n\n/**\n * Removes a model element from the state tree, and let it live on as a new state tree\n */\nexport function detach<T extends IAnyStateTreeNode>(target: T): T {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n getStateTreeNode(target).detach()\n return target\n}\n\n/**\n * Removes a model element from the state tree, and mark it as end-of-life; the element should not be used anymore\n */\nexport function destroy(target: IAnyStateTreeNode): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n if (node.isRoot) {\n node.die()\n } else {\n node.parent!.removeChild(node.subpath)\n }\n}\n\n/**\n * Returns true if the given state tree node is not killed yet.\n * This means that the node is still a part of a tree, and that `destroy`\n * has not been called. If a node is not alive anymore, the only thing one can do with it\n * is requesting it's last path and snapshot\n *\n * @param target\n * @returns\n */\nexport function isAlive(target: IAnyStateTreeNode): boolean {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).observableIsAlive\n}\n\n/**\n * Use this utility to register a function that should be called whenever the\n * targeted state tree node is destroyed. This is a useful alternative to managing\n * cleanup methods yourself using the `beforeDestroy` hook.\n *\n * This methods returns the same disposer that was passed as argument.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * title: types.string\n * }).actions(self => ({\n * afterCreate() {\n * const autoSaveDisposer = reaction(\n * () => getSnapshot(self),\n * snapshot => sendSnapshotToServerSomehow(snapshot)\n * )\n * // stop sending updates to server if this\n * // instance is destroyed\n * addDisposer(self, autoSaveDisposer)\n * }\n * }))\n * ```\n *\n * @param target\n * @param disposer\n * @returns The same disposer that was passed as argument\n */\nexport function addDisposer(\n target: IAnyStateTreeNode,\n disposer: IDisposer\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(disposer, 2)\n\n const node = getStateTreeNode(target)\n node.addDisposer(disposer)\n return disposer\n}\n\n/**\n * Returns the environment of the current state tree. For more info on environments,\n * see [Dependency injection](https://github.com/mobxjs/mobx-state-tree#dependency-injection)\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired\n *\n * Returns an empty environment if the tree wasn't initialized with an environment\n *\n * @param target\n * @returns\n */\nexport function getEnv<T = any>(target: IAnyStateTreeNode): T {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n\n const node = getStateTreeNode(target)\n const env = node.root.environment\n if (!env) {\n return EMPTY_OBJECT as T\n }\n return env\n}\n\n/**\n * Performs a depth first walk through a tree.\n */\nexport function walk(\n target: IAnyStateTreeNode,\n processor: (item: IAnyStateTreeNode) => void\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertIsFunction(processor, 2)\n\n const node = getStateTreeNode(target)\n node.getChildren().forEach(child => {\n if (isStateTreeNode(child.storedValue)) {\n walk(child.storedValue, processor)\n }\n })\n processor(node.storedValue)\n}\n\nexport interface IModelReflectionPropertiesData {\n name: string\n properties: { [K: string]: IAnyType }\n}\n\n/**\n * Returns a reflection of the model type properties and name for either a model type or model node.\n *\n * @param typeOrNode\n * @returns\n */\nexport function getPropertyMembers(\n typeOrNode: IAnyModelType | IAnyStateTreeNode\n): IModelReflectionPropertiesData {\n let type: IAnyModelType\n\n if (isStateTreeNode(typeOrNode)) {\n type = getType(typeOrNode) as IAnyModelType\n } else {\n type = typeOrNode as IAnyModelType\n }\n\n assertArg(type, t => isModelType(t), \"model type or model instance\", 1)\n\n return {\n name: type.name,\n properties: { ...type.properties }\n }\n}\n\nexport interface IModelReflectionData extends IModelReflectionPropertiesData {\n actions: string[]\n views: string[]\n volatile: string[]\n flowActions: string[]\n}\n\n/**\n * Returns a reflection of the model node, including name, properties, views, volatile state,\n * and actions. `flowActions` is also provided as a separate array of names for any action that\n * came from a flow generator as well.\n *\n * In the case where a model has two actions: `doSomething` and `doSomethingWithFlow`, where\n * `doSomethingWithFlow` is a flow generator, the `actions` array will contain both actions,\n * i.e. [\"doSomething\", \"doSomethingWithFlow\"], and the `flowActions` array will contain only\n * the flow action, i.e. [\"doSomethingWithFlow\"].\n *\n * @param target\n * @returns\n */\nexport function getMembers(target: IAnyStateTreeNode): IModelReflectionData {\n const type = getStateTreeNode(target).type as unknown as IAnyModelType\n\n const reflected: IModelReflectionData = {\n ...getPropertyMembers(type),\n actions: [],\n volatile: [],\n views: [],\n flowActions: []\n }\n\n const props = Object.getOwnPropertyNames(target)\n props.forEach(key => {\n if (key in reflected.properties) {\n return\n }\n const descriptor = Object.getOwnPropertyDescriptor(target, key)!\n if (descriptor.get) {\n if (isComputedProp(target, key)) {\n reflected.views.push(key)\n } else {\n reflected.volatile.push(key)\n }\n return\n }\n if (descriptor.value._isFlowAction === true) {\n reflected.flowActions.push(key)\n }\n if (descriptor.value._isMSTAction === true) {\n reflected.actions.push(key)\n } else if (isObservableProp(target, key)) {\n reflected.volatile.push(key)\n } else {\n reflected.views.push(key)\n }\n })\n return reflected\n}\n\nexport function cast<\n O extends string | number | boolean | null | undefined = never\n>(snapshotOrInstance: O): O\nexport function cast<O = never>(\n snapshotOrInstance:\n | TypeOfValue<O>[\"CreationType\"]\n | TypeOfValue<O>[\"SnapshotType\"]\n | TypeOfValue<O>[\"Type\"]\n): O\n/**\n * Casts a node snapshot or instance type to an instance type so it can be assigned to a type instance.\n * Note that this is just a cast for the type system, this is, it won't actually convert a snapshot to an instance,\n * but just fool typescript into thinking so.\n * Either way, casting when outside an assignation operation won't compile.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * }).actions(self => ({\n * someAction() {\n * // this will allow the compiler to assign a snapshot to the property\n * self.innerModel = cast({ a: 5 })\n * }\n * }))\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object cast as an instance\n */\nexport function cast(snapshotOrInstance: any): any {\n return snapshotOrInstance as any\n}\n\n/**\n * Casts a node instance type to a snapshot type so it can be assigned to a type snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * })\n *\n * const a = ModelA.create({ n: 5 });\n * // this will allow the compiler to use a model as if it were a snapshot\n * const b = ModelB.create({ innerModel: castToSnapshot(a)})\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object cast as an input (creation) snapshot\n */\nexport function castToSnapshot<I>(\n snapshotOrInstance: I\n): Extract<I, IAnyStateTreeNode> extends never\n ? I\n : TypeOfValue<I>[\"CreationType\"] {\n return snapshotOrInstance as any\n}\n\n/**\n * Casts a node instance type to a reference snapshot type so it can be assigned to a reference snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a reference snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * id: types.identifier,\n * n: types.number\n * }).actions(self => ({\n * setN(aNumber: number) {\n * self.n = aNumber\n * }\n * }))\n *\n * const ModelB = types.model({\n * refA: types.reference(ModelA)\n * })\n *\n * const a = ModelA.create({ id: 'someId', n: 5 });\n * // this will allow the compiler to use a model as if it were a reference snapshot\n * const b = ModelB.create({ refA: castToReferenceSnapshot(a)})\n * ```\n *\n * @param instance Instance\n * @returns The same object cast as a reference snapshot (string or number)\n */\nexport function castToReferenceSnapshot<I>(\n instance: I\n): Extract<I, IAnyStateTreeNode> extends never ? I : ReferenceIdentifier {\n return instance as any\n}\n\n/**\n * Returns the unique node id (not to be confused with the instance identifier) for a\n * given instance.\n * This id is a number that is unique for each instance.\n *\n * @export\n * @param target\n * @returns\n */\nexport function getNodeId(target: IAnyStateTreeNode): number {\n assertIsStateTreeNode(target, 1)\n\n return getStateTreeNode(target).nodeId\n}\n","import { type IAtom, createAtom } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n EventHandlers,\n Hook,\n type IAnyType,\n type IDisposer,\n NodeLifeCycle,\n devMode,\n escapeJsonPath,\n fail\n} from \"../../internal.ts\"\n\ntype HookSubscribers = {\n [Hook.afterAttach]: (node: AnyNode, hook: Hook) => void\n [Hook.afterCreate]: (node: AnyNode, hook: Hook) => void\n [Hook.afterCreationFinalization]: (node: AnyNode, hook: Hook) => void\n [Hook.beforeDestroy]: (node: AnyNode, hook: Hook) => void\n [Hook.beforeDetach]: (node: AnyNode, hook: Hook) => void\n}\n\n/**\n * @internal\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport abstract class BaseNode<C, S, T> {\n private _escapedSubpath?: string\n\n private _subpath!: string\n get subpath() {\n return this._subpath\n }\n\n private _subpathUponDeath?: string\n get subpathUponDeath() {\n return this._subpathUponDeath\n }\n\n private _pathUponDeath?: string\n protected get pathUponDeath() {\n return this._pathUponDeath\n }\n\n storedValue!: any // usually the same type as the value, but not always (such as with references)\n get value(): T {\n return (this.type as any).getValue(this)\n }\n\n private aliveAtom?: IAtom\n private _state = NodeLifeCycle.INITIALIZING\n get state() {\n return this._state\n }\n set state(val: NodeLifeCycle) {\n const wasAlive = this.isAlive\n this._state = val\n const isAlive = this.isAlive\n\n if (this.aliveAtom && wasAlive !== isAlive) {\n this.aliveAtom.reportChanged()\n }\n }\n\n private _hookSubscribers?: EventHandlers<HookSubscribers>\n\n protected abstract fireHook(name: Hook): void\n\n protected fireInternalHook(name: Hook) {\n if (this._hookSubscribers) {\n this._hookSubscribers.emit(name, this, name)\n }\n }\n\n registerHook<H extends Hook>(\n hook: H,\n hookHandler: HookSubscribers[H]\n ): IDisposer {\n if (!this._hookSubscribers) {\n this._hookSubscribers = new EventHandlers()\n }\n return this._hookSubscribers.register(hook, hookHandler)\n }\n\n private _parent!: AnyObjectNode | null\n get parent() {\n return this._parent\n }\n\n constructor(\n readonly type: IAnyType,\n parent: AnyObjectNode | null,\n subpath: string,\n public environment: any\n ) {\n this.environment = environment\n this.baseSetParent(parent, subpath)\n }\n\n getReconciliationType() {\n return this.type\n }\n\n private pathAtom?: IAtom\n protected baseSetParent(parent: AnyObjectNode | null, subpath: string) {\n this._parent = parent\n this._subpath = subpath\n this._escapedSubpath = undefined // regenerate when needed\n if (this.pathAtom) {\n this.pathAtom.reportChanged()\n }\n }\n\n /*\n * Returns (escaped) path representation as string\n */\n get path(): string {\n return this.getEscapedPath(true)\n }\n\n protected getEscapedPath(reportObserved: boolean): string {\n if (reportObserved) {\n if (!this.pathAtom) {\n this.pathAtom = createAtom(`path`)\n }\n this.pathAtom.reportObserved()\n }\n if (!this.parent) {\n return \"\"\n }\n // regenerate escaped subpath if needed\n if (this._escapedSubpath === undefined) {\n this._escapedSubpath = !this._subpath ? \"\" : escapeJsonPath(this._subpath)\n }\n return (\n this.parent.getEscapedPath(reportObserved) + \"/\" + this._escapedSubpath\n )\n }\n\n get isRoot(): boolean {\n return this.parent === null\n }\n\n abstract get root(): AnyObjectNode\n\n abstract setParent(\n newParent: AnyObjectNode | null,\n subpath: string | null\n ): void\n\n abstract get snapshot(): S\n abstract getSnapshot(): S\n\n get isAlive() {\n return this.state !== NodeLifeCycle.DEAD\n }\n\n get isDetaching() {\n return this.state === NodeLifeCycle.DETACHING\n }\n\n get observableIsAlive() {\n if (!this.aliveAtom) {\n this.aliveAtom = createAtom(`alive`)\n }\n this.aliveAtom.reportObserved()\n return this.isAlive\n }\n\n abstract die(): void\n\n abstract finalizeCreation(): void\n\n protected baseFinalizeCreation(whenFinalized?: () => void) {\n if (devMode()) {\n if (!this.isAlive) {\n // istanbul ignore next\n throw fail(\n \"assertion failed: cannot finalize the creation of a node that is already dead\"\n )\n }\n }\n\n // goal: afterCreate hooks runs depth-first. After attach runs parent first, so on afterAttach the parent has completed already\n if (this.state === NodeLifeCycle.CREATED) {\n if (this.parent) {\n if (this.parent.state !== NodeLifeCycle.FINALIZED) {\n // parent not ready yet, postpone\n return\n }\n this.fireHook(Hook.afterAttach)\n }\n\n this.state = NodeLifeCycle.FINALIZED\n\n if (whenFinalized) {\n whenFinalized()\n }\n }\n }\n\n abstract finalizeDeath(): void\n\n protected baseFinalizeDeath() {\n if (this._hookSubscribers) {\n this._hookSubscribers.clearAll()\n }\n\n this._subpathUponDeath = this._subpath\n this._pathUponDeath = this.getEscapedPath(false)\n this.baseSetParent(null, \"\")\n this.state = NodeLifeCycle.DEAD\n }\n\n abstract aboutToDie(): void\n\n protected baseAboutToDie() {\n this.fireHook(Hook.beforeDestroy)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyNode = BaseNode<any, any, any>\n","import { action } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n BaseNode,\n Hook,\n NodeLifeCycle,\n SimpleType,\n devMode,\n fail,\n freeze\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class ScalarNode<C, S, T> extends BaseNode<C, S, T> {\n // note about hooks:\n // - afterCreate is not emmited in scalar nodes, since it would be emitted in the\n // constructor, before it can be subscribed by anybody\n // - afterCreationFinalization could be emitted, but there's no need for it right now\n // - beforeDetach is never emitted for scalar nodes, since they cannot be detached\n\n declare readonly type: SimpleType<C, S, T>\n\n constructor(\n simpleType: SimpleType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialSnapshot: C\n ) {\n super(simpleType, parent, subpath, environment)\n try {\n this.storedValue = simpleType.createNewInstance(initialSnapshot)\n } catch (e) {\n // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n this.state = NodeLifeCycle.DEAD\n throw e\n }\n\n this.state = NodeLifeCycle.CREATED\n // for scalar nodes there's no point in firing this event since it would fire on the constructor, before\n // anybody can actually register for/listen to it\n // this.fireHook(Hook.AfterCreate)\n\n this.finalizeCreation()\n }\n\n get root(): AnyObjectNode {\n // future optimization: store root ref in the node and maintain it\n if (!this.parent) {\n throw fail(`This scalar node is not part of a tree`)\n }\n return this.parent.root\n }\n\n setParent(newParent: AnyObjectNode, subpath: string): void {\n const parentChanged = this.parent !== newParent\n const subpathChanged = this.subpath !== subpath\n\n if (!parentChanged && !subpathChanged) {\n return\n }\n\n if (devMode()) {\n if (!subpath) {\n // istanbul ignore next\n throw fail(\"assertion failed: subpath expected\")\n }\n if (!newParent) {\n // istanbul ignore next\n throw fail(\"assertion failed: parent expected\")\n }\n if (parentChanged) {\n // istanbul ignore next\n throw fail(\"assertion failed: scalar nodes cannot change their parent\")\n }\n }\n\n this.environment = undefined // use parent's\n this.baseSetParent(this.parent, subpath)\n }\n\n get snapshot(): S {\n return freeze(this.getSnapshot())\n }\n\n getSnapshot(): S {\n return this.type.getSnapshot(this)\n }\n\n toString(): string {\n const path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\"\n return `${this.type.name}@${path}${this.isAlive ? \"\" : \" [dead]\"}`\n }\n\n die(): void {\n if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {\n return\n }\n this.aboutToDie()\n this.finalizeDeath()\n }\n\n finalizeCreation(): void {\n this.baseFinalizeCreation()\n }\n\n aboutToDie(): void {\n this.baseAboutToDie()\n }\n\n finalizeDeath(): void {\n this.baseFinalizeDeath()\n }\n\n protected fireHook(name: Hook): void {\n this.fireInternalHook(name)\n }\n}\nScalarNode.prototype.die = action(ScalarNode.prototype.die)\n","import {\n type IComputedValue,\n _allowStateChangesInsideComputed,\n action,\n computed,\n reaction\n} from \"mobx\"\n\nimport {\n BaseNode,\n ComplexType,\n EMPTY_OBJECT,\n EventHandlers,\n Hook,\n IdentifierCache,\n NodeLifeCycle,\n addHiddenFinalProp,\n convertChildNodesToArray,\n createActionInvoker,\n devMode,\n escapeJsonPath,\n extend,\n fail,\n freeze,\n getCurrentActionContext,\n getLivelinessChecking,\n getPath,\n normalizeIdentifier,\n resolveNodeByPathParts,\n splitJsonPath,\n splitPatch,\n toJSON,\n warnError\n} from \"../../internal.ts\"\n\nimport type {\n AnyNode,\n ArgumentTypes,\n IAnyType,\n IDisposer,\n IJsonPatch,\n IMiddleware,\n IMiddlewareEvent,\n IMiddlewareHandler,\n IReversibleJsonPatch,\n IStateTreeNode,\n IType,\n ReferenceIdentifier\n} from \"../../internal.ts\"\n\nlet nextNodeId = 1\n\nconst enum ObservableInstanceLifecycle {\n // the actual observable instance has not been created yet\n UNINITIALIZED,\n // the actual observable instance is being created\n CREATING,\n // the actual observable instance has been created\n CREATED\n}\n\nconst enum InternalEvents {\n Dispose = \"dispose\",\n Patch = \"patch\",\n Snapshot = \"snapshot\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport interface IChildNodesMap {\n [key: string]: AnyNode\n}\n\nconst snapshotReactionOptions = {\n onError(e: any) {\n throw e\n }\n}\n\ntype InternalEventHandlers<S> = {\n [InternalEvents.Dispose]: IDisposer\n [InternalEvents.Patch]: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n [InternalEvents.Snapshot]: (snapshot: S) => void\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ObjectNode<C, S, T> extends BaseNode<C, S, T> {\n declare readonly type: ComplexType<C, S, T>\n declare storedValue: T & IStateTreeNode<IType<C, S, T>>\n\n readonly nodeId = ++nextNodeId\n readonly identifierAttribute?: string\n readonly identifier: string | null // Identifier is always normalized to string, even if the identifier property isn't\n readonly unnormalizedIdentifier: ReferenceIdentifier | null\n\n identifierCache?: IdentifierCache\n isProtectionEnabled = true\n middlewares?: IMiddleware[]\n hasSnapshotPostProcessor = false\n\n private _applyPatches?: (patches: IJsonPatch[]) => void\n\n applyPatches(patches: IJsonPatch[]): void {\n this.createObservableInstanceIfNeeded()\n this._applyPatches!(patches)\n }\n\n private _applySnapshot?: (snapshot: C) => void\n\n applySnapshot(snapshot: C): void {\n this.createObservableInstanceIfNeeded()\n this._applySnapshot!(snapshot)\n }\n\n private _autoUnbox = true // unboxing is disabled when reading child nodes\n _isRunningAction = false // only relevant for root\n private _hasSnapshotReaction = false\n\n private _observableInstanceState = ObservableInstanceLifecycle.UNINITIALIZED\n private _childNodes: IChildNodesMap\n private _initialSnapshot: C\n private _cachedInitialSnapshot?: S\n private _cachedInitialSnapshotCreated = false\n private _snapshotComputed: IComputedValue<S>\n\n constructor(\n complexType: ComplexType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ) {\n super(complexType, parent, subpath, environment)\n this._snapshotComputed = computed<S>(() => freeze(this.getSnapshot()))\n\n this.unbox = this.unbox.bind(this)\n\n this._initialSnapshot = freeze(initialValue)\n this.identifierAttribute = complexType.identifierAttribute\n\n if (!parent) {\n this.identifierCache = new IdentifierCache()\n }\n\n this._childNodes = complexType.initializeChildNodes(\n this,\n this._initialSnapshot\n )\n\n // identifier can not be changed during lifecycle of a node\n // so we safely can read it from initial snapshot\n this.identifier = null\n this.unnormalizedIdentifier = null\n if (this.identifierAttribute && this._initialSnapshot) {\n let id = (this._initialSnapshot as any)[this.identifierAttribute]\n if (id === undefined) {\n // try with the actual node if not (for optional identifiers)\n const childNode = this._childNodes[this.identifierAttribute]\n if (childNode) {\n id = childNode.value\n }\n }\n\n if (typeof id !== \"string\" && typeof id !== \"number\") {\n throw fail(\n `Instance identifier '${this.identifierAttribute}' for type '${this.type.name}' must be a string or a number`\n )\n }\n\n // normalize internal identifier to string\n this.identifier = normalizeIdentifier(id)\n this.unnormalizedIdentifier = id\n }\n\n if (!parent) {\n this.identifierCache!.addNodeToCache(this)\n } else {\n parent.root.identifierCache!.addNodeToCache(this)\n }\n }\n\n createObservableInstanceIfNeeded(fireHooks = true): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n this.createObservableInstance(fireHooks)\n }\n }\n\n createObservableInstance(fireHooks = true): void {\n if (devMode()) {\n if (this.state !== NodeLifeCycle.INITIALIZING) {\n // istanbul ignore next\n throw fail(\n \"assertion failed: the creation of the observable instance must be done on the initializing phase\"\n )\n }\n }\n this._observableInstanceState = ObservableInstanceLifecycle.CREATING\n\n // make sure the parent chain is created as well\n\n // array with parent chain from parent to child\n const parentChain = []\n\n let parent = this.parent\n // for performance reasons we never go back further than the most direct\n // uninitialized parent\n // this is done to avoid traversing the whole tree to the root when using\n // the same reference again\n while (\n parent &&\n parent._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n parentChain.unshift(parent)\n parent = parent.parent\n }\n\n // initialize the uninitialized parent chain from parent to child\n for (const p of parentChain) {\n // delay firing hooks until after all parents have been created\n p.createObservableInstanceIfNeeded(false)\n }\n\n const type = this.type\n\n try {\n // @ts-expect-error storedValue type mismatch during initialization\n this.storedValue = type.createNewInstance(this._childNodes)\n this.preboot()\n\n this._isRunningAction = true\n type.finalizeNewInstance(this, this.storedValue)\n } catch (e) {\n // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n this.state = NodeLifeCycle.DEAD\n throw e\n } finally {\n this._isRunningAction = false\n }\n\n this._observableInstanceState = ObservableInstanceLifecycle.CREATED\n\n // NOTE: we need to touch snapshot, because non-observable\n // \"_observableInstanceState\" field was touched\n ;(this._snapshotComputed as any).trackAndCompute()\n\n if (this.isRoot) {\n this._addSnapshotReaction()\n }\n\n this._childNodes = EMPTY_OBJECT\n\n this.state = NodeLifeCycle.CREATED\n\n if (fireHooks) {\n this.fireHook(Hook.afterCreate)\n // Note that the parent might not be finalized at this point\n // so afterAttach won't be called until later in that case\n this.finalizeCreation()\n\n // fire the hooks of the parents that we created\n for (const p of parentChain.reverse()) {\n p.fireHook(Hook.afterCreate)\n // This will call afterAttach on the child if necessary\n p.finalizeCreation()\n }\n }\n }\n\n get root(): AnyObjectNode {\n const parent = this.parent\n return parent ? parent.root : this\n }\n\n clearParent(): void {\n if (!this.parent) {\n return\n }\n\n // detach if attached\n this.fireHook(Hook.beforeDetach)\n const previousState = this.state\n this.state = NodeLifeCycle.DETACHING\n\n const root = this.root\n const newEnv = root.environment\n const newIdCache = root.identifierCache!.splitCache(this)\n\n try {\n this.parent.removeChild(this.subpath)\n this.baseSetParent(null, \"\")\n this.environment = newEnv\n this.identifierCache = newIdCache\n } finally {\n this.state = previousState\n }\n }\n\n setParent(newParent: AnyObjectNode, subpath: string): void {\n const parentChanged = newParent !== this.parent\n const subpathChanged = subpath !== this.subpath\n\n if (!parentChanged && !subpathChanged) {\n return\n }\n\n if (devMode()) {\n if (!subpath) {\n // istanbul ignore next\n throw fail(\"assertion failed: subpath expected\")\n }\n if (!newParent) {\n // istanbul ignore next\n throw fail(\"assertion failed: new parent expected\")\n }\n\n if (this.parent && parentChanged) {\n throw fail(\n `A node cannot exists twice in the state tree. Failed to add ${this} to path '${newParent.path}/${subpath}'.`\n )\n }\n if (!this.parent && newParent.root === this) {\n throw fail(\n `A state tree is not allowed to contain itself. Cannot assign ${this} to path '${newParent.path}/${subpath}'`\n )\n }\n if (\n !this.parent &&\n !!this.environment &&\n this.environment !== newParent.root.environment\n ) {\n throw fail(\n `A state tree cannot be made part of another state tree as long as their environments are different.`\n )\n }\n }\n\n if (parentChanged) {\n // attach to new parent\n this.environment = undefined // will use root's\n newParent.root.identifierCache!.mergeCache(this)\n this.baseSetParent(newParent, subpath)\n this.fireHook(Hook.afterAttach)\n } else if (subpathChanged) {\n // moving to a new subpath on the same parent\n this.baseSetParent(this.parent, subpath)\n }\n }\n\n protected fireHook(name: Hook): void {\n this.fireInternalHook(name)\n\n const fn =\n this.storedValue &&\n typeof this.storedValue === \"object\" &&\n (this.storedValue as any)[name]\n if (typeof fn === \"function\") {\n // we check for it to allow old mobx peer dependencies that don't have the method to work (even when still bugged)\n if (_allowStateChangesInsideComputed) {\n _allowStateChangesInsideComputed(() => {\n fn.apply(this.storedValue)\n })\n } else {\n fn.apply(this.storedValue)\n }\n }\n }\n\n private _snapshotUponDeath?: S\n\n // advantage of using computed for a snapshot is that nicely respects transactions etc.\n get snapshot(): S {\n if (this.hasSnapshotPostProcessor) {\n this.createObservableInstanceIfNeeded()\n }\n return this._snapshotComputed.get()\n }\n\n // NOTE: we use this method to get snapshot without creating @computed overhead\n getSnapshot(): S {\n if (!this.isAlive) {\n return this._snapshotUponDeath!\n }\n return this._observableInstanceState === ObservableInstanceLifecycle.CREATED\n ? this._getActualSnapshot()\n : this._getCachedInitialSnapshot()\n }\n\n private _getActualSnapshot(): S {\n return this.type.getSnapshot(this)\n }\n\n private _getCachedInitialSnapshot(): S {\n if (!this._cachedInitialSnapshotCreated) {\n const type = this.type\n const childNodes = this._childNodes\n const snapshot = this._initialSnapshot\n\n this._cachedInitialSnapshot = type.processInitialSnapshot(\n childNodes,\n snapshot\n )\n this._cachedInitialSnapshotCreated = true\n }\n\n return this._cachedInitialSnapshot!\n }\n\n private isRunningAction(): boolean {\n if (this._isRunningAction) {\n return true\n }\n if (this.isRoot) {\n return false\n }\n return this.parent!.isRunningAction()\n }\n\n assertAlive(context: AssertAliveContext): void {\n const livelinessChecking = getLivelinessChecking()\n if (!this.isAlive && livelinessChecking !== \"ignore\") {\n const error = this._getAssertAliveError(context)\n switch (livelinessChecking) {\n case \"error\":\n throw fail(error)\n case \"warn\":\n warnError(error)\n }\n }\n }\n\n private _getAssertAliveError(context: AssertAliveContext): string {\n const escapedPath = this.getEscapedPath(false) || this.pathUponDeath || \"\"\n const subpath = (context.subpath && escapeJsonPath(context.subpath)) || \"\"\n\n let actionContext = context.actionContext || getCurrentActionContext()\n\n // try to use a real action context if possible since it includes the action name\n if (\n actionContext &&\n actionContext.type !== \"action\" &&\n actionContext.parentActionEvent\n ) {\n actionContext = actionContext.parentActionEvent\n }\n\n let actionFullPath = \"\"\n if (actionContext && actionContext.name != null) {\n // try to use the context, and if it not available use the node one\n const actionPath =\n (actionContext &&\n actionContext.context &&\n getPath(actionContext.context)) ||\n escapedPath\n actionFullPath = `${actionPath}.${actionContext.name}()`\n }\n\n 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: '${escapedPath}', Subpath: '${subpath}', Action: '${actionFullPath}'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.`\n }\n\n getChildNode(subpath: string): AnyNode {\n this.assertAlive({\n subpath\n })\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildNode(this, subpath)\n : this._childNodes![subpath]\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildren(): ReadonlyArray<AnyNode> {\n this.assertAlive(EMPTY_OBJECT)\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildren(this)\n : convertChildNodesToArray(this._childNodes)\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildType(propertyName?: string): IAnyType {\n return this.type.getChildType(propertyName)\n }\n\n get isProtected(): boolean {\n return this.root.isProtectionEnabled\n }\n\n assertWritable(context: AssertAliveContext): void {\n this.assertAlive(context)\n if (!this.isRunningAction() && this.isProtected) {\n throw fail(\n `Cannot modify '${this}', the object is protected and can only be modified by using an action.`\n )\n }\n }\n\n removeChild(subpath: string): void {\n this.type.removeChild(this, subpath)\n }\n\n // bound on the constructor\n unbox(childNode: AnyNode | undefined): AnyNode | undefined {\n if (!childNode) {\n return childNode\n }\n\n this.assertAlive({\n subpath: childNode.subpath || childNode.subpathUponDeath\n })\n return this._autoUnbox ? childNode.value : childNode\n }\n\n toString(): string {\n const path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\"\n const identifier = this.identifier ? `(id: ${this.identifier})` : \"\"\n return `${this.type.name}@${path}${identifier}${this.isAlive ? \"\" : \" [dead]\"}`\n }\n\n finalizeCreation(): void {\n this.baseFinalizeCreation(() => {\n for (const child of this.getChildren()) {\n child.finalizeCreation()\n }\n\n this.fireInternalHook(Hook.afterCreationFinalization)\n })\n }\n\n detach(): void {\n if (!this.isAlive) {\n throw fail(`Error while detaching, node is not alive.`)\n }\n\n this.clearParent()\n }\n\n private preboot(): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n this._applyPatches = createActionInvoker(\n this.storedValue,\n \"@APPLY_PATCHES\",\n (patches: IJsonPatch[]) => {\n patches.forEach(patch => {\n if (!patch.path) {\n self.type.applySnapshot(self, patch.value)\n return\n }\n const parts = splitJsonPath(patch.path)\n const node = resolveNodeByPathParts(\n self,\n parts.slice(0, -1)\n ) as AnyObjectNode\n node.applyPatchLocally(parts[parts.length - 1], patch)\n })\n }\n )\n this._applySnapshot = createActionInvoker(\n this.storedValue,\n \"@APPLY_SNAPSHOT\",\n (snapshot: C) => {\n // if the snapshot is the same as the current one, avoid performing a reconcile\n if (snapshot === (self.snapshot as any)) {\n return\n }\n // else, apply it by calling the type logic\n return self.type.applySnapshot(self, snapshot as any)\n }\n )\n\n addHiddenFinalProp(this.storedValue, \"$treenode\", this)\n addHiddenFinalProp(this.storedValue, \"toJSON\", toJSON)\n }\n\n die(): void {\n if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {\n return\n }\n this.aboutToDie()\n this.finalizeDeath()\n }\n\n aboutToDie(): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n return\n }\n\n this.getChildren().forEach(node => {\n node.aboutToDie()\n })\n\n // beforeDestroy should run before the disposers since else we could end up in a situation where\n // a disposer added with addDisposer at this stage (beforeDestroy) is actually never released\n this.baseAboutToDie()\n\n this._internalEventsEmit(InternalEvents.Dispose)\n this._internalEventsClear(InternalEvents.Dispose)\n }\n\n finalizeDeath(): void {\n // invariant: not called directly but from \"die\"\n this.getChildren().forEach(node => {\n node.finalizeDeath()\n })\n this.root.identifierCache!.notifyDied(this)\n\n // \"kill\" the computed prop and just store the last snapshot\n const snapshot = this.snapshot\n this._snapshotUponDeath = snapshot\n\n this._internalEventsClearAll()\n\n this.baseFinalizeDeath()\n }\n\n onSnapshot(onChange: (snapshot: S) => void): IDisposer {\n this._addSnapshotReaction()\n return this._internalEventsRegister(InternalEvents.Snapshot, onChange)\n }\n\n protected emitSnapshot(snapshot: S): void {\n this._internalEventsEmit(InternalEvents.Snapshot, snapshot)\n }\n\n onPatch(\n handler: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n ): IDisposer {\n return this._internalEventsRegister(InternalEvents.Patch, handler)\n }\n\n emitPatch(basePatch: IReversibleJsonPatch, source: AnyNode): void {\n if (this._internalEventsHasSubscribers(InternalEvents.Patch)) {\n const localizedPatch: IReversibleJsonPatch = extend({}, basePatch, {\n path: source.path.substr(this.path.length) + \"/\" + basePatch.path // calculate the relative path of the patch\n })\n const [patch, reversePatch] = splitPatch(localizedPatch)\n this._internalEventsEmit(InternalEvents.Patch, patch, reversePatch)\n }\n if (this.parent) {\n this.parent.emitPatch(basePatch, source)\n }\n }\n\n hasDisposer(disposer: () => void): boolean {\n return this._internalEventsHas(InternalEvents.Dispose, disposer)\n }\n\n addDisposer(disposer: () => void): void {\n if (!this.hasDisposer(disposer)) {\n this._internalEventsRegister(InternalEvents.Dispose, disposer, true)\n return\n }\n throw fail(\n \"cannot add a disposer when it is already registered for execution\"\n )\n }\n\n removeDisposer(disposer: () => void): void {\n if (!this._internalEventsHas(InternalEvents.Dispose, disposer)) {\n throw fail(\n \"cannot remove a disposer which was never registered for execution\"\n )\n }\n this._internalEventsUnregister(InternalEvents.Dispose, disposer)\n }\n\n private removeMiddleware(middleware: IMiddleware): void {\n if (this.middlewares) {\n const index = this.middlewares.indexOf(middleware)\n if (index >= 0) {\n this.middlewares.splice(index, 1)\n }\n }\n }\n\n addMiddleWare(\n handler: IMiddlewareHandler,\n includeHooks: boolean = true\n ): IDisposer {\n const middleware = { handler, includeHooks }\n if (!this.middlewares) {\n this.middlewares = [middleware]\n } else {\n this.middlewares.push(middleware)\n }\n\n return () => {\n this.removeMiddleware(middleware)\n }\n }\n\n applyPatchLocally(subpath: string, patch: IJsonPatch): void {\n this.assertWritable({\n subpath\n })\n this.createObservableInstanceIfNeeded()\n this.type.applyPatchLocally(this, subpath, patch)\n }\n\n private _addSnapshotReaction(): void {\n if (!this._hasSnapshotReaction) {\n const snapshotDisposer = reaction(\n () => this.snapshot,\n snapshot => this.emitSnapshot(snapshot),\n snapshotReactionOptions\n )\n this.addDisposer(snapshotDisposer)\n this._hasSnapshotReaction = true\n }\n }\n\n // #region internal event handling\n\n private _internalEvents?: EventHandlers<InternalEventHandlers<S>>\n\n // we proxy the methods to avoid creating an EventHandlers instance when it is not needed\n\n private _internalEventsHasSubscribers(event: InternalEvents): boolean {\n return !!this._internalEvents && this._internalEvents.hasSubscribers(event)\n }\n\n private _internalEventsRegister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE],\n atTheBeginning = false\n ): IDisposer {\n if (!this._internalEvents) {\n this._internalEvents = new EventHandlers()\n }\n return this._internalEvents.register(event, eventHandler, atTheBeginning)\n }\n\n private _internalEventsHas<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): boolean {\n return (\n !!this._internalEvents && this._internalEvents.has(event, eventHandler)\n )\n }\n\n private _internalEventsUnregister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): void {\n if (this._internalEvents) {\n this._internalEvents.unregister(event, eventHandler)\n }\n }\n\n private _internalEventsEmit<IE extends InternalEvents>(\n event: IE,\n ...args: ArgumentTypes<InternalEventHandlers<S>[IE]>\n ): void {\n if (this._internalEvents) {\n this._internalEvents.emit(event, ...args)\n }\n }\n\n private _internalEventsClear(event: InternalEvents): void {\n if (this._internalEvents) {\n this._internalEvents.clear(event)\n }\n }\n\n private _internalEventsClearAll(): void {\n if (this._internalEvents) {\n this._internalEvents.clearAll()\n }\n }\n\n // #endregion\n}\nObjectNode.prototype.createObservableInstance = action(\n ObjectNode.prototype.createObservableInstance\n)\nObjectNode.prototype.detach = action(ObjectNode.prototype.detach)\nObjectNode.prototype.die = action(ObjectNode.prototype.die)\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyObjectNode = ObjectNode<any, any, any>\n\n/**\n * @internal\n * @hidden\n */\nexport interface AssertAliveContext {\n subpath?: string\n actionContext?: IMiddlewareEvent\n}\n","import { action } from \"mobx\"\n\nimport {\n BaseNode,\n assertArg,\n fail,\n getStateTreeNode,\n getStateTreeNodeSafe,\n getType,\n isMutable,\n isStateTreeNode,\n normalizeIdentifier,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n// Cache for validation results to avoid re-validating the same object against the same type\n// Uses WeakMap so cached objects can be garbage collected\nconst validationCache = new WeakMap<\n object,\n WeakMap<BaseType<any, any, any, any>, IValidationResult>\n>()\n\nimport type {\n AnyNode,\n AnyObjectNode,\n IChildNodesMap,\n IJsonPatch,\n IStateTreeNode,\n IValidationContext,\n IValidationResult,\n ModelPrimitive,\n ObjectNode,\n ScalarNode\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport enum TypeFlags {\n String = 1,\n Number = 1 << 1,\n Boolean = 1 << 2,\n Date = 1 << 3,\n Literal = 1 << 4,\n Array = 1 << 5,\n Map = 1 << 6,\n Object = 1 << 7,\n Frozen = 1 << 8,\n Optional = 1 << 9,\n Reference = 1 << 10,\n Identifier = 1 << 11,\n Late = 1 << 12,\n Refinement = 1 << 13,\n Union = 1 << 14,\n Null = 1 << 15,\n Undefined = 1 << 16,\n Integer = 1 << 17,\n Custom = 1 << 18,\n SnapshotProcessor = 1 << 19,\n Lazy = 1 << 20,\n Finite = 1 << 21,\n Float = 1 << 22\n}\n\n/**\n * @internal\n * @hidden\n */\nexport const cannotDetermineSubtype = \"cannotDetermine\"\n\n/**\n * A state tree node value.\n * @hidden\n */\nexport type STNValue<T, IT extends IAnyType> = T extends object\n ? T & IStateTreeNode<IT>\n : T\n\n/** @hidden */\nconst $type: unique symbol = Symbol(\"$type\")\n\n/**\n * A type, either complex or simple.\n */\nexport interface IType<C, S, T> {\n // fake, will never be present, just for typing\n /** @hidden */\n readonly [$type]: undefined\n\n /**\n * Friendly type name.\n */\n name: string\n\n /**\n * Name of the identifier attribute or null if none.\n */\n readonly identifierAttribute?: string\n\n /**\n * Creates an instance for the type given an snapshot input.\n *\n * @returns An instance of that type.\n */\n create(snapshot?: C, env?: any): this[\"Type\"]\n\n /**\n * Checks if a given snapshot / instance is of the given type.\n *\n * @param thing Snapshot or instance to be checked.\n * @returns true if the value is of the current type, false otherwise.\n */\n is(thing: any): thing is C | this[\"Type\"]\n\n /**\n * Run's the type's typechecker on the given value with the given validation context.\n *\n * @param thing Value to be checked, either a snapshot or an instance.\n * @param context Validation context, an array of { subpaths, subtypes } that should be validated\n * @returns The validation result, an array with the list of validation errors.\n */\n validate(thing: C, context: IValidationContext): IValidationResult\n\n /**\n * Gets the textual representation of the type as a string.\n */\n describe(): string\n\n /**\n * @deprecated use `Instance<typeof MyType>` instead.\n * @hidden\n */\n readonly Type: STNValue<T, this>\n\n /**\n * @deprecated do not use.\n * @hidden\n */\n readonly TypeWithoutSTN: T\n\n /**\n * @deprecated use `SnapshotOut<typeof MyType>` instead.\n * @hidden\n */\n readonly SnapshotType: S\n\n /**\n * @deprecated use `SnapshotIn<typeof MyType>` instead.\n * @hidden\n */\n readonly CreationType: C\n\n // Internal api's\n\n /**\n * @internal\n * @hidden\n */\n flags: TypeFlags\n /**\n * @internal\n * @hidden\n */\n isType: true\n /**\n * @internal\n * @hidden\n */\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n ): BaseNode<C, S, T>\n /**\n * @internal\n * @hidden\n */\n reconcile(\n current: BaseNode<C, S, T>,\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): BaseNode<C, S, T>\n /**\n * @internal\n * @hidden\n */\n getSnapshot(node: BaseNode<C, S, T>, applyPostProcess?: boolean): S\n /**\n * @internal\n * @hidden\n */\n isAssignableFrom(type: IAnyType): boolean\n /**\n * @internal\n * @hidden\n */\n getSubTypes(): IAnyType[] | IAnyType | null | typeof cannotDetermineSubtype\n}\n\n/**\n * Any kind of type.\n */\nexport interface IAnyType extends IType<any, any, any> {}\n\n/**\n * A simple type, this is, a type where the instance and the snapshot representation are the same.\n */\nexport interface ISimpleType<T> extends IType<T, T, T> {}\n\n/** @hidden */\nexport type Primitives = ModelPrimitive | null | undefined\n\n/**\n * A complex type.\n * @deprecated just for compatibility with old versions, could be deprecated on the next major version\n * @hidden\n */\nexport interface IComplexType<C, S, T> extends IType<C, S, T & object> {}\n\n/**\n * Any kind of complex type.\n */\nexport interface IAnyComplexType extends IType<any, any, object> {}\n\n/** @hidden */\nexport type ExtractCSTWithoutSTN<\n IT extends {\n [$type]: undefined\n CreationType: any\n SnapshotType: any\n TypeWithoutSTN: any\n }\n> = IT[\"CreationType\"] | IT[\"SnapshotType\"] | IT[\"TypeWithoutSTN\"]\n/** @hidden */\nexport type ExtractCSTWithSTN<\n IT extends {\n [$type]: undefined\n CreationType: any\n SnapshotType: any\n Type: any\n }\n> = IT[\"CreationType\"] | IT[\"SnapshotType\"] | IT[\"Type\"]\n\n/**\n * The instance representation of a given type.\n */\nexport type Instance<T> = T extends { [$type]: undefined; Type: any }\n ? T[\"Type\"]\n : T\n\n/**\n * The input (creation) snapshot representation of a given type.\n */\nexport type SnapshotIn<T> = T extends { [$type]: undefined; CreationType: any }\n ? T[\"CreationType\"]\n : T extends IStateTreeNode<infer IT>\n ? IT[\"CreationType\"]\n : T\n\n/**\n * The output snapshot representation of a given type.\n */\nexport type SnapshotOut<T> = T extends { [$type]: undefined; SnapshotType: any }\n ? T[\"SnapshotType\"]\n : T extends IStateTreeNode<infer IT>\n ? IT[\"SnapshotType\"]\n : T\n\n/**\n * A type which is equivalent to the union of SnapshotIn and Instance types of a given typeof TYPE or typeof VARIABLE.\n * For primitives it defaults to the primitive itself.\n *\n * For example:\n * - `SnapshotOrInstance<typeof ModelA> = SnapshotIn<typeof ModelA> | Instance<typeof ModelA>`\n * - `SnapshotOrInstance<typeof self.a (where self.a is a ModelA)> = SnapshotIn<typeof ModelA> | Instance<typeof ModelA>`\n *\n * Usually you might want to use this when your model has a setter action that sets a property.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n * n: types.number\n * })\n *\n * const ModelB = types.model({\n * innerModel: ModelA\n * }).actions(self => ({\n * // this will accept as property both the snapshot and the instance, whichever is preferred\n * setInnerModel(m: SnapshotOrInstance<typeof self.innerModel>) {\n * self.innerModel = cast(m)\n * }\n * }))\n * ```\n */\nexport type SnapshotOrInstance<T> = SnapshotIn<T> | Instance<T>\n\n/**\n * A base type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nexport abstract class BaseType<\n C,\n S,\n T,\n N extends BaseNode<any, any, any> = BaseNode<C, S, T>\n> implements IType<C, S, T> {\n [$type]!: undefined\n\n // these are just to make inner types avaialable to inherited classes\n readonly C!: C\n readonly S!: S\n readonly T!: T\n readonly N!: N\n\n readonly isType = true\n readonly name: string\n\n constructor(name: string) {\n this.name = name\n }\n\n create(snapshot?: C, environment?: any) {\n typecheckInternal(this, snapshot)\n return this.instantiate(null, \"\", environment, snapshot!).value\n }\n\n getSnapshot(_node: N, _applyPostProcess?: boolean): S {\n // istanbul ignore next\n throw fail(\"unimplemented method\")\n }\n\n abstract reconcile(\n current: N,\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): N\n\n abstract instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n ): N\n\n declare abstract flags: TypeFlags\n abstract describe(): string\n\n abstract isValidSnapshot(\n value: C,\n context: IValidationContext\n ): IValidationResult\n\n isAssignableFrom(type: IAnyType): boolean {\n return type === this\n }\n\n validate(value: C | T, context: IValidationContext): IValidationResult {\n const node = getStateTreeNodeSafe(value)\n if (node) {\n const valueType = getType(value)\n return this.isAssignableFrom(valueType)\n ? typeCheckSuccess()\n : typeCheckFailure(context, value)\n // it is tempting to compare snapshots, but in that case we should always clone on assignments...\n }\n\n // check cache for object values (only at root level to avoid context mismatches)\n if (typeof value === \"object\" && value !== null && context.length === 1) {\n const typeCache = validationCache.get(value)\n if (typeCache) {\n const cached = typeCache.get(this)\n if (cached !== undefined) {\n return cached\n }\n }\n }\n\n const result = this.isValidSnapshot(value as C, context)\n\n // cache result for object values (only at root level)\n if (typeof value === \"object\" && value !== null && context.length === 1) {\n let typeCache = validationCache.get(value)\n if (!typeCache) {\n typeCache = new WeakMap()\n validationCache.set(value, typeCache)\n }\n typeCache.set(this, result)\n }\n\n return result\n }\n\n is(thing: any): thing is any {\n return this.validate(thing, [{ path: \"\", type: this }]).length === 0\n }\n\n get Type(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get TypeWithoutSTN(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get SnapshotType(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n get CreationType(): any {\n // istanbul ignore next\n throw fail(\n \"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`\"\n )\n }\n\n abstract getSubTypes():\n | IAnyType[]\n | IAnyType\n | null\n | typeof cannotDetermineSubtype\n}\nBaseType.prototype.create = action(BaseType.prototype.create)\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyBaseType = BaseType<any, any, any, any>\n\n/**\n * @internal\n * @hidden\n */\nexport type ExtractNodeType<IT extends IAnyType> =\n IT extends BaseType<any, any, any, infer N> ? N : never\n\n/**\n * A complex type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nexport abstract class ComplexType<C, S, T> extends BaseType<\n C,\n S,\n T,\n ObjectNode<C, S, T>\n> {\n identifierAttribute?: string\n\n constructor(name: string) {\n super(name)\n }\n\n create(snapshot: C = this.getDefaultSnapshot(), environment?: any) {\n return super.create(snapshot, environment)\n }\n\n getValue(node: this[\"N\"]): T {\n node.createObservableInstanceIfNeeded()\n return node.storedValue\n }\n\n abstract getDefaultSnapshot(): C\n\n abstract createNewInstance(childNodes: IChildNodesMap): T\n abstract finalizeNewInstance(node: this[\"N\"], instance: any): void\n\n abstract applySnapshot(node: this[\"N\"], snapshot: C): void\n abstract applyPatchLocally(\n node: this[\"N\"],\n subpath: string,\n patch: IJsonPatch\n ): void\n abstract processInitialSnapshot(childNodes: IChildNodesMap, snapshot: C): S\n\n abstract getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode>\n abstract getChildNode(node: this[\"N\"], key: string): AnyNode\n abstract getChildType(propertyName?: string): IAnyType\n abstract initializeChildNodes(node: this[\"N\"], snapshot: any): IChildNodesMap\n abstract removeChild(node: this[\"N\"], subpath: string): void\n\n isMatchingSnapshotId(current: this[\"N\"], snapshot: C): boolean {\n return (\n !current.identifierAttribute ||\n current.identifier ===\n normalizeIdentifier((snapshot as any)[current.identifierAttribute])\n )\n }\n\n private tryToReconcileNode(current: this[\"N\"], newValue: C | T) {\n if (current.isDetaching) {\n return false\n }\n if ((current.snapshot as any) === newValue) {\n // newValue is the current snapshot of the node, noop\n return true\n }\n if (isStateTreeNode(newValue) && getStateTreeNode(newValue) === current) {\n // the current node is the same as the new one\n return true\n }\n if (\n current.type === this &&\n isMutable(newValue) &&\n !isStateTreeNode(newValue) &&\n this.isMatchingSnapshotId(current, newValue as any)\n ) {\n // the newValue has no node, so can be treated like a snapshot\n // we can reconcile\n current.applySnapshot(newValue as C)\n return true\n }\n return false\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: C | T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const nodeReconciled = this.tryToReconcileNode(current, newValue)\n if (nodeReconciled) {\n current.setParent(parent, subpath)\n return current\n }\n\n // current node cannot be recycled in any way\n current.die() // noop if detaching\n // attempt to reuse the new one\n if (isStateTreeNode(newValue) && this.isAssignableFrom(getType(newValue))) {\n // newValue is a Node as well, move it here..\n const newNode = getStateTreeNode(newValue)\n newNode.setParent(parent, subpath)\n return newNode\n }\n // nothing to do, we have to create a new node\n return this.instantiate(parent, subpath, undefined, newValue)\n }\n\n getSubTypes() {\n return null\n }\n}\nComplexType.prototype.create = action(ComplexType.prototype.create)\n\n/**\n * @internal\n * @hidden\n */\nexport abstract class SimpleType<C, S, T> extends BaseType<\n C,\n S,\n T,\n ScalarNode<C, S, T>\n> {\n abstract instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ): this[\"N\"]\n\n createNewInstance(snapshot: C): T {\n return snapshot as any\n }\n\n getValue(node: this[\"N\"]): T {\n // if we ever find a case where scalar nodes can be accessed without iterating through its parent\n // uncomment this to make sure the parent chain is created when this is accessed\n // if (node.parent) {\n // node.parent.createObservableInstanceIfNeeded()\n // }\n return node.storedValue\n }\n\n getSnapshot(node: this[\"N\"]): S {\n return node.storedValue\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: C,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n // reconcile only if type and value are still the same, and only if the node is not detaching\n if (\n !current.isDetaching &&\n current.type === this &&\n current.storedValue === newValue\n ) {\n return current\n }\n const res = this.instantiate(parent, subpath, undefined, newValue)\n current.die() // noop if detaching\n return res\n }\n\n getSubTypes() {\n return null\n }\n}\n\n/**\n * Returns if a given value represents a type.\n *\n * @param value Value to check.\n * @returns `true` if the value is a type.\n */\nexport function isType(value: any): value is IAnyType {\n return typeof value === \"object\" && value && value.isType === true\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsType(type: IAnyType, argNumber: number | number[]) {\n assertArg(type, isType, \"mobx-state-tree type\", argNumber)\n}\n","import { type IMiddlewareEvent, type IMiddlewareHandler } from \"../internal.ts\"\n\nconst runningActions = new Map<\n number,\n { async: boolean; call: IMiddlewareEvent; context: any }\n>()\n\nexport interface IActionTrackingMiddlewareHooks<T> {\n filter?: (call: IMiddlewareEvent) => boolean\n onStart: (call: IMiddlewareEvent) => T\n onResume: (call: IMiddlewareEvent, context: T) => void\n onSuspend: (call: IMiddlewareEvent, context: T) => void\n onSuccess: (call: IMiddlewareEvent, context: T, result: any) => void\n onFail: (call: IMiddlewareEvent, context: T, error: any) => void\n}\n\n/**\n * Note: Consider migrating to `createActionTrackingMiddleware2`, it is easier to use.\n *\n * Convenience utility to create action based middleware that supports async processes more easily.\n * All hooks are called for both synchronous and asynchronous actions. Except that either `onSuccess` or `onFail` is called\n *\n * The create middleware tracks the process of an action (assuming it passes the `filter`).\n * `onResume` can return any value, which will be passed as second argument to any other hook. This makes it possible to keep state during a process.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nexport function createActionTrackingMiddleware<T = any>(\n hooks: IActionTrackingMiddlewareHooks<T>\n): IMiddlewareHandler {\n return function actionTrackingMiddleware(\n call: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent) => any,\n _abort: (value: any) => any\n ) {\n switch (call.type) {\n case \"action\": {\n if (!hooks.filter || hooks.filter(call) === true) {\n const context = hooks.onStart(call)\n hooks.onResume(call, context)\n runningActions.set(call.id, {\n call,\n context,\n async: false\n })\n try {\n const res = next(call)\n hooks.onSuspend(call, context)\n if (runningActions.get(call.id)!.async === false) {\n runningActions.delete(call.id)\n hooks.onSuccess(call, context, res)\n }\n return res\n } catch (e) {\n runningActions.delete(call.id)\n hooks.onFail(call, context, e)\n throw e\n }\n } else {\n return next(call)\n }\n }\n case \"flow_spawn\": {\n const root = runningActions.get(call.rootId)!\n root.async = true\n return next(call)\n }\n case \"flow_resume\":\n case \"flow_resume_error\": {\n const root = runningActions.get(call.rootId)!\n hooks.onResume(call, root.context)\n try {\n return next(call)\n } finally {\n hooks.onSuspend(call, root.context)\n }\n }\n case \"flow_throw\": {\n const root = runningActions.get(call.rootId)!\n runningActions.delete(call.rootId)\n hooks.onFail(call, root.context, call.args[0])\n return next(call)\n }\n case \"flow_return\": {\n const root = runningActions.get(call.rootId)!\n runningActions.delete(call.rootId)\n hooks.onSuccess(call, root.context, call.args[0])\n return next(call)\n }\n }\n }\n}\n","import {\n type IActionContext,\n type IMiddlewareEvent,\n type IMiddlewareHandler\n} from \"../internal.ts\"\n\nexport interface IActionTrackingMiddleware2Call<\n TEnv\n> extends Readonly<IActionContext> {\n env: TEnv | undefined\n readonly parentCall?: IActionTrackingMiddleware2Call<TEnv>\n}\n\nexport interface IActionTrackingMiddleware2Hooks<TEnv> {\n filter?: (call: IActionTrackingMiddleware2Call<TEnv>) => boolean\n onStart: (call: IActionTrackingMiddleware2Call<TEnv>) => void\n onFinish: (call: IActionTrackingMiddleware2Call<TEnv>, error?: any) => void\n}\n\nclass RunningAction {\n private flowsPending = 0\n private running = true\n\n constructor(\n public readonly hooks: IActionTrackingMiddleware2Hooks<any> | undefined,\n readonly call: IActionTrackingMiddleware2Call<any>\n ) {\n if (hooks) {\n hooks.onStart(call)\n }\n }\n\n finish(error?: any) {\n if (this.running) {\n this.running = false\n if (this.hooks) {\n this.hooks.onFinish(this.call, error)\n }\n }\n }\n\n incFlowsPending() {\n this.flowsPending++\n }\n\n decFlowsPending() {\n this.flowsPending--\n }\n\n get hasFlowsPending() {\n return this.flowsPending > 0\n }\n}\n\n/**\n * Convenience utility to create action based middleware that supports async processes more easily.\n * The flow is like this:\n * - for each action: if filter passes -> `onStart` -> (inner actions recursively) -> `onFinish`\n *\n * Example: if we had an action `a` that called inside an action `b1`, then `b2` the flow would be:\n * - `filter(a)`\n * - `onStart(a)`\n * - `filter(b1)`\n * - `onStart(b1)`\n * - `onFinish(b1)`\n * - `filter(b2)`\n * - `onStart(b2)`\n * - `onFinish(b2)`\n * - `onFinish(a)`\n *\n * The flow is the same no matter if the actions are sync or async.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nexport function createActionTrackingMiddleware2<TEnv = any>(\n middlewareHooks: IActionTrackingMiddleware2Hooks<TEnv>\n): IMiddlewareHandler {\n const runningActions = new Map<number, RunningAction>()\n\n return function actionTrackingMiddleware(\n call: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent) => any\n ) {\n // find parentRunningAction\n const parentRunningAction = call.parentActionEvent\n ? runningActions.get(call.parentActionEvent.id)\n : undefined\n\n if (call.type === \"action\") {\n const newCall: IActionTrackingMiddleware2Call<TEnv> = {\n ...call,\n // make a shallow copy of the parent action env\n env: parentRunningAction && parentRunningAction.call.env,\n parentCall: parentRunningAction && parentRunningAction.call\n }\n\n const passesFilter =\n !middlewareHooks.filter || middlewareHooks.filter(newCall)\n const hooks = passesFilter ? middlewareHooks : undefined\n\n const runningAction = new RunningAction(hooks, newCall)\n runningActions.set(call.id, runningAction)\n\n let res\n try {\n res = next(call)\n } catch (e) {\n runningActions.delete(call.id)\n runningAction.finish(e)\n throw e\n }\n // sync action finished\n if (!runningAction.hasFlowsPending) {\n runningActions.delete(call.id)\n runningAction.finish()\n }\n return res\n } else {\n if (!parentRunningAction) {\n return next(call)\n }\n\n switch (call.type) {\n case \"flow_spawn\": {\n parentRunningAction.incFlowsPending()\n return next(call)\n }\n case \"flow_resume\":\n case \"flow_resume_error\": {\n return next(call)\n }\n case \"flow_throw\": {\n const error = call.args[0]\n try {\n return next(call)\n } finally {\n parentRunningAction.decFlowsPending()\n if (!parentRunningAction.hasFlowsPending) {\n runningActions.delete(call.parentActionEvent!.id)\n parentRunningAction.finish(error)\n }\n }\n }\n case \"flow_return\": {\n try {\n return next(call)\n } finally {\n parentRunningAction.decFlowsPending()\n if (!parentRunningAction.hasFlowsPending) {\n runningActions.delete(call.parentActionEvent!.id)\n parentRunningAction.finish()\n }\n }\n }\n }\n }\n }\n}\n","import { runInAction } from \"mobx\"\n\nimport {\n type AnyNode,\n type IActionContext,\n type IAnyStateTreeNode,\n type IDisposer,\n addMiddleware,\n applyPatch,\n applySnapshot,\n asArray,\n assertArg,\n assertIsStateTreeNode,\n devMode,\n fail,\n getRelativePathBetweenNodes,\n getRunningActionContext,\n getStateTreeNode,\n getType,\n isArray,\n isPlainObject,\n isPrimitive,\n isProtected,\n isRoot,\n isStateTreeNode,\n tryResolve,\n warnError\n} from \"../internal.ts\"\n\nexport interface ISerializedActionCall {\n name: string\n path?: string\n args?: any[]\n}\n\nexport interface IActionRecorder {\n actions: ReadonlyArray<ISerializedActionCall>\n readonly recording: boolean\n stop(): void\n resume(): void\n replay(target: IAnyStateTreeNode): void\n}\n\nfunction serializeArgument(\n node: AnyNode,\n actionName: string,\n index: number,\n arg: any\n): any {\n if (arg instanceof Date) {\n return { $MST_DATE: arg.getTime() }\n }\n if (isPrimitive(arg)) {\n return arg\n }\n // We should not serialize MST nodes, even if we can, because we don't know if the receiving party can handle a raw snapshot instead of an\n // MST type instance. So if one wants to serialize a MST node that was pass in, either explitly pass: 1: an id, 2: a (relative) path, 3: a snapshot\n if (isStateTreeNode(arg)) {\n return serializeTheUnserializable(`[MSTNode: ${getType(arg).name}]`)\n }\n if (typeof arg === \"function\") {\n return serializeTheUnserializable(`[function]`)\n }\n if (typeof arg === \"object\" && !isPlainObject(arg) && !isArray(arg)) {\n return serializeTheUnserializable(\n `[object ${\n (arg && (arg as any).constructor && (arg as any).constructor.name) ||\n \"Complex Object\"\n }]`\n )\n }\n try {\n // Check if serializable, cycle free etc...\n // MWE: there must be a better way....\n JSON.stringify(arg) // or throws\n return arg\n } catch (e) {\n return serializeTheUnserializable(\"\" + e)\n }\n}\n\nfunction deserializeArgument(adm: AnyNode, value: any): any {\n if (value && typeof value === \"object\" && \"$MST_DATE\" in value) {\n return new Date(value[\"$MST_DATE\"])\n }\n return value\n}\n\nfunction serializeTheUnserializable(baseType: string) {\n return {\n $MST_UNSERIALIZABLE: true,\n type: baseType\n }\n}\n\n/**\n * Applies an action or a series of actions in a single MobX transaction.\n * Does not return any value\n * Takes an action description as produced by the `onAction` middleware.\n *\n * @param target\n * @param actions\n */\nexport function applyAction(\n target: IAnyStateTreeNode,\n actions: ISerializedActionCall | ISerializedActionCall[]\n): void {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n assertArg(actions, a => typeof a === \"object\", \"object or array\", 2)\n\n runInAction(() => {\n asArray(actions).forEach(action => baseApplyAction(target, action))\n })\n}\n\nfunction baseApplyAction(\n target: IAnyStateTreeNode,\n action: ISerializedActionCall\n): any {\n const resolvedTarget = tryResolve(target, action.path || \"\")\n if (!resolvedTarget) {\n throw fail(`Invalid action path: ${action.path || \"\"}`)\n }\n const node = getStateTreeNode(resolvedTarget)\n\n // Reserved functions\n if (action.name === \"@APPLY_PATCHES\") {\n return applyPatch.call(null, resolvedTarget, action.args![0])\n }\n if (action.name === \"@APPLY_SNAPSHOT\") {\n return applySnapshot.call(null, resolvedTarget, action.args![0])\n }\n\n if (!(typeof resolvedTarget[action.name] === \"function\")) {\n throw fail(`Action '${action.name}' does not exist in '${node.path}'`)\n }\n return resolvedTarget[action.name](\n ...(action.args ? action.args.map(v => deserializeArgument(node, v)) : [])\n )\n}\n\n/**\n * Small abstraction around `onAction` and `applyAction`, attaches an action listener to a tree and records all the actions emitted.\n * Returns an recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IActionRecorder {\n * // the recorded actions\n * actions: ISerializedActionCall[]\n * // true if currently recording\n * recording: boolean\n * // stop recording actions\n * stop(): void\n * // resume recording actions\n * resume(): void\n * // apply all the recorded actions on the given object\n * replay(target: IAnyStateTreeNode): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain actions.\n *\n * @param subject\n * @returns\n */\nexport function recordActions(\n subject: IAnyStateTreeNode,\n filter?: (\n action: ISerializedActionCall,\n actionContext: IActionContext | undefined\n ) => boolean\n): IActionRecorder {\n // check all arguments\n assertIsStateTreeNode(subject, 1)\n\n const actions: ISerializedActionCall[] = []\n const listener = (call: ISerializedActionCall) => {\n const recordThis = filter ? filter(call, getRunningActionContext()) : true\n if (recordThis) {\n actions.push(call)\n }\n }\n\n let disposer: IDisposer | undefined\n const recorder: IActionRecorder = {\n actions,\n get recording() {\n return !!disposer\n },\n stop() {\n if (disposer) {\n disposer()\n disposer = undefined\n }\n },\n resume() {\n if (disposer) {\n return\n }\n disposer = onAction(subject, listener)\n },\n replay(target) {\n applyAction(target, actions)\n }\n }\n\n recorder.resume()\n return recorder\n}\n\n/**\n * Registers a function that will be invoked for each action that is called on the provided model instance, or to any of its children.\n * See [actions](https://github.com/mobxjs/mobx-state-tree#actions) for more details. onAction events are emitted only for the outermost called action in the stack.\n * Action can also be intercepted by middleware using addMiddleware to change the function call before it will be run.\n *\n * Not all action arguments might be serializable. For unserializable arguments, a struct like `{ $MST_UNSERIALIZABLE: true, type: \"someType\" }` will be generated.\n * MST Nodes are considered non-serializable as well (they could be serialized as there snapshot, but it is uncertain whether an replaying party will be able to handle such a non-instantiated snapshot).\n * Rather, when using `onAction` middleware, one should consider in passing arguments which are 1: an id, 2: a (relative) path, or 3: a snapshot. Instead of a real MST node.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.array(Todo)\n * }).actions(self => ({\n * add(todo) {\n * self.todos.push(todo);\n * }\n * }))\n *\n * const s = TodoStore.create({ todos: [] })\n *\n * let disposer = onAction(s, (call) => {\n * console.log(call);\n * })\n *\n * s.add({ task: \"Grab a coffee\" })\n * // Logs: { name: \"add\", path: \"\", args: [{ task: \"Grab a coffee\" }] }\n * ```\n *\n * @param target\n * @param listener\n * @param attachAfter (default false) fires the listener *after* the action has executed instead of before.\n * @returns\n */\nexport function onAction(\n target: IAnyStateTreeNode,\n listener: (call: ISerializedActionCall) => void,\n attachAfter = false\n): IDisposer {\n // check all arguments\n assertIsStateTreeNode(target, 1)\n if (devMode()) {\n if (!isRoot(target)) {\n warnError(\n \"Warning: Attaching onAction listeners to non root nodes is dangerous: No events will be emitted for actions initiated higher up in the tree.\"\n )\n }\n if (!isProtected(target)) {\n warnError(\n \"Warning: Attaching onAction listeners to non protected nodes is dangerous: No events will be emitted for direct modifications without action.\"\n )\n }\n }\n\n return addMiddleware(target, function handler(rawCall, next) {\n if (rawCall.type === \"action\" && rawCall.id === rawCall.rootId) {\n const sourceNode = getStateTreeNode(rawCall.context)\n const info = {\n name: rawCall.name,\n path: getRelativePathBetweenNodes(getStateTreeNode(target), sourceNode),\n args: rawCall.args.map((arg: any, index: number) =>\n serializeArgument(sourceNode, rawCall.name, index, arg)\n )\n }\n if (attachAfter) {\n const res = next(rawCall)\n listener(info)\n return res\n } else {\n listener(info)\n return next(rawCall)\n }\n } else {\n return next(rawCall)\n }\n })\n}\n","import { action as mobxAction } from \"mobx\"\n\nimport {\n Hook,\n devMode,\n fail,\n getRoot,\n getStateTreeNode,\n warnError\n} from \"../internal.ts\"\n\nimport type {\n AnyObjectNode,\n IActionContext,\n IAnyStateTreeNode,\n IDisposer\n} from \"../internal.ts\"\n\nexport type IMiddlewareEventType =\n | \"action\"\n | \"flow_spawn\"\n | \"flow_resume\"\n | \"flow_resume_error\"\n | \"flow_return\"\n | \"flow_throw\"\n// | \"task_spawn TODO, see #273\"\n\nexport interface IMiddlewareEvent extends IActionContext {\n /** Event type */\n readonly type: IMiddlewareEventType\n\n /** Parent event unique id */\n readonly parentId: number\n /** Parent event object */\n readonly parentEvent: IMiddlewareEvent | undefined\n\n /** Root event unique id */\n readonly rootId: number\n /** Id of all events, from root until current (excluding current) */\n readonly allParentIds: number[]\n}\n\nexport type FunctionWithFlag = ((...args: any[]) => any) & {\n _isMSTAction?: boolean\n _isFlowAction?: boolean\n $mst_middleware?: IMiddleware[]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type IMiddleware = {\n handler: IMiddlewareHandler\n includeHooks: boolean\n}\n\nexport type IMiddlewareHandler = (\n actionCall: IMiddlewareEvent,\n next: (actionCall: IMiddlewareEvent, callback?: (value: any) => any) => void,\n abort: (value: any) => void\n) => any\n\nlet nextActionId = 1\nlet currentActionContext: IMiddlewareEvent | undefined\n\n/**\n * @internal\n * @hidden\n */\nexport function getCurrentActionContext() {\n return currentActionContext\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getNextActionId() {\n return nextActionId++\n}\n\n// TODO: optimize away entire action context if there is no middleware in tree?\n/**\n * @internal\n * @hidden\n */\nexport function runWithActionContext(\n context: IMiddlewareEvent,\n fn: (...args: any[]) => any\n) {\n const node = getStateTreeNode(context.context)\n\n if (context.type === \"action\") {\n node.assertAlive({\n actionContext: context\n })\n }\n\n const baseIsRunningAction = node._isRunningAction\n node._isRunningAction = true\n const previousContext = currentActionContext\n currentActionContext = context\n try {\n return runMiddleWares(node, context, fn)\n } finally {\n currentActionContext = previousContext\n node._isRunningAction = baseIsRunningAction\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getParentActionContext(\n parentContext: IMiddlewareEvent | undefined\n) {\n if (!parentContext) {\n return undefined\n }\n if (parentContext.type === \"action\") {\n return parentContext\n }\n return parentContext.parentActionEvent\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createActionInvoker<T extends FunctionWithFlag>(\n target: IAnyStateTreeNode,\n name: string,\n fn: T\n) {\n const res = function (...args: any[]) {\n const id = getNextActionId()\n const parentContext = currentActionContext\n const parentActionContext = getParentActionContext(parentContext)\n\n return runWithActionContext(\n {\n type: \"action\",\n name,\n id,\n args,\n context: target,\n tree: getRoot(target),\n rootId: parentContext ? parentContext.rootId : id,\n parentId: parentContext ? parentContext.id : 0,\n allParentIds: parentContext\n ? [...parentContext.allParentIds, parentContext.id]\n : [],\n parentEvent: parentContext,\n parentActionEvent: parentActionContext\n },\n fn\n )\n }\n ;(res as FunctionWithFlag)._isMSTAction = true\n ;(res as FunctionWithFlag)._isFlowAction = fn._isFlowAction\n return res\n}\n\n/**\n * Middleware can be used to intercept any action is invoked on the subtree where it is attached.\n * If a tree is protected (by default), this means that any mutation of the tree will pass through your middleware.\n *\n * For more details, see the [middleware docs](concepts/middleware.md)\n *\n * @param target Node to apply the middleware to.\n * @param middleware Middleware to apply.\n * @returns A callable function to dispose the middleware.\n */\nexport function addMiddleware(\n target: IAnyStateTreeNode,\n handler: IMiddlewareHandler,\n includeHooks: boolean = true\n): IDisposer {\n const node = getStateTreeNode(target)\n if (devMode()) {\n if (!node.isProtectionEnabled) {\n warnError(\n \"It is recommended to protect the state tree before attaching action middleware, as otherwise it cannot be guaranteed that all changes are passed through middleware. See `protect`\"\n )\n }\n }\n return node.addMiddleWare(handler, includeHooks)\n}\n\n/**\n * Binds middleware to a specific action.\n *\n * Example:\n * ```ts\n * type.actions(self => {\n * function takeA____() {\n * self.toilet.donate()\n * self.wipe()\n * self.wipe()\n * self.toilet.flush()\n * }\n * return {\n * takeA____: decorate(atomic, takeA____)\n * }\n * })\n * ```\n *\n * @param handler\n * @param fn\n * @param includeHooks\n * @returns The original function\n */\nexport function decorate<T extends (...args: any[]) => any>(\n handler: IMiddlewareHandler,\n fn: T,\n includeHooks = true\n): T {\n const middleware: IMiddleware = { handler, includeHooks }\n const f = fn as FunctionWithFlag\n if (!f.$mst_middleware) {\n f.$mst_middleware = []\n }\n f.$mst_middleware.push(middleware)\n return fn\n}\n\nclass CollectedMiddlewares {\n private arrayIndex = 0\n private inArrayIndex = 0\n private middlewares: IMiddleware[][] = []\n\n constructor(node: AnyObjectNode, fn: (...args: any[]) => any) {\n // we just push middleware arrays into an array of arrays to avoid making copies\n const mw = (fn as FunctionWithFlag).$mst_middleware\n if (mw) {\n this.middlewares.push(mw)\n }\n let n: AnyObjectNode | null = node\n // Find all middlewares. Optimization: cache this?\n while (n) {\n if (n.middlewares) {\n this.middlewares.push(n.middlewares)\n }\n n = n.parent\n }\n }\n\n get isEmpty() {\n return this.middlewares.length <= 0\n }\n\n getNextMiddleware(): IMiddleware | undefined {\n const array = this.middlewares[this.arrayIndex]\n if (!array) {\n return undefined\n }\n const item = array[this.inArrayIndex++]\n if (!item) {\n this.arrayIndex++\n this.inArrayIndex = 0\n return this.getNextMiddleware()\n }\n return item\n }\n}\n\nfunction runMiddleWares(\n node: AnyObjectNode,\n baseCall: IMiddlewareEvent,\n originalFn: (...args: any[]) => any\n): any {\n const middlewares = new CollectedMiddlewares(node, originalFn)\n // Short circuit\n if (middlewares.isEmpty) {\n return mobxAction(originalFn)(...baseCall.args)\n }\n\n let result: any = null\n\n function runNextMiddleware(call: IMiddlewareEvent): any {\n const middleware = middlewares.getNextMiddleware()\n const handler = middleware && middleware.handler\n\n if (!handler) {\n return mobxAction(originalFn)(...call.args)\n }\n\n // skip hooks if asked to\n if (!middleware!.includeHooks && call.name in Hook) {\n return runNextMiddleware(call)\n }\n\n let nextInvoked = false\n function next(\n call2: IMiddlewareEvent,\n callback?: (value: any) => any\n ): void {\n nextInvoked = true\n // the result can contain\n // - the non manipulated return value from an action\n // - the non manipulated abort value\n // - one of the above but manipulated through the callback function\n result = runNextMiddleware(call2)\n if (callback) {\n result = callback(result)\n }\n }\n\n let abortInvoked = false\n function abort(value: any) {\n abortInvoked = true\n // overwrite the result\n // can be manipulated through middlewares earlier in the queue using the callback fn\n result = value\n }\n\n handler(call, next, abort)\n if (devMode()) {\n if (!nextInvoked && !abortInvoked) {\n const node2 = getStateTreeNode(call.tree)\n throw fail(\n `Neither the next() nor the abort() callback within the middleware ${handler.name} for the action: \"${call.name}\" on the node: ${node2.type.name} was invoked.`\n )\n } else if (nextInvoked && abortInvoked) {\n const node2 = getStateTreeNode(call.tree)\n throw fail(\n `The next() and abort() callback within the middleware ${handler.name} for the action: \"${call.name}\" on the node: ${node2.type.name} were invoked.`\n )\n }\n }\n return result\n }\n return runNextMiddleware(baseCall)\n}\n","import { type IAnyStateTreeNode, type IMiddlewareEvent } from \"../internal.ts\"\nimport { getCurrentActionContext } from \"./action.ts\"\n\nexport interface IActionContext {\n /** Event name (action name for actions) */\n readonly name: string\n\n /** Event unique id */\n readonly id: number\n\n /** Parent action event object */\n readonly parentActionEvent: IMiddlewareEvent | undefined\n\n /** Event context (node where the action was invoked) */\n readonly context: IAnyStateTreeNode\n /** Event tree (root node of the node where the action was invoked) */\n readonly tree: IAnyStateTreeNode\n\n /** Event arguments in an array (action arguments for actions) */\n readonly args: any[]\n}\n\n/**\n * Returns the currently executing MST action context, or undefined if none.\n */\nexport function getRunningActionContext(): IActionContext | undefined {\n let current = getCurrentActionContext()\n while (current && current.type !== \"action\") {\n current = current.parentActionEvent\n }\n return current\n}\n\nfunction _isActionContextThisOrChildOf(\n actionContext: IActionContext,\n sameOrParent: number | IActionContext | IMiddlewareEvent,\n includeSame: boolean\n) {\n const parentId =\n typeof sameOrParent === \"number\" ? sameOrParent : sameOrParent.id\n\n let current: IActionContext | IMiddlewareEvent | undefined = includeSame\n ? actionContext\n : actionContext.parentActionEvent\n while (current) {\n if (current.id === parentId) {\n return true\n }\n current = current.parentActionEvent\n }\n return false\n}\n\n/**\n * Returns if the given action context is a parent of this action context.\n */\nexport function isActionContextChildOf(\n actionContext: IActionContext,\n parent: number | IActionContext | IMiddlewareEvent\n) {\n return _isActionContextThisOrChildOf(actionContext, parent, false)\n}\n\n/**\n * Returns if the given action context is this or a parent of this action context.\n */\nexport function isActionContextThisOrChildOf(\n actionContext: IActionContext,\n parentOrThis: number | IActionContext | IMiddlewareEvent\n) {\n return _isActionContextThisOrChildOf(actionContext, parentOrThis, true)\n}\n","import {\n EMPTY_ARRAY,\n type ExtractCSTWithSTN,\n type IAnyType,\n fail,\n getStateTreeNode,\n isPrimitive,\n isPrimitiveType,\n isStateTreeNode,\n isTypeCheckingEnabled\n} from \"../../internal.ts\"\n\n/** Validation context entry, this is, where the validation should run against which type */\nexport interface IValidationContextEntry {\n /** Subpath where the validation should be run, or an empty string to validate it all */\n path: string\n /** Type to validate the subpath against */\n type: IAnyType\n}\n\n/** Array of validation context entries */\nexport type IValidationContext = IValidationContextEntry[]\n\n/** Type validation error */\nexport interface IValidationError {\n /** Validation context */\n context: IValidationContext\n /** Value that was being validated, either a snapshot or an instance */\n value: any\n /** Error message */\n message?: string\n}\n\n/** Type validation result, which is an array of type validation errors */\nexport type IValidationResult = IValidationError[]\n\nconst MAX_STRINGIFY_DEPTH = 3\n\nfunction safeStringify(value: any) {\n try {\n const ancestors: any[] = []\n return JSON.stringify(value, function (_key, val) {\n if (val !== null && typeof val === \"object\") {\n while (\n ancestors.length > 0 &&\n ancestors[ancestors.length - 1] !== this\n ) {\n ancestors.pop()\n }\n if (ancestors.length >= MAX_STRINGIFY_DEPTH) {\n return Array.isArray(val) ? \"[…]\" : \"{…}\"\n }\n ancestors.push(val)\n }\n return val\n })\n } catch (e) {\n // istanbul ignore next\n return `<Unserializable: ${e}>`\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function prettyPrintValue(value: any) {\n return typeof value === \"function\"\n ? `<function${value.name ? \" \" + value.name : \"\"}>`\n : isStateTreeNode(value)\n ? `<${value}>`\n : `\\`${safeStringify(value)}\\``\n}\n\nfunction shortenPrintValue(valueInString: string) {\n return valueInString.length < 280\n ? valueInString\n : `${valueInString.substring(0, 272)}......${valueInString.substring(valueInString.length - 8)}`\n}\n\nfunction toErrorString(error: IValidationError): string {\n const { value } = error\n const type = error.context[error.context.length - 1].type!\n const fullPath = error.context\n .map(({ path }) => path)\n .filter(path => path.length > 0)\n .join(\"/\")\n\n const pathPrefix = fullPath.length > 0 ? `at path \"/${fullPath}\" ` : ``\n\n const currentTypename = isStateTreeNode(value)\n ? `value of type ${getStateTreeNode(value).type.name}:`\n : isPrimitive(value)\n ? \"value\"\n : \"snapshot\"\n const isSnapshotCompatible =\n type && isStateTreeNode(value) && type.is(getStateTreeNode(value).snapshot)\n\n return (\n `${pathPrefix}${currentTypename} ${shortenPrintValue(prettyPrintValue(value))} is not assignable ${\n type ? `to type: \\`${type.name}\\`` : ``\n }` +\n (error.message ? ` (${error.message})` : \"\") +\n (type\n ? isPrimitiveType(type) || isPrimitive(value)\n ? `.`\n : `, expected an instance of \\`${(type as IAnyType).name}\\` or a snapshot like \\`${shortenPrintValue(\n (type as IAnyType).describe()\n )}\\` instead.` +\n (isSnapshotCompatible\n ? \" (Note that a snapshot of the provided value is compatible with the targeted type)\"\n : \"\")\n : `.`)\n )\n}\n\n/**\n * @internal\n * @hidden\n * Pushes a new entry onto the context array (mutates in place for performance).\n * Returns the same context array for chaining.\n */\nexport function getContextForPath(\n context: IValidationContext,\n path: string,\n type: IAnyType\n): IValidationContext {\n context.push({ path, type })\n return context\n}\n\n/**\n * @internal\n * @hidden\n * Pops the last entry from the context array (mutates in place).\n * Must be called after validation to restore context state.\n */\nexport function popContext(context: IValidationContext): void {\n context.pop()\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function typeCheckSuccess(): IValidationResult {\n return EMPTY_ARRAY as any\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function typeCheckFailure(\n context: IValidationContext,\n value: any,\n message?: string\n): IValidationResult {\n // Clone context since it may be mutated after this error is created\n return [{ context: context.slice(), value, message }]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function flattenTypeErrors(\n errors: IValidationResult[]\n): IValidationResult {\n return errors.flat()\n}\n\n// TODO; doublecheck: typecheck should only needed to be invoked from: type.create and array / map / value.property will change\n/**\n * @internal\n * @hidden\n */\nexport function typecheckInternal<IT extends IAnyType>(\n type: IAnyType,\n value: ExtractCSTWithSTN<IT>\n): void {\n // runs typeChecking if it is in dev-mode or through a process.env.ENABLE_TYPE_CHECK flag\n if (isTypeCheckingEnabled()) {\n typecheck(type, value)\n }\n}\n\n/**\n * Run's the typechecker for the given type on the given value, which can be a snapshot or an instance.\n * Throws if the given value is not according the provided type specification.\n * Use this if you need typechecks even in a production build (by default all automatic runtime type checks will be skipped in production builds)\n *\n * @param type Type to check against.\n * @param value Value to be checked, either a snapshot or an instance.\n */\nexport function typecheck<IT extends IAnyType>(\n type: IT,\n value: ExtractCSTWithSTN<IT>\n): void {\n const errors = type.validate(value, [{ path: \"\", type }])\n\n if (errors.length > 0) {\n throw fail(validationErrorsToString(type, value, errors))\n }\n}\n\nconst MAX_ERRORS_REPORTED = 10\n\nfunction validationErrorsToString<IT extends IAnyType>(\n type: IT,\n value: ExtractCSTWithSTN<IT>,\n errors: IValidationError[]\n): string | undefined {\n if (errors.length === 0) {\n return undefined\n }\n\n const shown = errors.slice(0, MAX_ERRORS_REPORTED).map(toErrorString)\n const overflow = errors.length - shown.length\n if (overflow > 0) {\n shown.push(`(… and ${overflow} more error${overflow === 1 ? \"\" : \"s\"})`)\n }\n\n return (\n `Error while converting ${shortenPrintValue(prettyPrintValue(value))} to \\`${\n type.name\n }\\`:\\n\\n ` + shown.join(\"\\n \")\n )\n}\n","import { type IObservableArray, entries, observable, values } from \"mobx\"\n\nimport {\n type AnyObjectNode,\n type IAnyComplexType,\n ObjectNode,\n fail,\n mobxShallow\n} from \"../../internal.ts\"\n\nlet identifierCacheId = 0\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierCache {\n private cacheId = identifierCacheId++\n\n // n.b. in cache all identifiers are normalized to strings\n private cache = observable.map<string, IObservableArray<AnyObjectNode>>()\n\n // last time the cache (array) for a given time changed\n // n.b. it is not really the time, but just an integer that gets increased after each modification to the array\n private lastCacheModificationPerId = observable.map<string, number>()\n\n constructor() {}\n\n private updateLastCacheModificationPerId(identifier: string) {\n const lcm = this.lastCacheModificationPerId.get(identifier)\n // we start at 1 since 0 means no update since cache creation\n this.lastCacheModificationPerId.set(\n identifier,\n lcm === undefined ? 1 : lcm + 1\n )\n }\n\n getLastCacheModificationPerId(identifier: string): string {\n const modificationId = this.lastCacheModificationPerId.get(identifier) || 0\n return `${this.cacheId}-${modificationId}`\n }\n\n addNodeToCache(node: AnyObjectNode, lastCacheUpdate = true): void {\n if (node.identifierAttribute) {\n const identifier = node.identifier!\n if (!this.cache.has(identifier)) {\n this.cache.set(\n identifier,\n observable.array<AnyObjectNode>([], mobxShallow)\n )\n }\n const set = this.cache.get(identifier)!\n if (set.indexOf(node) !== -1) {\n throw fail(`Already registered`)\n }\n set.push(node)\n if (lastCacheUpdate) {\n this.updateLastCacheModificationPerId(identifier)\n }\n }\n }\n\n mergeCache(node: AnyObjectNode) {\n values(node.identifierCache!.cache).forEach(nodes =>\n nodes.forEach(child => {\n this.addNodeToCache(child)\n })\n )\n }\n\n notifyDied(node: AnyObjectNode) {\n if (node.identifierAttribute) {\n const id = node.identifier!\n const set = this.cache.get(id)\n if (set) {\n set.remove(node)\n // remove empty sets from cache\n if (!set.length) {\n this.cache.delete(id)\n }\n this.updateLastCacheModificationPerId(node.identifier!)\n }\n }\n }\n\n splitCache(splitNode: AnyObjectNode): IdentifierCache {\n const newCache = new IdentifierCache()\n // The slash is added here so we only match children of the splitNode. In version 5.1.8 and\n // earlier there was no trailing slash, so non children that started with the same path string\n // were being matched incorrectly.\n const basePath = splitNode.path + \"/\"\n entries(this.cache).forEach(([id, nodes]) => {\n let modified = false\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]\n if (node === splitNode || node.path.indexOf(basePath) === 0) {\n newCache.addNodeToCache(node, false) // no need to update lastUpdated since it is a whole new cache\n nodes.splice(i, 1)\n // remove empty sets from cache\n if (!nodes.length) {\n this.cache.delete(id)\n }\n modified = true\n }\n }\n if (modified) {\n this.updateLastCacheModificationPerId(id)\n }\n })\n return newCache\n }\n\n has(type: IAnyComplexType, identifier: string): boolean {\n const set = this.cache.get(identifier)\n if (!set) {\n return false\n }\n return set.some(candidate => type.isAssignableFrom(candidate.type))\n }\n\n resolve<IT extends IAnyComplexType>(\n type: IT,\n identifier: string\n ): ObjectNode<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n > | null {\n const set = this.cache.get(identifier)\n if (!set) {\n return null\n }\n const matches = set.filter(candidate =>\n type.isAssignableFrom(candidate.type)\n )\n switch (matches.length) {\n case 0:\n return null\n case 1:\n return matches[0]\n default:\n throw fail(\n `Cannot resolve a reference to type '${\n type.name\n }' with id: '${identifier}' unambigously, there are multiple candidates: ${matches\n .map(n => n.path)\n .join(\", \")}`\n )\n }\n }\n}\n","import {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n ObjectNode,\n ScalarNode,\n SimpleType,\n fail,\n getStateTreeNodeSafe\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport function createObjectNode<C, S, T>(\n type: ComplexType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C | T\n): ObjectNode<C, S, T> {\n const existingNode = getStateTreeNodeSafe(initialValue)\n if (existingNode) {\n if (existingNode.parent) {\n // istanbul ignore next\n throw fail(\n `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 '${\n parent ? parent.path : \"\"\n }/${subpath}', but it lives already at '${existingNode.path}'`\n )\n }\n\n if (parent) {\n existingNode.setParent(parent, subpath)\n }\n // else it already has no parent since it is a pre-requisite\n\n return existingNode\n }\n\n // not a node, a snapshot\n return new ObjectNode(type, parent, subpath, environment, initialValue as C)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createScalarNode<C, S, T>(\n type: SimpleType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n): ScalarNode<C, S, T> {\n return new ScalarNode(type, parent, subpath, environment, initialValue)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isNode(value: any): value is AnyNode {\n return value instanceof ScalarNode || value instanceof ObjectNode\n}\n","import {\n EMPTY_ARRAY,\n ObjectNode,\n ScalarNode,\n assertArg,\n fail,\n joinJsonPath,\n splitJsonPath\n} from \"../../internal.ts\"\n\nimport type {\n AnyNode,\n AnyObjectNode,\n IAnyComplexType,\n IAnyType,\n IChildNodesMap,\n IType,\n Instance,\n STNValue\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport enum NodeLifeCycle {\n INITIALIZING, // setting up\n CREATED, // afterCreate has run\n FINALIZED, // afterAttach has run\n DETACHING, // being detached from the tree\n DEAD // no coming back from this one\n}\n\n/** @hidden */\ndeclare const $stateTreeNodeType: unique symbol\n\n/**\n * Common interface that represents a node instance.\n * @hidden\n */\nexport interface IStateTreeNode<IT extends IAnyType = IAnyType> {\n /**\n * @internal\n */\n readonly $treenode?: any\n\n // fake, will never be present, just for typing\n // we use this weird trick to solve an issue with reference types\n readonly [$stateTreeNodeType]?: [IT] | [any]\n}\n\n/** @hidden */\nexport type TypeOfValue<T extends IAnyStateTreeNode> =\n T extends IStateTreeNode<infer IT> ? IT : never\n\n/**\n * Represents any state tree node instance.\n * @hidden\n */\nexport interface IAnyStateTreeNode extends STNValue<any, IAnyType> {}\n\n/**\n * Returns true if the given value is a node in a state tree.\n * More precisely, that is, if the value is an instance of a\n * `types.model`, `types.array` or `types.map`.\n *\n * @param value\n * @returns true if the value is a state tree node.\n */\nexport function isStateTreeNode<IT extends IAnyComplexType = IAnyComplexType>(\n value: any\n): value is STNValue<Instance<IT>, IT> {\n return !!(value && value.$treenode)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsStateTreeNode(\n value: IAnyStateTreeNode,\n argNumber: number | number[]\n): void {\n assertArg(value, isStateTreeNode, \"mobx-state-tree node\", argNumber)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getStateTreeNode(value: IAnyStateTreeNode): AnyObjectNode {\n if (!isStateTreeNode(value)) {\n // istanbul ignore next\n throw fail(`Value ${value} is no MST Node`)\n }\n return value.$treenode!\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function getStateTreeNodeSafe(\n value: IAnyStateTreeNode\n): AnyObjectNode | null {\n return (value && value.$treenode) || null\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function toJSON<S>(this: IStateTreeNode<IType<any, S, any>>): S {\n return getStateTreeNode(this).snapshot\n}\n\nconst doubleDot = (_: any) => \"..\"\n\n/**\n * @internal\n * @hidden\n */\nexport function getRelativePathBetweenNodes(\n base: AnyObjectNode,\n target: AnyObjectNode\n): string {\n // PRE condition target is (a child of) base!\n if (base.root !== target.root) {\n throw fail(\n `Cannot calculate relative path: objects '${base}' and '${target}' are not part of the same object tree`\n )\n }\n\n const baseParts = splitJsonPath(base.path)\n const targetParts = splitJsonPath(target.path)\n let common = 0\n for (; common < baseParts.length; common++) {\n if (baseParts[common] !== targetParts[common]) {\n break\n }\n }\n // TODO: assert that no targetParts paths are \"..\", \".\" or \"\"!\n return (\n baseParts.slice(common).map(doubleDot).join(\"/\") +\n joinJsonPath(targetParts.slice(common))\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function resolveNodeByPath(\n base: AnyObjectNode,\n path: string,\n failIfResolveFails: boolean = true\n): AnyNode | undefined {\n return resolveNodeByPathParts(base, splitJsonPath(path), failIfResolveFails)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function resolveNodeByPathParts(\n base: AnyObjectNode,\n pathParts: string[],\n failIfResolveFails: boolean = true\n): AnyNode | undefined {\n let current: AnyNode | null = base\n try {\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i]\n if (part === \"..\") {\n current = current!.parent\n if (current) {\n continue\n } // not everything has a parent\n } else if (part === \".\") {\n continue\n } else if (current) {\n if (current instanceof ScalarNode) {\n // check if the value of a scalar resolves to a state tree node (e.g. references)\n // then we can continue resolving...\n const value: any = current.value\n if (isStateTreeNode(value)) {\n current = getStateTreeNode(value)\n // fall through\n }\n }\n if (current instanceof ObjectNode) {\n const subType = current.getChildType(part)\n if (subType) {\n current = current.getChildNode(part)\n if (current) {\n continue\n }\n }\n }\n }\n throw fail(\n `Could not resolve '${part}' in path '${\n joinJsonPath(pathParts.slice(0, i)) || \"/\"\n }' while resolving '${joinJsonPath(pathParts)}'`\n )\n }\n } catch (e) {\n if (!failIfResolveFails) {\n return undefined\n }\n throw e\n }\n return current!\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function convertChildNodesToArray(\n childNodes: IChildNodesMap | null\n): AnyNode[] {\n if (!childNodes) {\n return EMPTY_ARRAY as AnyNode[]\n }\n\n const keys = Object.keys(childNodes)\n if (!keys.length) {\n return EMPTY_ARRAY as AnyNode[]\n }\n\n const result = new Array(keys.length) as AnyNode[]\n keys.forEach((key, index) => {\n result[index] = childNodes![key]\n })\n return result\n}\n","import { createFlowSpawner, deprecated, flow } from \"../internal.ts\"\n\n// based on: https://github.com/mobxjs/mobx-utils/blob/master/src/async-action.ts\n/*\n All contents of this file are deprecated.\n\n The term `process` has been replaced with `flow` to avoid conflicts with the\n global `process` object.\n\n Refer to `flow.ts` for any further changes to this implementation.\n*/\n\nconst DEPRECATION_MESSAGE =\n \"See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information. \" +\n \"Note that the middleware event types starting with `process` now start with `flow`.\"\n\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<R>(\n generator: () => IterableIterator<any>\n): () => Promise<R>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1>(\n generator: (a1: A1) => IterableIterator<any>\n): (a1: A1) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2>(\n generator: (a1: A1, a2: A2) => IterableIterator<any>\n): (a1: A1, a2: A2) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3>(\n generator: (a1: A1, a2: A2, a3: A3) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4>(\n generator: (a1: A1, a2: A2, a3: A3, a4: A4) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5>(\n generator: (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6\n ) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6, A7>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7\n ) => IterableIterator<any>\n): (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7) => Promise<any>\n/**\n * @deprecated has been renamed to `flow()`.\n * @hidden\n */\nexport function process<A1, A2, A3, A4, A5, A6, A7, A8>(\n generator: (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7,\n a8: A8\n ) => IterableIterator<any>\n): (\n a1: A1,\n a2: A2,\n a3: A3,\n a4: A4,\n a5: A5,\n a6: A6,\n a7: A7,\n a8: A8\n) => Promise<any>\n/**\n * @hidden\n *\n * @deprecated has been renamed to `flow()`.\n * See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information.\n * Note that the middleware event types starting with `process` now start with `flow`.\n *\n * @returns {Promise}\n */\nexport function process(asyncAction: any): any {\n deprecated(\n \"process\",\n \"`process()` has been renamed to `flow()`. \" + DEPRECATION_MESSAGE\n )\n return flow(asyncAction)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createProcessSpawner(\n name: string,\n generator: (...args: any[]) => any\n) {\n deprecated(\n \"process\",\n \"`createProcessSpawner()` has been renamed to `createFlowSpawner()`. \" +\n DEPRECATION_MESSAGE\n )\n return createFlowSpawner(name, generator)\n}\n","import {\n _getGlobalState,\n defineProperty as mobxDefineProperty,\n isObservableArray,\n isObservableObject\n} from \"mobx\"\n\nimport type { Primitives } from \"./core/type/type.ts\"\n\nconst plainObjectString = Object.toString()\n\n/**\n * @internal\n * @hidden\n */\nexport const EMPTY_ARRAY: ReadonlyArray<any> = Object.freeze([])\n\n/**\n * @internal\n * @hidden\n */\n\nexport const EMPTY_OBJECT: {} = Object.freeze({})\n\n/**\n * @internal\n * @hidden\n */\nexport const mobxShallow = _getGlobalState().useProxies\n ? { deep: false }\n : { deep: false, proxy: false }\nObject.freeze(mobxShallow)\n\n/**\n * A generic disposer.\n */\nexport type IDisposer = () => void\n\n/**\n * @internal\n * @hidden\n */\nexport function fail(message = \"Illegal state\"): Error {\n return new Error(\"[mobx-state-tree] \" + message)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function identity(_: any): any {\n return _\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function noop() {}\n\n/**\n * @internal\n * @hidden\n */\nexport const isInteger = Number.isInteger\n\n/**\n * @internal\n * @hidden\n */\nexport function isFloat(val: any) {\n return Number(val) === val && val % 1 !== 0\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isFinite(val: any) {\n return Number.isFinite(val)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isArray(val: any): val is any[] {\n return Array.isArray(val) || isObservableArray(val)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function asArray<T>(\n val: undefined | null | T | T[] | ReadonlyArray<T>\n): T[] {\n if (!val) {\n return EMPTY_ARRAY as any as T[]\n }\n if (isArray(val)) {\n return val as T[]\n }\n return [val] as T[]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B>(a: A, b: B): A & B\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B, C>(a: A, b: B, c: C): A & B & C\n/**\n * @internal\n * @hidden\n */\nexport function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D\n/**\n * @internal\n * @hidden\n */\nexport function extend(a: any, ...b: any[]): any\n/**\n * @internal\n * @hidden\n */\nexport function extend(a: any, ...b: any[]) {\n for (let i = 0; i < b.length; i++) {\n const current = b[i]\n for (const key in current) {\n a[key] = current[key]\n }\n }\n return a\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isPlainObject(value: any): value is { [k: string]: any } {\n if (value === null || typeof value !== \"object\") {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n if (proto == null) {\n return true\n }\n return proto.constructor?.toString() === plainObjectString\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isMutable(value: any) {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isPrimitive(\n value: any,\n includeDate = true\n): value is Primitives {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n (includeDate && value instanceof Date)\n )\n}\n\n/**\n * @internal\n * @hidden\n * Freeze a value and return it (if not in production)\n */\nexport function freeze<T>(value: T): T {\n if (!devMode()) {\n return value\n }\n return isPrimitive(value) || isObservableArray(value)\n ? value\n : Object.freeze(value)\n}\n\n/**\n * @internal\n * @hidden\n * Recursively freeze a value (if not in production)\n */\nexport function deepFreeze<T>(value: T): T {\n if (devMode()) {\n freeze(value)\n if (isPlainObject(value)) {\n for (const v of Object.values(value as Record<string, unknown>)) {\n if (!isPrimitive(v) && !Object.isFrozen(v)) {\n deepFreeze(v)\n }\n }\n }\n }\n return value\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isSerializable(value: any) {\n return typeof value !== \"function\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function defineProperty(\n object: any,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n) {\n if (isObservableObject(object)) {\n mobxDefineProperty(object, key, descriptor)\n } else {\n Object.defineProperty(object, key, descriptor)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function addHiddenFinalProp(object: any, propName: string, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: false,\n configurable: true,\n value\n })\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function addHiddenWritableProp(\n object: any,\n propName: string,\n value: any\n) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: true,\n configurable: true,\n value\n })\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type ArgumentTypes<F extends (...args: any[]) => any> = F extends (\n ...args: infer A\n) => any\n ? A\n : never\n\n/**\n * @internal\n * @hidden\n */\nclass EventHandler<F extends (...args: any[]) => any> {\n private handlers: F[] = []\n private emitting = false\n private pendingUnregisters: F[] | null = null\n\n get hasSubscribers(): boolean {\n return this.handlers.length > 0\n }\n\n register(fn: F, atTheBeginning = false): IDisposer {\n if (atTheBeginning) {\n this.handlers.unshift(fn)\n } else {\n this.handlers.push(fn)\n }\n return () => {\n this.unregister(fn)\n }\n }\n\n has(fn: F): boolean {\n return this.handlers.indexOf(fn) >= 0\n }\n\n unregister(fn: F) {\n if (this.emitting) {\n // defer unregistration until emit is done\n if (!this.pendingUnregisters) {\n this.pendingUnregisters = []\n }\n this.pendingUnregisters.push(fn)\n return\n }\n const index = this.handlers.indexOf(fn)\n if (index >= 0) {\n this.handlers.splice(index, 1)\n }\n }\n\n clear() {\n this.handlers.length = 0\n }\n\n emit(...args: ArgumentTypes<F>) {\n // use emitting flag to defer unregistrations instead of copying array\n this.emitting = true\n try {\n for (const f of this.handlers) {\n f(...args)\n }\n } finally {\n this.emitting = false\n // process any deferred unregistrations\n if (this.pendingUnregisters) {\n for (const fn of this.pendingUnregisters) {\n const index = this.handlers.indexOf(fn)\n if (index >= 0) {\n this.handlers.splice(index, 1)\n }\n }\n this.pendingUnregisters = null\n }\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class EventHandlers<\n E extends { [k: string]: (...args: any[]) => any }\n> {\n private eventHandlers?: {\n [k in keyof E]?: EventHandler<(...args: any[]) => any>\n }\n\n hasSubscribers(event: keyof E): boolean {\n const handler = this.eventHandlers && this.eventHandlers[event]\n return !!handler && handler!.hasSubscribers\n }\n\n register<N extends keyof E>(\n event: N,\n fn: E[N],\n atTheBeginning = false\n ): IDisposer {\n if (!this.eventHandlers) {\n this.eventHandlers = {}\n }\n let handler = this.eventHandlers[event]\n if (!handler) {\n handler = this.eventHandlers[event] = new EventHandler()\n }\n return handler.register(fn, atTheBeginning)\n }\n\n has<N extends keyof E>(event: N, fn: E[N]): boolean {\n const handler = this.eventHandlers && this.eventHandlers[event]\n return !!handler && handler!.has(fn)\n }\n\n unregister<N extends keyof E>(event: N, fn: E[N]) {\n const handler = this.eventHandlers && this.eventHandlers[event]\n if (handler) {\n handler!.unregister(fn)\n }\n }\n\n clear<N extends keyof E>(event: N) {\n if (this.eventHandlers) {\n delete this.eventHandlers[event]\n }\n }\n\n clearAll() {\n this.eventHandlers = undefined\n }\n\n emit<N extends keyof E>(event: N, ...args: ArgumentTypes<E[N]>) {\n const handler = this.eventHandlers && this.eventHandlers[event]\n if (handler) {\n ;(handler!.emit as any)(...args)\n }\n }\n}\n\nconst prototypeHasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * @internal\n * @hidden\n */\nexport function hasOwnProperty(object: object, propName: string) {\n return prototypeHasOwnProperty.call(object, propName)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function argsToArray(args: IArguments): any[] {\n const res = new Array(args.length)\n for (let i = 0; i < args.length; i++) {\n res[i] = args[i]\n }\n return res\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function stringStartsWith(str: string, beginning: string) {\n return str.indexOf(beginning) === 0\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type DeprecatedFunction = ((id: string, message: string) => void) & {\n ids?: { [id: string]: true }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport const deprecated: DeprecatedFunction = function (\n id: string,\n message: string\n): void {\n // skip if running production\n if (!devMode()) {\n return\n }\n // warn if hasn't been warned before\n if (deprecated.ids && !deprecated.ids.hasOwnProperty(id)) {\n warnError(\"Deprecation warning: \" + message)\n }\n // mark as warned to avoid duplicate warn message\n if (deprecated.ids) {\n deprecated.ids[id] = true\n }\n}\ndeprecated.ids = {}\n\n/**\n * @internal\n * @hidden\n */\nexport function warnError(msg: string) {\n console.warn(new Error(`[mobx-state-tree] ${msg}`))\n}\n/**\n * @internal\n * @hidden\n */\nexport function isTypeCheckingEnabled() {\n return (\n devMode() ||\n (typeof process !== \"undefined\" &&\n process.env &&\n process.env.ENABLE_TYPE_CHECK === \"true\")\n )\n}\n\nlet _devMode = process.env.NODE_ENV !== \"production\"\n\n/**\n * @internal\n * @hidden\n */\nexport function devMode() {\n return _devMode\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function setDevMode(value: boolean) {\n _devMode = value\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertArg<T>(\n value: T,\n fn: (value: T) => boolean,\n typeName: string,\n argNumber: number | number[]\n) {\n if (devMode()) {\n if (!fn(value)) {\n // istanbul ignore next\n throw fail(\n `expected ${typeName} as argument ${asArray(argNumber).join(\" or \")}, got ${value} instead`\n )\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsFunction(\n value: (...args: any[]) => any,\n argNumber: number | number[]\n) {\n assertArg(value, fn => typeof fn === \"function\", \"function\", argNumber)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsNumber(\n value: number,\n argNumber: number | number[],\n min?: number,\n max?: number\n) {\n assertArg(value, n => typeof n === \"number\", \"number\", argNumber)\n if (min !== undefined) {\n assertArg(value, n => n >= min, `number greater than ${min}`, argNumber)\n }\n if (max !== undefined) {\n assertArg(value, n => n <= max, `number lesser than ${max}`, argNumber)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsString(\n value: string,\n argNumber: number | number[],\n canBeEmpty = true\n) {\n assertArg(value, s => typeof s === \"string\", \"string\", argNumber)\n if (!canBeEmpty) {\n assertArg(value, s => s !== \"\", \"not empty string\", argNumber)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function setImmediateWithFallback(fn: (...args: any[]) => void) {\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(fn)\n } else if (typeof setImmediate === \"function\") {\n setImmediate(fn)\n } else {\n setTimeout(fn, 1)\n }\n}\n","import { fail, setImmediateWithFallback } from \"../utils.ts\"\nimport {\n getCurrentActionContext,\n getNextActionId,\n getParentActionContext,\n runWithActionContext\n} from \"./action.ts\"\n\nimport type { FunctionWithFlag, IMiddlewareEventType } from \"./action.ts\"\n\n/**\n * @hidden\n */\nexport type FlowReturn<R> = R extends Promise<infer T> ? T : R\n\n/**\n * See [asynchronous actions](concepts/async-actions.md).\n *\n * @returns The flow as a promise.\n */\nexport function flow<R, Args extends any[]>(\n generator: (...args: Args) => Generator<PromiseLike<any>, R, any>\n): (...args: Args) => Promise<FlowReturn<R>> {\n return createFlowSpawner(generator.name, generator) as any\n}\n\n/**\n * @deprecated Not needed since TS3.6.\n * Used for TypeScript to make flows that return a promise return the actual promise result.\n *\n * @param val\n * @returns\n */\nexport function castFlowReturn<T>(val: T): T {\n return val as any\n}\n\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise-returning function to a generator-returning one.\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n * const getDataGen = toGeneratorFunction(getDataAsync);\n *\n * const someModel.actions(self => ({\n * someAction: flow(function*() {\n * // value is typed as number\n * const value = yield* getDataGen(\"input value\");\n * ...\n * })\n * }))\n * ```\n */\nexport function toGeneratorFunction<R, Args extends any[]>(\n p: (...args: Args) => Promise<R>\n) {\n return function* (...args: Args) {\n return (yield p(...args)) as R\n }\n}\n\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise to a generator yielding that promise\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n *\n * const someModel.actions(self => ({\n * someAction: flow(function*() {\n * // value is typed as number\n * const value = yield* toGenerator(getDataAsync(\"input value\"));\n * ...\n * })\n * }))\n * ```\n */\nexport function* toGenerator<R>(p: Promise<R>) {\n return (yield p) as R\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function createFlowSpawner(name: string, generator: FunctionWithFlag) {\n const spawner = function flowSpawner(this: any, ...flowArgs: any[]) {\n // Implementation based on https://github.com/tj/co/blob/master/index.js\n const runId = getNextActionId()\n const parentContext = getCurrentActionContext()!\n if (!parentContext) {\n throw fail(\"a mst flow must always have a parent context\")\n }\n const parentActionContext = getParentActionContext(parentContext)\n if (!parentActionContext) {\n throw fail(\"a mst flow must always have a parent action context\")\n }\n\n const contextBase = {\n name,\n id: runId,\n tree: parentContext.tree,\n context: parentContext.context,\n parentId: parentContext.id,\n allParentIds: [...parentContext.allParentIds, parentContext.id],\n rootId: parentContext.rootId,\n parentEvent: parentContext,\n parentActionEvent: parentActionContext\n }\n\n const spawnerWithMw = spawner as FunctionWithFlag\n\n function wrap(\n fn: FunctionWithFlag,\n type: IMiddlewareEventType,\n arg: any\n ) {\n fn.$mst_middleware = spawnerWithMw.$mst_middleware // pick up any middleware attached to the flow\n return runWithActionContext(\n {\n ...contextBase,\n type,\n args: [arg]\n },\n fn\n )\n }\n\n return new Promise(function (resolve, reject) {\n let gen: Generator<PromiseLike<unknown>, unknown, unknown>\n const init = function asyncActionInit(\n ...initArgs: any[]\n ) {\n gen = generator(...initArgs)\n onFulfilled(undefined) // kick off the flow\n } as FunctionWithFlag\n init.$mst_middleware = spawnerWithMw.$mst_middleware\n\n runWithActionContext(\n {\n ...contextBase,\n type: \"flow_spawn\",\n args: flowArgs\n },\n init\n )\n\n function onFulfilled(res: any) {\n let ret\n try {\n // prettier-ignore\n const cancelError: any = wrap((_r: any) => { ret = gen.next(_r) }, \"flow_resume\", res)\n if (cancelError instanceof Error) {\n ret = gen.throw(cancelError)\n }\n } catch (e) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((_r: any) => { reject(e) }, \"flow_throw\", e)\n })\n return\n }\n next(ret)\n return\n }\n\n function onRejected(err: any) {\n let ret\n try {\n // prettier-ignore\n wrap((_r: any) => { ret = gen.throw(_r) }, \"flow_resume_error\", err) // or yieldError?\n } catch (e) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((_r: any) => { reject(e) }, \"flow_throw\", e)\n })\n return\n }\n next(ret)\n }\n\n function next(ret: any) {\n if (ret.done) {\n // prettier-ignore\n setImmediateWithFallback(() => {\n wrap((r: any) => { resolve(r) }, \"flow_return\", ret.value)\n })\n return\n }\n // TODO: support more type of values? See https://github.com/tj/co/blob/249bbdc72da24ae44076afd716349d2089b31c4c/index.js#L100\n if (!ret.value || typeof ret.value.then !== \"function\") {\n // istanbul ignore next\n throw fail(\"Only promises can be yielded to `async`, got: \" + ret)\n }\n return ret.value.then(onFulfilled, onRejected)\n }\n })\n }\n ;(spawner as FunctionWithFlag)._isFlowAction = true\n return spawner\n}\n","import { fail, stringStartsWith } from \"../internal.ts\"\n\n/**\n * https://tools.ietf.org/html/rfc6902\n * http://jsonpatch.com/\n */\nexport interface IJsonPatch {\n readonly op: \"replace\" | \"add\" | \"remove\"\n readonly path: string\n readonly value?: any\n}\n\nexport interface IReversibleJsonPatch extends IJsonPatch {\n readonly oldValue: any // This goes beyond JSON-patch, but makes sure each patch can be inverse applied\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function splitPatch(\n patch: IReversibleJsonPatch\n): [IJsonPatch, IJsonPatch] {\n if (!(\"oldValue\" in patch)) {\n throw fail(`Patches without \\`oldValue\\` field cannot be inversed`)\n }\n return [stripPatch(patch), invertPatch(patch)]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function stripPatch(patch: IReversibleJsonPatch): IJsonPatch {\n // strips `oldvalue` information from the patch, so that it becomes a patch conform the json-patch spec\n // this removes the ability to undo the patch\n switch (patch.op) {\n case \"add\":\n return { op: \"add\", path: patch.path, value: patch.value }\n case \"remove\":\n return { op: \"remove\", path: patch.path }\n case \"replace\":\n return { op: \"replace\", path: patch.path, value: patch.value }\n }\n}\n\nfunction invertPatch(patch: IReversibleJsonPatch): IJsonPatch {\n switch (patch.op) {\n case \"add\":\n return {\n op: \"remove\",\n path: patch.path\n }\n case \"remove\":\n return {\n op: \"add\",\n path: patch.path,\n value: patch.oldValue\n }\n case \"replace\":\n return {\n op: \"replace\",\n path: patch.path,\n value: patch.oldValue\n }\n }\n}\n\n/**\n * Simple simple check to check it is a number.\n */\nfunction isNumber(x: string): boolean {\n return typeof x === \"number\"\n}\n\n/**\n * Escape slashes and backslashes.\n *\n * http://tools.ietf.org/html/rfc6901\n */\nexport function escapeJsonPath(path: string): string {\n if (isNumber(path) === true) {\n return \"\" + path\n }\n if (path.indexOf(\"/\") === -1 && path.indexOf(\"~\") === -1) {\n return path\n }\n return path.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\n/**\n * Unescape slashes and backslashes.\n */\nexport function unescapeJsonPath(path: string): string {\n return path.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\n/**\n * Generates a json-path compliant json path from path parts.\n *\n * @param path\n * @returns\n */\nexport function joinJsonPath(path: string[]): string {\n // `/` refers to property with an empty name, while `` refers to root itself!\n if (path.length === 0) {\n return \"\"\n }\n\n const getPathStr = (p: string[]) => p.map(escapeJsonPath).join(\"/\")\n if (path[0] === \".\" || path[0] === \"..\") {\n // relative\n return getPathStr(path)\n } else {\n // absolute\n return \"/\" + getPathStr(path)\n }\n}\n\n/**\n * Splits and decodes a json path into several parts.\n *\n * @param path\n * @returns\n */\nexport function splitJsonPath(path: string): string[] {\n // `/` refers to property with an empty name, while `` refers to root itself!\n const parts = path.split(\"/\").map(unescapeJsonPath)\n\n const valid =\n path === \"\" ||\n path === \".\" ||\n path === \"..\" ||\n stringStartsWith(path, \"/\") ||\n stringStartsWith(path, \"./\") ||\n stringStartsWith(path, \"../\")\n if (!valid) {\n throw fail(\n `a json path must be either rooted, empty or relative, but got '${path}'`\n )\n }\n\n // '/a/b/c' -> [\"a\", \"b\", \"c\"]\n // '../../b/c' -> [\"..\", \"..\", \"b\", \"c\"]\n // '' -> []\n // '/' -> ['']\n // './a' -> [\".\", \"a\"]\n // /./a' -> [\".\", \"a\"] equivalent to './a'\n\n if (parts[0] === \"\") {\n parts.shift()\n }\n return parts\n}\n","import {\n type AnyObjectNode,\n BaseType,\n ComplexType,\n type ExtractNodeType,\n type IAnyType,\n type Instance,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ObjectNode,\n TypeFlags,\n assertIsType,\n devMode,\n fail,\n getSnapshot,\n isStateTreeNode,\n isType,\n isUnionType,\n typeCheckFailure\n} from \"../../internal.ts\"\n\n/** @hidden */\ndeclare const $mstNotCustomized: unique symbol\n\n/** @hidden */\nconst $preProcessorFailed: unique symbol = Symbol(\"$preProcessorFailed\")\n\n/** @hidden */\nexport interface _NotCustomized {\n // only for typings\n readonly [$mstNotCustomized]: undefined\n}\n/** @hidden */\nexport type _CustomOrOther<Custom, Other> = Custom extends _NotCustomized\n ? Other\n : Custom\n\nclass SnapshotProcessor<IT extends IAnyType, CustomC, CustomS> extends BaseType<\n _CustomOrOther<CustomC, IT[\"CreationType\"]>,\n _CustomOrOther<CustomS, IT[\"SnapshotType\"]>,\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.SnapshotProcessor\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _processors: ISnapshotProcessors<IT, CustomC, CustomS>,\n name?: string\n ) {\n super(name || _subtype.name)\n }\n\n describe() {\n return `snapshotProcessor(${this._subtype.describe()})`\n }\n\n private preProcessSnapshot(sn: this[\"C\"]): IT[\"CreationType\"] {\n if (this._processors.preProcessor) {\n return this._processors.preProcessor.call(null, sn)\n }\n return sn as any\n }\n\n private preProcessSnapshotSafe(\n sn: this[\"C\"]\n ): IT[\"CreationType\"] | typeof $preProcessorFailed {\n try {\n return this.preProcessSnapshot(sn)\n } catch (_e) {\n return $preProcessorFailed\n }\n }\n\n private postProcessSnapshot(\n sn: IT[\"SnapshotType\"],\n node: this[\"N\"]\n ): this[\"S\"] {\n if (this._processors.postProcessor) {\n return this._processors.postProcessor!.call(\n null,\n sn,\n node.storedValue\n ) as any\n }\n return sn\n }\n\n private _fixNode(node: this[\"N\"]): void {\n // the node has to use these methods rather than the original type ones\n proxyNodeTypeMethods(node.type, this, \"create\")\n\n if (node instanceof ObjectNode) {\n node.hasSnapshotPostProcessor = !!this._processors.postProcessor\n }\n const oldGetSnapshot = node.getSnapshot\n node.getSnapshot = () =>\n this.postProcessSnapshot(oldGetSnapshot.call(node), node) as any\n if (!isUnionType(this._subtype)) {\n node.getReconciliationType = () => {\n return this\n }\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const processedInitialValue = isStateTreeNode(initialValue)\n ? initialValue\n : this.preProcessSnapshot(initialValue)\n const node = this._subtype.instantiate(\n parent,\n subpath,\n environment,\n processedInitialValue\n ) as any\n this._fixNode(node)\n return node\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const node = this._subtype.reconcile(\n current,\n isStateTreeNode(newValue) ? newValue : this.preProcessSnapshot(newValue),\n parent,\n subpath\n ) as any\n if (node !== current) {\n this._fixNode(node)\n }\n return node\n }\n\n getSnapshot(node: this[\"N\"], applyPostProcess: boolean = true): this[\"S\"] {\n const sn = this._subtype.getSnapshot(node)\n return applyPostProcess ? this.postProcessSnapshot(sn, node) : sn\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const processedSn = this.preProcessSnapshotSafe(value)\n if (processedSn === $preProcessorFailed) {\n return typeCheckFailure(context, value, \"Failed to preprocess value\")\n }\n return this._subtype.validate(processedSn, context)\n }\n\n getSubTypes() {\n return this._subtype\n }\n\n is(thing: any): thing is any {\n const value = isType(thing)\n ? this._subtype\n : isStateTreeNode(thing)\n ? getSnapshot(thing, false)\n : this.preProcessSnapshotSafe(thing)\n if (value === $preProcessorFailed) {\n return false\n }\n return (\n this._subtype.validate(value, [{ path: \"\", type: this._subtype }])\n .length === 0\n )\n }\n\n isAssignableFrom(type: IAnyType): boolean {\n return this._subtype.isAssignableFrom(type)\n }\n\n isMatchingSnapshotId(current: this[\"N\"], snapshot: this[\"C\"]): boolean {\n if (!(this._subtype instanceof ComplexType)) {\n return false\n }\n const processedSn = this.preProcessSnapshot(snapshot)\n return this._subtype.isMatchingSnapshotId(current as any, processedSn)\n }\n}\n\nfunction proxyNodeTypeMethods(\n nodeType: any,\n snapshotProcessorType: any,\n ...methods: (keyof SnapshotProcessor<any, any, any>)[]\n) {\n for (const method of methods) {\n nodeType[method] = snapshotProcessorType[method].bind(snapshotProcessorType)\n }\n}\n\n// public API\n\n/**\n * A type that has its snapshots processed.\n */\nexport interface ISnapshotProcessor<\n IT extends IAnyType,\n CustomC,\n CustomS\n> extends IType<\n _CustomOrOther<CustomC, IT[\"CreationType\"]>,\n _CustomOrOther<CustomS, IT[\"SnapshotType\"]>,\n IT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * Snapshot processors.\n */\nexport interface ISnapshotProcessors<IT extends IAnyType, CustomC, CustomS> {\n /**\n * Function that transforms an input snapshot.\n */\n preProcessor?(snapshot: CustomC): IT[\"CreationType\"]\n /**\n * Function that transforms an output snapshot.\n * @param snapshot\n */\n postProcessor?(snapshot: IT[\"SnapshotType\"], node: Instance<IT>): CustomS\n}\n\n/**\n * `types.snapshotProcessor` - Runs a pre/post snapshot processor before/after serializing a given type.\n *\n * Example:\n * ```ts\n * const Todo1 = types.model({ text: types.string })\n * // in the backend the text type must be null when empty\n * interface BackendTodo {\n * text: string | null\n * }\n *\n * const Todo2 = types.snapshotProcessor(Todo1, {\n * // from snapshot to instance\n * preProcessor(snapshot: BackendTodo) {\n * return {\n * text: sn.text || \"\";\n * }\n * },\n *\n * // from instance to snapshot\n * postProcessor(snapshot, node): BackendTodo {\n * return {\n * text: !sn.text ? null : sn.text\n * }\n * }\n * })\n * ```\n *\n * @param type Type to run the processors over.\n * @param processors Processors to run.\n * @param name Type name, or undefined to inherit the inner type one.\n * @returns\n */\nexport function snapshotProcessor<\n IT extends IAnyType,\n CustomC = _NotCustomized,\n CustomS = _NotCustomized\n>(\n type: IT,\n processors: ISnapshotProcessors<IT, CustomC, CustomS>,\n name?: string\n): ISnapshotProcessor<IT, CustomC, CustomS> {\n assertIsType(type, 1)\n if (devMode()) {\n if (\n processors.postProcessor &&\n typeof processors.postProcessor !== \"function\"\n ) {\n // istanbul ignore next\n throw fail(\"postSnapshotProcessor must be a function\")\n }\n if (\n processors.preProcessor &&\n typeof processors.preProcessor !== \"function\"\n ) {\n // istanbul ignore next\n throw fail(\"preSnapshotProcessor must be a function\")\n }\n }\n\n return new SnapshotProcessor(type, processors, name)\n}\n","import {\n type IInterceptor,\n type IKeyValueMap,\n type IMapDidChange,\n type IMapWillChange,\n type IObservableMapInitialValues,\n type Lambda,\n ObservableMap,\n _interceptReads,\n action,\n intercept,\n observable,\n observe,\n values\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n EMPTY_OBJECT,\n type ExtractCSTWithSTN,\n type IAnyModelType,\n type IAnyStateTreeNode,\n type IAnyType,\n type IChildNodesMap,\n type IHooksGetter,\n type IJsonPatch,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ModelType,\n ObjectNode,\n TypeFlags,\n addHiddenFinalProp,\n addHiddenWritableProp,\n asArray,\n cannotDetermineSubtype,\n createActionInvoker,\n createObjectNode,\n devMode,\n escapeJsonPath,\n fail,\n getContextForPath,\n getSnapshot,\n getStateTreeNode,\n isMutable,\n isPlainObject,\n isStateTreeNode,\n isType,\n isValidIdentifier,\n normalizeIdentifier,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport interface IMapType<IT extends IAnyType> extends IType<\n IKeyValueMap<IT[\"CreationType\"]> | undefined,\n IKeyValueMap<IT[\"SnapshotType\"]>,\n IMSTMap<IT>\n> {\n hooks(hooks: IHooksGetter<IMSTMap<IT>>): IMapType<IT>\n}\n\n/** @hidden */\nexport interface IMSTMap<IT extends IAnyType> {\n // bases on ObservableMap, but fine tuned to the auto snapshot conversion of MST\n\n clear(): void\n delete(key: string): boolean\n forEach(\n callbackfn: (value: IT[\"Type\"], key: string | number, map: this) => void,\n thisArg?: any\n ): void\n get(key: string | number): IT[\"Type\"] | undefined\n has(key: string | number): boolean\n set(key: string | number, value: ExtractCSTWithSTN<IT>): this\n readonly size: number\n put(value: ExtractCSTWithSTN<IT>): IT[\"Type\"]\n keys(): IterableIterator<string>\n values(): IterableIterator<IT[\"Type\"]>\n entries(): IterableIterator<[string, IT[\"Type\"]]>\n [Symbol.iterator](): IterableIterator<[string, IT[\"Type\"]]>\n /** Merge another object into this map, returns self. */\n merge(\n other:\n | IMSTMap<IType<any, any, IT[\"TypeWithoutSTN\"]>>\n | IKeyValueMap<ExtractCSTWithSTN<IT>>\n | any\n ): this\n replace(\n values:\n | IMSTMap<IType<any, any, IT[\"TypeWithoutSTN\"]>>\n | IKeyValueMap<ExtractCSTWithSTN<IT>>\n | any\n ): this\n\n toJSON(): IKeyValueMap<IT[\"SnapshotType\"]>\n\n toString(): string\n [Symbol.toStringTag]: \"Map\"\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe(\n listener: (changes: IMapDidChange<string, IT[\"Type\"]>) => void,\n fireImmediately?: boolean\n ): Lambda\n intercept(handler: IInterceptor<IMapWillChange<string, IT[\"Type\"]>>): Lambda\n}\n\nconst needsIdentifierError = `Map.put can only be used to store complex values that have an identifier type attribute`\n\nfunction tryCollectModelTypes(\n type: IAnyType,\n modelTypes: Array<IAnyModelType>\n): boolean {\n const subtypes = type.getSubTypes()\n if (subtypes === cannotDetermineSubtype) {\n return false\n }\n if (subtypes) {\n const subtypesArray = asArray(subtypes)\n for (const subtype of subtypesArray) {\n if (!tryCollectModelTypes(subtype, modelTypes)) {\n return false\n }\n }\n }\n if (type instanceof ModelType) {\n modelTypes.push(type)\n }\n return true\n}\n\n/**\n * @internal\n * @hidden\n */\nexport enum MapIdentifierMode {\n UNKNOWN,\n YES,\n NO\n}\n\nclass MSTMap<IT extends IAnyType> extends ObservableMap<string, any> {\n constructor(\n initialData?: IObservableMapInitialValues<string, any> | undefined,\n name?: string\n ) {\n super(initialData, (observable.ref as any).enhancer, name)\n }\n\n get(key: string): IT[\"Type\"] | undefined {\n // maybe this is over-enthousiastic? normalize numeric keys to strings\n return super.get(\"\" + key)\n }\n\n has(key: string) {\n return super.has(\"\" + key)\n }\n\n delete(key: string) {\n return super.delete(\"\" + key)\n }\n\n set(key: string, value: ExtractCSTWithSTN<IT>): this {\n return super.set(\"\" + key, value)\n }\n\n put(value: ExtractCSTWithSTN<IT>): IT[\"Type\"] {\n if (!value) {\n throw fail(`Map.put cannot be used to set empty values`)\n }\n if (isStateTreeNode(value)) {\n const node = getStateTreeNode(value)\n if (devMode()) {\n if (!node.identifierAttribute) {\n throw fail(needsIdentifierError)\n }\n }\n if (node.identifier === null) {\n throw fail(needsIdentifierError)\n }\n this.set(node.identifier, value)\n return value as any\n } else if (!isMutable(value)) {\n throw fail(`Map.put can only be used to store complex values`)\n } else {\n const mapNode = getStateTreeNode(this as IAnyStateTreeNode)\n const mapType = mapNode.type as MapType<any>\n\n if (mapType.identifierMode !== MapIdentifierMode.YES) {\n throw fail(needsIdentifierError)\n }\n\n const idAttr = mapType.mapIdentifierAttribute!\n const id = (value as any)[idAttr]\n if (!isValidIdentifier(id)) {\n // try again but this time after creating a node for the value\n // since it might be an optional identifier\n const newNode = this.put(\n mapType.getChildType().create(value, mapNode.environment)\n )\n return this.put(getSnapshot(newNode))\n }\n const key = normalizeIdentifier(id)\n this.set(key, value)\n return this.get(key) as any\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class MapType<IT extends IAnyType> extends ComplexType<\n IKeyValueMap<IT[\"CreationType\"]> | undefined,\n IKeyValueMap<IT[\"SnapshotType\"]>,\n IMSTMap<IT>\n> {\n identifierMode: MapIdentifierMode = MapIdentifierMode.UNKNOWN\n mapIdentifierAttribute: string | undefined = undefined\n readonly flags = TypeFlags.Map\n\n private readonly hookInitializers: Array<IHooksGetter<IMSTMap<IT>>> = []\n\n constructor(\n name: string,\n private readonly _subType: IAnyType,\n hookInitializers: Array<IHooksGetter<IMSTMap<IT>>> = []\n ) {\n super(name)\n this._determineIdentifierMode()\n this.hookInitializers = hookInitializers\n }\n\n hooks(hooks: IHooksGetter<IMSTMap<IT>>) {\n const hookInitializers =\n this.hookInitializers.length > 0\n ? this.hookInitializers.concat(hooks)\n : [hooks]\n return new MapType(this.name, this._subType, hookInitializers)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n this._determineIdentifierMode()\n return createObjectNode(this, parent, subpath, environment, initialValue)\n }\n\n private _determineIdentifierMode() {\n if (this.identifierMode !== MapIdentifierMode.UNKNOWN) {\n return\n }\n\n const modelTypes: IAnyModelType[] = []\n if (tryCollectModelTypes(this._subType, modelTypes)) {\n const identifierAttribute: string | undefined = modelTypes.reduce(\n (current: IAnyModelType[\"identifierAttribute\"], type) => {\n if (!type.identifierAttribute) {\n return current\n }\n if (current && current !== type.identifierAttribute) {\n throw fail(\n `The objects in a map should all have the same identifier attribute, expected '${current}', but child of type '${type.name}' declared attribute '${type.identifierAttribute}' as identifier`\n )\n }\n return type.identifierAttribute\n },\n undefined as IAnyModelType[\"identifierAttribute\"]\n )\n\n if (identifierAttribute) {\n this.identifierMode = MapIdentifierMode.YES\n this.mapIdentifierAttribute = identifierAttribute\n } else {\n this.identifierMode = MapIdentifierMode.NO\n }\n }\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n initialSnapshot: this[\"C\"] = {}\n ): IChildNodesMap {\n const subType = (objNode.type as this)._subType\n const result: IChildNodesMap = {}\n Object.keys(initialSnapshot!).forEach(name => {\n result[name] = subType.instantiate(\n objNode,\n name,\n undefined,\n initialSnapshot[name]\n )\n })\n\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n return new MSTMap(childNodes, this.name) as any\n }\n\n finalizeNewInstance(\n node: this[\"N\"],\n instance: ObservableMap<string, any>\n ): void {\n _interceptReads(instance, node.unbox)\n\n const type = node.type as this\n type.hookInitializers.forEach(initializer => {\n const hooks = initializer(instance as unknown as IMSTMap<IT>)\n Object.keys(hooks).forEach(name => {\n const hook = hooks[name as keyof typeof hooks]!\n const actionInvoker = createActionInvoker(\n instance as IAnyStateTreeNode,\n name,\n hook\n )\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n instance,\n name,\n actionInvoker\n )\n })\n })\n\n intercept(instance, this.willChange)\n observe(instance, this.didChange)\n }\n\n describe() {\n return this.name\n }\n\n getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode> {\n // return (node.storedValue as ObservableMap<any>).values()\n return values(node.storedValue)\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n const childNode = node.storedValue.get(\"\" + key)\n if (!childNode) {\n throw fail(\"Not a child \" + key)\n }\n return childNode\n }\n\n willChange(\n change: IMapWillChange<string, AnyNode>\n ): IMapWillChange<string, AnyNode> | null {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n const key = change.name\n node.assertWritable({ subpath: key })\n const mapType = node.type as this\n const subType = mapType._subType\n\n switch (change.type) {\n case \"update\":\n {\n const { newValue } = change\n const oldValue = change.object.get(key)\n if (newValue === oldValue) {\n return null\n }\n typecheckInternal(subType, newValue)\n change.newValue = subType.reconcile(\n node.getChildNode(key),\n change.newValue,\n node,\n key\n )\n mapType.processIdentifier(key, change.newValue)\n }\n break\n case \"add\":\n {\n typecheckInternal(subType, change.newValue)\n change.newValue = subType.instantiate(\n node,\n key,\n undefined,\n change.newValue\n )\n mapType.processIdentifier(key, change.newValue)\n }\n break\n }\n return change\n }\n\n private processIdentifier(expected: string, node: AnyNode): void {\n if (\n this.identifierMode === MapIdentifierMode.YES &&\n node instanceof ObjectNode\n ) {\n const identifier = node.identifier!\n if (identifier !== expected) {\n throw fail(\n `A map of objects containing an identifier should always store the object under their own identifier. Trying to store key '${identifier}', but expected: '${expected}'`\n )\n }\n }\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n const res: any = {}\n node.getChildren().forEach(childNode => {\n res[childNode.subpath] = childNode.snapshot\n })\n return res\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed: any = {}\n Object.keys(childNodes).forEach(key => {\n processed[key] = childNodes[key].getSnapshot()\n })\n return processed\n }\n\n didChange(change: IMapDidChange<string, AnyNode>): void {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n switch (change.type) {\n case \"update\":\n return void node.emitPatch(\n {\n op: \"replace\",\n path: escapeJsonPath(change.name),\n value: change.newValue.snapshot,\n oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n },\n node\n )\n case \"add\":\n return void node.emitPatch(\n {\n op: \"add\",\n path: escapeJsonPath(change.name),\n value: change.newValue.snapshot,\n oldValue: undefined\n },\n node\n )\n case \"delete\":\n // a node got deleted, get the old snapshot and make the node die\n const oldSnapshot = change.oldValue.snapshot\n change.oldValue.die()\n // emit the patch\n return void node.emitPatch(\n {\n op: \"remove\",\n path: escapeJsonPath(change.name),\n oldValue: oldSnapshot\n },\n node\n )\n }\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n const target = node.storedValue\n switch (patch.op) {\n case \"add\":\n case \"replace\":\n target.set(subpath, patch.value)\n break\n case \"remove\":\n target.delete(subpath)\n break\n }\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const target = node.storedValue\n const currentKeys: { [key: string]: boolean } = {}\n Array.from(target.keys()).forEach(key => {\n currentKeys[key] = false\n })\n if (snapshot) {\n // Don't use target.replace, as it will throw away all existing items first\n for (const key in snapshot) {\n target.set(key, snapshot[key])\n currentKeys[\"\" + key] = true\n }\n }\n Object.keys(currentKeys).forEach(key => {\n if (currentKeys[key] === false) {\n target.delete(key)\n }\n })\n }\n\n getChildType(): IAnyType {\n return this._subType\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isPlainObject(value)) {\n return typeCheckFailure(context, value, \"Value is not a plain object\")\n }\n\n for (const key of Object.keys(value)) {\n getContextForPath(context, key, this._subType)\n const errors = this._subType.validate(value[key], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_OBJECT as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n node.storedValue.delete(subpath)\n }\n}\nMapType.prototype.applySnapshot = action(MapType.prototype.applySnapshot)\n\n/**\n * `types.map` - Creates a key based collection type who's children are all of a uniform declared type.\n * If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.\n *\n * This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * id: types.identifier,\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.map(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: {} })\n * unprotect(s)\n * s.todos.set(17, { task: \"Grab coffee\", id: 17 })\n * s.todos.put({ task: \"Grab cookie\", id: 18 }) // put will infer key from the identifier\n * console.log(s.todos.get(17).task) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nexport function map<IT extends IAnyType>(subtype: IT): IMapType<IT> {\n return new MapType<IT>(`Map<string, ${subtype.name}>`, subtype)\n}\n\n/**\n * Returns if a given value represents a map type.\n *\n * @param type\n * @returns `true` if it is a map type.\n */\nexport function isMapType<Items extends IAnyType = IAnyType>(\n type: IAnyType\n): type is IMapType<Items> {\n return isType(type) && (type.flags & TypeFlags.Map) > 0\n}\n","import {\n type IArrayDidChange,\n type IArraySplice,\n type IArrayWillChange,\n type IArrayWillSplice,\n type IObservableArray,\n _getAdministration,\n action,\n intercept,\n observable,\n observe\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ComplexType,\n EMPTY_ARRAY,\n EMPTY_OBJECT,\n type ExtractCSTWithSTN,\n type IAnyStateTreeNode,\n type IAnyType,\n type IChildNodesMap,\n type IHooksGetter,\n type IJsonPatch,\n type IStateTreeNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n ObjectNode,\n TypeFlags,\n addHiddenFinalProp,\n addHiddenWritableProp,\n assertIsType,\n convertChildNodesToArray,\n createActionInvoker,\n createObjectNode,\n devMode,\n fail,\n getContextForPath,\n getStateTreeNode,\n isArray,\n isNode,\n isPlainObject,\n isStateTreeNode,\n isType,\n mobxShallow,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport interface IMSTArray<IT extends IAnyType> extends IObservableArray<\n IT[\"Type\"]\n> {\n // needs to be split or else it will complain about not being compatible with the array interface\n push(...items: IT[\"Type\"][]): number\n push(...items: ExtractCSTWithSTN<IT>[]): number\n\n concat(...items: ConcatArray<IT[\"Type\"]>[]): IT[\"Type\"][]\n concat(...items: ConcatArray<ExtractCSTWithSTN<IT>>[]): IT[\"Type\"][]\n\n concat(...items: (IT[\"Type\"] | ConcatArray<IT[\"Type\"]>)[]): IT[\"Type\"][]\n concat(\n ...items: (ExtractCSTWithSTN<IT> | ConcatArray<ExtractCSTWithSTN<IT>>)[]\n ): IT[\"Type\"][]\n\n splice(start: number, deleteCount?: number): IT[\"Type\"][]\n splice(\n start: number,\n deleteCount: number,\n ...items: IT[\"Type\"][]\n ): IT[\"Type\"][]\n splice(\n start: number,\n deleteCount: number,\n ...items: ExtractCSTWithSTN<IT>[]\n ): IT[\"Type\"][]\n\n unshift(...items: IT[\"Type\"][]): number\n unshift(...items: ExtractCSTWithSTN<IT>[]): number\n}\n\n/** @hidden */\nexport interface IArrayType<IT extends IAnyType> extends IType<\n readonly IT[\"CreationType\"][] | undefined,\n IT[\"SnapshotType\"][],\n IMSTArray<IT>\n> {\n hooks(hooks: IHooksGetter<IMSTArray<IAnyType>>): IArrayType<IT>\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ArrayType<IT extends IAnyType> extends ComplexType<\n readonly IT[\"CreationType\"][] | undefined,\n IT[\"SnapshotType\"][],\n IMSTArray<IT>\n> {\n readonly flags = TypeFlags.Array\n private readonly hookInitializers: Array<IHooksGetter<IMSTArray<IT>>> = []\n constructor(\n name: string,\n private readonly _subType: IT,\n hookInitializers: Array<IHooksGetter<IMSTArray<IT>>> = []\n ) {\n super(name)\n this.hookInitializers = hookInitializers\n }\n\n hooks(hooks: IHooksGetter<IMSTArray<IT>>) {\n const hookInitializers =\n this.hookInitializers.length > 0\n ? this.hookInitializers.concat(hooks)\n : [hooks]\n return new ArrayType(this.name, this._subType, hookInitializers)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n return createObjectNode(this, parent, subpath, environment, initialValue)\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n snapshot: this[\"C\"] = []\n ): IChildNodesMap {\n const subType = (objNode.type as this)._subType\n const result: IChildNodesMap = {}\n snapshot.forEach((item, index) => {\n const subpath = \"\" + index\n result[subpath] = subType.instantiate(objNode, subpath, undefined, item)\n })\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n const options = { ...mobxShallow, name: this.name }\n return observable.array(\n convertChildNodesToArray(childNodes),\n options\n ) as this[\"T\"]\n }\n\n finalizeNewInstance(node: this[\"N\"], instance: this[\"T\"]): void {\n _getAdministration(instance).dehancer = node.unbox\n\n const type = node.type as this\n type.hookInitializers.forEach(initializer => {\n const hooks = initializer(instance)\n Object.keys(hooks).forEach(name => {\n const hook = hooks[name as keyof typeof hooks]!\n const actionInvoker = createActionInvoker(\n instance as IAnyStateTreeNode,\n name,\n hook\n )\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n instance,\n name,\n actionInvoker\n )\n })\n })\n\n intercept(instance as IObservableArray<AnyNode>, this.willChange)\n observe(instance as IObservableArray<AnyNode>, this.didChange)\n }\n\n describe() {\n return this.name\n }\n\n getChildren(node: this[\"N\"]): AnyNode[] {\n return node.storedValue.slice()\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n const index = Number(key)\n if (index < node.storedValue.length) {\n return node.storedValue[index]\n }\n throw fail(\"Not a child: \" + key)\n }\n\n willChange(\n change: IArrayWillChange<AnyNode> | IArrayWillSplice<AnyNode>\n ): IArrayWillChange<AnyNode> | IArrayWillSplice<AnyNode> | null {\n const node = getStateTreeNode(change.object as IStateTreeNode<this>)\n node.assertWritable({ subpath: \"\" + change.index })\n const subType = (node.type as this)._subType\n const childNodes = node.getChildren()\n\n switch (change.type) {\n case \"update\":\n {\n if (change.newValue === change.object[change.index]) {\n return null\n }\n\n const updatedNodes = reconcileArrayChildren(\n node,\n subType,\n [childNodes[change.index]],\n [change.newValue],\n [change.index]\n )\n if (!updatedNodes) {\n return null\n }\n change.newValue = updatedNodes[0]\n }\n break\n case \"splice\":\n {\n const { index, removedCount, added } = change\n\n const addedNodes = reconcileArrayChildren(\n node,\n subType,\n childNodes.slice(index, index + removedCount),\n added,\n added.map((_, i) => index + i)\n )\n if (!addedNodes) {\n return null\n }\n change.added = addedNodes\n\n // update paths of remaining items\n for (let i = index + removedCount; i < childNodes.length; i++) {\n childNodes[i].setParent(\n node,\n \"\" + (i + added.length - removedCount)\n )\n }\n }\n break\n }\n return change\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n return node.getChildren().map(childNode => childNode.snapshot)\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed: this[\"S\"] = []\n Object.keys(childNodes).forEach(key => {\n processed.push(childNodes[key].getSnapshot())\n })\n return processed\n }\n\n didChange(change: IArrayDidChange<AnyNode> | IArraySplice<AnyNode>): void {\n const node = getStateTreeNode(change.object as IAnyStateTreeNode)\n switch (change.type) {\n case \"update\":\n return void node.emitPatch(\n {\n op: \"replace\",\n path: \"\" + change.index,\n value: change.newValue.snapshot,\n oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n },\n node\n )\n case \"splice\":\n for (let i = change.removedCount - 1; i >= 0; i--) {\n node.emitPatch(\n {\n op: \"remove\",\n path: \"\" + (change.index + i),\n oldValue: change.removed[i].snapshot\n },\n node\n )\n }\n for (let i = 0; i < change.addedCount; i++) {\n node.emitPatch(\n {\n op: \"add\",\n path: \"\" + (change.index + i),\n value: node.getChildNode(\"\" + (change.index + i)).snapshot,\n oldValue: undefined\n },\n node\n )\n }\n return\n }\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n const target = node.storedValue\n const index = subpath === \"-\" ? target.length : Number(subpath)\n switch (patch.op) {\n case \"replace\":\n target[index] = patch.value\n break\n case \"add\":\n target.splice(index, 0, patch.value)\n break\n case \"remove\":\n target.splice(index, 1)\n break\n }\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const target = node.storedValue\n target.replace(snapshot as any)\n }\n\n getChildType(): IAnyType {\n return this._subType\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isArray(value)) {\n return typeCheckFailure(context, value, \"Value is not an array\")\n }\n\n for (let i = 0; i < value.length; i++) {\n getContextForPath(context, \"\" + i, this._subType)\n const errors = this._subType.validate(value[i], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_ARRAY as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n node.storedValue.splice(Number(subpath), 1)\n }\n}\nArrayType.prototype.applySnapshot = action(ArrayType.prototype.applySnapshot)\n\n/**\n * `types.array` - Creates an index based collection type who's children are all of a uniform declared type.\n *\n * This type will always produce [observable arrays](https://mobx.js.org/api.html#observablearray)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * task: types.string\n * })\n *\n * const TodoStore = types.model({\n * todos: types.array(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: [] })\n * unprotect(s) // needed to allow modifying outside of an action\n * s.todos.push({ task: \"Grab coffee\" })\n * console.log(s.todos[0]) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nexport function array<IT extends IAnyType>(subtype: IT): IArrayType<IT> {\n assertIsType(subtype, 1)\n return new ArrayType<IT>(`${subtype.name}[]`, subtype)\n}\n\nfunction reconcileArrayChildren<TT>(\n parent: AnyObjectNode,\n childType: IType<any, any, TT>,\n oldNodes: AnyNode[],\n newValues: TT[],\n newPaths: (string | number)[]\n): AnyNode[] | null {\n let nothingChanged = true\n\n for (let i = 0; ; i++) {\n const hasNewNode = i <= newValues.length - 1\n const oldNode = oldNodes[i]\n let newValue = hasNewNode ? newValues[i] : undefined\n const newPath = \"\" + newPaths[i]\n\n // for some reason, instead of newValue we got a node, fallback to the storedValue\n // TODO: https://github.com/mobxjs/mobx-state-tree/issues/340#issuecomment-325581681\n if (isNode(newValue)) {\n newValue = newValue.storedValue\n }\n\n if (!oldNode && !hasNewNode) {\n // both are empty, end\n break\n } else if (!hasNewNode) {\n // new one does not exists\n nothingChanged = false\n oldNodes.splice(i, 1)\n if (oldNode instanceof ObjectNode) {\n // since it is going to be returned by pop/splice/shift better create it before killing it\n // so it doesn't end up in an undead state\n oldNode.createObservableInstanceIfNeeded()\n }\n oldNode.die()\n i--\n } else if (!oldNode) {\n // there is no old node, create it\n // check if already belongs to the same parent. if so, avoid pushing item in. only swapping can occur.\n if (\n isStateTreeNode(newValue) &&\n getStateTreeNode(newValue).parent === parent\n ) {\n // this node is owned by this parent, but not in the reconcilable set, so it must be double\n throw fail(\n `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 '${\n parent.path\n }/${newPath}', but it lives already at '${getStateTreeNode(newValue).path}'`\n )\n }\n nothingChanged = false\n const newNode = valueAsNode(childType, parent, newPath, newValue)\n oldNodes.splice(i, 0, newNode)\n } else if (areSame(oldNode, newValue)) {\n // both are the same, reconcile\n oldNodes[i] = valueAsNode(childType, parent, newPath, newValue, oldNode)\n } else {\n // nothing to do, try to reorder\n let oldMatch = undefined\n\n // find a possible candidate to reuse\n for (let j = i; j < oldNodes.length; j++) {\n if (areSame(oldNodes[j], newValue)) {\n oldMatch = oldNodes.splice(j, 1)[0]\n break\n }\n }\n\n nothingChanged = false\n const newNode = valueAsNode(\n childType,\n parent,\n newPath,\n newValue,\n oldMatch\n )\n oldNodes.splice(i, 0, newNode)\n }\n }\n\n return nothingChanged ? null : oldNodes\n}\n\n/**\n * Convert a value to a node at given parent and subpath. Attempts to reuse old node if possible and given.\n */\nfunction valueAsNode(\n childType: IAnyType,\n parent: AnyObjectNode,\n subpath: string,\n newValue: any,\n oldNode?: AnyNode\n) {\n // ensure the value is valid-ish\n typecheckInternal(childType, newValue)\n\n function getNewNode() {\n // the new value has a MST node\n if (isStateTreeNode(newValue)) {\n const childNode = getStateTreeNode(newValue)\n childNode.assertAlive(EMPTY_OBJECT)\n\n // the node lives here\n if (childNode.parent !== null && childNode.parent === parent) {\n childNode.setParent(parent, subpath)\n return childNode\n }\n }\n // there is old node and new one is a value/snapshot\n if (oldNode) {\n return childType.reconcile(oldNode, newValue, parent, subpath)\n }\n\n // nothing to do, create from scratch\n return childType.instantiate(parent, subpath, undefined, newValue)\n }\n\n const newNode = getNewNode()\n if (oldNode && oldNode !== newNode) {\n if (oldNode instanceof ObjectNode) {\n // since it is going to be returned by pop/splice/shift better create it before killing it\n // so it doesn't end up in an undead state\n oldNode.createObservableInstanceIfNeeded()\n }\n oldNode.die()\n }\n return newNode\n}\n\n/**\n * Check if a node holds a value.\n */\nfunction areSame(oldNode: AnyNode, newValue: any) {\n // never consider dead old nodes for reconciliation\n if (!oldNode.isAlive) {\n return false\n }\n\n // the new value has the same node\n if (isStateTreeNode(newValue)) {\n const newNode = getStateTreeNode(newValue)\n return newNode.isAlive && newNode === oldNode\n }\n\n // the provided value is the snapshot of the old node\n if (oldNode.snapshot === newValue) {\n return true\n }\n\n // Non object nodes don't get reconciled\n if (!(oldNode instanceof ObjectNode)) {\n return false\n }\n\n const oldNodeType = oldNode.getReconciliationType()\n // new value is a snapshot with the correct identifier\n return (\n oldNode.identifier !== null &&\n oldNode.identifierAttribute &&\n isPlainObject(newValue) &&\n oldNodeType.is(newValue) &&\n (oldNodeType as any).isMatchingSnapshotId(oldNode, newValue)\n )\n}\n\n/**\n * Returns if a given value represents an array type.\n *\n * @param type\n * @returns `true` if the type is an array type.\n */\nexport function isArrayType<Items extends IAnyType = IAnyType>(\n type: IAnyType\n): type is IArrayType<Items> {\n return isType(type) && (type.flags & TypeFlags.Array) > 0\n}\n","import {\n type IObjectDidChange,\n type IObjectWillChange,\n _getAdministration,\n _interceptReads,\n action,\n computed,\n defineProperty,\n getAtom,\n intercept,\n makeObservable,\n observable,\n observe,\n set\n} from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n ArrayType,\n ComplexType,\n EMPTY_ARRAY,\n EMPTY_OBJECT,\n type FunctionWithFlag,\n Hook,\n type IAnyType,\n type IChildNodesMap,\n type IJsonPatch,\n type IType,\n type IValidationContext,\n type IValidationResult,\n type Instance,\n MapType,\n TypeFlags,\n type _CustomOrOther,\n type _NotCustomized,\n addHiddenFinalProp,\n addHiddenWritableProp,\n assertArg,\n assertIsString,\n createActionInvoker,\n createObjectNode,\n devMode,\n escapeJsonPath,\n fail,\n freeze,\n getContextForPath,\n getPrimitiveFactoryFromValue,\n getStateTreeNode,\n isPlainObject,\n isPrimitive,\n isStateTreeNode,\n isType,\n mobxShallow,\n optional,\n popContext,\n typeCheckFailure,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\nconst PRE_PROCESS_SNAPSHOT = \"preProcessSnapshot\"\nconst POST_PROCESS_SNAPSHOT = \"postProcessSnapshot\"\n\n/** @hidden */\nexport interface ModelProperties {\n [key: string]: IAnyType\n}\n\n/** @hidden */\nexport type ModelPrimitive = string | number | boolean | Date\n\n/** @hidden */\nexport interface ModelPropertiesDeclaration {\n [key: string]: ModelPrimitive | IAnyType\n}\n\n/**\n * Unmaps syntax property declarations to a map of { propName: IType }\n *\n * @hidden\n */\nexport type ModelPropertiesDeclarationToProperties<\n T extends ModelPropertiesDeclaration\n> = T extends { [k: string]: IAnyType } // optimization to reduce nesting\n ? T\n : {\n [K in keyof T]: T[K] extends IAnyType // keep IAnyType check on the top to reduce nesting\n ? T[K]\n : T[K] extends string\n ? IType<string | undefined, string, string>\n : T[K] extends number\n ? IType<number | undefined, number, number>\n : T[K] extends boolean\n ? IType<boolean | undefined, boolean, boolean>\n : T[K] extends Date\n ? IType<number | Date | undefined, number, Date>\n : never\n }\n\n/**\n * Checks if a value is optional (undefined, any or unknown).\n * @hidden\n *\n * Examples:\n * - string = false\n * - undefined = true\n * - string | undefined = true\n * - string & undefined = false, but we don't care\n * - any = true\n * - unknown = true\n */\ntype IsOptionalValue<C, TV, FV> = undefined extends C ? TV : FV\n\n// type _A = IsOptionalValue<string, true, false> // false\n// type _B = IsOptionalValue<undefined, true, false> // true\n// type _C = IsOptionalValue<string | undefined, true, false> // true\n// type _D = IsOptionalValue<string & undefined, true, false> // false, but we don't care\n// type _E = IsOptionalValue<any, true, false> // true\n// type _F = IsOptionalValue<unknown, true, false> // true\n\n/**\n * Name of the properties of an object that can't be set to undefined, any or unknown\n * @hidden\n */\ntype DefinablePropsNames<T> = {\n [K in keyof T]: IsOptionalValue<T[K], never, K>\n}[keyof T]\n\n// Brand applied to the truly-empty object type so it doesn't structurally collapse to `{}`,\n// which TypeScript treats as \"any non-nullish value\". Kept internal; never exported.\ndeclare const $emptyObject: unique symbol\ntype EmptyObject = { [$emptyObject]?: never }\n\n/** @hidden */\nexport type MaybeEmpty<T> = keyof T extends never ? EmptyObject : T\n\n/** @hidden */\nexport type ExtractCFromProps<P extends ModelProperties> = {\n [k in keyof P]: P[k][\"CreationType\"]\n}\n\n/** @hidden */\nexport type ModelCreationType<PC> = MaybeEmpty<{\n [P in DefinablePropsNames<PC>]: PC[P]\n}> &\n Partial<PC>\n\n/** @hidden */\nexport type ModelCreationType2<\n P extends ModelProperties,\n CustomC\n> = MaybeEmpty<_CustomOrOther<CustomC, ModelCreationType<ExtractCFromProps<P>>>>\n\n/** @hidden */\nexport type ModelSnapshotType<P extends ModelProperties> = MaybeEmpty<{\n [K in keyof P]: P[K][\"SnapshotType\"]\n}>\n\n/** @hidden */\nexport type ModelSnapshotType2<\n P extends ModelProperties,\n CustomS\n> = _CustomOrOther<CustomS, ModelSnapshotType<P>>\n\n/**\n * @hidden\n * we keep this separate from ModelInstanceType to shorten model instance types generated declarations\n */\nexport type ModelInstanceTypeProps<P extends ModelProperties> = {\n [K in keyof P]: P[K][\"Type\"]\n}\n\n/**\n * @hidden\n * do not transform this to an interface or model instance type generated declarations will be longer\n */\nexport type ModelInstanceType<\n P extends ModelProperties,\n O\n> = ModelInstanceTypeProps<P> & O\n\n/** @hidden */\nexport interface ModelActions {\n [key: string]: FunctionWithFlag\n}\n\nexport interface IModelType<\n PROPS extends ModelProperties,\n OTHERS,\n CustomC = _NotCustomized,\n CustomS = _NotCustomized\n> extends IType<\n ModelCreationType2<PROPS, CustomC>,\n ModelSnapshotType2<PROPS, CustomS>,\n ModelInstanceType<PROPS, OTHERS>\n> {\n readonly properties: PROPS\n\n named(newName: string): IModelType<PROPS, OTHERS, CustomC, CustomS>\n\n // warning: redefining props after a process snapshot is used ends up on the fixed (custom) C, S typings being overridden\n // so it is recommended to use pre/post process snapshot after all props have been defined\n props<PROPS2 extends ModelPropertiesDeclaration>(\n props: PROPS2\n ): IModelType<\n PROPS & ModelPropertiesDeclarationToProperties<PROPS2>,\n OTHERS,\n CustomC,\n CustomS\n >\n\n views<V extends object>(\n fn: (self: Instance<this>) => V\n ): IModelType<PROPS, OTHERS & V, CustomC, CustomS>\n\n actions<A extends ModelActions>(\n fn: (self: Instance<this>) => A\n ): IModelType<PROPS, OTHERS & A, CustomC, CustomS>\n\n volatile<TP extends object>(\n fn: (self: Instance<this>) => TP\n ): IModelType<PROPS, OTHERS & TP, CustomC, CustomS>\n\n extend<\n A extends ModelActions = {},\n V extends object = {},\n VS extends object = {}\n >(\n fn: (self: Instance<this>) => { actions?: A; views?: V; state?: VS }\n ): IModelType<PROPS, OTHERS & A & V & VS, CustomC, CustomS>\n\n preProcessSnapshot<NewC = ModelCreationType2<PROPS, CustomC>>(\n fn: (snapshot: NewC) => ModelCreationType2<PROPS, CustomC>\n ): IModelType<PROPS, OTHERS, NewC, CustomS>\n\n postProcessSnapshot<NewS = ModelSnapshotType2<PROPS, CustomS>>(\n fn: (snapshot: ModelSnapshotType2<PROPS, CustomS>) => NewS\n ): IModelType<PROPS, OTHERS, CustomC, NewS>\n}\n\n/**\n * Any model type.\n */\nexport interface IAnyModelType extends IModelType<any, any, any, any> {}\n\n/** @hidden */\nexport type ExtractProps<T extends IAnyModelType> =\n T extends IModelType<infer P, any, any, any> ? P : never\n/** @hidden */\nexport type ExtractOthers<T extends IAnyModelType> =\n T extends IModelType<any, infer O, any, any> ? O : never\n\nfunction objectTypeToString(this: any) {\n return getStateTreeNode(this).toString()\n}\n\n/**\n * @internal\n * @hidden\n */\nexport interface ModelTypeConfig {\n name?: string\n properties?: ModelPropertiesDeclaration\n initializers?: ReadonlyArray<(instance: any) => any>\n preProcessor?: (snapshot: any) => any\n postProcessor?: (snapshot: any) => any\n}\n\nconst defaultObjectOptions = {\n name: \"AnonymousModel\",\n properties: {},\n initializers: EMPTY_ARRAY\n}\n\nfunction toPropertiesObject(\n declaredProps: ModelPropertiesDeclaration\n): ModelProperties {\n const keysList = Object.keys(declaredProps)\n const alreadySeenKeys = new Set<string>()\n\n keysList.forEach(key => {\n if (alreadySeenKeys.has(key)) {\n throw fail(\n `${key} is declared twice in the model. Model should not contain the same keys`\n )\n }\n alreadySeenKeys.add(key)\n })\n\n // loop through properties and ensures that all items are types\n return keysList.reduce(\n (props, key) => {\n // warn if user intended a HOOK\n if (key in Hook) {\n throw fail(\n `Hook '${key}' was defined as property. Hooks should be defined as part of the actions`\n )\n }\n\n // the user intended to use a view\n const descriptor = Object.getOwnPropertyDescriptor(declaredProps, key)!\n if (\"get\" in descriptor) {\n throw fail(\n \"Getters are not supported as properties. Please use views instead\"\n )\n }\n // undefined and null are not valid\n const value = descriptor.value\n if (value === null || value === undefined) {\n throw fail(\n \"The default value of an attribute cannot be null or undefined as the type cannot be inferred. Did you mean `types.maybe(someType)`?\"\n )\n }\n // its a primitive, convert to its type\n else if (isPrimitive(value)) {\n props[key] = optional(getPrimitiveFactoryFromValue(value), value)\n }\n // map defaults to empty object automatically for models\n else if (value instanceof MapType) {\n props[key] = optional(value, {})\n } else if (value instanceof ArrayType) {\n props[key] = optional(value, [])\n }\n // its already a type\n else if (isType(value)) {\n // do nothing, it's already a type\n }\n // its a function, maybe the user wanted a view?\n else if (devMode() && typeof value === \"function\") {\n throw fail(\n `Invalid type definition for property '${key}', it looks like you passed a function. Did you forget to invoke it, or did you intend to declare a view / action?`\n )\n }\n // no other complex values\n else if (devMode() && typeof value === \"object\") {\n throw fail(\n `Invalid type definition for property '${key}', it looks like you passed an object. Try passing another model type or a types.frozen.`\n )\n } else {\n throw fail(\n `Invalid type definition for property '${key}', cannot infer a type from a value like '${value}' (${typeof value})`\n )\n }\n\n return props\n },\n { ...declaredProps } as any\n )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ModelType<\n PROPS extends ModelProperties,\n OTHERS,\n CustomC,\n CustomS,\n MT extends IModelType<PROPS, OTHERS, CustomC, CustomS>\n>\n extends ComplexType<\n ModelCreationType2<PROPS, CustomC>,\n ModelSnapshotType2<PROPS, CustomS>,\n ModelInstanceType<PROPS, OTHERS>\n >\n implements IModelType<PROPS, OTHERS, CustomC, CustomS>\n{\n readonly flags = TypeFlags.Object\n\n /*\n * The original object definition\n */\n public readonly initializers!: ((instance: any) => any)[]\n public readonly properties!: PROPS\n\n private preProcessor!: (snapshot: any) => any | undefined\n private postProcessor!: (snapshot: any) => any | undefined\n readonly propertyNames: string[]\n\n constructor(opts: ModelTypeConfig) {\n super(opts.name || defaultObjectOptions.name)\n Object.assign(this, defaultObjectOptions, opts)\n // ensures that any default value gets converted to its related type\n this.properties = toPropertiesObject(this.properties) as PROPS\n freeze(this.properties) // make sure nobody messes with it\n this.propertyNames = Object.keys(this.properties)\n this.identifierAttribute = this._getIdentifierAttribute()\n }\n\n private _getIdentifierAttribute(): string | undefined {\n let identifierAttribute: string | undefined = undefined\n this.forAllProps((propName, propType) => {\n if (propType.flags & TypeFlags.Identifier) {\n if (identifierAttribute) {\n throw fail(\n `Cannot define property '${propName}' as object identifier, property '${identifierAttribute}' is already defined as identifier property`\n )\n }\n identifierAttribute = propName\n }\n })\n return identifierAttribute\n }\n\n cloneAndEnhance(opts: ModelTypeConfig): IAnyModelType {\n return new ModelType({\n name: opts.name || this.name,\n properties: Object.assign({}, this.properties, opts.properties),\n initializers: this.initializers.concat(opts.initializers || []),\n preProcessor: opts.preProcessor || this.preProcessor,\n postProcessor: opts.postProcessor || this.postProcessor\n })\n }\n\n actions<A extends ModelActions>(fn: (self: Instance<this>) => A) {\n const actionInitializer = (self: Instance<this>) => {\n this.instantiateActions(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [actionInitializer] })\n }\n\n private instantiateActions(self: this[\"T\"], actions: ModelActions): void {\n // check if return is correct\n if (!isPlainObject(actions)) {\n throw fail(\n `actions initializer should return a plain object containing actions`\n )\n }\n\n // bind actions to the object created\n Object.keys(actions).forEach(name => {\n // warn if preprocessor was given\n if (name === PRE_PROCESS_SNAPSHOT) {\n throw fail(\n `Cannot define action '${PRE_PROCESS_SNAPSHOT}', it should be defined using 'type.preProcessSnapshot(fn)' instead`\n )\n }\n // warn if postprocessor was given\n if (name === POST_PROCESS_SNAPSHOT) {\n throw fail(\n `Cannot define action '${POST_PROCESS_SNAPSHOT}', it should be defined using 'type.postProcessSnapshot(fn)' instead`\n )\n }\n\n let action2 = actions[name]\n\n // apply hook composition\n const baseAction = (self as any)[name]\n if (name in Hook && baseAction) {\n const specializedAction = action2\n action2 = function (...args: any[]) {\n baseAction(...args)\n specializedAction(...args)\n }\n }\n\n // the goal of this is to make sure actions using \"this\" can call themselves,\n // while still allowing the middlewares to register them\n const boundAction = action2.bind(actions) as FunctionWithFlag\n boundAction._isFlowAction = action2._isFlowAction ?? false\n boundAction.$mst_middleware = action2.$mst_middleware\n const actionInvoker = createActionInvoker(self as any, name, boundAction)\n actions[name] = actionInvoker\n\n // See #646, allow models to be mocked\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n self,\n name,\n actionInvoker\n )\n })\n }\n\n named: MT[\"named\"] = name => {\n return this.cloneAndEnhance({ name })\n }\n\n props: MT[\"props\"] = properties => {\n return this.cloneAndEnhance({ properties })\n }\n\n volatile<TP extends object>(fn: (self: Instance<this>) => TP) {\n if (typeof fn !== \"function\") {\n throw fail(\n `You passed an ${typeof fn} to volatile state as an argument, when function is expected`\n )\n }\n const stateInitializer = (self: Instance<this>) => {\n this.instantiateVolatileState(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [stateInitializer] })\n }\n\n private instantiateVolatileState(\n self: this[\"T\"],\n state: {\n [key: string]: any\n }\n ): void {\n // check views return\n if (!isPlainObject(state)) {\n throw fail(\n `volatile state initializer should return a plain object containing state`\n )\n }\n set(self, state)\n }\n\n extend<\n A extends ModelActions = {},\n V extends object = {},\n VS extends object = {}\n >(fn: (self: Instance<this>) => { actions?: A; views?: V; state?: VS }) {\n const initializer = (self: Instance<this>) => {\n const { actions, views, state, ...rest } = fn(self)\n for (const key in rest) {\n throw fail(\n `The \\`extend\\` function should return an object with a subset of the fields 'actions', 'views' and 'state'. Found invalid key '${key}'`\n )\n }\n if (state) {\n this.instantiateVolatileState(self, state)\n }\n if (views) {\n this.instantiateViews(self, views)\n }\n if (actions) {\n this.instantiateActions(self, actions)\n }\n return self\n }\n return this.cloneAndEnhance({ initializers: [initializer] })\n }\n\n views<V extends object>(fn: (self: Instance<this>) => V) {\n const viewInitializer = (self: Instance<this>) => {\n this.instantiateViews(self, fn(self))\n return self\n }\n return this.cloneAndEnhance({ initializers: [viewInitializer] })\n }\n\n private instantiateViews(self: this[\"T\"], views: object): void {\n // check views return\n if (!isPlainObject(views)) {\n throw fail(\n `views initializer should return a plain object containing views`\n )\n }\n Object.getOwnPropertyNames(views).forEach(key => {\n // is this a computed property?\n const descriptor = Object.getOwnPropertyDescriptor(views, key)!\n if (\"get\" in descriptor) {\n defineProperty(self, key, descriptor)\n makeObservable(self, { [key]: computed } as any)\n } else if (typeof descriptor.value === \"function\") {\n // this is a view function, merge as is!\n // See #646, allow models to be mocked\n ;(!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(\n self,\n key,\n descriptor.value\n )\n } else {\n throw fail(\n `A view member should either be a function or getter based property`\n )\n }\n })\n }\n\n preProcessSnapshot: MT[\"preProcessSnapshot\"] = preProcessor => {\n const currentPreprocessor = this.preProcessor\n if (!currentPreprocessor) {\n return this.cloneAndEnhance({ preProcessor })\n } else {\n return this.cloneAndEnhance({\n preProcessor: snapshot => currentPreprocessor(preProcessor(snapshot))\n })\n }\n }\n\n postProcessSnapshot: MT[\"postProcessSnapshot\"] = postProcessor => {\n const currentPostprocessor = this.postProcessor\n if (!currentPostprocessor) {\n return this.cloneAndEnhance({ postProcessor })\n } else {\n return this.cloneAndEnhance({\n postProcessor: snapshot => postProcessor(currentPostprocessor(snapshot))\n })\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const value = isStateTreeNode(initialValue)\n ? initialValue\n : this.applySnapshotPreProcessor(initialValue)\n return createObjectNode(this, parent, subpath, environment, value)\n // Optimization: record all prop- view- and action names after first construction, and generate an optimal base class\n // that pre-reserves all these fields for fast object-member lookups\n }\n\n initializeChildNodes(\n objNode: this[\"N\"],\n initialSnapshot: any = {}\n ): IChildNodesMap {\n const type = objNode.type as this\n const result: IChildNodesMap = {}\n type.forAllProps((name, childType) => {\n result[name] = childType.instantiate(\n objNode,\n name,\n undefined,\n initialSnapshot[name]\n )\n })\n return result\n }\n\n createNewInstance(childNodes: IChildNodesMap): this[\"T\"] {\n const options = { ...mobxShallow, name: this.name }\n return observable.object(childNodes, EMPTY_OBJECT, options) as any\n }\n\n finalizeNewInstance(node: this[\"N\"], instance: this[\"T\"]): void {\n addHiddenFinalProp(instance, \"toString\", objectTypeToString)\n\n this.forAllProps(name => {\n _interceptReads(instance, name, node.unbox)\n })\n\n this.initializers.reduce((self, fn) => fn(self), instance)\n intercept(instance, this.willChange)\n observe(instance, this.didChange)\n }\n\n private willChange(change: IObjectWillChange): IObjectWillChange | null {\n const node = getStateTreeNode(change.object)\n const subpath = change.name as string\n node.assertWritable({ subpath })\n // MST's removeChild sets the property to undefined rather than deleting it,\n // so mobx only ever delivers \"update\"/\"add\" changes here, never \"remove\".\n if (change.type !== \"remove\") {\n const childType = (node.type as this).properties[subpath]\n // only properties are typed, state are stored as-is references\n if (childType) {\n typecheckInternal(childType, change.newValue)\n change.newValue = childType.reconcile(\n node.getChildNode(subpath),\n change.newValue,\n node,\n subpath\n )\n }\n }\n return change\n }\n\n private didChange(change: IObjectDidChange) {\n const childNode = getStateTreeNode(change.object)\n const childType = (childNode.type as this).properties[change.name as string]\n // skip volatile state (no childType) and never-actually-occurring \"remove\" changes\n if (childType && change.type !== \"remove\") {\n const oldChildValue =\n change.type === \"update\" ? change.oldValue.snapshot : undefined\n childNode.emitPatch(\n {\n op: \"replace\",\n path: escapeJsonPath(change.name as string),\n value: change.newValue.snapshot,\n oldValue: oldChildValue\n },\n childNode\n )\n }\n }\n\n getChildren(node: this[\"N\"]): ReadonlyArray<AnyNode> {\n const res: AnyNode[] = []\n this.forAllProps(name => {\n res.push(this.getChildNode(node, name))\n })\n return res\n }\n\n getChildNode(node: this[\"N\"], key: string): AnyNode {\n if (!(key in this.properties)) {\n throw fail(\"Not a value property: \" + key)\n }\n const adm = _getAdministration(node.storedValue, key)\n const childNode = adm.raw?.()\n if (!childNode) {\n throw fail(\"Node not available for property \" + key)\n }\n return childNode\n }\n\n getSnapshot(node: this[\"N\"], applyPostProcess = true): this[\"S\"] {\n const res = {} as any\n this.forAllProps((name, _type) => {\n try {\n // TODO: FIXME, make sure the observable ref is used!\n const atom = getAtom(node.storedValue, name)\n ;(atom as any).reportObserved()\n } catch (_e) {\n throw fail(`${name} property is declared twice`)\n }\n res[name] = this.getChildNode(node, name).snapshot\n })\n if (applyPostProcess) {\n return this.applySnapshotPostProcessor(res)\n }\n return res\n }\n\n processInitialSnapshot(childNodes: IChildNodesMap): this[\"S\"] {\n const processed = {} as any\n Object.keys(childNodes).forEach(key => {\n processed[key] = childNodes[key].getSnapshot()\n })\n return this.applySnapshotPostProcessor(processed)\n }\n\n applyPatchLocally(node: this[\"N\"], subpath: string, patch: IJsonPatch): void {\n if (!(patch.op === \"replace\" || patch.op === \"add\")) {\n throw fail(`object does not support operation ${patch.op}`)\n }\n ;(node.storedValue as any)[subpath] = patch.value\n }\n\n applySnapshot(node: this[\"N\"], snapshot: this[\"C\"]): void {\n typecheckInternal(this, snapshot)\n const preProcessedSnapshot = this.applySnapshotPreProcessor(snapshot)\n this.forAllProps(name => {\n ;(node.storedValue as any)[name] = preProcessedSnapshot[name]\n })\n }\n\n applySnapshotPreProcessor(snapshot: any) {\n const processor = this.preProcessor\n return processor ? processor.call(null, snapshot) : snapshot\n }\n\n applySnapshotPostProcessor(snapshot: any) {\n const postProcessor = this.postProcessor\n if (postProcessor) {\n return postProcessor.call(null, snapshot)\n }\n return snapshot\n }\n\n getChildType(propertyName: string): IAnyType {\n assertIsString(propertyName, 1)\n\n return this.properties[propertyName]\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const snapshot = this.applySnapshotPreProcessor(value)\n\n if (!isPlainObject(snapshot)) {\n return typeCheckFailure(context, snapshot, \"Value is not a plain object\")\n }\n\n for (const key of this.propertyNames) {\n const propType = this.properties[key]!\n getContextForPath(context, key, propType)\n const errors = propType.validate(snapshot[key], context)\n popContext(context)\n if (errors.length > 0) {\n return errors\n }\n }\n return typeCheckSuccess()\n }\n\n private forAllProps(fn: (name: string, type: IAnyType) => void) {\n this.propertyNames.forEach(key => fn(key, this.properties[key]))\n }\n\n describe() {\n // optimization: cache\n return (\n \"{ \" +\n this.propertyNames\n .map(key => key + \": \" + this.properties[key].describe())\n .join(\"; \") +\n \" }\"\n )\n }\n\n getDefaultSnapshot(): this[\"C\"] {\n return EMPTY_OBJECT as this[\"C\"]\n }\n\n removeChild(node: this[\"N\"], subpath: string) {\n ;(node.storedValue as any)[subpath] = undefined\n }\n}\nModelType.prototype.applySnapshot = action(ModelType.prototype.applySnapshot)\n\nexport function model<P extends ModelPropertiesDeclaration = {}>(\n name: string,\n properties?: P\n): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>\nexport function model<P extends ModelPropertiesDeclaration = {}>(\n properties?: P\n): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>\n/**\n * `types.model` - Creates a new model type by providing a name, properties, volatile state and actions.\n *\n * See the [model type](/concepts/trees#creating-models) description or the [getting started](intro/getting-started.md#getting-started-1) tutorial.\n */\nexport function model(...args: any[]): any {\n if (devMode() && typeof args[0] !== \"string\" && args[1]) {\n throw fail(\n \"Model creation failed. First argument must be a string when two arguments are provided\"\n )\n }\n\n const name = typeof args[0] === \"string\" ? args.shift() : \"AnonymousModel\"\n const properties = args.shift() || {}\n return new ModelType({ name, properties })\n}\n\n/** @hidden */\nexport type _CustomJoin<A, B> = A extends _NotCustomized ? B : A & B\n\n// generated with C:\\VSProjects\\github\\mobx-state-tree-upstream\\packages\\mobx-state-tree\\scripts\\generate-compose-type.js\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): IModelType<PA & PB, OA & OB, _CustomJoin<FCA, FCB>, _CustomJoin<FSA, FSB>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): IModelType<PA & PB, OA & OB, _CustomJoin<FCA, FCB>, _CustomJoin<FSA, FSB>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): IModelType<PA & PB & PC, OA & OB & OC, _CustomJoin<FCA, _CustomJoin<FCB, FCC>>, _CustomJoin<FSA, _CustomJoin<FSB, FSC>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): IModelType<PA & PB & PC, OA & OB & OC, _CustomJoin<FCA, _CustomJoin<FCB, FCC>>, _CustomJoin<FSA, _CustomJoin<FSB, FSC>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): IModelType<PA & PB & PC & PD, OA & OB & OC & OD, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, FCD>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, FSD>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): IModelType<PA & PB & PC & PD, OA & OB & OC & OD, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, FCD>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, FSD>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): IModelType<PA & PB & PC & PD & PE, OA & OB & OC & OD & OE, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, FCE>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, FSE>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(A:\n IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): IModelType<PA & PB & PC & PD & PE, OA & OB & OC & OD & OE, _CustomJoin<FCA,\n _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, FCE>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, FSE>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): IModelType<PA & PB & PC & PD & PE & PF, OA & OB & OC & OD & OE & OF, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, FCF>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, FSF>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): IModelType<PA & PB & PC & PD & PE & PF, OA & OB & OC & OD & OE & OF, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, FCF>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, FSF>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): IModelType<PA & PB & PC & PD & PE & PF & PG, OA & OB & OC & OD & OE & OF & OG, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, FCG>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, FSG>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): IModelType<PA & PB & PC & PD & PE & PF & PG, OA & OB & OC & OD & OE & OF & OG, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, FCG>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, FSG>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH, OA & OB & OC & OD & OE & OF & OG & OH, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, FCH>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, FSH>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH, OA & OB & OC & OD & OE & OF & OG & OH, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, FCH>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, FSH>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(name: string, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH & PI, OA & OB & OC & OD & OE & OF & OG & OH & OI, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, _CustomJoin<FCH, FCI>>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, _CustomJoin<FSH, FSI>>>>>>>>>\n// prettier-ignore\nexport function compose<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD, FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF\n extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): IModelType<PA & PB & PC & PD & PE & PF & PG & PH & PI, OA & OB & OC & OD & OE & OF & OG & OH & OI, _CustomJoin<FCA, _CustomJoin<FCB, _CustomJoin<FCC, _CustomJoin<FCD, _CustomJoin<FCE, _CustomJoin<FCF, _CustomJoin<FCG, _CustomJoin<FCH, FCI>>>>>>>>, _CustomJoin<FSA, _CustomJoin<FSB, _CustomJoin<FSC, _CustomJoin<FSD, _CustomJoin<FSE, _CustomJoin<FSF, _CustomJoin<FSG, _CustomJoin<FSH, FSI>>>>>>>>>\n\n/**\n * `types.compose` - Composes a new model from one or more existing model types.\n * This method can be invoked in two forms:\n * Given 2 or more model types, the types are composed into a new Type.\n * Given first parameter as a string and 2 or more model types,\n * the types are composed into a new Type with the given name\n */\nexport function compose(...args: any[]): any {\n // TODO: just join the base type names if no name is provided\n const hasTypename = typeof args[0] === \"string\"\n const typeName: string = hasTypename ? args[0] : \"AnonymousModel\"\n if (hasTypename) {\n args.shift()\n }\n\n // check all parameters\n if (devMode()) {\n args.forEach((type, i) => {\n assertArg(\n type,\n isModelType,\n \"mobx-state-tree model type\",\n hasTypename ? i + 2 : i + 1\n )\n })\n }\n\n return args\n .reduce((prev, cur) =>\n prev.cloneAndEnhance({\n name: prev.name + \"_\" + cur.name,\n properties: cur.properties,\n initializers: cur.initializers,\n preProcessor: (snapshot: any) =>\n cur.applySnapshotPreProcessor(\n prev.applySnapshotPreProcessor(snapshot)\n ),\n postProcessor: (snapshot: any) =>\n cur.applySnapshotPostProcessor(\n prev.applySnapshotPostProcessor(snapshot)\n )\n })\n )\n .named(typeName)\n}\n\n/**\n * Returns if a given value represents a model type.\n *\n * @param type\n * @returns\n */\nexport function isModelType<IT extends IAnyModelType = IAnyModelType>(\n type: IAnyType\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Object) > 0\n}\n","import {\n SimpleType,\n TypeFlags,\n createScalarNode,\n fail,\n identity,\n isFinite,\n isFloat,\n isInteger,\n isPrimitive,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../internal.ts\"\n\nimport type {\n AnyNode,\n AnyObjectNode,\n ISimpleType,\n IType,\n IValidationContext,\n IValidationResult\n} from \"../internal.ts\"\n\n// TODO: implement CoreType using types.custom ?\n/**\n * @internal\n * @hidden\n */\nexport class CoreType<C, S, T> extends SimpleType<C, S, T> {\n constructor(\n name: string,\n readonly flags: TypeFlags,\n private readonly checker: (value: C) => boolean,\n private readonly initializer: (v: C) => T = identity\n ) {\n super(name)\n }\n\n describe() {\n return this.name\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ): this[\"N\"] {\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n createNewInstance(snapshot: C) {\n return this.initializer(snapshot)\n }\n\n isValidSnapshot(value: C, context: IValidationContext): IValidationResult {\n if (isPrimitive(value) && this.checker(value as any)) {\n return typeCheckSuccess()\n }\n const typeName =\n this.name === \"Date\" ? \"Date or a unix milliseconds timestamp\" : this.name\n return typeCheckFailure(context, value, `Value is not a ${typeName}`)\n }\n}\n\n/**\n * `types.string` - Creates a type that can only contain a string value.\n * This type is used for string values by default\n *\n * Example:\n * ```ts\n * const Person = types.model({\n * firstName: types.string,\n * lastName: \"Doe\"\n * })\n * ```\n */\nexport const string: ISimpleType<string> = new CoreType<string, string, string>(\n \"string\",\n TypeFlags.String,\n v => typeof v === \"string\"\n)\n\n/**\n * `types.number` - Creates a type that can only contain a numeric value.\n * This type is used for numeric values by default\n *\n * Example:\n * ```ts\n * const Vector = types.model({\n * x: types.number,\n * y: 1.5\n * })\n * ```\n */\nexport const number: ISimpleType<number> = new CoreType<number, number, number>(\n \"number\",\n TypeFlags.Number,\n v => typeof v === \"number\"\n)\n\n/**\n * `types.integer` - Creates a type that can only contain an integer value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.integer,\n * height: 10\n * })\n * ```\n */\nexport const integer: ISimpleType<number> = new CoreType<\n number,\n number,\n number\n>(\"integer\", TypeFlags.Integer, v => isInteger(v))\n\n/**\n * `types.float` - Creates a type that can only contain an float value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.float,\n * height: 10\n * })\n * ```\n */\nexport const float: ISimpleType<number> = new CoreType<number, number, number>(\n \"float\",\n TypeFlags.Float,\n v => isFloat(v)\n)\n\n/**\n * `types.finite` - Creates a type that can only contain an finite value.\n *\n * Example:\n * ```ts\n * const Size = types.model({\n * width: types.finite,\n * height: 10\n * })\n * ```\n */\nexport const finite: ISimpleType<number> = new CoreType<number, number, number>(\n \"finite\",\n TypeFlags.Finite,\n v => isFinite(v)\n)\n\n/**\n * `types.boolean` - Creates a type that can only contain a boolean value.\n * This type is used for boolean values by default\n *\n * Example:\n * ```ts\n * const Thing = types.model({\n * isCool: types.boolean,\n * isAwesome: false\n * })\n * ```\n */\nexport const boolean: ISimpleType<boolean> = new CoreType<\n boolean,\n boolean,\n boolean\n>(\"boolean\", TypeFlags.Boolean, v => typeof v === \"boolean\")\n\n/**\n * `types.null` - The type of the value `null`\n */\nexport const nullType: ISimpleType<null> = new CoreType<null, null, null>(\n \"null\",\n TypeFlags.Null,\n v => v === null\n)\n\n/**\n * `types.undefined` - The type of the value `undefined`\n */\nexport const undefinedType: ISimpleType<undefined> = new CoreType<\n undefined,\n undefined,\n undefined\n>(\"undefined\", TypeFlags.Undefined, v => v === undefined)\n\nconst _DatePrimitive = new CoreType<number | Date, number, Date>(\n \"Date\",\n TypeFlags.Date,\n v => typeof v === \"number\" || v instanceof Date,\n v => (v instanceof Date ? v : new Date(v))\n)\n_DatePrimitive.getSnapshot = function (node: AnyNode) {\n return node.storedValue.getTime()\n}\n\n/**\n * `types.Date` - Creates a type that can only contain a javascript Date value.\n *\n * Example:\n * ```ts\n * const LogLine = types.model({\n * timestamp: types.Date,\n * })\n *\n * LogLine.create({ timestamp: new Date() })\n * ```\n */\nexport const DatePrimitive: IType<number | Date, number, Date> = _DatePrimitive\n\n/**\n * @internal\n * @hidden\n */\nexport function getPrimitiveFactoryFromValue(value: any): ISimpleType<any> {\n switch (typeof value) {\n case \"string\":\n return string\n case \"number\":\n return number // In the future, isInteger(value) ? integer : number would be interesting, but would be too breaking for now\n case \"boolean\":\n return boolean\n case \"object\":\n if (value instanceof Date) {\n return DatePrimitive\n }\n }\n throw fail(\"Cannot determine primitive type from value \" + value)\n}\n\n/**\n * Returns if a given value represents a primitive type.\n *\n * @param type\n * @returns\n */\nexport function isPrimitiveType<\n IT extends\n | ISimpleType<string>\n | ISimpleType<number>\n | ISimpleType<boolean>\n | typeof DatePrimitive\n>(type: IT): type is IT {\n return (\n isType(type) &&\n (type.flags &\n (TypeFlags.String |\n TypeFlags.Number |\n TypeFlags.Integer |\n TypeFlags.Boolean |\n TypeFlags.Date)) >\n 0\n )\n}\n","import {\n type AnyObjectNode,\n type ISimpleType,\n type IValidationContext,\n type IValidationResult,\n type Primitives,\n SimpleType,\n TypeFlags,\n createScalarNode,\n isPrimitive,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\nimport { assertArg } from \"../../utils.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class Literal<T> extends SimpleType<T, T, T> {\n readonly value: T\n readonly flags = TypeFlags.Literal\n\n constructor(value: T) {\n super(JSON.stringify(value))\n this.value = value\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"]\n ): this[\"N\"] {\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n describe() {\n return JSON.stringify(this.value)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (isPrimitive(value) && value === this.value) {\n return typeCheckSuccess()\n }\n return typeCheckFailure(\n context,\n value,\n `Value is not a literal ${JSON.stringify(this.value)}`\n )\n }\n}\n\n/**\n * `types.literal` - The literal type will return a type that will match only the exact given type.\n * The given value must be a primitive, in order to be serialized to a snapshot correctly.\n * You can use literal to match exact strings for example the exact male or female string.\n *\n * Example:\n * ```ts\n * const Person = types.model({\n * name: types.string,\n * gender: types.union(types.literal('male'), types.literal('female'))\n * })\n * ```\n *\n * @param value The value to use in the strict equal check\n * @returns\n */\nexport function literal<S extends Primitives>(value: S): ISimpleType<S> {\n // check that the given value is a primitive\n assertArg(value, isPrimitive, \"primitive\", 1)\n\n return new Literal<S>(value)\n}\n\n/**\n * Returns if a given value represents a literal type.\n *\n * @param type\n * @returns\n */\nexport function isLiteralType<IT extends ISimpleType<any>>(\n type: IT\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Literal) > 0\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n assertIsType,\n getStateTreeNode,\n isStateTreeNode,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\nimport { assertIsFunction, assertIsString } from \"../../utils.ts\"\n\nclass Refinement<IT extends IAnyType> extends BaseType<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.Refinement\n }\n\n constructor(\n name: string,\n private readonly _subtype: IT,\n private readonly _predicate: (v: IT[\"CreationType\"]) => boolean,\n private readonly _message: (v: IT[\"CreationType\"]) => string\n ) {\n super(name)\n }\n\n describe() {\n return this.name\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n // create the child type\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as any\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._subtype.isAssignableFrom(type)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const subtypeErrors = this._subtype.validate(value, context)\n if (subtypeErrors.length > 0) {\n return subtypeErrors\n }\n\n const snapshot = isStateTreeNode(value)\n ? getStateTreeNode(value).snapshot\n : value\n\n if (!this._predicate(snapshot)) {\n return typeCheckFailure(context, value, this._message(value))\n }\n\n return typeCheckSuccess()\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this._subtype.reconcile(current, newValue, parent, subpath) as any\n }\n\n getSubTypes() {\n return this._subtype\n }\n}\n\nexport function refinement<IT extends IAnyType>(\n name: string,\n type: IT,\n predicate: (snapshot: IT[\"CreationType\"]) => boolean,\n message?: string | ((v: IT[\"CreationType\"]) => string)\n): IT\nexport function refinement<IT extends IAnyType>(\n type: IT,\n predicate: (snapshot: IT[\"CreationType\"]) => boolean,\n message?: string | ((v: IT[\"CreationType\"]) => string)\n): IT\n\n/**\n * `types.refinement` - Creates a type that is more specific than the base type, e.g. `types.refinement(types.string, value => value.length > 5)` to create a type of strings that can only be longer then 5.\n *\n * @param name\n * @param type\n * @param predicate\n * @returns\n */\nexport function refinement(...args: any[]): IAnyType {\n const name =\n typeof args[0] === \"string\"\n ? args.shift()\n : isType(args[0])\n ? args[0].name\n : null\n const type = args[0]\n const predicate = args[1]\n const message = args[2]\n ? args[2]\n : (_v: any) => \"Value does not respect the refinement predicate\"\n // ensures all parameters are correct\n assertIsType(type, [1, 2])\n assertIsString(name, 1)\n assertIsFunction(predicate, [2, 3])\n assertIsFunction(message, [3, 4])\n\n return new Refinement(name, type, predicate, message)\n}\n\n/**\n * Returns if a given value is a refinement type.\n *\n * @param type\n * @returns\n */\nexport function isRefinementType<IT extends IAnyType>(type: IT): type is IT {\n return (type.flags & TypeFlags.Refinement) > 0\n}\n","import {\n type ISimpleType,\n assertIsString,\n devMode,\n literal,\n union\n} from \"../../internal.ts\"\n\n/** @hidden */\nexport type UnionStringArray<T extends readonly string[]> = T[number]\n\n// strongly typed enumeration forms for plain and readonly string arrays (when passed directly to the function).\n// with these overloads, we get correct typing for native TS string enums when we use Object.values(Enum) as Enum[] as options.\n// these overloads also allow both mutable and immutable arrays, making types.enumeration<Enum>(Object.values(Enum)) possible.\n// the only case where this doesn't work is when passing to the function an array variable with a mutable type constraint;\n// for these cases, it will just fallback and assume the type is a generic string.\nexport function enumeration<T extends readonly string[]>(\n options: T\n): ISimpleType<UnionStringArray<T>>\nexport function enumeration<T extends string>(\n name: string,\n options: T[]\n): ISimpleType<UnionStringArray<T[]>>\n\n/**\n * `types.enumeration` - Can be used to create an string based enumeration.\n * (note: this methods is just sugar for a union of string literals)\n *\n * Example:\n * ```ts\n * const TrafficLight = types.model({\n * color: types.enumeration(\"Color\", [\"Red\", \"Orange\", \"Green\"])\n * })\n * ```\n *\n * @param name descriptive name of the enumeration (optional)\n * @param options possible values this enumeration can have\n * @returns\n */\nexport function enumeration(\n name: string | string[],\n options?: any\n): ISimpleType<string> {\n const realOptions: string[] = typeof name === \"string\" ? options! : name\n // check all options\n if (devMode()) {\n realOptions.forEach((option, i) => {\n assertIsString(option, i + 1)\n })\n }\n const type = union(...realOptions.map(option => literal(\"\" + option)))\n if (typeof name === \"string\") {\n type.name = name\n }\n return type\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type IAnyType,\n type IModelType,\n type IType,\n type IValidationContext,\n type IValidationError,\n type IValidationResult,\n type ModelCreationType2,\n type ModelInstanceType,\n type ModelProperties,\n type ModelSnapshotType2,\n ModelType,\n TypeFlags,\n type _NotCustomized,\n assertArg,\n assertIsType,\n devMode,\n fail,\n flattenTypeErrors,\n isPlainObject,\n isStateTreeNode,\n isType,\n isTypeCheckingEnabled,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport type ITypeDispatcher = (snapshot: any) => IAnyType\n\nexport interface UnionOptions {\n eager?: boolean\n dispatcher?: ITypeDispatcher\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class Union extends BaseType<any, any, any> {\n private readonly _dispatcher?: ITypeDispatcher\n private readonly _eager: boolean = true\n\n get flags() {\n let result: TypeFlags = TypeFlags.Union\n\n this._types.forEach(type => {\n result |= type.flags\n })\n\n return result\n }\n\n constructor(\n name: string,\n private readonly _types: IAnyType[],\n options?: UnionOptions\n ) {\n super(name)\n options = {\n eager: true,\n dispatcher: undefined,\n ...options\n }\n this._dispatcher = options.dispatcher\n if (!options.eager) {\n this._eager = false\n }\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._types.some(subType => subType.isAssignableFrom(type))\n }\n\n describe() {\n return (\n \"(\" + this._types.map(factory => factory.describe()).join(\" | \") + \")\"\n )\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const type = this.determineType(initialValue, undefined)\n if (!type) {\n throw fail(this.noMatchMessage(initialValue))\n } // can happen in prod builds\n return type.instantiate(parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const type = this.determineType(newValue, current.getReconciliationType())\n if (!type) {\n throw fail(this.noMatchMessage(newValue))\n } // can happen in prod builds\n return type.reconcile(current, newValue, parent, subpath)\n }\n\n private noMatchMessage(value: unknown): string {\n const discriminator =\n isPlainObject(value) && typeof (value as any).type === \"string\"\n ? ` for snapshot with type \"${(value as any).type}\"`\n : \"\"\n return `No matching type for union ${this.name}${discriminator}`\n }\n\n determineType(\n value: this[\"C\"] | this[\"T\"],\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // try the dispatcher, if defined\n if (this._dispatcher) {\n return this._dispatcher(value)\n }\n\n // fast path: when type checking is disabled, try quick structural matching first\n if (!isTypeCheckingEnabled()) {\n const quickMatch = this.tryQuickMatch(value, reconcileCurrentType)\n if (quickMatch) {\n return quickMatch\n }\n // for plain object snapshots that didn't match via quick path, try all types\n // with quick matching before falling back to full validation\n // (state tree nodes must go through full validation for type identity checks)\n if (isPlainObject(value) && !isStateTreeNode(value)) {\n for (const type of this._types) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n }\n }\n\n // find the most accomodating type\n // if we are using reconciliation try the current node type first (fix for #1045)\n if (reconcileCurrentType) {\n if (reconcileCurrentType.is(value)) {\n return reconcileCurrentType\n }\n return this._types\n .filter(t => t !== reconcileCurrentType)\n .find(type => type.is(value))\n } else {\n return this._types.find(type => type.is(value))\n }\n }\n\n private tryQuickMatch(\n value: any,\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // state tree nodes need full type compatibility checking\n // (e.g., A.is(B.create()) must return false even if snapshots are compatible)\n if (isStateTreeNode(value)) {\n return undefined\n }\n\n // for non-object values, try primitive matching\n if (!isPlainObject(value)) {\n return this.tryMatchPrimitive(value)\n }\n\n // for objects, try structural matching against model types\n const typesToCheck = reconcileCurrentType\n ? [\n reconcileCurrentType,\n ...this._types.filter(t => t !== reconcileCurrentType)\n ]\n : this._types\n\n for (const type of typesToCheck) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n return undefined\n }\n\n private tryMatchPrimitive(value: any): IAnyType | undefined {\n const valueType = typeof value\n for (const type of this._types) {\n const flags = type.flags\n if (\n (valueType === \"string\" && flags & TypeFlags.String) ||\n (valueType === \"number\" &&\n flags &\n (TypeFlags.Number |\n TypeFlags.Integer |\n TypeFlags.Float |\n TypeFlags.Finite)) ||\n (valueType === \"boolean\" && flags & TypeFlags.Boolean) ||\n (value === null && flags & TypeFlags.Null) ||\n (value === undefined && flags & TypeFlags.Undefined)\n ) {\n return type\n }\n // for literals, check exact value match\n if (flags & TypeFlags.Literal) {\n if (type.is(value)) {\n return type\n }\n }\n }\n return undefined\n }\n\n private snapshotLooksLikeType(value: any, type: IAnyType): boolean {\n // for model types, check if snapshot has all the required property keys\n // and that any literal-typed properties match exactly\n if (type instanceof ModelType) {\n const props = type.properties\n // use cached propertyNames from ModelType instead of Object.keys()\n for (const key of type.propertyNames) {\n const propType = props[key]!\n const isOptional = propType.flags & TypeFlags.Optional\n const propValue = value[key]\n\n // check required properties exist and are not undefined\n // (unless the type accepts undefined, which Optional types do)\n if (!isOptional) {\n if (!(key in value) || propValue === undefined) {\n return false\n }\n }\n\n // for literal types, verify the value matches exactly\n // this is critical for discriminated unions\n if (propType.flags & TypeFlags.Literal) {\n if (!propType.is(propValue)) {\n return false\n }\n }\n }\n return true\n }\n return false\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this._dispatcher) {\n return this._dispatcher(value).validate(value, context)\n }\n\n // for plain-object snapshots, prefer union members whose literal-typed\n // discriminator properties match the value (e.g. {type: \"MsaView\"})\n // so error output is scoped to the intended branch instead of every member\n const candidates =\n isPlainObject(value) && !isStateTreeNode(value)\n ? this._types.filter(t => this.snapshotLooksLikeType(value, t))\n : []\n const typesToValidate = candidates.length > 0 ? candidates : this._types\n\n const allErrors: IValidationError[][] = []\n let applicableTypes = 0\n for (const type of typesToValidate) {\n const errors = type.validate(value, context)\n if (errors.length === 0) {\n if (this._eager) {\n return typeCheckSuccess()\n } else {\n applicableTypes++\n }\n } else {\n allErrors.push(errors)\n }\n }\n\n if (applicableTypes === 1) {\n return typeCheckSuccess()\n }\n return typeCheckFailure(\n context,\n value,\n \"No type is applicable for the union\"\n ).concat(flattenTypeErrors(allErrors))\n }\n\n getSubTypes() {\n return this._types\n }\n}\n\n/**\n * Transform _NotCustomized | _NotCustomized... to _NotCustomized, _NotCustomized | A | B to A | B\n * @hidden\n */\nexport type _CustomCSProcessor<T> =\n Exclude<T, _NotCustomized> extends never\n ? _NotCustomized\n : Exclude<T, _NotCustomized>\n\n/** @hidden */\nexport interface ITypeUnion<C, S, T> extends IType<\n _CustomCSProcessor<C>,\n _CustomCSProcessor<S>,\n T\n> {}\n\n// generated with packages/mobx-state-tree/scripts/generate-union-types.js\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB,\n OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G:\n IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE,\n FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD,\n OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB |\n CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB | CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD |\n TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD | TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC |\n SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB,\n TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC | SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD |\n CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n\n// manually written\nexport function union(...types: IAnyType[]): IAnyType\nexport function union(\n dispatchOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType\n/**\n * `types.union` - Create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function of the form `(snapshot) => Type`.\n *\n * @param optionsOrType\n * @param otherTypes\n * @returns\n */\nexport function union(\n optionsOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType {\n const options = isType(optionsOrType) ? undefined : optionsOrType\n const types = isType(optionsOrType)\n ? [optionsOrType, ...otherTypes]\n : otherTypes\n const name = \"(\" + types.map(type => type.name).join(\" | \") + \")\"\n\n // check all options\n if (devMode()) {\n if (options) {\n assertArg(\n options,\n o => isPlainObject(o),\n \"object { eager?: boolean, dispatcher?: Function }\",\n 1\n )\n }\n types.forEach((type, i) => {\n assertIsType(type, options ? i + 2 : i + 1)\n })\n }\n return new Union(name, types, options)\n}\n\n/**\n * Returns if a given value represents a union type.\n *\n * @param type\n * @returns\n */\nexport function isUnionType<IT extends IAnyType>(type: IT): type is IT {\n return (type.flags & TypeFlags.Union) > 0\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractCSTWithSTN,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n assertIsType,\n devMode,\n fail,\n isStateTreeNode,\n isType,\n typeCheckSuccess,\n typecheckInternal\n} from \"../../internal.ts\"\n\ntype IFunctionReturn<T> = () => T\n\ntype IOptionalValue<C, T> = C | IFunctionReturn<C | T>\n\n/** @hidden */\nexport type ValidOptionalValue = string | boolean | number | null | undefined\n\n/** @hidden */\nexport type ValidOptionalValues = [ValidOptionalValue, ...ValidOptionalValue[]]\n\n/**\n * @hidden\n * @internal\n */\nexport class OptionalValue<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n> extends BaseType<\n IT[\"CreationType\"] | OptionalVals[number],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n> {\n get flags() {\n return this._subtype.flags | TypeFlags.Optional\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _defaultValue: IOptionalValue<\n IT[\"CreationType\"],\n IT[\"Type\"]\n >,\n readonly optionalValues: OptionalVals\n ) {\n super(_subtype.name)\n }\n\n describe() {\n return this._subtype.describe() + \"?\"\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n if (this.optionalValues.indexOf(initialValue) >= 0) {\n const defaultInstanceOrSnapshot = this.getDefaultInstanceOrSnapshot()\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n defaultInstanceOrSnapshot\n )\n }\n return this._subtype.instantiate(parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this._subtype.reconcile(\n current,\n this.optionalValues.indexOf(newValue) < 0 && this._subtype.is(newValue)\n ? newValue\n : this.getDefaultInstanceOrSnapshot(),\n parent,\n subpath\n )\n }\n\n getDefaultInstanceOrSnapshot(): this[\"C\"] | this[\"T\"] {\n const defaultInstanceOrSnapshot =\n typeof this._defaultValue === \"function\"\n ? (this._defaultValue as IFunctionReturn<this[\"C\"] | this[\"T\"]>)()\n : this._defaultValue\n\n // while static values are already snapshots and checked on types.optional\n // generator functions must always be rechecked just in case\n if (typeof this._defaultValue === \"function\") {\n typecheckInternal(this, defaultInstanceOrSnapshot)\n }\n\n return defaultInstanceOrSnapshot\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n // defaulted values can be skipped\n if (this.optionalValues.indexOf(value) >= 0) {\n return typeCheckSuccess()\n }\n // bounce validation to the sub-type\n return this._subtype.validate(value, context)\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._subtype.isAssignableFrom(type)\n }\n\n getSubTypes() {\n return this._subtype\n }\n}\n\n/** @hidden */\nexport type OptionalDefaultValueOrFunction<IT extends IAnyType> =\n | IT[\"CreationType\"]\n | IT[\"SnapshotType\"]\n | (() => ExtractCSTWithSTN<IT>)\n\n/** @hidden */\nexport interface IOptionalIType<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n> extends IType<\n IT[\"CreationType\"] | OptionalVals[number],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"]\n> {}\n\nfunction checkOptionalPreconditions<IT extends IAnyType>(\n type: IAnyType,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>\n) {\n // make sure we never pass direct instances\n if (\n typeof defaultValueOrFunction !== \"function\" &&\n isStateTreeNode(defaultValueOrFunction)\n ) {\n throw fail(\n \"default value cannot be an instance, pass a snapshot or a function that creates an instance/snapshot instead\"\n )\n }\n assertIsType(type, 1)\n if (devMode()) {\n // we only check default values if they are passed directly\n // if they are generator functions they will be checked once they are generated\n // we don't check generator function results here to avoid generating a node just for type-checking purposes\n // which might generate side-effects\n if (typeof defaultValueOrFunction !== \"function\") {\n typecheckInternal(type, defaultValueOrFunction)\n }\n }\n}\n\nexport function optional<IT extends IAnyType>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>\n): IOptionalIType<IT, [undefined]>\nexport function optional<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>,\n optionalValues: OptionalVals\n): IOptionalIType<IT, OptionalVals>\n/**\n * `types.optional` - Can be used to create a property with a default value.\n *\n * Depending on the third argument (`optionalValues`) there are two ways of operation:\n * - If the argument is not provided, then if a value is not provided in the snapshot (`undefined` or missing),\n * it will default to the provided `defaultValue`\n * - If the argument is provided, then if the value in the snapshot matches one of the optional values inside the array then it will\n * default to the provided `defaultValue`. Additionally, if one of the optional values inside the array is `undefined` then a missing\n * property is also valid.\n *\n * Note that it is also possible to include values of the same type as the intended subtype as optional values,\n * in this case the optional value will be transformed into the `defaultValue` (e.g. `types.optional(types.string, \"unnamed\", [undefined, \"\"])`\n * will transform the snapshot values `undefined` (and therefore missing) and empty strings into the string `\"unnamed\"` when it gets\n * instantiated).\n *\n * If `defaultValue` is a function, the function will be invoked for every new instance.\n * Applying a snapshot in which the optional value is one of the optional values (or `undefined`/_not_ present if none are provided) causes the\n * value to be reset.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n * title: types.string,\n * subtitle1: types.optional(types.string, \"\", [null]),\n * subtitle2: types.optional(types.string, \"\", [null, undefined]),\n * done: types.optional(types.boolean, false),\n * created: types.optional(types.Date, () => new Date()),\n * })\n *\n * // if done is missing / undefined it will become false\n * // if created is missing / undefined it will get a freshly generated timestamp\n * // if subtitle1 is null it will default to \"\", but it cannot be missing or undefined\n * // if subtitle2 is null or undefined it will default to \"\"; since it can be undefined it can also be missing\n * const todo = Todo.create({ title: \"Get coffee\", subtitle1: null })\n * ```\n *\n * @param type\n * @param defaultValueOrFunction\n * @param optionalValues an optional array with zero or more primitive values (string, number, boolean, null or undefined)\n * that will be converted into the default. `[ undefined ]` is assumed when none is provided\n * @returns\n */\nexport function optional<\n IT extends IAnyType,\n OptionalVals extends ValidOptionalValues\n>(\n type: IT,\n defaultValueOrFunction: OptionalDefaultValueOrFunction<IT>,\n optionalValues?: OptionalVals\n): IOptionalIType<IT, OptionalVals> {\n checkOptionalPreconditions(type, defaultValueOrFunction)\n\n return new OptionalValue(\n type,\n defaultValueOrFunction,\n optionalValues ? optionalValues : undefinedAsOptionalValues\n )\n}\n\nconst undefinedAsOptionalValues: [undefined] = [undefined]\n\n/**\n * Returns if a value represents an optional type.\n *\n * @template IT\n * @param type\n * @returns\n */\nexport function isOptionalType<IT extends IAnyType>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Optional) > 0\n}\n","import {\n type IAnyType,\n type IType,\n assertIsType,\n nullType,\n optional,\n undefinedType,\n union\n} from \"../../internal.ts\"\n\nconst optionalUndefinedType = optional(undefinedType, undefined)\nconst optionalNullType = optional(nullType, null)\n\n/** @hidden */\nexport interface IMaybeIType<IT extends IAnyType, C, O> extends IType<\n IT[\"CreationType\"] | C,\n IT[\"SnapshotType\"] | O,\n IT[\"TypeWithoutSTN\"] | O\n> {}\n\n/** @hidden */\nexport interface IMaybe<IT extends IAnyType> extends IMaybeIType<\n IT,\n undefined,\n undefined\n> {}\n\n/** @hidden */\nexport interface IMaybeNull<IT extends IAnyType> extends IMaybeIType<\n IT,\n null | undefined,\n null\n> {}\n\n/**\n * `types.maybe` - Maybe will make a type nullable, and also optional.\n * The value `undefined` will be used to represent nullability.\n *\n * @param type\n * @returns\n */\nexport function maybe<IT extends IAnyType>(type: IT): IMaybe<IT> {\n assertIsType(type, 1)\n\n return union(type, optionalUndefinedType)\n}\n\n/**\n * `types.maybeNull` - Maybe will make a type nullable, and also optional.\n * The value `null` will be used to represent no value.\n *\n * @param type\n * @returns\n */\nexport function maybeNull<IT extends IAnyType>(type: IT): IMaybeNull<IT> {\n assertIsType(type, 1)\n\n return union(type, optionalNullType)\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IValidationContext,\n type IValidationResult,\n TypeFlags,\n cannotDetermineSubtype,\n devMode,\n fail,\n isType,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nclass Late<IT extends IAnyType> extends BaseType<\n IT[\"CreationType\"],\n IT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT>\n> {\n private _subType?: IT\n\n get flags() {\n return (this._subType ? this._subType.flags : 0) | TypeFlags.Late\n }\n\n getSubType(mustSucceed: true): IT\n getSubType(mustSucceed: false): IT | undefined\n getSubType(mustSucceed: boolean): IT | undefined {\n if (!this._subType) {\n let t = undefined\n try {\n t = this._definition()\n } catch (e) {\n if (\n e instanceof ReferenceError\n ) // can happen in strict ES5 code when a definition is self refering\n {\n t = undefined\n } else {\n throw e\n }\n }\n if (mustSucceed && t === undefined) {\n throw fail(\n \"Late type seems to be used too early, the definition (still) returns undefined\"\n )\n }\n if (t) {\n if (devMode() && !isType(t)) {\n throw fail(\n \"Failed to determine subtype, make sure types.late returns a type definition.\"\n )\n }\n this._subType = t\n }\n }\n return this._subType\n }\n\n constructor(\n name: string,\n private readonly _definition: () => IT\n ) {\n super(name)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n return this.getSubType(true).instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as any\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n return this.getSubType(true).reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as any\n }\n\n describe() {\n const t = this.getSubType(false)\n return t ? t.name : \"<uknown late type>\"\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n const t = this.getSubType(false)\n if (!t) {\n // See #916; the variable the definition closure is pointing to wasn't defined yet, so can't be evaluted yet here\n return typeCheckSuccess()\n }\n return t.validate(value, context)\n }\n\n isAssignableFrom(type: IAnyType) {\n const t = this.getSubType(false)\n return t ? t.isAssignableFrom(type) : false\n }\n\n getSubTypes() {\n const subtype = this.getSubType(false)\n return subtype ? subtype : cannotDetermineSubtype\n }\n}\n\nexport function late<T extends IAnyType>(type: () => T): T\nexport function late<T extends IAnyType>(name: string, type: () => T): T\n/**\n * `types.late` - Defines a type that gets implemented later. This is useful when you have to deal with circular dependencies.\n * Please notice that when defining circular dependencies TypeScript isn't smart enough to inference them.\n *\n * Example:\n * ```ts\n * // TypeScript isn't smart enough to infer self referencing types.\n * const Node = types.model({\n * children: types.array(types.late((): IAnyModelType => Node)) // then typecast each array element to Instance<typeof Node>\n * })\n * ```\n *\n * @param name The name to use for the type that will be returned.\n * @param type A function that returns the type that will be defined.\n * @returns\n */\nexport function late(nameOrType: any, maybeType?: () => IAnyType): IAnyType {\n const name =\n typeof nameOrType === \"string\"\n ? nameOrType\n : `late(${nameOrType.toString()})`\n const type = typeof nameOrType === \"string\" ? maybeType : nameOrType\n // checks that the type is actually a late type\n if (devMode()) {\n if (!(typeof type === \"function\" && type.length === 0)) {\n throw fail(\n \"Invalid late type, expected a function with zero arguments that returns a type, got: \" +\n type\n )\n }\n }\n return new Late(name, type)\n}\n\n/**\n * Returns if a given value represents a late type.\n *\n * @param type\n * @returns\n */\nexport function isLateType<IT extends IAnyType>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Late) > 0\n}\n","import { type IObservableArray, action, observable, when } from \"mobx\"\n\nimport {\n type AnyNode,\n type AnyObjectNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n deepFreeze,\n isSerializable,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\ninterface LazyOptions<T extends IType<any, any, any>, U> {\n loadType: () => Promise<T>\n shouldLoadPredicate: (parent: U) => boolean\n}\n\nexport function lazy<T extends IType<any, any, any>, U>(\n name: string,\n options: LazyOptions<T, U>\n): T {\n // TODO: fix this unknown casting to be stricter\n return new Lazy(name, options) as unknown as T\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class Lazy<T extends IType<any, any, any>, U> extends SimpleType<\n T,\n T,\n T\n> {\n flags = TypeFlags.Lazy\n\n private loadedType: T | null = null\n private pendingNodeList: IObservableArray<AnyNode> = observable.array()\n\n constructor(\n name: string,\n private readonly options: LazyOptions<T, U>\n ) {\n super(name)\n\n when(\n () =>\n this.pendingNodeList.length > 0 &&\n this.pendingNodeList.some(\n node =>\n node.isAlive &&\n this.options.shouldLoadPredicate(\n node.parent ? node.parent.value : null\n )\n ),\n () => {\n this.options.loadType().then(\n action((type: T) => {\n this.loadedType = type\n this.pendingNodeList.forEach(node => {\n if (!node.parent) {\n return\n }\n if (!this.loadedType) {\n return\n }\n\n node.parent.applyPatches([\n {\n op: \"replace\",\n path: `/${node.subpath}`,\n value: node.snapshot\n }\n ])\n })\n })\n )\n }\n )\n }\n\n describe() {\n return `<lazy ${this.name}>`\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n value: this[\"C\"]\n ): this[\"N\"] {\n if (this.loadedType) {\n return this.loadedType.instantiate(\n parent,\n subpath,\n environment,\n value\n ) as this[\"N\"]\n }\n\n const node = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n deepFreeze(value)\n )\n this.pendingNodeList.push(node)\n\n when(\n () => !node.isAlive,\n () => this.pendingNodeList.splice(this.pendingNodeList.indexOf(node), 1)\n )\n\n return node\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this.loadedType) {\n return this.loadedType.validate(value, context)\n }\n if (!isSerializable(value)) {\n return typeCheckFailure(\n context,\n value,\n \"Value is not serializable and cannot be lazy\"\n )\n }\n return typeCheckSuccess()\n }\n\n reconcile(\n current: this[\"N\"],\n value: T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (this.loadedType) {\n current.die()\n return this.loadedType.instantiate(\n parent,\n subpath,\n parent.environment,\n value\n ) as this[\"N\"]\n }\n return super.reconcile(current, value, parent, subpath)\n }\n}\n","import {\n type AnyObjectNode,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n deepFreeze,\n isSerializable,\n isType,\n optional,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\n/**\n * @internal\n * @hidden\n */\nexport class Frozen<T> extends SimpleType<T, T, T> {\n flags = TypeFlags.Frozen\n\n constructor(private subType?: IAnyType) {\n super(subType ? `frozen(${subType.name})` : \"frozen\")\n }\n\n describe() {\n return \"<any immutable value>\"\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n value: this[\"C\"]\n ): this[\"N\"] {\n // create the node\n return createScalarNode(\n this,\n parent,\n subpath,\n environment,\n deepFreeze(value)\n )\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (!isSerializable(value)) {\n return typeCheckFailure(\n context,\n value,\n \"Value is not serializable and cannot be frozen\"\n )\n }\n if (this.subType) {\n return this.subType.validate(value, context)\n }\n return typeCheckSuccess()\n }\n}\n\nconst untypedFrozenInstance = new Frozen()\n\nexport function frozen<C>(subType: IType<C, any, any>): IType<C, C, C>\nexport function frozen<T>(defaultValue: T): IType<T | undefined | null, T, T>\nexport function frozen<T = any>(): IType<T, T, T> // do not assume undefined by default, let the user specify it if needed\n/**\n * `types.frozen` - Frozen can be used to store any value that is serializable in itself (that is valid JSON).\n * Frozen values need to be immutable or treated as if immutable. They need be serializable as well.\n * Values stored in frozen will snapshotted as-is by MST, and internal changes will not be tracked.\n *\n * This is useful to store complex, but immutable values like vectors etc. It can form a powerful bridge to parts of your application that should be immutable, or that assume data to be immutable.\n *\n * Note: if you want to store free-form state that is mutable, or not serializeable, consider using volatile state instead.\n *\n * Frozen properties can be defined in three different ways\n * 1. `types.frozen(SubType)` - provide a valid MST type and frozen will check if the provided data conforms the snapshot for that type\n * 2. `types.frozen({ someDefaultValue: true})` - provide a primitive value, object or array, and MST will infer the type from that object, and also make it the default value for the field\n * 3. `types.frozen<TypeScriptType>()` - provide a typescript type, to help in strongly typing the field (design time only)\n *\n * Example:\n * ```ts\n * const GameCharacter = types.model({\n * name: string,\n * location: types.frozen({ x: 0, y: 0})\n * })\n *\n * const hero = GameCharacter.create({\n * name: \"Mario\",\n * location: { x: 7, y: 4 }\n * })\n *\n * hero.location = { x: 10, y: 2 } // OK\n * hero.location.x = 7 // Not ok!\n * ```\n *\n * ```ts\n * type Point = { x: number, y: number }\n * const Mouse = types.model({\n * loc: types.frozen<Point>()\n * })\n * ```\n *\n * @param defaultValueOrType\n * @returns\n */\nexport function frozen(arg?: any): any {\n if (arguments.length === 0) {\n return untypedFrozenInstance\n } else if (isType(arg)) {\n return new Frozen(arg)\n } else {\n return optional(untypedFrozenInstance, arg)\n }\n}\n\n/**\n * Returns if a given value represents a frozen type.\n *\n * @param type\n * @returns\n */\nexport function isFrozenType<IT extends IType<T | any, T, T>, T = any>(\n type: IT\n): type is IT {\n return isType(type) && (type.flags & TypeFlags.Frozen) > 0\n}\n","import {\n type AnyNode,\n type AnyObjectNode,\n Hook,\n type IAnyComplexType,\n type IAnyStateTreeNode,\n type IAnyType,\n type IDisposer,\n type IMaybe,\n type IStateTreeNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n NodeLifeCycle,\n type ReferenceIdentifier,\n SimpleType,\n TypeFlags,\n applyPatch,\n assertIsType,\n createScalarNode,\n devMode,\n fail,\n getIdentifier,\n getStateTreeNode,\n isModelType,\n isStateTreeNode,\n isValidIdentifier,\n maybe,\n normalizeIdentifier,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport type OnReferenceInvalidatedEvent<STN extends IAnyStateTreeNode> = {\n parent: IAnyStateTreeNode\n invalidTarget: STN | undefined\n invalidId: ReferenceIdentifier\n replaceRef: (newRef: STN | null | undefined) => void\n removeRef: () => void\n cause: \"detach\" | \"destroy\" | \"invalidSnapshotReference\"\n}\n\nexport type OnReferenceInvalidated<STN extends IAnyStateTreeNode> = (\n event: OnReferenceInvalidatedEvent<STN>\n) => void\n\nfunction getInvalidationCause(hook: Hook): \"detach\" | \"destroy\" | undefined {\n switch (hook) {\n case Hook.beforeDestroy:\n return \"destroy\"\n case Hook.beforeDetach:\n return \"detach\"\n default:\n return undefined\n }\n}\n\n/** @hidden */\nexport type ReferenceT<IT extends IAnyType> = IT[\"TypeWithoutSTN\"] &\n IStateTreeNode<IReferenceType<IT>>\n\nclass StoredReference<IT extends IAnyType> {\n readonly identifier!: ReferenceIdentifier\n node!: AnyNode\n\n private resolvedReference?: {\n node: AnyObjectNode\n lastCacheModification: string\n }\n\n constructor(\n value: ReferenceT<IT> | ReferenceIdentifier,\n private readonly targetType: IT\n ) {\n if (isValidIdentifier(value)) {\n this.identifier = value\n } else if (isStateTreeNode(value)) {\n const targetNode = getStateTreeNode(value)\n if (!targetNode.identifierAttribute) {\n throw fail(\n `Can only store references with a defined identifier attribute.`\n )\n }\n const id = targetNode.unnormalizedIdentifier\n if (id === null || id === undefined) {\n throw fail(\n `Can only store references to tree nodes with a defined identifier.`\n )\n }\n this.identifier = id\n } else {\n throw fail(\n `Can only store references to tree nodes or identifiers, got: '${value}'`\n )\n }\n }\n\n private updateResolvedReference(node: AnyNode) {\n const normalizedId = normalizeIdentifier(this.identifier)\n const root = node.root\n const lastCacheModification =\n root.identifierCache!.getLastCacheModificationPerId(normalizedId)\n if (\n !this.resolvedReference ||\n this.resolvedReference.lastCacheModification !== lastCacheModification\n ) {\n const { targetType } = this\n // reference was initialized with the identifier of the target\n\n const target = root.identifierCache!.resolve(targetType, normalizedId)\n\n if (!target) {\n throw new InvalidReferenceError(\n `[mobx-state-tree] Failed to resolve reference '${this.identifier}' to type '${this.targetType.name}' (from node: ${node.path})`\n )\n }\n\n this.resolvedReference = {\n node: target!,\n lastCacheModification: lastCacheModification\n }\n }\n }\n\n get resolvedValue(): ReferenceT<IT> {\n this.updateResolvedReference(this.node)\n return this.resolvedReference!.node.value\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class InvalidReferenceError extends Error {\n constructor(m: string) {\n super(m)\n\n Object.setPrototypeOf(this, InvalidReferenceError.prototype)\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport abstract class BaseReferenceType<\n IT extends IAnyComplexType\n> extends SimpleType<\n ReferenceIdentifier,\n ReferenceIdentifier,\n IT[\"TypeWithoutSTN\"]\n> {\n readonly flags = TypeFlags.Reference\n\n constructor(\n protected readonly targetType: IT,\n private readonly onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(`reference(${targetType.name})`)\n }\n\n describe() {\n return this.name\n }\n\n isAssignableFrom(type: IAnyType): boolean {\n return this.targetType.isAssignableFrom(type)\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n return isValidIdentifier(value)\n ? typeCheckSuccess()\n : typeCheckFailure(\n context,\n value,\n \"Value is not a valid identifier, which is a string or a number\"\n )\n }\n\n private fireInvalidated(\n cause: \"detach\" | \"destroy\" | \"invalidSnapshotReference\",\n storedRefNode: this[\"N\"],\n referenceId: ReferenceIdentifier,\n refTargetNode: AnyObjectNode | null\n ) {\n // to actually invalidate a reference we need an alive parent,\n // since it is a scalar value (immutable-ish) and we need to change it\n // from the parent\n const storedRefParentNode = storedRefNode.parent\n if (!storedRefParentNode || !storedRefParentNode.isAlive) {\n return\n }\n const storedRefParentValue = storedRefParentNode.storedValue\n if (!storedRefParentValue) {\n return\n }\n this.onInvalidated!({\n cause,\n parent: storedRefParentValue,\n invalidTarget: refTargetNode ? refTargetNode.storedValue : undefined,\n invalidId: referenceId,\n replaceRef(newRef) {\n applyPatch(storedRefNode.root.storedValue, {\n op: \"replace\",\n value: newRef,\n path: storedRefNode.path\n })\n },\n removeRef() {\n if (isModelType(storedRefParentNode.type)) {\n this.replaceRef(undefined as any)\n } else {\n applyPatch(storedRefNode.root.storedValue, {\n op: \"remove\",\n path: storedRefNode.path\n })\n }\n }\n })\n }\n\n private addTargetNodeWatcher(\n storedRefNode: this[\"N\"],\n referenceId: ReferenceIdentifier\n ): IDisposer | undefined {\n // this will make sure the target node becomes created\n const refTargetValue = this.getValue(storedRefNode)\n if (!refTargetValue) {\n return undefined\n }\n const refTargetNode = getStateTreeNode(refTargetValue)\n\n const hookHandler = (_: AnyNode, refTargetNodeHook: Hook) => {\n const cause = getInvalidationCause(refTargetNodeHook)\n if (!cause) {\n return\n }\n this.fireInvalidated(cause, storedRefNode, referenceId, refTargetNode)\n }\n\n const refTargetDetachHookDisposer = refTargetNode.registerHook(\n Hook.beforeDetach,\n hookHandler\n )\n const refTargetDestroyHookDisposer = refTargetNode.registerHook(\n Hook.beforeDestroy,\n hookHandler\n )\n\n return () => {\n refTargetDetachHookDisposer()\n refTargetDestroyHookDisposer()\n }\n }\n\n protected watchTargetNodeForInvalidations(\n storedRefNode: this[\"N\"],\n identifier: ReferenceIdentifier,\n customGetSet: ReferenceOptionsGetSet<IT> | undefined\n ) {\n if (!this.onInvalidated) {\n return\n }\n\n let onRefTargetDestroyedHookDisposer: IDisposer | undefined\n\n // get rid of the watcher hook when the stored ref node is destroyed\n // detached is ignored since scalar nodes (where the reference resides) cannot be detached\n storedRefNode.registerHook(Hook.beforeDestroy, () => {\n if (onRefTargetDestroyedHookDisposer) {\n onRefTargetDestroyedHookDisposer()\n }\n })\n\n const startWatching = (sync: boolean) => {\n // re-create hook in case the stored ref gets reattached\n if (onRefTargetDestroyedHookDisposer) {\n onRefTargetDestroyedHookDisposer()\n }\n\n // make sure the target node is actually there and initialized\n const storedRefParentNode = storedRefNode.parent\n const storedRefParentValue =\n storedRefParentNode && storedRefParentNode.storedValue\n if (\n storedRefParentNode &&\n storedRefParentNode.isAlive &&\n storedRefParentValue\n ) {\n let refTargetNodeExists: boolean\n if (customGetSet) {\n refTargetNodeExists = !!customGetSet.get(\n identifier,\n storedRefParentValue\n )\n } else {\n refTargetNodeExists = storedRefNode.root.identifierCache!.has(\n this.targetType,\n normalizeIdentifier(identifier)\n )\n }\n\n if (!refTargetNodeExists) {\n // we cannot change the reference in sync mode\n // since we are in the middle of a reconciliation/instantiation and the change would be overwritten\n // for those cases just let the wrong reference be assigned and fail upon usage\n // (like current references do)\n // this means that effectively this code will only run when it is created from a snapshot\n if (!sync) {\n this.fireInvalidated(\n \"invalidSnapshotReference\",\n storedRefNode,\n identifier,\n null\n )\n }\n } else {\n onRefTargetDestroyedHookDisposer = this.addTargetNodeWatcher(\n storedRefNode,\n identifier\n )\n }\n }\n }\n\n if (storedRefNode.state === NodeLifeCycle.FINALIZED) {\n // already attached, so the whole tree is ready\n startWatching(true)\n } else {\n if (!storedRefNode.isRoot) {\n // start watching once the whole tree is ready\n storedRefNode.root.registerHook(Hook.afterCreationFinalization, () => {\n // make sure to attach it so it can start listening\n if (storedRefNode.parent) {\n storedRefNode.parent.createObservableInstanceIfNeeded()\n }\n })\n }\n // start watching once the node is attached somewhere / parent changes\n storedRefNode.registerHook(Hook.afterAttach, () => {\n startWatching(false)\n })\n }\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierReferenceType<\n IT extends IAnyComplexType\n> extends BaseReferenceType<IT> {\n constructor(\n targetType: IT,\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(targetType, onInvalidated)\n }\n\n getValue(storedRefNode: this[\"N\"]) {\n if (!storedRefNode.isAlive) {\n return undefined\n }\n const storedRef: StoredReference<IT> = storedRefNode.storedValue\n return storedRef.resolvedValue as any\n }\n\n getSnapshot(storedRefNode: this[\"N\"]) {\n const ref: StoredReference<IT> = storedRefNode.storedValue\n return ref.identifier\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const identifier = isStateTreeNode(initialValue)\n ? getIdentifier(initialValue)!\n : initialValue\n const storedRef = new StoredReference(initialValue, this.targetType as any)\n const storedRefNode: this[\"N\"] = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n storedRef as any\n )\n storedRef.node = storedRefNode\n this.watchTargetNodeForInvalidations(\n storedRefNode,\n identifier as string,\n undefined\n )\n return storedRefNode\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (!current.isDetaching && current.type === this) {\n const compareByValue = isStateTreeNode(newValue)\n const ref: StoredReference<IT> = current.storedValue\n if (\n (!compareByValue && ref.identifier === newValue) ||\n (compareByValue && ref.resolvedValue === newValue)\n ) {\n current.setParent(parent, subpath)\n return current\n }\n }\n const newNode = this.instantiate(parent, subpath, undefined, newValue)\n current.die() // noop if detaching\n return newNode\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class CustomReferenceType<\n IT extends IAnyComplexType\n> extends BaseReferenceType<IT> {\n constructor(\n targetType: IT,\n private readonly options: ReferenceOptionsGetSet<IT>,\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n ) {\n super(targetType, onInvalidated)\n }\n\n getValue(storedRefNode: this[\"N\"]) {\n if (!storedRefNode.isAlive) {\n return undefined as any\n }\n const referencedNode = this.options.get(\n storedRefNode.storedValue,\n storedRefNode.parent ? storedRefNode.parent.storedValue : null\n )\n return referencedNode\n }\n\n getSnapshot(storedRefNode: this[\"N\"]) {\n return storedRefNode.storedValue\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n newValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const identifier = isStateTreeNode(newValue)\n ? this.options.set(newValue as any, parent ? parent.storedValue : null)\n : newValue\n const storedRefNode: this[\"N\"] = createScalarNode(\n this,\n parent,\n subpath,\n environment,\n identifier as any\n )\n this.watchTargetNodeForInvalidations(\n storedRefNode,\n identifier as string,\n this.options\n )\n return storedRefNode\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const newIdentifier = isStateTreeNode(newValue)\n ? this.options.set(newValue as any, current ? current.storedValue : null)\n : newValue\n if (\n !current.isDetaching &&\n current.type === this &&\n current.storedValue === newIdentifier\n ) {\n current.setParent(parent, subpath)\n return current\n }\n const newNode = this.instantiate(parent, subpath, undefined, newIdentifier)\n current.die() // noop if detaching\n return newNode\n }\n}\n\nexport interface ReferenceOptionsGetSet<IT extends IAnyComplexType> {\n get(\n identifier: ReferenceIdentifier,\n parent: IAnyStateTreeNode | null\n ): ReferenceT<IT>\n set(\n value: ReferenceT<IT>,\n parent: IAnyStateTreeNode | null\n ): ReferenceIdentifier\n}\n\nexport interface ReferenceOptionsOnInvalidated<IT extends IAnyComplexType> {\n // called when the current reference is about to become invalid\n onInvalidated: OnReferenceInvalidated<ReferenceT<IT>>\n}\n\nexport type ReferenceOptions<IT extends IAnyComplexType> =\n | ReferenceOptionsGetSet<IT>\n | ReferenceOptionsOnInvalidated<IT>\n | (ReferenceOptionsGetSet<IT> & ReferenceOptionsOnInvalidated<IT>)\n\n/** @hidden */\nexport interface IReferenceType<IT extends IAnyComplexType> extends IType<\n ReferenceIdentifier,\n ReferenceIdentifier,\n IT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * `types.reference` - Creates a reference to another type, which should have defined an identifier.\n * See also the [reference and identifiers](https://github.com/mobxjs/mobx-state-tree#references-and-identifiers) section.\n */\nexport function reference<IT extends IAnyComplexType>(\n subType: IT,\n options?: ReferenceOptions<IT>\n): IReferenceType<IT> {\n assertIsType(subType, 1)\n if (devMode()) {\n if (options && typeof options === \"string\") {\n // istanbul ignore next\n throw fail(\n \"References with base path are no longer supported. Please remove the base path.\"\n )\n }\n }\n\n const getSetOptions = options\n ? (options as ReferenceOptionsGetSet<IT>)\n : undefined\n const onInvalidated = options\n ? (options as ReferenceOptionsOnInvalidated<IT>).onInvalidated\n : undefined\n\n if (getSetOptions && (getSetOptions.get || getSetOptions.set)) {\n if (devMode()) {\n if (!getSetOptions.get || !getSetOptions.set) {\n throw fail(\n \"reference options must either contain both a 'get' and a 'set' method or none of them\"\n )\n }\n }\n\n return new CustomReferenceType(\n subType,\n {\n get: getSetOptions.get,\n set: getSetOptions.set\n },\n onInvalidated\n )\n } else {\n return new IdentifierReferenceType(subType, onInvalidated)\n }\n}\n\n/**\n * Returns if a given value represents a reference type.\n *\n * @param type\n * @returns\n */\nexport function isReferenceType<IT extends IReferenceType<any>>(\n type: IT\n): type is IT {\n return (type.flags & TypeFlags.Reference) > 0\n}\n\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined: false\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IReferenceType<IT>\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options?: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined?: boolean\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IMaybe<IReferenceType<IT>>\n/**\n * `types.safeReference` - A safe reference is like a standard reference, except that it accepts the undefined value by default\n * and automatically sets itself to undefined (when the parent is a model) / removes itself from arrays and maps\n * when the reference it is pointing to gets detached/destroyed.\n *\n * The optional options parameter object accepts a parameter named `acceptsUndefined`, which is set to true by default, so it is suitable\n * for model properties.\n * When used inside collections (arrays/maps), it is recommended to set this option to false so it can't take undefined as value,\n * which is usually the desired in those cases.\n * Additionally, the optional options parameter object accepts a parameter named `onInvalidated`, which will be called when the reference target node that the reference is pointing to is about to be detached/destroyed\n *\n * Strictly speaking it is a `types.maybe(types.reference(X))` (when `acceptsUndefined` is set to true, the default) and\n * `types.reference(X)` (when `acceptsUndefined` is set to false), both of them with a customized `onInvalidated` option.\n *\n * @param subType\n * @param options\n * @returns\n */\nexport function safeReference<IT extends IAnyComplexType>(\n subType: IT,\n options?: (ReferenceOptionsGetSet<IT> | object) & {\n acceptsUndefined?: boolean\n onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>\n }\n): IReferenceType<IT> | IMaybe<IReferenceType<IT>> {\n const refType = reference(subType, {\n ...options,\n onInvalidated(ev) {\n if (options && options.onInvalidated) {\n options.onInvalidated(ev)\n }\n ev.removeRef()\n }\n })\n\n if (options && options.acceptsUndefined === false) {\n return refType\n } else {\n return maybe(refType)\n }\n}\n","import {\n type AnyObjectNode,\n type ISimpleType,\n type IValidationContext,\n type IValidationResult,\n ModelType,\n type ScalarNode,\n SimpleType,\n TypeFlags,\n assertArg,\n createScalarNode,\n fail,\n isType,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nabstract class BaseIdentifierType<T> extends SimpleType<T, T, T> {\n readonly flags = TypeFlags.Identifier\n\n constructor(\n name: string,\n private readonly validType: \"string\" | \"number\"\n ) {\n super(name)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"]\n ): this[\"N\"] {\n if (!parent || !(parent.type instanceof ModelType)) {\n throw fail(\n `Identifier types can only be instantiated as direct child of a model type`\n )\n }\n\n return createScalarNode(this, parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"],\n parent: AnyObjectNode,\n subpath: string\n ) {\n // we don't consider detaching here since identifier are scalar nodes, and scalar nodes cannot be detached\n if (current.storedValue !== newValue) {\n throw fail(\n `Tried to change identifier from '${current.storedValue}' to '${newValue}'. Changing identifiers is not allowed.`\n )\n }\n current.setParent(parent, subpath)\n return current\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (typeof value !== this.validType) {\n return typeCheckFailure(\n context,\n value,\n `Value is not a valid ${this.describe()}, expected a ${this.validType}`\n )\n }\n return typeCheckSuccess()\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierType extends BaseIdentifierType<string> {\n readonly flags = TypeFlags.Identifier\n\n constructor() {\n super(`identifier`, \"string\")\n }\n\n describe() {\n return `identifier`\n }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class IdentifierNumberType extends BaseIdentifierType<number> {\n constructor() {\n super(\"identifierNumber\", \"number\")\n }\n\n getSnapshot(node: ScalarNode<number, number, number>): number {\n return node.storedValue\n }\n\n describe() {\n return `identifierNumber`\n }\n}\n\n/**\n * `types.identifier` - Identifiers are used to make references, lifecycle events and reconciling works.\n * Inside a state tree, for each type can exist only one instance for each given identifier.\n * For example there couldn't be 2 instances of user with id 1. If you need more, consider using references.\n * Identifier can be used only as type property of a model.\n * This type accepts as parameter the value type of the identifier field that can be either string or number.\n *\n * Example:\n * ```ts\n * const Todo = types.model(\"Todo\", {\n * id: types.identifier,\n * title: types.string\n * })\n * ```\n *\n * @returns\n */\nexport const identifier: ISimpleType<string> = new IdentifierType()\n\n/**\n * `types.identifierNumber` - Similar to `types.identifier`. This one will serialize from / to a number when applying snapshots\n *\n * Example:\n * ```ts\n * const Todo = types.model(\"Todo\", {\n * id: types.identifierNumber,\n * title: types.string\n * })\n * ```\n *\n * @returns\n */\nexport const identifierNumber: ISimpleType<number> = new IdentifierNumberType()\n\n/**\n * Returns if a given value represents an identifier type.\n *\n * @param type\n * @returns\n */\nexport function isIdentifierType<\n IT extends typeof identifier | typeof identifierNumber\n>(type: IT): type is IT {\n return isType(type) && (type.flags & TypeFlags.Identifier) > 0\n}\n\n/**\n * Valid types for identifiers.\n */\nexport type ReferenceIdentifier = string | number\n\n/**\n * @internal\n * @hidden\n */\nexport function normalizeIdentifier(id: ReferenceIdentifier): string {\n return \"\" + id\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isValidIdentifier(id: any): id is ReferenceIdentifier {\n return typeof id === \"string\" || typeof id === \"number\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function assertIsValidIdentifier(\n id: ReferenceIdentifier,\n argNumber: number | number[]\n) {\n assertArg(id, isValidIdentifier, \"string or number (identifier)\", argNumber)\n}\n","import {\n type AnyObjectNode,\n type IType,\n type IValidationContext,\n type IValidationResult,\n SimpleType,\n TypeFlags,\n createScalarNode,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport interface CustomTypeOptions<S, T> {\n /** Friendly name */\n name: string\n /** given a serialized value and environment, how to turn it into the target type */\n fromSnapshot(snapshot: S, env?: any): T\n /** return the serialization of the current value */\n toSnapshot(value: T): S\n /** if true, this is a converted value, if false, it's a snapshot */\n isTargetType(value: T | S): boolean\n /** a non empty string is assumed to be a validation error */\n getValidationMessage(snapshot: S): string\n // TODO: isSnapshotEqual\n // TODO: isValueEqual\n}\n\n/**\n * `types.custom` - Creates a custom type. Custom types can be used for arbitrary immutable values, that have a serializable representation. For example, to create your own Date representation, Decimal type etc.\n *\n * The signature of the options is:\n * ```ts\n * export interface CustomTypeOptions<S, T> {\n * // Friendly name\n * name: string\n * // given a serialized value and environment, how to turn it into the target type\n * fromSnapshot(snapshot: S, env: any): T\n * // return the serialization of the current value\n * toSnapshot(value: T): S\n * // if true, this is a converted value, if false, it's a snapshot\n * isTargetType(value: T | S): value is T\n * // a non empty string is assumed to be a validation error\n * getValidationMessage?(snapshot: S): string\n * }\n * ```\n *\n * Example:\n * ```ts\n * const DecimalPrimitive = types.custom<string, Decimal>({\n * name: \"Decimal\",\n * fromSnapshot(value: string) {\n * return new Decimal(value)\n * },\n * toSnapshot(value: Decimal) {\n * return value.toString()\n * },\n * isTargetType(value: string | Decimal): boolean {\n * return value instanceof Decimal\n * },\n * getValidationMessage(value: string): string {\n * if (/^-?\\d+\\.\\d+$/.test(value)) return \"\" // OK\n * return `'${value}' doesn't look like a valid decimal number`\n * }\n * })\n *\n * const Wallet = types.model({\n * balance: DecimalPrimitive\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport function custom<S, T>(\n options: CustomTypeOptions<S, T>\n): IType<S | T, S, T> {\n return new CustomType<S, T>(options)\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class CustomType<S, T> extends SimpleType<S | T, S, T> {\n readonly flags = TypeFlags.Custom\n\n constructor(protected readonly options: CustomTypeOptions<S, T>) {\n super(options.name)\n }\n\n describe() {\n return this.name\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this.options.isTargetType(value)) {\n return typeCheckSuccess()\n }\n\n const typeError: string = this.options.getValidationMessage(value as S)\n if (typeError) {\n return typeCheckFailure(\n context,\n value,\n `Invalid value for type '${this.name}': ${typeError}`\n )\n }\n return typeCheckSuccess()\n }\n\n getSnapshot(node: this[\"N\"]): S {\n return this.options.toSnapshot(node.storedValue)\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: S | T\n ): this[\"N\"] {\n const valueToStore: T = this.options.isTargetType(initialValue)\n ? (initialValue as T)\n : this.options.fromSnapshot(\n initialValue as S,\n parent && parent.root.environment\n )\n return createScalarNode(this, parent, subpath, environment, valueToStore)\n }\n\n reconcile(\n current: this[\"N\"],\n value: S | T,\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const isSnapshot = !this.options.isTargetType(value)\n // in theory customs use scalar nodes which cannot be detached, but still...\n if (!current.isDetaching) {\n const unchanged =\n current.type === this &&\n (isSnapshot\n ? value === current.snapshot\n : value === current.storedValue)\n if (unchanged) {\n current.setParent(parent, subpath)\n return current\n }\n }\n const valueToStore: T = isSnapshot\n ? this.options.fromSnapshot(value as S, parent.root.environment)\n : (value as T)\n const newNode = this.instantiate(parent, subpath, undefined, valueToStore)\n current.die() // noop if detaching\n return newNode\n }\n}\n","import {\n type AnyObjectNode,\n BaseType,\n type ExtractNodeType,\n type IAnyType,\n type IType,\n type IValidationContext,\n type IValidationResult,\n assertIsType,\n fail,\n isStateTreeNode,\n isType,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nclass Resilient<IT extends IAnyType, FT extends IAnyType> extends BaseType<\n IT[\"CreationType\"] | FT[\"CreationType\"],\n IT[\"SnapshotType\"] | FT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"] | FT[\"TypeWithoutSTN\"],\n ExtractNodeType<IT> | ExtractNodeType<FT>\n> {\n get flags() {\n return this._subtype.flags\n }\n\n constructor(\n private readonly _subtype: IT,\n private readonly _fallbackType: FT,\n private readonly _createFallbackSnapshot: (\n error: unknown,\n snapshot: any\n ) => FT[\"CreationType\"]\n ) {\n super(`resilient(${_subtype.name})`)\n }\n\n describe() {\n return `resilient(${this._subtype.describe()})`\n }\n\n private _instantiateFallback(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n originalSnapshot: any,\n originalError: unknown\n ): this[\"N\"] {\n let fallbackSnapshot: FT[\"CreationType\"]\n try {\n fallbackSnapshot = this._createFallbackSnapshot(\n originalError,\n originalSnapshot\n )\n } catch (e) {\n throw fail(\n `resilient: createFallbackSnapshot threw while handling error for '${this._subtype.name}': ${originalError}. createFallbackSnapshot error: ${e}`\n )\n }\n try {\n return this._fallbackType.instantiate(\n parent,\n subpath,\n environment,\n fallbackSnapshot\n ) as this[\"N\"]\n } catch (e) {\n throw fail(\n `resilient: fallback type '${this._fallbackType.name}' failed to instantiate while handling error for '${this._subtype.name}': ${originalError}. Fallback error: ${e}`\n )\n }\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n if (isStateTreeNode(initialValue)) {\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as this[\"N\"]\n }\n try {\n return this._subtype.instantiate(\n parent,\n subpath,\n environment,\n initialValue\n ) as this[\"N\"]\n } catch (e) {\n return this._instantiateFallback(\n parent,\n subpath,\n environment,\n initialValue,\n e\n )\n }\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n if (isStateTreeNode(newValue)) {\n return this._subtype.reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as this[\"N\"]\n }\n if (this._fallbackType.isAssignableFrom(current.type)) {\n try {\n return this._subtype.instantiate(\n parent,\n subpath,\n undefined,\n newValue\n ) as this[\"N\"]\n } catch (e) {\n return this._fallbackType.reconcile(\n current,\n this._createFallbackSnapshot(e, newValue),\n parent,\n subpath\n ) as this[\"N\"]\n }\n }\n try {\n return this._subtype.reconcile(\n current,\n newValue,\n parent,\n subpath\n ) as this[\"N\"]\n } catch (e) {\n current.die()\n return this._instantiateFallback(parent, subpath, undefined, newValue, e)\n }\n }\n\n isValidSnapshot(\n _value: this[\"C\"],\n _context: IValidationContext\n ): IValidationResult {\n return typeCheckSuccess()\n }\n\n is(thing: any): thing is any {\n if (isType(thing)) {\n return (\n this._subtype.isAssignableFrom(thing) ||\n this._fallbackType.isAssignableFrom(thing)\n )\n }\n try {\n if (this._subtype.is(thing)) {\n return true\n }\n } catch (_e) {\n // subtype.is() may throw (e.g. union dispatcher)\n }\n try {\n return this._fallbackType.is(thing)\n } catch (_e) {\n return false\n }\n }\n\n isAssignableFrom(type: IAnyType) {\n return (\n this._subtype.isAssignableFrom(type) ||\n this._fallbackType.isAssignableFrom(type)\n )\n }\n\n getSubTypes() {\n return [this._subtype, this._fallbackType]\n }\n\n getSnapshot(node: this[\"N\"]): this[\"S\"] {\n return node.snapshot\n }\n}\n\nexport interface IResilientType<\n IT extends IAnyType,\n FT extends IAnyType\n> extends IType<\n IT[\"CreationType\"] | FT[\"CreationType\"],\n IT[\"SnapshotType\"] | FT[\"SnapshotType\"],\n IT[\"TypeWithoutSTN\"] | FT[\"TypeWithoutSTN\"]\n> {}\n\n/**\n * `types.resilient` - Wraps a type so that instantiation errors are caught\n * and a fallback type is used instead. This is useful for loading data that\n * may contain unknown or invalid subtrees (e.g., plugin types that are not\n * installed) without crashing the entire state tree.\n *\n * The `createFallbackSnapshot` callback receives the caught error and the\n * original snapshot, and must return a valid snapshot for the fallback type.\n *\n * @param type The type to wrap.\n * @param fallbackType The fallback type to use when instantiation fails.\n * @param createFallbackSnapshot Callback that produces a fallback snapshot from the error and original snapshot.\n * @returns A resilient type.\n */\nexport function resilient<IT extends IAnyType, FT extends IAnyType>(\n type: IT,\n fallbackType: FT,\n createFallbackSnapshot: (error: unknown, snapshot: any) => FT[\"CreationType\"]\n): IResilientType<IT, FT> {\n assertIsType(type, 1)\n assertIsType(fallbackType, 2)\n return new Resilient(type, fallbackType, createFallbackSnapshot)\n}\n","// we import the types to re-export them inside types.\nimport {\n DatePrimitive,\n array,\n boolean,\n compose,\n custom,\n enumeration,\n finite,\n float,\n frozen,\n identifier,\n identifierNumber,\n integer,\n late,\n lazy,\n literal,\n map,\n maybe,\n maybeNull,\n model,\n nullType,\n number,\n optional,\n reference,\n refinement,\n safeReference,\n resilient,\n snapshotProcessor,\n string,\n undefinedType,\n union\n} from \"../internal.ts\"\n\nexport const types = {\n enumeration,\n model,\n compose,\n custom,\n reference,\n safeReference,\n union,\n optional,\n literal,\n maybe,\n maybeNull,\n refinement,\n string,\n boolean,\n number,\n integer,\n float,\n finite,\n Date: DatePrimitive,\n map,\n array,\n frozen,\n identifier,\n identifierNumber,\n late,\n lazy,\n undefined: undefinedType,\n null: nullType,\n snapshotProcessor,\n resilient\n}\n"],"names":["isComputedProp","isObservableProp","createAtom","action","computed","_allowStateChangesInsideComputed","reaction","runInAction","mobxAction","observable","values","entries","process","_getGlobalState","isObservableArray","isObservableObject","mobxDefineProperty","ObservableMap","_interceptReads","intercept","observe","_getAdministration","set","defineProperty","makeObservable","getAtom","when"],"mappings":"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"}