@jbrowse/mobx-state-tree 5.7.1 → 5.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/README.md +0 -10
  2. package/dist/index.d.ts +2135 -2
  3. package/dist/mobx-state-tree.cjs +6894 -0
  4. package/dist/mobx-state-tree.cjs.map +1 -0
  5. package/dist/mobx-state-tree.mjs +6814 -0
  6. package/dist/mobx-state-tree.mjs.map +1 -0
  7. package/package.json +30 -26
  8. package/dist/core/action.d.ts +0 -87
  9. package/dist/core/action.js +0 -228
  10. package/dist/core/action.js.map +0 -1
  11. package/dist/core/actionContext.d.ts +0 -27
  12. package/dist/core/actionContext.js +0 -42
  13. package/dist/core/actionContext.js.map +0 -1
  14. package/dist/core/flow.d.ts +0 -69
  15. package/dist/core/flow.js +0 -180
  16. package/dist/core/flow.js.map +0 -1
  17. package/dist/core/json-patch.d.ts +0 -46
  18. package/dist/core/json-patch.js +0 -133
  19. package/dist/core/json-patch.js.map +0 -1
  20. package/dist/core/mst-operations.d.ts +0 -459
  21. package/dist/core/mst-operations.js +0 -885
  22. package/dist/core/mst-operations.js.map +0 -1
  23. package/dist/core/node/BaseNode.d.ts +0 -62
  24. package/dist/core/node/BaseNode.js +0 -152
  25. package/dist/core/node/BaseNode.js.map +0 -1
  26. package/dist/core/node/Hook.d.ts +0 -17
  27. package/dist/core/node/Hook.js +0 -15
  28. package/dist/core/node/Hook.js.map +0 -1
  29. package/dist/core/node/create-node.d.ts +0 -16
  30. package/dist/core/node/create-node.js +0 -41
  31. package/dist/core/node/create-node.js.map +0 -1
  32. package/dist/core/node/identifier-cache.d.ts +0 -19
  33. package/dist/core/node/identifier-cache.js +0 -115
  34. package/dist/core/node/identifier-cache.js.map +0 -1
  35. package/dist/core/node/livelinessChecking.d.ts +0 -37
  36. package/dist/core/node/livelinessChecking.js +0 -38
  37. package/dist/core/node/livelinessChecking.js.map +0 -1
  38. package/dist/core/node/node-utils.d.ts +0 -83
  39. package/dist/core/node/node-utils.js +0 -165
  40. package/dist/core/node/node-utils.js.map +0 -1
  41. package/dist/core/node/object-node.d.ts +0 -101
  42. package/dist/core/node/object-node.js +0 -546
  43. package/dist/core/node/object-node.js.map +0 -1
  44. package/dist/core/node/scalar-node.d.ts +0 -21
  45. package/dist/core/node/scalar-node.js +0 -90
  46. package/dist/core/node/scalar-node.js.map +0 -1
  47. package/dist/core/process.d.ts +0 -50
  48. package/dist/core/process.js +0 -39
  49. package/dist/core/process.js.map +0 -1
  50. package/dist/core/type/type-checker.d.ts +0 -69
  51. package/dist/core/type/type-checker.js +0 -154
  52. package/dist/core/type/type-checker.js.map +0 -1
  53. package/dist/core/type/type.d.ts +0 -317
  54. package/dist/core/type/type.js +0 -251
  55. package/dist/core/type/type.js.map +0 -1
  56. package/dist/index.js +0 -85
  57. package/dist/index.js.map +0 -1
  58. package/dist/internal.d.ts +0 -39
  59. package/dist/internal.js +0 -60
  60. package/dist/internal.js.map +0 -1
  61. package/dist/middlewares/create-action-tracking-middleware.d.ts +0 -24
  62. package/dist/middlewares/create-action-tracking-middleware.js +0 -81
  63. package/dist/middlewares/create-action-tracking-middleware.js.map +0 -1
  64. package/dist/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
  65. package/dist/middlewares/createActionTrackingMiddleware2.js +0 -133
  66. package/dist/middlewares/createActionTrackingMiddleware2.js.map +0 -1
  67. package/dist/middlewares/on-action.d.ts +0 -87
  68. package/dist/middlewares/on-action.js +0 -215
  69. package/dist/middlewares/on-action.js.map +0 -1
  70. package/dist/package.json +0 -1
  71. package/dist/types/complex-types/array.d.ts +0 -81
  72. package/dist/types/complex-types/array.js +0 -353
  73. package/dist/types/complex-types/array.js.map +0 -1
  74. package/dist/types/complex-types/map.d.ts +0 -111
  75. package/dist/types/complex-types/map.js +0 -362
  76. package/dist/types/complex-types/map.js.map +0 -1
  77. package/dist/types/complex-types/model.d.ts +0 -193
  78. package/dist/types/complex-types/model.js +0 -478
  79. package/dist/types/complex-types/model.js.map +0 -1
  80. package/dist/types/index.d.ts +0 -33
  81. package/dist/types/index.js +0 -38
  82. package/dist/types/index.js.map +0 -1
  83. package/dist/types/primitives.d.ts +0 -125
  84. package/dist/types/primitives.js +0 -183
  85. package/dist/types/primitives.js.map +0 -1
  86. package/dist/types/utility-types/custom.d.ts +0 -75
  87. package/dist/types/utility-types/custom.js +0 -111
  88. package/dist/types/utility-types/custom.js.map +0 -1
  89. package/dist/types/utility-types/enumeration.d.ts +0 -5
  90. package/dist/types/utility-types/enumeration.js +0 -34
  91. package/dist/types/utility-types/enumeration.js.map +0 -1
  92. package/dist/types/utility-types/frozen.d.ts +0 -24
  93. package/dist/types/utility-types/frozen.js +0 -98
  94. package/dist/types/utility-types/frozen.js.map +0 -1
  95. package/dist/types/utility-types/identifier.d.ts +0 -87
  96. package/dist/types/utility-types/identifier.js +0 -130
  97. package/dist/types/utility-types/identifier.js.map +0 -1
  98. package/dist/types/utility-types/late.d.ts +0 -10
  99. package/dist/types/utility-types/late.js +0 -110
  100. package/dist/types/utility-types/late.js.map +0 -1
  101. package/dist/types/utility-types/lazy.d.ts +0 -23
  102. package/dist/types/utility-types/lazy.js +0 -77
  103. package/dist/types/utility-types/lazy.js.map +0 -1
  104. package/dist/types/utility-types/literal.d.ts +0 -38
  105. package/dist/types/utility-types/literal.js +0 -64
  106. package/dist/types/utility-types/literal.js.map +0 -1
  107. package/dist/types/utility-types/maybe.d.ts +0 -26
  108. package/dist/types/utility-types/maybe.js +0 -30
  109. package/dist/types/utility-types/maybe.js.map +0 -1
  110. package/dist/types/utility-types/optional.d.ts +0 -42
  111. package/dist/types/utility-types/optional.js +0 -141
  112. package/dist/types/utility-types/optional.js.map +0 -1
  113. package/dist/types/utility-types/reference.d.ts +0 -90
  114. package/dist/types/utility-types/reference.js +0 -393
  115. package/dist/types/utility-types/reference.js.map +0 -1
  116. package/dist/types/utility-types/refinement.d.ts +0 -10
  117. package/dist/types/utility-types/refinement.js +0 -86
  118. package/dist/types/utility-types/refinement.js.map +0 -1
  119. package/dist/types/utility-types/resilient.d.ts +0 -18
  120. package/dist/types/utility-types/resilient.js +0 -121
  121. package/dist/types/utility-types/resilient.js.map +0 -1
  122. package/dist/types/utility-types/snapshotProcessor.d.ts +0 -63
  123. package/dist/types/utility-types/snapshotProcessor.js +0 -162
  124. package/dist/types/utility-types/snapshotProcessor.js.map +0 -1
  125. package/dist/types/utility-types/union.d.ts +0 -78
  126. package/dist/types/utility-types/union.js +0 -246
  127. package/dist/types/utility-types/union.js.map +0 -1
  128. package/dist/utils.d.ts +0 -230
  129. package/dist/utils.js +0 -483
  130. package/dist/utils.js.map +0 -1
  131. package/esm/core/action.d.ts +0 -87
  132. package/esm/core/action.js +0 -219
  133. package/esm/core/action.js.map +0 -1
  134. package/esm/core/actionContext.d.ts +0 -27
  135. package/esm/core/actionContext.js +0 -37
  136. package/esm/core/actionContext.js.map +0 -1
  137. package/esm/core/flow.d.ts +0 -69
  138. package/esm/core/flow.js +0 -173
  139. package/esm/core/flow.js.map +0 -1
  140. package/esm/core/json-patch.d.ts +0 -46
  141. package/esm/core/json-patch.js +0 -125
  142. package/esm/core/json-patch.js.map +0 -1
  143. package/esm/core/mst-operations.d.ts +0 -459
  144. package/esm/core/mst-operations.js +0 -844
  145. package/esm/core/mst-operations.js.map +0 -1
  146. package/esm/core/node/BaseNode.d.ts +0 -62
  147. package/esm/core/node/BaseNode.js +0 -148
  148. package/esm/core/node/BaseNode.js.map +0 -1
  149. package/esm/core/node/Hook.d.ts +0 -17
  150. package/esm/core/node/Hook.js +0 -12
  151. package/esm/core/node/Hook.js.map +0 -1
  152. package/esm/core/node/create-node.d.ts +0 -16
  153. package/esm/core/node/create-node.js +0 -36
  154. package/esm/core/node/create-node.js.map +0 -1
  155. package/esm/core/node/identifier-cache.d.ts +0 -19
  156. package/esm/core/node/identifier-cache.js +0 -111
  157. package/esm/core/node/identifier-cache.js.map +0 -1
  158. package/esm/core/node/livelinessChecking.d.ts +0 -37
  159. package/esm/core/node/livelinessChecking.js +0 -33
  160. package/esm/core/node/livelinessChecking.js.map +0 -1
  161. package/esm/core/node/node-utils.d.ts +0 -83
  162. package/esm/core/node/node-utils.js +0 -153
  163. package/esm/core/node/node-utils.js.map +0 -1
  164. package/esm/core/node/object-node.d.ts +0 -101
  165. package/esm/core/node/object-node.js +0 -542
  166. package/esm/core/node/object-node.js.map +0 -1
  167. package/esm/core/node/scalar-node.d.ts +0 -21
  168. package/esm/core/node/scalar-node.js +0 -86
  169. package/esm/core/node/scalar-node.js.map +0 -1
  170. package/esm/core/process.d.ts +0 -50
  171. package/esm/core/process.js +0 -35
  172. package/esm/core/process.js.map +0 -1
  173. package/esm/core/type/type-checker.d.ts +0 -69
  174. package/esm/core/type/type-checker.js +0 -144
  175. package/esm/core/type/type-checker.js.map +0 -1
  176. package/esm/core/type/type.d.ts +0 -317
  177. package/esm/core/type/type.js +0 -243
  178. package/esm/core/type/type.js.map +0 -1
  179. package/esm/index.d.ts +0 -2
  180. package/esm/index.js +0 -2
  181. package/esm/index.js.map +0 -1
  182. package/esm/internal.d.ts +0 -39
  183. package/esm/internal.js +0 -44
  184. package/esm/internal.js.map +0 -1
  185. package/esm/middlewares/create-action-tracking-middleware.d.ts +0 -24
  186. package/esm/middlewares/create-action-tracking-middleware.js +0 -78
  187. package/esm/middlewares/create-action-tracking-middleware.js.map +0 -1
  188. package/esm/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
  189. package/esm/middlewares/createActionTrackingMiddleware2.js +0 -130
  190. package/esm/middlewares/createActionTrackingMiddleware2.js.map +0 -1
  191. package/esm/middlewares/on-action.d.ts +0 -87
  192. package/esm/middlewares/on-action.js +0 -210
  193. package/esm/middlewares/on-action.js.map +0 -1
  194. package/esm/types/complex-types/array.d.ts +0 -81
  195. package/esm/types/complex-types/array.js +0 -347
  196. package/esm/types/complex-types/array.js.map +0 -1
  197. package/esm/types/complex-types/map.d.ts +0 -111
  198. package/esm/types/complex-types/map.js +0 -356
  199. package/esm/types/complex-types/map.js.map +0 -1
  200. package/esm/types/complex-types/model.d.ts +0 -193
  201. package/esm/types/complex-types/model.js +0 -471
  202. package/esm/types/complex-types/model.js.map +0 -1
  203. package/esm/types/index.d.ts +0 -33
  204. package/esm/types/index.js +0 -35
  205. package/esm/types/index.js.map +0 -1
  206. package/esm/types/primitives.d.ts +0 -125
  207. package/esm/types/primitives.js +0 -177
  208. package/esm/types/primitives.js.map +0 -1
  209. package/esm/types/utility-types/custom.d.ts +0 -75
  210. package/esm/types/utility-types/custom.js +0 -106
  211. package/esm/types/utility-types/custom.js.map +0 -1
  212. package/esm/types/utility-types/enumeration.d.ts +0 -5
  213. package/esm/types/utility-types/enumeration.js +0 -31
  214. package/esm/types/utility-types/enumeration.js.map +0 -1
  215. package/esm/types/utility-types/frozen.d.ts +0 -24
  216. package/esm/types/utility-types/frozen.js +0 -92
  217. package/esm/types/utility-types/frozen.js.map +0 -1
  218. package/esm/types/utility-types/identifier.d.ts +0 -87
  219. package/esm/types/utility-types/identifier.js +0 -121
  220. package/esm/types/utility-types/identifier.js.map +0 -1
  221. package/esm/types/utility-types/late.d.ts +0 -10
  222. package/esm/types/utility-types/late.js +0 -106
  223. package/esm/types/utility-types/late.js.map +0 -1
  224. package/esm/types/utility-types/lazy.d.ts +0 -23
  225. package/esm/types/utility-types/lazy.js +0 -72
  226. package/esm/types/utility-types/lazy.js.map +0 -1
  227. package/esm/types/utility-types/literal.d.ts +0 -38
  228. package/esm/types/utility-types/literal.js +0 -58
  229. package/esm/types/utility-types/literal.js.map +0 -1
  230. package/esm/types/utility-types/maybe.d.ts +0 -26
  231. package/esm/types/utility-types/maybe.js +0 -26
  232. package/esm/types/utility-types/maybe.js.map +0 -1
  233. package/esm/types/utility-types/optional.d.ts +0 -42
  234. package/esm/types/utility-types/optional.js +0 -135
  235. package/esm/types/utility-types/optional.js.map +0 -1
  236. package/esm/types/utility-types/reference.d.ts +0 -90
  237. package/esm/types/utility-types/reference.js +0 -383
  238. package/esm/types/utility-types/reference.js.map +0 -1
  239. package/esm/types/utility-types/refinement.d.ts +0 -10
  240. package/esm/types/utility-types/refinement.js +0 -82
  241. package/esm/types/utility-types/refinement.js.map +0 -1
  242. package/esm/types/utility-types/resilient.d.ts +0 -18
  243. package/esm/types/utility-types/resilient.js +0 -118
  244. package/esm/types/utility-types/resilient.js.map +0 -1
  245. package/esm/types/utility-types/snapshotProcessor.d.ts +0 -63
  246. package/esm/types/utility-types/snapshotProcessor.js +0 -159
  247. package/esm/types/utility-types/snapshotProcessor.js.map +0 -1
  248. package/esm/types/utility-types/union.d.ts +0 -78
  249. package/esm/types/utility-types/union.js +0 -240
  250. package/esm/types/utility-types/union.js.map +0 -1
  251. package/esm/utils.d.ts +0 -230
  252. package/esm/utils.js +0 -449
  253. package/esm/utils.js.map +0 -1
