@jbrowse/mobx-state-tree 5.7.0 → 5.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -10
- package/dist/index.d.ts +2135 -2
- package/dist/mobx-state-tree.cjs +6894 -0
- package/dist/mobx-state-tree.cjs.map +1 -0
- package/dist/mobx-state-tree.mjs +6814 -0
- package/dist/mobx-state-tree.mjs.map +1 -0
- package/package.json +30 -26
- package/dist/core/action.d.ts +0 -87
- package/dist/core/action.js +0 -228
- package/dist/core/action.js.map +0 -1
- package/dist/core/actionContext.d.ts +0 -27
- package/dist/core/actionContext.js +0 -42
- package/dist/core/actionContext.js.map +0 -1
- package/dist/core/flow.d.ts +0 -69
- package/dist/core/flow.js +0 -180
- package/dist/core/flow.js.map +0 -1
- package/dist/core/json-patch.d.ts +0 -46
- package/dist/core/json-patch.js +0 -133
- package/dist/core/json-patch.js.map +0 -1
- package/dist/core/mst-operations.d.ts +0 -459
- package/dist/core/mst-operations.js +0 -885
- package/dist/core/mst-operations.js.map +0 -1
- package/dist/core/node/BaseNode.d.ts +0 -62
- package/dist/core/node/BaseNode.js +0 -152
- package/dist/core/node/BaseNode.js.map +0 -1
- package/dist/core/node/Hook.d.ts +0 -17
- package/dist/core/node/Hook.js +0 -15
- package/dist/core/node/Hook.js.map +0 -1
- package/dist/core/node/create-node.d.ts +0 -16
- package/dist/core/node/create-node.js +0 -41
- package/dist/core/node/create-node.js.map +0 -1
- package/dist/core/node/identifier-cache.d.ts +0 -19
- package/dist/core/node/identifier-cache.js +0 -115
- package/dist/core/node/identifier-cache.js.map +0 -1
- package/dist/core/node/livelinessChecking.d.ts +0 -37
- package/dist/core/node/livelinessChecking.js +0 -38
- package/dist/core/node/livelinessChecking.js.map +0 -1
- package/dist/core/node/node-utils.d.ts +0 -83
- package/dist/core/node/node-utils.js +0 -165
- package/dist/core/node/node-utils.js.map +0 -1
- package/dist/core/node/object-node.d.ts +0 -101
- package/dist/core/node/object-node.js +0 -546
- package/dist/core/node/object-node.js.map +0 -1
- package/dist/core/node/scalar-node.d.ts +0 -21
- package/dist/core/node/scalar-node.js +0 -90
- package/dist/core/node/scalar-node.js.map +0 -1
- package/dist/core/process.d.ts +0 -50
- package/dist/core/process.js +0 -39
- package/dist/core/process.js.map +0 -1
- package/dist/core/type/type-checker.d.ts +0 -69
- package/dist/core/type/type-checker.js +0 -154
- package/dist/core/type/type-checker.js.map +0 -1
- package/dist/core/type/type.d.ts +0 -317
- package/dist/core/type/type.js +0 -251
- package/dist/core/type/type.js.map +0 -1
- package/dist/index.js +0 -85
- package/dist/index.js.map +0 -1
- package/dist/internal.d.ts +0 -39
- package/dist/internal.js +0 -60
- package/dist/internal.js.map +0 -1
- package/dist/middlewares/create-action-tracking-middleware.d.ts +0 -24
- package/dist/middlewares/create-action-tracking-middleware.js +0 -81
- package/dist/middlewares/create-action-tracking-middleware.js.map +0 -1
- package/dist/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
- package/dist/middlewares/createActionTrackingMiddleware2.js +0 -133
- package/dist/middlewares/createActionTrackingMiddleware2.js.map +0 -1
- package/dist/middlewares/on-action.d.ts +0 -87
- package/dist/middlewares/on-action.js +0 -215
- package/dist/middlewares/on-action.js.map +0 -1
- package/dist/package.json +0 -1
- package/dist/types/complex-types/array.d.ts +0 -81
- package/dist/types/complex-types/array.js +0 -353
- package/dist/types/complex-types/array.js.map +0 -1
- package/dist/types/complex-types/map.d.ts +0 -111
- package/dist/types/complex-types/map.js +0 -362
- package/dist/types/complex-types/map.js.map +0 -1
- package/dist/types/complex-types/model.d.ts +0 -193
- package/dist/types/complex-types/model.js +0 -478
- package/dist/types/complex-types/model.js.map +0 -1
- package/dist/types/index.d.ts +0 -33
- package/dist/types/index.js +0 -38
- package/dist/types/index.js.map +0 -1
- package/dist/types/primitives.d.ts +0 -125
- package/dist/types/primitives.js +0 -183
- package/dist/types/primitives.js.map +0 -1
- package/dist/types/utility-types/custom.d.ts +0 -75
- package/dist/types/utility-types/custom.js +0 -111
- package/dist/types/utility-types/custom.js.map +0 -1
- package/dist/types/utility-types/enumeration.d.ts +0 -5
- package/dist/types/utility-types/enumeration.js +0 -34
- package/dist/types/utility-types/enumeration.js.map +0 -1
- package/dist/types/utility-types/frozen.d.ts +0 -24
- package/dist/types/utility-types/frozen.js +0 -98
- package/dist/types/utility-types/frozen.js.map +0 -1
- package/dist/types/utility-types/identifier.d.ts +0 -87
- package/dist/types/utility-types/identifier.js +0 -130
- package/dist/types/utility-types/identifier.js.map +0 -1
- package/dist/types/utility-types/late.d.ts +0 -10
- package/dist/types/utility-types/late.js +0 -110
- package/dist/types/utility-types/late.js.map +0 -1
- package/dist/types/utility-types/lazy.d.ts +0 -23
- package/dist/types/utility-types/lazy.js +0 -77
- package/dist/types/utility-types/lazy.js.map +0 -1
- package/dist/types/utility-types/literal.d.ts +0 -38
- package/dist/types/utility-types/literal.js +0 -64
- package/dist/types/utility-types/literal.js.map +0 -1
- package/dist/types/utility-types/maybe.d.ts +0 -26
- package/dist/types/utility-types/maybe.js +0 -30
- package/dist/types/utility-types/maybe.js.map +0 -1
- package/dist/types/utility-types/optional.d.ts +0 -42
- package/dist/types/utility-types/optional.js +0 -141
- package/dist/types/utility-types/optional.js.map +0 -1
- package/dist/types/utility-types/reference.d.ts +0 -90
- package/dist/types/utility-types/reference.js +0 -393
- package/dist/types/utility-types/reference.js.map +0 -1
- package/dist/types/utility-types/refinement.d.ts +0 -10
- package/dist/types/utility-types/refinement.js +0 -86
- package/dist/types/utility-types/refinement.js.map +0 -1
- package/dist/types/utility-types/resilient.d.ts +0 -18
- package/dist/types/utility-types/resilient.js +0 -121
- package/dist/types/utility-types/resilient.js.map +0 -1
- package/dist/types/utility-types/snapshotProcessor.d.ts +0 -63
- package/dist/types/utility-types/snapshotProcessor.js +0 -162
- package/dist/types/utility-types/snapshotProcessor.js.map +0 -1
- package/dist/types/utility-types/union.d.ts +0 -78
- package/dist/types/utility-types/union.js +0 -246
- package/dist/types/utility-types/union.js.map +0 -1
- package/dist/utils.d.ts +0 -230
- package/dist/utils.js +0 -483
- package/dist/utils.js.map +0 -1
- package/esm/core/action.d.ts +0 -87
- package/esm/core/action.js +0 -219
- package/esm/core/action.js.map +0 -1
- package/esm/core/actionContext.d.ts +0 -27
- package/esm/core/actionContext.js +0 -37
- package/esm/core/actionContext.js.map +0 -1
- package/esm/core/flow.d.ts +0 -69
- package/esm/core/flow.js +0 -173
- package/esm/core/flow.js.map +0 -1
- package/esm/core/json-patch.d.ts +0 -46
- package/esm/core/json-patch.js +0 -125
- package/esm/core/json-patch.js.map +0 -1
- package/esm/core/mst-operations.d.ts +0 -459
- package/esm/core/mst-operations.js +0 -844
- package/esm/core/mst-operations.js.map +0 -1
- package/esm/core/node/BaseNode.d.ts +0 -62
- package/esm/core/node/BaseNode.js +0 -148
- package/esm/core/node/BaseNode.js.map +0 -1
- package/esm/core/node/Hook.d.ts +0 -17
- package/esm/core/node/Hook.js +0 -12
- package/esm/core/node/Hook.js.map +0 -1
- package/esm/core/node/create-node.d.ts +0 -16
- package/esm/core/node/create-node.js +0 -36
- package/esm/core/node/create-node.js.map +0 -1
- package/esm/core/node/identifier-cache.d.ts +0 -19
- package/esm/core/node/identifier-cache.js +0 -111
- package/esm/core/node/identifier-cache.js.map +0 -1
- package/esm/core/node/livelinessChecking.d.ts +0 -37
- package/esm/core/node/livelinessChecking.js +0 -33
- package/esm/core/node/livelinessChecking.js.map +0 -1
- package/esm/core/node/node-utils.d.ts +0 -83
- package/esm/core/node/node-utils.js +0 -153
- package/esm/core/node/node-utils.js.map +0 -1
- package/esm/core/node/object-node.d.ts +0 -101
- package/esm/core/node/object-node.js +0 -542
- package/esm/core/node/object-node.js.map +0 -1
- package/esm/core/node/scalar-node.d.ts +0 -21
- package/esm/core/node/scalar-node.js +0 -86
- package/esm/core/node/scalar-node.js.map +0 -1
- package/esm/core/process.d.ts +0 -50
- package/esm/core/process.js +0 -35
- package/esm/core/process.js.map +0 -1
- package/esm/core/type/type-checker.d.ts +0 -69
- package/esm/core/type/type-checker.js +0 -144
- package/esm/core/type/type-checker.js.map +0 -1
- package/esm/core/type/type.d.ts +0 -317
- package/esm/core/type/type.js +0 -243
- package/esm/core/type/type.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.js +0 -2
- package/esm/index.js.map +0 -1
- package/esm/internal.d.ts +0 -39
- package/esm/internal.js +0 -44
- package/esm/internal.js.map +0 -1
- package/esm/middlewares/create-action-tracking-middleware.d.ts +0 -24
- package/esm/middlewares/create-action-tracking-middleware.js +0 -78
- package/esm/middlewares/create-action-tracking-middleware.js.map +0 -1
- package/esm/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
- package/esm/middlewares/createActionTrackingMiddleware2.js +0 -130
- package/esm/middlewares/createActionTrackingMiddleware2.js.map +0 -1
- package/esm/middlewares/on-action.d.ts +0 -87
- package/esm/middlewares/on-action.js +0 -210
- package/esm/middlewares/on-action.js.map +0 -1
- package/esm/types/complex-types/array.d.ts +0 -81
- package/esm/types/complex-types/array.js +0 -347
- package/esm/types/complex-types/array.js.map +0 -1
- package/esm/types/complex-types/map.d.ts +0 -111
- package/esm/types/complex-types/map.js +0 -356
- package/esm/types/complex-types/map.js.map +0 -1
- package/esm/types/complex-types/model.d.ts +0 -193
- package/esm/types/complex-types/model.js +0 -471
- package/esm/types/complex-types/model.js.map +0 -1
- package/esm/types/index.d.ts +0 -33
- package/esm/types/index.js +0 -35
- package/esm/types/index.js.map +0 -1
- package/esm/types/primitives.d.ts +0 -125
- package/esm/types/primitives.js +0 -177
- package/esm/types/primitives.js.map +0 -1
- package/esm/types/utility-types/custom.d.ts +0 -75
- package/esm/types/utility-types/custom.js +0 -106
- package/esm/types/utility-types/custom.js.map +0 -1
- package/esm/types/utility-types/enumeration.d.ts +0 -5
- package/esm/types/utility-types/enumeration.js +0 -31
- package/esm/types/utility-types/enumeration.js.map +0 -1
- package/esm/types/utility-types/frozen.d.ts +0 -24
- package/esm/types/utility-types/frozen.js +0 -92
- package/esm/types/utility-types/frozen.js.map +0 -1
- package/esm/types/utility-types/identifier.d.ts +0 -87
- package/esm/types/utility-types/identifier.js +0 -121
- package/esm/types/utility-types/identifier.js.map +0 -1
- package/esm/types/utility-types/late.d.ts +0 -10
- package/esm/types/utility-types/late.js +0 -106
- package/esm/types/utility-types/late.js.map +0 -1
- package/esm/types/utility-types/lazy.d.ts +0 -23
- package/esm/types/utility-types/lazy.js +0 -72
- package/esm/types/utility-types/lazy.js.map +0 -1
- package/esm/types/utility-types/literal.d.ts +0 -38
- package/esm/types/utility-types/literal.js +0 -58
- package/esm/types/utility-types/literal.js.map +0 -1
- package/esm/types/utility-types/maybe.d.ts +0 -26
- package/esm/types/utility-types/maybe.js +0 -26
- package/esm/types/utility-types/maybe.js.map +0 -1
- package/esm/types/utility-types/optional.d.ts +0 -42
- package/esm/types/utility-types/optional.js +0 -135
- package/esm/types/utility-types/optional.js.map +0 -1
- package/esm/types/utility-types/reference.d.ts +0 -90
- package/esm/types/utility-types/reference.js +0 -383
- package/esm/types/utility-types/reference.js.map +0 -1
- package/esm/types/utility-types/refinement.d.ts +0 -10
- package/esm/types/utility-types/refinement.js +0 -82
- package/esm/types/utility-types/refinement.js.map +0 -1
- package/esm/types/utility-types/resilient.d.ts +0 -18
- package/esm/types/utility-types/resilient.js +0 -118
- package/esm/types/utility-types/resilient.js.map +0 -1
- package/esm/types/utility-types/snapshotProcessor.d.ts +0 -63
- package/esm/types/utility-types/snapshotProcessor.js +0 -159
- package/esm/types/utility-types/snapshotProcessor.js.map +0 -1
- package/esm/types/utility-types/union.d.ts +0 -78
- package/esm/types/utility-types/union.js +0 -240
- package/esm/types/utility-types/union.js.map +0 -1
- package/esm/utils.d.ts +0 -230
- package/esm/utils.js +0 -449
- package/esm/utils.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../src/types/complex-types/array.ts"],"names":[],"mappings":"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","sourcesContent":["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 { ComplexType } from \"../../core/type/type.ts\"\nimport {\n type AnyNode,\n type AnyObjectNode,\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"]}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { type IInterceptor, type IKeyValueMap, type IMapDidChange, type IMapWillChange, type Lambda, ObservableMap } from "mobx";
|
|
2
|
-
import { ComplexType } from "../../core/type/type.ts";
|
|
3
|
-
import { type AnyNode, type AnyObjectNode, type ExtractCSTWithSTN, type IAnyType, type IChildNodesMap, type IHooksGetter, type IJsonPatch, type IType, type IValidationContext, type IValidationResult, TypeFlags } from "../../internal.ts";
|
|
4
|
-
/** @hidden */
|
|
5
|
-
export interface IMapType<IT extends IAnyType> extends IType<IKeyValueMap<IT["CreationType"]> | undefined, IKeyValueMap<IT["SnapshotType"]>, IMSTMap<IT>> {
|
|
6
|
-
hooks(hooks: IHooksGetter<IMSTMap<IT>>): IMapType<IT>;
|
|
7
|
-
}
|
|
8
|
-
/** @hidden */
|
|
9
|
-
export interface IMSTMap<IT extends IAnyType> {
|
|
10
|
-
clear(): void;
|
|
11
|
-
delete(key: string): boolean;
|
|
12
|
-
forEach(callbackfn: (value: IT["Type"], key: string | number, map: this) => void, thisArg?: any): void;
|
|
13
|
-
get(key: string | number): IT["Type"] | undefined;
|
|
14
|
-
has(key: string | number): boolean;
|
|
15
|
-
set(key: string | number, value: ExtractCSTWithSTN<IT>): this;
|
|
16
|
-
readonly size: number;
|
|
17
|
-
put(value: ExtractCSTWithSTN<IT>): IT["Type"];
|
|
18
|
-
keys(): IterableIterator<string>;
|
|
19
|
-
values(): IterableIterator<IT["Type"]>;
|
|
20
|
-
entries(): IterableIterator<[string, IT["Type"]]>;
|
|
21
|
-
[Symbol.iterator](): IterableIterator<[string, IT["Type"]]>;
|
|
22
|
-
/** Merge another object into this map, returns self. */
|
|
23
|
-
merge(other: IMSTMap<IType<any, any, IT["TypeWithoutSTN"]>> | IKeyValueMap<ExtractCSTWithSTN<IT>> | any): this;
|
|
24
|
-
replace(values: IMSTMap<IType<any, any, IT["TypeWithoutSTN"]>> | IKeyValueMap<ExtractCSTWithSTN<IT>> | any): this;
|
|
25
|
-
toJSON(): IKeyValueMap<IT["SnapshotType"]>;
|
|
26
|
-
toString(): string;
|
|
27
|
-
[Symbol.toStringTag]: "Map";
|
|
28
|
-
/**
|
|
29
|
-
* Observes this object. Triggers for the events 'add', 'update' and 'delete'.
|
|
30
|
-
* See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe
|
|
31
|
-
* for callback details
|
|
32
|
-
*/
|
|
33
|
-
observe(listener: (changes: IMapDidChange<string, IT["Type"]>) => void, fireImmediately?: boolean): Lambda;
|
|
34
|
-
intercept(handler: IInterceptor<IMapWillChange<string, IT["Type"]>>): Lambda;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* @internal
|
|
38
|
-
* @hidden
|
|
39
|
-
*/
|
|
40
|
-
export declare enum MapIdentifierMode {
|
|
41
|
-
UNKNOWN = 0,
|
|
42
|
-
YES = 1,
|
|
43
|
-
NO = 2
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* @internal
|
|
47
|
-
* @hidden
|
|
48
|
-
*/
|
|
49
|
-
export declare class MapType<IT extends IAnyType> extends ComplexType<IKeyValueMap<IT["CreationType"]> | undefined, IKeyValueMap<IT["SnapshotType"]>, IMSTMap<IT>> {
|
|
50
|
-
private readonly _subType;
|
|
51
|
-
identifierMode: MapIdentifierMode;
|
|
52
|
-
mapIdentifierAttribute: string | undefined;
|
|
53
|
-
readonly flags = TypeFlags.Map;
|
|
54
|
-
private readonly hookInitializers;
|
|
55
|
-
constructor(name: string, _subType: IAnyType, hookInitializers?: Array<IHooksGetter<IMSTMap<IT>>>);
|
|
56
|
-
hooks(hooks: IHooksGetter<IMSTMap<IT>>): MapType<IT>;
|
|
57
|
-
instantiate(parent: AnyObjectNode | null, subpath: string, environment: any, initialValue: this["C"] | this["T"]): this["N"];
|
|
58
|
-
private _determineIdentifierMode;
|
|
59
|
-
initializeChildNodes(objNode: this["N"], initialSnapshot?: this["C"]): IChildNodesMap;
|
|
60
|
-
createNewInstance(childNodes: IChildNodesMap): this["T"];
|
|
61
|
-
finalizeNewInstance(node: this["N"], instance: ObservableMap<string, any>): void;
|
|
62
|
-
describe(): string;
|
|
63
|
-
getChildren(node: this["N"]): ReadonlyArray<AnyNode>;
|
|
64
|
-
getChildNode(node: this["N"], key: string): AnyNode;
|
|
65
|
-
willChange(change: IMapWillChange<string, AnyNode>): IMapWillChange<string, AnyNode> | null;
|
|
66
|
-
private processIdentifier;
|
|
67
|
-
getSnapshot(node: this["N"]): this["S"];
|
|
68
|
-
processInitialSnapshot(childNodes: IChildNodesMap): this["S"];
|
|
69
|
-
didChange(change: IMapDidChange<string, AnyNode>): void;
|
|
70
|
-
applyPatchLocally(node: this["N"], subpath: string, patch: IJsonPatch): void;
|
|
71
|
-
applySnapshot(node: this["N"], snapshot: this["C"]): void;
|
|
72
|
-
getChildType(): IAnyType;
|
|
73
|
-
isValidSnapshot(value: this["C"], context: IValidationContext): IValidationResult;
|
|
74
|
-
getDefaultSnapshot(): this["C"];
|
|
75
|
-
removeChild(node: this["N"], subpath: string): void;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* `types.map` - Creates a key based collection type who's children are all of a uniform declared type.
|
|
79
|
-
* If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.
|
|
80
|
-
*
|
|
81
|
-
* This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)
|
|
82
|
-
*
|
|
83
|
-
* Example:
|
|
84
|
-
* ```ts
|
|
85
|
-
* const Todo = types.model({
|
|
86
|
-
* id: types.identifier,
|
|
87
|
-
* task: types.string
|
|
88
|
-
* })
|
|
89
|
-
*
|
|
90
|
-
* const TodoStore = types.model({
|
|
91
|
-
* todos: types.map(Todo)
|
|
92
|
-
* })
|
|
93
|
-
*
|
|
94
|
-
* const s = TodoStore.create({ todos: {} })
|
|
95
|
-
* unprotect(s)
|
|
96
|
-
* s.todos.set(17, { task: "Grab coffee", id: 17 })
|
|
97
|
-
* s.todos.put({ task: "Grab cookie", id: 18 }) // put will infer key from the identifier
|
|
98
|
-
* console.log(s.todos.get(17).task) // prints: "Grab coffee"
|
|
99
|
-
* ```
|
|
100
|
-
*
|
|
101
|
-
* @param subtype
|
|
102
|
-
* @returns
|
|
103
|
-
*/
|
|
104
|
-
export declare function map<IT extends IAnyType>(subtype: IT): IMapType<IT>;
|
|
105
|
-
/**
|
|
106
|
-
* Returns if a given value represents a map type.
|
|
107
|
-
*
|
|
108
|
-
* @param type
|
|
109
|
-
* @returns `true` if it is a map type.
|
|
110
|
-
*/
|
|
111
|
-
export declare function isMapType<Items extends IAnyType = IAnyType>(type: IAnyType): type is IMapType<Items>;
|
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MapType = exports.MapIdentifierMode = void 0;
|
|
4
|
-
exports.map = map;
|
|
5
|
-
exports.isMapType = isMapType;
|
|
6
|
-
const mobx_1 = require("mobx");
|
|
7
|
-
const type_ts_1 = require("../../core/type/type.js");
|
|
8
|
-
const internal_ts_1 = require("../../internal.js");
|
|
9
|
-
const needsIdentifierError = `Map.put can only be used to store complex values that have an identifier type attribute`;
|
|
10
|
-
function tryCollectModelTypes(type, modelTypes) {
|
|
11
|
-
const subtypes = type.getSubTypes();
|
|
12
|
-
if (subtypes === internal_ts_1.cannotDetermineSubtype) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
if (subtypes) {
|
|
16
|
-
const subtypesArray = (0, internal_ts_1.asArray)(subtypes);
|
|
17
|
-
for (const subtype of subtypesArray) {
|
|
18
|
-
if (!tryCollectModelTypes(subtype, modelTypes)) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
if (type instanceof internal_ts_1.ModelType) {
|
|
24
|
-
modelTypes.push(type);
|
|
25
|
-
}
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @internal
|
|
30
|
-
* @hidden
|
|
31
|
-
*/
|
|
32
|
-
var MapIdentifierMode;
|
|
33
|
-
(function (MapIdentifierMode) {
|
|
34
|
-
MapIdentifierMode[MapIdentifierMode["UNKNOWN"] = 0] = "UNKNOWN";
|
|
35
|
-
MapIdentifierMode[MapIdentifierMode["YES"] = 1] = "YES";
|
|
36
|
-
MapIdentifierMode[MapIdentifierMode["NO"] = 2] = "NO";
|
|
37
|
-
})(MapIdentifierMode || (exports.MapIdentifierMode = MapIdentifierMode = {}));
|
|
38
|
-
class MSTMap extends mobx_1.ObservableMap {
|
|
39
|
-
constructor(initialData, name) {
|
|
40
|
-
super(initialData, mobx_1.observable.ref.enhancer, name);
|
|
41
|
-
}
|
|
42
|
-
get(key) {
|
|
43
|
-
// maybe this is over-enthousiastic? normalize numeric keys to strings
|
|
44
|
-
return super.get("" + key);
|
|
45
|
-
}
|
|
46
|
-
has(key) {
|
|
47
|
-
return super.has("" + key);
|
|
48
|
-
}
|
|
49
|
-
delete(key) {
|
|
50
|
-
return super.delete("" + key);
|
|
51
|
-
}
|
|
52
|
-
set(key, value) {
|
|
53
|
-
return super.set("" + key, value);
|
|
54
|
-
}
|
|
55
|
-
put(value) {
|
|
56
|
-
if (!value) {
|
|
57
|
-
throw (0, internal_ts_1.fail)(`Map.put cannot be used to set empty values`);
|
|
58
|
-
}
|
|
59
|
-
if ((0, internal_ts_1.isStateTreeNode)(value)) {
|
|
60
|
-
const node = (0, internal_ts_1.getStateTreeNode)(value);
|
|
61
|
-
if ((0, internal_ts_1.devMode)()) {
|
|
62
|
-
if (!node.identifierAttribute) {
|
|
63
|
-
throw (0, internal_ts_1.fail)(needsIdentifierError);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (node.identifier === null) {
|
|
67
|
-
throw (0, internal_ts_1.fail)(needsIdentifierError);
|
|
68
|
-
}
|
|
69
|
-
this.set(node.identifier, value);
|
|
70
|
-
return value;
|
|
71
|
-
}
|
|
72
|
-
else if (!(0, internal_ts_1.isMutable)(value)) {
|
|
73
|
-
throw (0, internal_ts_1.fail)(`Map.put can only be used to store complex values`);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const mapNode = (0, internal_ts_1.getStateTreeNode)(this);
|
|
77
|
-
const mapType = mapNode.type;
|
|
78
|
-
if (mapType.identifierMode !== MapIdentifierMode.YES) {
|
|
79
|
-
throw (0, internal_ts_1.fail)(needsIdentifierError);
|
|
80
|
-
}
|
|
81
|
-
const idAttr = mapType.mapIdentifierAttribute;
|
|
82
|
-
const id = value[idAttr];
|
|
83
|
-
if (!(0, internal_ts_1.isValidIdentifier)(id)) {
|
|
84
|
-
// try again but this time after creating a node for the value
|
|
85
|
-
// since it might be an optional identifier
|
|
86
|
-
const newNode = this.put(mapType.getChildType().create(value, mapNode.environment));
|
|
87
|
-
return this.put((0, internal_ts_1.getSnapshot)(newNode));
|
|
88
|
-
}
|
|
89
|
-
const key = (0, internal_ts_1.normalizeIdentifier)(id);
|
|
90
|
-
this.set(key, value);
|
|
91
|
-
return this.get(key);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* @internal
|
|
97
|
-
* @hidden
|
|
98
|
-
*/
|
|
99
|
-
class MapType extends type_ts_1.ComplexType {
|
|
100
|
-
_subType;
|
|
101
|
-
identifierMode = MapIdentifierMode.UNKNOWN;
|
|
102
|
-
mapIdentifierAttribute = undefined;
|
|
103
|
-
flags = internal_ts_1.TypeFlags.Map;
|
|
104
|
-
hookInitializers = [];
|
|
105
|
-
constructor(name, _subType, hookInitializers = []) {
|
|
106
|
-
super(name);
|
|
107
|
-
this._subType = _subType;
|
|
108
|
-
this._determineIdentifierMode();
|
|
109
|
-
this.hookInitializers = hookInitializers;
|
|
110
|
-
}
|
|
111
|
-
hooks(hooks) {
|
|
112
|
-
const hookInitializers = this.hookInitializers.length > 0
|
|
113
|
-
? this.hookInitializers.concat(hooks)
|
|
114
|
-
: [hooks];
|
|
115
|
-
return new MapType(this.name, this._subType, hookInitializers);
|
|
116
|
-
}
|
|
117
|
-
instantiate(parent, subpath, environment, initialValue) {
|
|
118
|
-
this._determineIdentifierMode();
|
|
119
|
-
return (0, internal_ts_1.createObjectNode)(this, parent, subpath, environment, initialValue);
|
|
120
|
-
}
|
|
121
|
-
_determineIdentifierMode() {
|
|
122
|
-
if (this.identifierMode !== MapIdentifierMode.UNKNOWN) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
const modelTypes = [];
|
|
126
|
-
if (tryCollectModelTypes(this._subType, modelTypes)) {
|
|
127
|
-
const identifierAttribute = modelTypes.reduce((current, type) => {
|
|
128
|
-
if (!type.identifierAttribute) {
|
|
129
|
-
return current;
|
|
130
|
-
}
|
|
131
|
-
if (current && current !== type.identifierAttribute) {
|
|
132
|
-
throw (0, internal_ts_1.fail)(`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`);
|
|
133
|
-
}
|
|
134
|
-
return type.identifierAttribute;
|
|
135
|
-
}, undefined);
|
|
136
|
-
if (identifierAttribute) {
|
|
137
|
-
this.identifierMode = MapIdentifierMode.YES;
|
|
138
|
-
this.mapIdentifierAttribute = identifierAttribute;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
this.identifierMode = MapIdentifierMode.NO;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
initializeChildNodes(objNode, initialSnapshot = {}) {
|
|
146
|
-
const subType = objNode.type._subType;
|
|
147
|
-
const result = {};
|
|
148
|
-
Object.keys(initialSnapshot).forEach(name => {
|
|
149
|
-
result[name] = subType.instantiate(objNode, name, undefined, initialSnapshot[name]);
|
|
150
|
-
});
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
|
-
createNewInstance(childNodes) {
|
|
154
|
-
return new MSTMap(childNodes, this.name);
|
|
155
|
-
}
|
|
156
|
-
finalizeNewInstance(node, instance) {
|
|
157
|
-
(0, mobx_1._interceptReads)(instance, node.unbox);
|
|
158
|
-
const type = node.type;
|
|
159
|
-
type.hookInitializers.forEach(initializer => {
|
|
160
|
-
const hooks = initializer(instance);
|
|
161
|
-
Object.keys(hooks).forEach(name => {
|
|
162
|
-
const hook = hooks[name];
|
|
163
|
-
const actionInvoker = (0, internal_ts_1.createActionInvoker)(instance, name, hook);
|
|
164
|
-
(!(0, internal_ts_1.devMode)() ? internal_ts_1.addHiddenFinalProp : internal_ts_1.addHiddenWritableProp)(instance, name, actionInvoker);
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
(0, mobx_1.intercept)(instance, this.willChange);
|
|
168
|
-
(0, mobx_1.observe)(instance, this.didChange);
|
|
169
|
-
}
|
|
170
|
-
describe() {
|
|
171
|
-
return this.name;
|
|
172
|
-
}
|
|
173
|
-
getChildren(node) {
|
|
174
|
-
// return (node.storedValue as ObservableMap<any>).values()
|
|
175
|
-
return (0, mobx_1.values)(node.storedValue);
|
|
176
|
-
}
|
|
177
|
-
getChildNode(node, key) {
|
|
178
|
-
const childNode = node.storedValue.get("" + key);
|
|
179
|
-
if (!childNode) {
|
|
180
|
-
throw (0, internal_ts_1.fail)("Not a child " + key);
|
|
181
|
-
}
|
|
182
|
-
return childNode;
|
|
183
|
-
}
|
|
184
|
-
willChange(change) {
|
|
185
|
-
const node = (0, internal_ts_1.getStateTreeNode)(change.object);
|
|
186
|
-
const key = change.name;
|
|
187
|
-
node.assertWritable({ subpath: key });
|
|
188
|
-
const mapType = node.type;
|
|
189
|
-
const subType = mapType._subType;
|
|
190
|
-
switch (change.type) {
|
|
191
|
-
case "update":
|
|
192
|
-
{
|
|
193
|
-
const { newValue } = change;
|
|
194
|
-
const oldValue = change.object.get(key);
|
|
195
|
-
if (newValue === oldValue) {
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
(0, internal_ts_1.typecheckInternal)(subType, newValue);
|
|
199
|
-
change.newValue = subType.reconcile(node.getChildNode(key), change.newValue, node, key);
|
|
200
|
-
mapType.processIdentifier(key, change.newValue);
|
|
201
|
-
}
|
|
202
|
-
break;
|
|
203
|
-
case "add":
|
|
204
|
-
{
|
|
205
|
-
(0, internal_ts_1.typecheckInternal)(subType, change.newValue);
|
|
206
|
-
change.newValue = subType.instantiate(node, key, undefined, change.newValue);
|
|
207
|
-
mapType.processIdentifier(key, change.newValue);
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
}
|
|
211
|
-
return change;
|
|
212
|
-
}
|
|
213
|
-
processIdentifier(expected, node) {
|
|
214
|
-
if (this.identifierMode === MapIdentifierMode.YES &&
|
|
215
|
-
node instanceof internal_ts_1.ObjectNode) {
|
|
216
|
-
const identifier = node.identifier;
|
|
217
|
-
if (identifier !== expected) {
|
|
218
|
-
throw (0, internal_ts_1.fail)(`A map of objects containing an identifier should always store the object under their own identifier. Trying to store key '${identifier}', but expected: '${expected}'`);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
getSnapshot(node) {
|
|
223
|
-
const res = {};
|
|
224
|
-
node.getChildren().forEach(childNode => {
|
|
225
|
-
res[childNode.subpath] = childNode.snapshot;
|
|
226
|
-
});
|
|
227
|
-
return res;
|
|
228
|
-
}
|
|
229
|
-
processInitialSnapshot(childNodes) {
|
|
230
|
-
const processed = {};
|
|
231
|
-
Object.keys(childNodes).forEach(key => {
|
|
232
|
-
processed[key] = childNodes[key].getSnapshot();
|
|
233
|
-
});
|
|
234
|
-
return processed;
|
|
235
|
-
}
|
|
236
|
-
didChange(change) {
|
|
237
|
-
const node = (0, internal_ts_1.getStateTreeNode)(change.object);
|
|
238
|
-
switch (change.type) {
|
|
239
|
-
case "update":
|
|
240
|
-
return void node.emitPatch({
|
|
241
|
-
op: "replace",
|
|
242
|
-
path: (0, internal_ts_1.escapeJsonPath)(change.name),
|
|
243
|
-
value: change.newValue.snapshot,
|
|
244
|
-
oldValue: change.oldValue ? change.oldValue.snapshot : undefined
|
|
245
|
-
}, node);
|
|
246
|
-
case "add":
|
|
247
|
-
return void node.emitPatch({
|
|
248
|
-
op: "add",
|
|
249
|
-
path: (0, internal_ts_1.escapeJsonPath)(change.name),
|
|
250
|
-
value: change.newValue.snapshot,
|
|
251
|
-
oldValue: undefined
|
|
252
|
-
}, node);
|
|
253
|
-
case "delete":
|
|
254
|
-
// a node got deleted, get the old snapshot and make the node die
|
|
255
|
-
const oldSnapshot = change.oldValue.snapshot;
|
|
256
|
-
change.oldValue.die();
|
|
257
|
-
// emit the patch
|
|
258
|
-
return void node.emitPatch({
|
|
259
|
-
op: "remove",
|
|
260
|
-
path: (0, internal_ts_1.escapeJsonPath)(change.name),
|
|
261
|
-
oldValue: oldSnapshot
|
|
262
|
-
}, node);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
applyPatchLocally(node, subpath, patch) {
|
|
266
|
-
const target = node.storedValue;
|
|
267
|
-
switch (patch.op) {
|
|
268
|
-
case "add":
|
|
269
|
-
case "replace":
|
|
270
|
-
target.set(subpath, patch.value);
|
|
271
|
-
break;
|
|
272
|
-
case "remove":
|
|
273
|
-
target.delete(subpath);
|
|
274
|
-
break;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
applySnapshot(node, snapshot) {
|
|
278
|
-
(0, internal_ts_1.typecheckInternal)(this, snapshot);
|
|
279
|
-
const target = node.storedValue;
|
|
280
|
-
const currentKeys = {};
|
|
281
|
-
Array.from(target.keys()).forEach(key => {
|
|
282
|
-
currentKeys[key] = false;
|
|
283
|
-
});
|
|
284
|
-
if (snapshot) {
|
|
285
|
-
// Don't use target.replace, as it will throw away all existing items first
|
|
286
|
-
for (const key in snapshot) {
|
|
287
|
-
target.set(key, snapshot[key]);
|
|
288
|
-
currentKeys["" + key] = true;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
Object.keys(currentKeys).forEach(key => {
|
|
292
|
-
if (currentKeys[key] === false) {
|
|
293
|
-
target.delete(key);
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
getChildType() {
|
|
298
|
-
return this._subType;
|
|
299
|
-
}
|
|
300
|
-
isValidSnapshot(value, context) {
|
|
301
|
-
if (!(0, internal_ts_1.isPlainObject)(value)) {
|
|
302
|
-
return (0, internal_ts_1.typeCheckFailure)(context, value, "Value is not a plain object");
|
|
303
|
-
}
|
|
304
|
-
for (const key of Object.keys(value)) {
|
|
305
|
-
(0, internal_ts_1.getContextForPath)(context, key, this._subType);
|
|
306
|
-
const errors = this._subType.validate(value[key], context);
|
|
307
|
-
(0, internal_ts_1.popContext)(context);
|
|
308
|
-
if (errors.length > 0) {
|
|
309
|
-
return errors;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
return (0, internal_ts_1.typeCheckSuccess)();
|
|
313
|
-
}
|
|
314
|
-
getDefaultSnapshot() {
|
|
315
|
-
return internal_ts_1.EMPTY_OBJECT;
|
|
316
|
-
}
|
|
317
|
-
removeChild(node, subpath) {
|
|
318
|
-
node.storedValue.delete(subpath);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
exports.MapType = MapType;
|
|
322
|
-
MapType.prototype.applySnapshot = (0, mobx_1.action)(MapType.prototype.applySnapshot);
|
|
323
|
-
/**
|
|
324
|
-
* `types.map` - Creates a key based collection type who's children are all of a uniform declared type.
|
|
325
|
-
* If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.
|
|
326
|
-
*
|
|
327
|
-
* This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)
|
|
328
|
-
*
|
|
329
|
-
* Example:
|
|
330
|
-
* ```ts
|
|
331
|
-
* const Todo = types.model({
|
|
332
|
-
* id: types.identifier,
|
|
333
|
-
* task: types.string
|
|
334
|
-
* })
|
|
335
|
-
*
|
|
336
|
-
* const TodoStore = types.model({
|
|
337
|
-
* todos: types.map(Todo)
|
|
338
|
-
* })
|
|
339
|
-
*
|
|
340
|
-
* const s = TodoStore.create({ todos: {} })
|
|
341
|
-
* unprotect(s)
|
|
342
|
-
* s.todos.set(17, { task: "Grab coffee", id: 17 })
|
|
343
|
-
* s.todos.put({ task: "Grab cookie", id: 18 }) // put will infer key from the identifier
|
|
344
|
-
* console.log(s.todos.get(17).task) // prints: "Grab coffee"
|
|
345
|
-
* ```
|
|
346
|
-
*
|
|
347
|
-
* @param subtype
|
|
348
|
-
* @returns
|
|
349
|
-
*/
|
|
350
|
-
function map(subtype) {
|
|
351
|
-
return new MapType(`Map<string, ${subtype.name}>`, subtype);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Returns if a given value represents a map type.
|
|
355
|
-
*
|
|
356
|
-
* @param type
|
|
357
|
-
* @returns `true` if it is a map type.
|
|
358
|
-
*/
|
|
359
|
-
function isMapType(type) {
|
|
360
|
-
return (0, internal_ts_1.isType)(type) && (type.flags & internal_ts_1.TypeFlags.Map) > 0;
|
|
361
|
-
}
|
|
362
|
-
//# sourceMappingURL=map.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/types/complex-types/map.ts"],"names":[],"mappings":"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","sourcesContent":["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 { ComplexType } from \"../../core/type/type.ts\"\nimport {\n type AnyNode,\n type AnyObjectNode,\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"]}
|