@@ -1,471 +0,0 @@
1
- import { _getAdministration, _interceptReads, action, computed, defineProperty, getAtom, intercept, makeObservable, observable, observe, set } from "mobx";
2
- import { ComplexType } from "../../core/type/type.js";
3
- import { ArrayType, EMPTY_ARRAY, EMPTY_OBJECT, Hook, MapType, TypeFlags, addHiddenFinalProp, addHiddenWritableProp, assertArg, assertIsString, createActionInvoker, createObjectNode, devMode, escapeJsonPath, fail, freeze, getContextForPath, getPrimitiveFactoryFromValue, getStateTreeNode, isPlainObject, isPrimitive, isStateTreeNode, isType, mobxShallow, optional, popContext, typeCheckFailure, typeCheckSuccess, typecheckInternal } from "../../internal.js";
4
- const PRE_PROCESS_SNAPSHOT = "preProcessSnapshot";
5
- const POST_PROCESS_SNAPSHOT = "postProcessSnapshot";
6
- function objectTypeToString() {
7
- return getStateTreeNode(this).toString();
8
- }
9
- const defaultObjectOptions = {
10
- name: "AnonymousModel",
11
- properties: {},
12
- initializers: EMPTY_ARRAY
13
- };
14
- function toPropertiesObject(declaredProps) {
15
- const keysList = Object.keys(declaredProps);
16
- const alreadySeenKeys = new Set();
17
- keysList.forEach(key => {
18
- if (alreadySeenKeys.has(key)) {
19
- throw fail(`${key} is declared twice in the model. Model should not contain the same keys`);
20
- }
21
- alreadySeenKeys.add(key);
22
- });
23
- // loop through properties and ensures that all items are types
24
- return keysList.reduce((props, key) => {
25
- // warn if user intended a HOOK
26
- if (key in Hook) {
27
- throw fail(`Hook '${key}' was defined as property. Hooks should be defined as part of the actions`);
28
- }
29
- // the user intended to use a view
30
- const descriptor = Object.getOwnPropertyDescriptor(declaredProps, key);
31
- if ("get" in descriptor) {
32
- throw fail("Getters are not supported as properties. Please use views instead");
33
- }
34
- // undefined and null are not valid
35
- const value = descriptor.value;
36
- if (value === null || value === undefined) {
37
- throw fail("The default value of an attribute cannot be null or undefined as the type cannot be inferred. Did you mean `types.maybe(someType)`?");
38
- }
39
- // its a primitive, convert to its type
40
- else if (isPrimitive(value)) {
41
- props[key] = optional(getPrimitiveFactoryFromValue(value), value);
42
- }
43
- // map defaults to empty object automatically for models
44
- else if (value instanceof MapType) {
45
- props[key] = optional(value, {});
46
- }
47
- else if (value instanceof ArrayType) {
48
- props[key] = optional(value, []);
49
- }
50
- // its already a type
51
- else if (isType(value)) {
52
- // do nothing, it's already a type
53
- }
54
- // its a function, maybe the user wanted a view?
55
- else if (devMode() && typeof value === "function") {
56
- throw fail(`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?`);
57
- }
58
- // no other complex values
59
- else if (devMode() && typeof value === "object") {
60
- throw fail(`Invalid type definition for property '${key}', it looks like you passed an object. Try passing another model type or a types.frozen.`);
61
- }
62
- else {
63
- throw fail(`Invalid type definition for property '${key}', cannot infer a type from a value like '${value}' (${typeof value})`);
64
- }
65
- return props;
66
- }, { ...declaredProps });
67
- }
68
- /**
69
- * @internal
70
- * @hidden
71
- */
72
- export class ModelType extends ComplexType {
73
- flags = TypeFlags.Object;
74
- /*
75
- * The original object definition
76
- */
77
- initializers;
78
- properties;
79
- preProcessor;
80
- postProcessor;
81
- propertyNames;
82
- constructor(opts) {
83
- super(opts.name || defaultObjectOptions.name);
84
- Object.assign(this, defaultObjectOptions, opts);
85
- // ensures that any default value gets converted to its related type
86
- this.properties = toPropertiesObject(this.properties);
87
- freeze(this.properties); // make sure nobody messes with it
88
- this.propertyNames = Object.keys(this.properties);
89
- this.identifierAttribute = this._getIdentifierAttribute();
90
- }
91
- _getIdentifierAttribute() {
92
- let identifierAttribute = undefined;
93
- this.forAllProps((propName, propType) => {
94
- if (propType.flags & TypeFlags.Identifier) {
95
- if (identifierAttribute) {
96
- throw fail(`Cannot define property '${propName}' as object identifier, property '${identifierAttribute}' is already defined as identifier property`);
97
- }
98
- identifierAttribute = propName;
99
- }
100
- });
101
- return identifierAttribute;
102
- }
103
- cloneAndEnhance(opts) {
104
- return new ModelType({
105
- name: opts.name || this.name,
106
- properties: Object.assign({}, this.properties, opts.properties),
107
- initializers: this.initializers.concat(opts.initializers || []),
108
- preProcessor: opts.preProcessor || this.preProcessor,
109
- postProcessor: opts.postProcessor || this.postProcessor
110
- });
111
- }
112
- actions(fn) {
113
- const actionInitializer = (self) => {
114
- this.instantiateActions(self, fn(self));
115
- return self;
116
- };
117
- return this.cloneAndEnhance({ initializers: [actionInitializer] });
118
- }
119
- instantiateActions(self, actions) {
120
- // check if return is correct
121
- if (!isPlainObject(actions)) {
122
- throw fail(`actions initializer should return a plain object containing actions`);
123
- }
124
- // bind actions to the object created
125
- Object.keys(actions).forEach(name => {
126
- // warn if preprocessor was given
127
- if (name === PRE_PROCESS_SNAPSHOT) {
128
- throw fail(`Cannot define action '${PRE_PROCESS_SNAPSHOT}', it should be defined using 'type.preProcessSnapshot(fn)' instead`);
129
- }
130
- // warn if postprocessor was given
131
- if (name === POST_PROCESS_SNAPSHOT) {
132
- throw fail(`Cannot define action '${POST_PROCESS_SNAPSHOT}', it should be defined using 'type.postProcessSnapshot(fn)' instead`);
133
- }
134
- let action2 = actions[name];
135
- // apply hook composition
136
- const baseAction = self[name];
137
- if (name in Hook && baseAction) {
138
- const specializedAction = action2;
139
- action2 = function (...args) {
140
- baseAction(...args);
141
- specializedAction(...args);
142
- };
143
- }
144
- // the goal of this is to make sure actions using "this" can call themselves,
145
- // while still allowing the middlewares to register them
146
- const middlewares = action2.$mst_middleware; // make sure middlewares are not lost
147
- const boundAction = action2.bind(actions);
148
- boundAction._isFlowAction =
149
- action2._isFlowAction || false;
150
- boundAction.$mst_middleware = middlewares;
151
- const actionInvoker = createActionInvoker(self, name, boundAction);
152
- actions[name] = actionInvoker;
153
- (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(self, name, actionInvoker);
154
- });
155
- }
156
- named = name => {
157
- return this.cloneAndEnhance({ name });
158
- };
159
- props = properties => {
160
- return this.cloneAndEnhance({ properties });
161
- };
162
- volatile(fn) {
163
- if (typeof fn !== "function") {
164
- throw fail(`You passed an ${typeof fn} to volatile state as an argument, when function is expected`);
165
- }
166
- const stateInitializer = (self) => {
167
- this.instantiateVolatileState(self, fn(self));
168
- return self;
169
- };
170
- return this.cloneAndEnhance({ initializers: [stateInitializer] });
171
- }
172
- instantiateVolatileState(self, state) {
173
- // check views return
174
- if (!isPlainObject(state)) {
175
- throw fail(`volatile state initializer should return a plain object containing state`);
176
- }
177
- set(self, state);
178
- }
179
- extend(fn) {
180
- const initializer = (self) => {
181
- const { actions, views, state, ...rest } = fn(self);
182
- for (const key in rest) {
183
- throw fail(`The \`extend\` function should return an object with a subset of the fields 'actions', 'views' and 'state'. Found invalid key '${key}'`);
184
- }
185
- if (state) {
186
- this.instantiateVolatileState(self, state);
187
- }
188
- if (views) {
189
- this.instantiateViews(self, views);
190
- }
191
- if (actions) {
192
- this.instantiateActions(self, actions);
193
- }
194
- return self;
195
- };
196
- return this.cloneAndEnhance({ initializers: [initializer] });
197
- }
198
- views(fn) {
199
- const viewInitializer = (self) => {
200
- this.instantiateViews(self, fn(self));
201
- return self;
202
- };
203
- return this.cloneAndEnhance({ initializers: [viewInitializer] });
204
- }
205
- instantiateViews(self, views) {
206
- // check views return
207
- if (!isPlainObject(views)) {
208
- throw fail(`views initializer should return a plain object containing views`);
209
- }
210
- Object.getOwnPropertyNames(views).forEach(key => {
211
- // is this a computed property?
212
- const descriptor = Object.getOwnPropertyDescriptor(views, key);
213
- if ("get" in descriptor) {
214
- defineProperty(self, key, descriptor);
215
- makeObservable(self, { [key]: computed });
216
- }
217
- else if (typeof descriptor.value === "function") {
218
- // this is a view function, merge as is!
219
- // See #646, allow models to be mocked
220
- ;
221
- (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(self, key, descriptor.value);
222
- }
223
- else {
224
- throw fail(`A view member should either be a function or getter based property`);
225
- }
226
- });
227
- }
228
- preProcessSnapshot = preProcessor => {
229
- const currentPreprocessor = this.preProcessor;
230
- if (!currentPreprocessor) {
231
- return this.cloneAndEnhance({ preProcessor });
232
- }
233
- else {
234
- return this.cloneAndEnhance({
235
- preProcessor: snapshot => currentPreprocessor(preProcessor(snapshot))
236
- });
237
- }
238
- };
239
- postProcessSnapshot = postProcessor => {
240
- const currentPostprocessor = this.postProcessor;
241
- if (!currentPostprocessor) {
242
- return this.cloneAndEnhance({ postProcessor });
243
- }
244
- else {
245
- return this.cloneAndEnhance({
246
- postProcessor: snapshot => postProcessor(currentPostprocessor(snapshot))
247
- });
248
- }
249
- };
250
- instantiate(parent, subpath, environment, initialValue) {
251
- const value = isStateTreeNode(initialValue)
252
- ? initialValue
253
- : this.applySnapshotPreProcessor(initialValue);
254
- return createObjectNode(this, parent, subpath, environment, value);
255
- // Optimization: record all prop- view- and action names after first construction, and generate an optimal base class
256
- // that pre-reserves all these fields for fast object-member lookups
257
- }
258
- initializeChildNodes(objNode, initialSnapshot = {}) {
259
- const type = objNode.type;
260
- const result = {};
261
- type.forAllProps((name, childType) => {
262
- result[name] = childType.instantiate(objNode, name, undefined, initialSnapshot[name]);
263
- });
264
- return result;
265
- }
266
- createNewInstance(childNodes) {
267
- const options = { ...mobxShallow, name: this.name };
268
- return observable.object(childNodes, EMPTY_OBJECT, options);
269
- }
270
- finalizeNewInstance(node, instance) {
271
- addHiddenFinalProp(instance, "toString", objectTypeToString);
272
- this.forAllProps(name => {
273
- _interceptReads(instance, name, node.unbox);
274
- });
275
- this.initializers.reduce((self, fn) => fn(self), instance);
276
- intercept(instance, this.willChange);
277
- observe(instance, this.didChange);
278
- }
279
- willChange(chg) {
280
- // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop
281
- const change = chg;
282
- const node = getStateTreeNode(change.object);
283
- const subpath = change.name;
284
- node.assertWritable({ subpath });
285
- const childType = node.type.properties[subpath];
286
- // only properties are typed, state are stored as-is references
287
- if (childType) {
288
- typecheckInternal(childType, change.newValue);
289
- change.newValue = childType.reconcile(node.getChildNode(subpath), change.newValue, node, subpath);
290
- }
291
- return change;
292
- }
293
- didChange(chg) {
294
- // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop
295
- const change = chg;
296
- const childNode = getStateTreeNode(change.object);
297
- const childType = childNode.type.properties[change.name];
298
- if (!childType) {
299
- // don't emit patches for volatile state
300
- return;
301
- }
302
- const oldChildValue = change.oldValue ? change.oldValue.snapshot : undefined;
303
- childNode.emitPatch({
304
- op: "replace",
305
- path: escapeJsonPath(change.name),
306
- value: change.newValue.snapshot,
307
- oldValue: oldChildValue
308
- }, childNode);
309
- }
310
- getChildren(node) {
311
- const res = [];
312
- this.forAllProps(name => {
313
- res.push(this.getChildNode(node, name));
314
- });
315
- return res;
316
- }
317
- getChildNode(node, key) {
318
- if (!(key in this.properties)) {
319
- throw fail("Not a value property: " + key);
320
- }
321
- const adm = _getAdministration(node.storedValue, key);
322
- const childNode = adm.raw?.();
323
- if (!childNode) {
324
- throw fail("Node not available for property " + key);
325
- }
326
- return childNode;
327
- }
328
- getSnapshot(node, applyPostProcess = true) {
329
- const res = {};
330
- this.forAllProps((name, _type) => {
331
- try {
332
- // TODO: FIXME, make sure the observable ref is used!
333
- const atom = getAtom(node.storedValue, name);
334
- atom.reportObserved();
335
- }
336
- catch (_e) {
337
- throw fail(`${name} property is declared twice`);
338
- }
339
- res[name] = this.getChildNode(node, name).snapshot;
340
- });
341
- if (applyPostProcess) {
342
- return this.applySnapshotPostProcessor(res);
343
- }
344
- return res;
345
- }
346
- processInitialSnapshot(childNodes) {
347
- const processed = {};
348
- Object.keys(childNodes).forEach(key => {
349
- processed[key] = childNodes[key].getSnapshot();
350
- });
351
- return this.applySnapshotPostProcessor(processed);
352
- }
353
- applyPatchLocally(node, subpath, patch) {
354
- if (!(patch.op === "replace" || patch.op === "add")) {
355
- throw fail(`object does not support operation ${patch.op}`);
356
- }
357
- ;
358
- node.storedValue[subpath] = patch.value;
359
- }
360
- applySnapshot(node, snapshot) {
361
- typecheckInternal(this, snapshot);
362
- const preProcessedSnapshot = this.applySnapshotPreProcessor(snapshot);
363
- this.forAllProps(name => {
364
- ;
365
- node.storedValue[name] = preProcessedSnapshot[name];
366
- });
367
- }
368
- applySnapshotPreProcessor(snapshot) {
369
- const processor = this.preProcessor;
370
- return processor ? processor.call(null, snapshot) : snapshot;
371
- }
372
- applySnapshotPostProcessor(snapshot) {
373
- const postProcessor = this.postProcessor;
374
- if (postProcessor) {
375
- return postProcessor.call(null, snapshot);
376
- }
377
- return snapshot;
378
- }
379
- getChildType(propertyName) {
380
- assertIsString(propertyName, 1);
381
- return this.properties[propertyName];
382
- }
383
- isValidSnapshot(value, context) {
384
- const snapshot = this.applySnapshotPreProcessor(value);
385
- if (!isPlainObject(snapshot)) {
386
- return typeCheckFailure(context, snapshot, "Value is not a plain object");
387
- }
388
- for (const key of this.propertyNames) {
389
- const propType = this.properties[key];
390
- getContextForPath(context, key, propType);
391
- const errors = propType.validate(snapshot[key], context);
392
- popContext(context);
393
- if (errors.length > 0) {
394
- return errors;
395
- }
396
- }
397
- return typeCheckSuccess();
398
- }
399
- forAllProps(fn) {
400
- this.propertyNames.forEach(key => fn(key, this.properties[key]));
401
- }
402
- describe() {
403
- // optimization: cache
404
- return ("{ " +
405
- this.propertyNames
406
- .map(key => key + ": " + this.properties[key].describe())
407
- .join("; ") +
408
- " }");
409
- }
410
- getDefaultSnapshot() {
411
- return EMPTY_OBJECT;
412
- }
413
- removeChild(node, subpath) {
414
- ;
415
- node.storedValue[subpath] = undefined;
416
- }
417
- }
418
- ModelType.prototype.applySnapshot = action(ModelType.prototype.applySnapshot);
419
- /**
420
- * `types.model` - Creates a new model type by providing a name, properties, volatile state and actions.
421
- *
422
- * See the [model type](/concepts/trees#creating-models) description or the [getting started](intro/getting-started.md#getting-started-1) tutorial.
423
- */
424
- export function model(...args) {
425
- if (devMode() && typeof args[0] !== "string" && args[1]) {
426
- throw fail("Model creation failed. First argument must be a string when two arguments are provided");
427
- }
428
- const name = typeof args[0] === "string" ? args.shift() : "AnonymousModel";
429
- const properties = args.shift() || {};
430
- return new ModelType({ name, properties });
431
- }
432
- /**
433
- * `types.compose` - Composes a new model from one or more existing model types.
434
- * This method can be invoked in two forms:
435
- * Given 2 or more model types, the types are composed into a new Type.
436
- * Given first parameter as a string and 2 or more model types,
437
- * the types are composed into a new Type with the given name
438
- */
439
- export function compose(...args) {
440
- // TODO: just join the base type names if no name is provided
441
- const hasTypename = typeof args[0] === "string";
442
- const typeName = hasTypename ? args[0] : "AnonymousModel";
443
- if (hasTypename) {
444
- args.shift();
445
- }
446
- // check all parameters
447
- if (devMode()) {
448
- args.forEach((type, i) => {
449
- assertArg(type, isModelType, "mobx-state-tree model type", hasTypename ? i + 2 : i + 1);
450
- });
451
- }
452
- return args
453
- .reduce((prev, cur) => prev.cloneAndEnhance({
454
- name: prev.name + "_" + cur.name,
455
- properties: cur.properties,
456
- initializers: cur.initializers,
457
- preProcessor: (snapshot) => cur.applySnapshotPreProcessor(prev.applySnapshotPreProcessor(snapshot)),
458
- postProcessor: (snapshot) => cur.applySnapshotPostProcessor(prev.applySnapshotPostProcessor(snapshot))
459
- }))
460
- .named(typeName);
461
- }
462
- /**
463
- * Returns if a given value represents a model type.
464
- *
465
- * @param type
466
- * @returns
467
- */
468
- export function isModelType(type) {
469
- return isType(type) && (type.flags & TypeFlags.Object) > 0;
470
- }
471
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/types/complex-types/model.ts"],"names":[],"mappings":"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","sourcesContent":["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 { ComplexType } from \"../../core/type/type.ts\"\nimport {\n type AnyNode,\n type AnyObjectNode,\n ArrayType,\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"]}
@@ -1,33 +0,0 @@
1
- import { array, compose, custom, enumeration, frozen, late, lazy, literal, map, maybe, maybeNull, model, optional, reference, refinement, safeReference, resilient, snapshotProcessor, union } from "../internal.ts";
2
- export declare const types: {
3
- enumeration: typeof enumeration;
4
- model: typeof model;
5
- compose: typeof compose;
6
- custom: typeof custom;
7
- reference: typeof reference;
8
- safeReference: typeof safeReference;
9
- union: typeof union;
10
- optional: typeof optional;
11
- literal: typeof literal;
12
- maybe: typeof maybe;
13
- maybeNull: typeof maybeNull;
14
- refinement: typeof refinement;
15
- string: import("../internal.ts").ISimpleType<string>;
16
- boolean: import("../internal.ts").ISimpleType<boolean>;
17
- number: import("../internal.ts").ISimpleType<number>;
18
- integer: import("../internal.ts").ISimpleType<number>;
19
- float: import("../internal.ts").ISimpleType<number>;
20
- finite: import("../internal.ts").ISimpleType<number>;
21
- Date: import("../internal.ts").IType<number | Date, number, Date>;
22
- map: typeof map;
23
- array: typeof array;
24
- frozen: typeof frozen;
25
- identifier: import("../internal.ts").ISimpleType<string>;
26
- identifierNumber: import("../internal.ts").ISimpleType<number>;
27
- late: typeof late;
28
- lazy: typeof lazy;
29
- undefined: import("../internal.ts").ISimpleType<undefined>;
30
- null: import("../internal.ts").ISimpleType<null>;
31
- snapshotProcessor: typeof snapshotProcessor;
32
- resilient: typeof resilient;
33
- };