@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.
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,356 +0,0 @@
1
- import { ObservableMap, _interceptReads, action, intercept, observable, observe, values } from "mobx";
2
- import { ComplexType } from "../../core/type/type.js";
3
- import { EMPTY_OBJECT, ModelType, ObjectNode, TypeFlags, addHiddenFinalProp, addHiddenWritableProp, asArray, cannotDetermineSubtype, createActionInvoker, createObjectNode, devMode, escapeJsonPath, fail, getContextForPath, getSnapshot, getStateTreeNode, isMutable, isPlainObject, isStateTreeNode, isType, isValidIdentifier, normalizeIdentifier, popContext, typeCheckFailure, typeCheckSuccess, typecheckInternal } from "../../internal.js";
4
- const needsIdentifierError = `Map.put can only be used to store complex values that have an identifier type attribute`;
5
- function tryCollectModelTypes(type, modelTypes) {
6
- const subtypes = type.getSubTypes();
7
- if (subtypes === cannotDetermineSubtype) {
8
- return false;
9
- }
10
- if (subtypes) {
11
- const subtypesArray = asArray(subtypes);
12
- for (const subtype of subtypesArray) {
13
- if (!tryCollectModelTypes(subtype, modelTypes)) {
14
- return false;
15
- }
16
- }
17
- }
18
- if (type instanceof ModelType) {
19
- modelTypes.push(type);
20
- }
21
- return true;
22
- }
23
- /**
24
- * @internal
25
- * @hidden
26
- */
27
- export var MapIdentifierMode;
28
- (function (MapIdentifierMode) {
29
- MapIdentifierMode[MapIdentifierMode["UNKNOWN"] = 0] = "UNKNOWN";
30
- MapIdentifierMode[MapIdentifierMode["YES"] = 1] = "YES";
31
- MapIdentifierMode[MapIdentifierMode["NO"] = 2] = "NO";
32
- })(MapIdentifierMode || (MapIdentifierMode = {}));
33
- class MSTMap extends ObservableMap {
34
- constructor(initialData, name) {
35
- super(initialData, observable.ref.enhancer, name);
36
- }
37
- get(key) {
38
- // maybe this is over-enthousiastic? normalize numeric keys to strings
39
- return super.get("" + key);
40
- }
41
- has(key) {
42
- return super.has("" + key);
43
- }
44
- delete(key) {
45
- return super.delete("" + key);
46
- }
47
- set(key, value) {
48
- return super.set("" + key, value);
49
- }
50
- put(value) {
51
- if (!value) {
52
- throw fail(`Map.put cannot be used to set empty values`);
53
- }
54
- if (isStateTreeNode(value)) {
55
- const node = getStateTreeNode(value);
56
- if (devMode()) {
57
- if (!node.identifierAttribute) {
58
- throw fail(needsIdentifierError);
59
- }
60
- }
61
- if (node.identifier === null) {
62
- throw fail(needsIdentifierError);
63
- }
64
- this.set(node.identifier, value);
65
- return value;
66
- }
67
- else if (!isMutable(value)) {
68
- throw fail(`Map.put can only be used to store complex values`);
69
- }
70
- else {
71
- const mapNode = getStateTreeNode(this);
72
- const mapType = mapNode.type;
73
- if (mapType.identifierMode !== MapIdentifierMode.YES) {
74
- throw fail(needsIdentifierError);
75
- }
76
- const idAttr = mapType.mapIdentifierAttribute;
77
- const id = value[idAttr];
78
- if (!isValidIdentifier(id)) {
79
- // try again but this time after creating a node for the value
80
- // since it might be an optional identifier
81
- const newNode = this.put(mapType.getChildType().create(value, mapNode.environment));
82
- return this.put(getSnapshot(newNode));
83
- }
84
- const key = normalizeIdentifier(id);
85
- this.set(key, value);
86
- return this.get(key);
87
- }
88
- }
89
- }
90
- /**
91
- * @internal
92
- * @hidden
93
- */
94
- export class MapType extends ComplexType {
95
- _subType;
96
- identifierMode = MapIdentifierMode.UNKNOWN;
97
- mapIdentifierAttribute = undefined;
98
- flags = TypeFlags.Map;
99
- hookInitializers = [];
100
- constructor(name, _subType, hookInitializers = []) {
101
- super(name);
102
- this._subType = _subType;
103
- this._determineIdentifierMode();
104
- this.hookInitializers = hookInitializers;
105
- }
106
- hooks(hooks) {
107
- const hookInitializers = this.hookInitializers.length > 0
108
- ? this.hookInitializers.concat(hooks)
109
- : [hooks];
110
- return new MapType(this.name, this._subType, hookInitializers);
111
- }
112
- instantiate(parent, subpath, environment, initialValue) {
113
- this._determineIdentifierMode();
114
- return createObjectNode(this, parent, subpath, environment, initialValue);
115
- }
116
- _determineIdentifierMode() {
117
- if (this.identifierMode !== MapIdentifierMode.UNKNOWN) {
118
- return;
119
- }
120
- const modelTypes = [];
121
- if (tryCollectModelTypes(this._subType, modelTypes)) {
122
- const identifierAttribute = modelTypes.reduce((current, type) => {
123
- if (!type.identifierAttribute) {
124
- return current;
125
- }
126
- if (current && current !== type.identifierAttribute) {
127
- throw 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`);
128
- }
129
- return type.identifierAttribute;
130
- }, undefined);
131
- if (identifierAttribute) {
132
- this.identifierMode = MapIdentifierMode.YES;
133
- this.mapIdentifierAttribute = identifierAttribute;
134
- }
135
- else {
136
- this.identifierMode = MapIdentifierMode.NO;
137
- }
138
- }
139
- }
140
- initializeChildNodes(objNode, initialSnapshot = {}) {
141
- const subType = objNode.type._subType;
142
- const result = {};
143
- Object.keys(initialSnapshot).forEach(name => {
144
- result[name] = subType.instantiate(objNode, name, undefined, initialSnapshot[name]);
145
- });
146
- return result;
147
- }
148
- createNewInstance(childNodes) {
149
- return new MSTMap(childNodes, this.name);
150
- }
151
- finalizeNewInstance(node, instance) {
152
- _interceptReads(instance, node.unbox);
153
- const type = node.type;
154
- type.hookInitializers.forEach(initializer => {
155
- const hooks = initializer(instance);
156
- Object.keys(hooks).forEach(name => {
157
- const hook = hooks[name];
158
- const actionInvoker = createActionInvoker(instance, name, hook);
159
- (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(instance, name, actionInvoker);
160
- });
161
- });
162
- intercept(instance, this.willChange);
163
- observe(instance, this.didChange);
164
- }
165
- describe() {
166
- return this.name;
167
- }
168
- getChildren(node) {
169
- // return (node.storedValue as ObservableMap<any>).values()
170
- return values(node.storedValue);
171
- }
172
- getChildNode(node, key) {
173
- const childNode = node.storedValue.get("" + key);
174
- if (!childNode) {
175
- throw fail("Not a child " + key);
176
- }
177
- return childNode;
178
- }
179
- willChange(change) {
180
- const node = getStateTreeNode(change.object);
181
- const key = change.name;
182
- node.assertWritable({ subpath: key });
183
- const mapType = node.type;
184
- const subType = mapType._subType;
185
- switch (change.type) {
186
- case "update":
187
- {
188
- const { newValue } = change;
189
- const oldValue = change.object.get(key);
190
- if (newValue === oldValue) {
191
- return null;
192
- }
193
- typecheckInternal(subType, newValue);
194
- change.newValue = subType.reconcile(node.getChildNode(key), change.newValue, node, key);
195
- mapType.processIdentifier(key, change.newValue);
196
- }
197
- break;
198
- case "add":
199
- {
200
- typecheckInternal(subType, change.newValue);
201
- change.newValue = subType.instantiate(node, key, undefined, change.newValue);
202
- mapType.processIdentifier(key, change.newValue);
203
- }
204
- break;
205
- }
206
- return change;
207
- }
208
- processIdentifier(expected, node) {
209
- if (this.identifierMode === MapIdentifierMode.YES &&
210
- node instanceof ObjectNode) {
211
- const identifier = node.identifier;
212
- if (identifier !== expected) {
213
- throw 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}'`);
214
- }
215
- }
216
- }
217
- getSnapshot(node) {
218
- const res = {};
219
- node.getChildren().forEach(childNode => {
220
- res[childNode.subpath] = childNode.snapshot;
221
- });
222
- return res;
223
- }
224
- processInitialSnapshot(childNodes) {
225
- const processed = {};
226
- Object.keys(childNodes).forEach(key => {
227
- processed[key] = childNodes[key].getSnapshot();
228
- });
229
- return processed;
230
- }
231
- didChange(change) {
232
- const node = getStateTreeNode(change.object);
233
- switch (change.type) {
234
- case "update":
235
- return void node.emitPatch({
236
- op: "replace",
237
- path: escapeJsonPath(change.name),
238
- value: change.newValue.snapshot,
239
- oldValue: change.oldValue ? change.oldValue.snapshot : undefined
240
- }, node);
241
- case "add":
242
- return void node.emitPatch({
243
- op: "add",
244
- path: escapeJsonPath(change.name),
245
- value: change.newValue.snapshot,
246
- oldValue: undefined
247
- }, node);
248
- case "delete":
249
- // a node got deleted, get the old snapshot and make the node die
250
- const oldSnapshot = change.oldValue.snapshot;
251
- change.oldValue.die();
252
- // emit the patch
253
- return void node.emitPatch({
254
- op: "remove",
255
- path: escapeJsonPath(change.name),
256
- oldValue: oldSnapshot
257
- }, node);
258
- }
259
- }
260
- applyPatchLocally(node, subpath, patch) {
261
- const target = node.storedValue;
262
- switch (patch.op) {
263
- case "add":
264
- case "replace":
265
- target.set(subpath, patch.value);
266
- break;
267
- case "remove":
268
- target.delete(subpath);
269
- break;
270
- }
271
- }
272
- applySnapshot(node, snapshot) {
273
- typecheckInternal(this, snapshot);
274
- const target = node.storedValue;
275
- const currentKeys = {};
276
- Array.from(target.keys()).forEach(key => {
277
- currentKeys[key] = false;
278
- });
279
- if (snapshot) {
280
- // Don't use target.replace, as it will throw away all existing items first
281
- for (const key in snapshot) {
282
- target.set(key, snapshot[key]);
283
- currentKeys["" + key] = true;
284
- }
285
- }
286
- Object.keys(currentKeys).forEach(key => {
287
- if (currentKeys[key] === false) {
288
- target.delete(key);
289
- }
290
- });
291
- }
292
- getChildType() {
293
- return this._subType;
294
- }
295
- isValidSnapshot(value, context) {
296
- if (!isPlainObject(value)) {
297
- return typeCheckFailure(context, value, "Value is not a plain object");
298
- }
299
- for (const key of Object.keys(value)) {
300
- getContextForPath(context, key, this._subType);
301
- const errors = this._subType.validate(value[key], context);
302
- popContext(context);
303
- if (errors.length > 0) {
304
- return errors;
305
- }
306
- }
307
- return typeCheckSuccess();
308
- }
309
- getDefaultSnapshot() {
310
- return EMPTY_OBJECT;
311
- }
312
- removeChild(node, subpath) {
313
- node.storedValue.delete(subpath);
314
- }
315
- }
316
- MapType.prototype.applySnapshot = action(MapType.prototype.applySnapshot);
317
- /**
318
- * `types.map` - Creates a key based collection type who's children are all of a uniform declared type.
319
- * If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.
320
- *
321
- * This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)
322
- *
323
- * Example:
324
- * ```ts
325
- * const Todo = types.model({
326
- * id: types.identifier,
327
- * task: types.string
328
- * })
329
- *
330
- * const TodoStore = types.model({
331
- * todos: types.map(Todo)
332
- * })
333
- *
334
- * const s = TodoStore.create({ todos: {} })
335
- * unprotect(s)
336
- * s.todos.set(17, { task: "Grab coffee", id: 17 })
337
- * s.todos.put({ task: "Grab cookie", id: 18 }) // put will infer key from the identifier
338
- * console.log(s.todos.get(17).task) // prints: "Grab coffee"
339
- * ```
340
- *
341
- * @param subtype
342
- * @returns
343
- */
344
- export function map(subtype) {
345
- return new MapType(`Map<string, ${subtype.name}>`, subtype);
346
- }
347
- /**
348
- * Returns if a given value represents a map type.
349
- *
350
- * @param type
351
- * @returns `true` if it is a map type.
352
- */
353
- export function isMapType(type) {
354
- return isType(type) && (type.flags & TypeFlags.Map) > 0;
355
- }
356
- //# 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"]}
@@ -1,193 +0,0 @@
1
- import { ComplexType } from "../../core/type/type.ts";
2
- import { type AnyNode, type AnyObjectNode, type FunctionWithFlag, type IAnyType, type IChildNodesMap, type IJsonPatch, type IStateTreeNode, type IType, type IValidationContext, type IValidationResult, type Instance, TypeFlags, type _CustomOrOther, type _NotCustomized } from "../../internal.ts";
3
- /** @hidden */
4
- export interface ModelProperties {
5
- [key: string]: IAnyType;
6
- }
7
- /** @hidden */
8
- export type ModelPrimitive = string | number | boolean | Date;
9
- /** @hidden */
10
- export interface ModelPropertiesDeclaration {
11
- [key: string]: ModelPrimitive | IAnyType;
12
- }
13
- /**
14
- * Unmaps syntax property declarations to a map of { propName: IType }
15
- *
16
- * @hidden
17
- */
18
- export type ModelPropertiesDeclarationToProperties<T extends ModelPropertiesDeclaration> = T extends {
19
- [k: string]: IAnyType;
20
- } ? T : {
21
- [K in keyof T]: T[K] extends IAnyType ? T[K] : T[K] extends string ? IType<string | undefined, string, string> : T[K] extends number ? IType<number | undefined, number, number> : T[K] extends boolean ? IType<boolean | undefined, boolean, boolean> : T[K] extends Date ? IType<number | Date | undefined, number, Date> : never;
22
- };
23
- /**
24
- * Checks if a value is optional (undefined, any or unknown).
25
- * @hidden
26
- *
27
- * Examples:
28
- * - string = false
29
- * - undefined = true
30
- * - string | undefined = true
31
- * - string & undefined = false, but we don't care
32
- * - any = true
33
- * - unknown = true
34
- */
35
- type IsOptionalValue<C, TV, FV> = undefined extends C ? TV : FV;
36
- /**
37
- * Name of the properties of an object that can't be set to undefined, any or unknown
38
- * @hidden
39
- */
40
- type DefinablePropsNames<T> = {
41
- [K in keyof T]: IsOptionalValue<T[K], never, K>;
42
- }[keyof T];
43
- /** @hidden */
44
- export declare const $nonEmptyObject: unique symbol;
45
- /** @hidden */
46
- export interface NonEmptyObject {
47
- [$nonEmptyObject]?: any;
48
- }
49
- /** @hidden */
50
- export type ExtractCFromProps<P extends ModelProperties> = {
51
- [k in keyof P]: P[k]["CreationType"];
52
- };
53
- /** @hidden */
54
- export type ModelCreationType<PC> = {
55
- [P in DefinablePropsNames<PC>]: PC[P];
56
- } & Partial<PC> & NonEmptyObject;
57
- /** @hidden */
58
- export type ModelCreationType2<P extends ModelProperties, CustomC> = keyof P extends never ? IStateTreeNode : _CustomOrOther<CustomC, ModelCreationType<ExtractCFromProps<P>>>;
59
- /** @hidden */
60
- export type ModelSnapshotType<P extends ModelProperties> = {
61
- [K in keyof P]: P[K]["SnapshotType"];
62
- } & NonEmptyObject;
63
- /** @hidden */
64
- export type ModelSnapshotType2<P extends ModelProperties, CustomS> = _CustomOrOther<CustomS, ModelSnapshotType<P>>;
65
- /**
66
- * @hidden
67
- * we keep this separate from ModelInstanceType to shorten model instance types generated declarations
68
- */
69
- export type ModelInstanceTypeProps<P extends ModelProperties> = {
70
- [K in keyof P]: P[K]["Type"];
71
- } & NonEmptyObject;
72
- /**
73
- * @hidden
74
- * do not transform this to an interface or model instance type generated declarations will be longer
75
- */
76
- export type ModelInstanceType<P extends ModelProperties, O> = ModelInstanceTypeProps<P> & O;
77
- /** @hidden */
78
- export interface ModelActions {
79
- [key: string]: FunctionWithFlag;
80
- }
81
- export interface IModelType<PROPS extends ModelProperties, OTHERS, CustomC = _NotCustomized, CustomS = _NotCustomized> extends IType<ModelCreationType2<PROPS, CustomC>, ModelSnapshotType2<PROPS, CustomS>, ModelInstanceType<PROPS, OTHERS>> {
82
- readonly properties: PROPS;
83
- named(newName: string): IModelType<PROPS, OTHERS, CustomC, CustomS>;
84
- props<PROPS2 extends ModelPropertiesDeclaration>(props: PROPS2): IModelType<PROPS & ModelPropertiesDeclarationToProperties<PROPS2>, OTHERS, CustomC, CustomS>;
85
- views<V extends object>(fn: (self: Instance<this>) => V): IModelType<PROPS, OTHERS & V, CustomC, CustomS>;
86
- actions<A extends ModelActions>(fn: (self: Instance<this>) => A): IModelType<PROPS, OTHERS & A, CustomC, CustomS>;
87
- volatile<TP extends object>(fn: (self: Instance<this>) => TP): IModelType<PROPS, OTHERS & TP, CustomC, CustomS>;
88
- extend<A extends ModelActions = {}, V extends object = {}, VS extends object = {}>(fn: (self: Instance<this>) => {
89
- actions?: A;
90
- views?: V;
91
- state?: VS;
92
- }): IModelType<PROPS, OTHERS & A & V & VS, CustomC, CustomS>;
93
- preProcessSnapshot<NewC = ModelCreationType2<PROPS, CustomC>>(fn: (snapshot: NewC) => ModelCreationType2<PROPS, CustomC>): IModelType<PROPS, OTHERS, NewC, CustomS>;
94
- postProcessSnapshot<NewS = ModelSnapshotType2<PROPS, CustomS>>(fn: (snapshot: ModelSnapshotType2<PROPS, CustomS>) => NewS): IModelType<PROPS, OTHERS, CustomC, NewS>;
95
- }
96
- /**
97
- * Any model type.
98
- */
99
- export interface IAnyModelType extends IModelType<any, any, any, any> {
100
- }
101
- /** @hidden */
102
- export type ExtractProps<T extends IAnyModelType> = T extends IModelType<infer P, any, any, any> ? P : never;
103
- /** @hidden */
104
- export type ExtractOthers<T extends IAnyModelType> = T extends IModelType<any, infer O, any, any> ? O : never;
105
- /**
106
- * @internal
107
- * @hidden
108
- */
109
- export interface ModelTypeConfig {
110
- name?: string;
111
- properties?: ModelPropertiesDeclaration;
112
- initializers?: ReadonlyArray<(instance: any) => any>;
113
- preProcessor?: (snapshot: any) => any;
114
- postProcessor?: (snapshot: any) => any;
115
- }
116
- /**
117
- * @internal
118
- * @hidden
119
- */
120
- export declare class ModelType<PROPS extends ModelProperties, OTHERS, CustomC, CustomS, MT extends IModelType<PROPS, OTHERS, CustomC, CustomS>> extends ComplexType<ModelCreationType2<PROPS, CustomC>, ModelSnapshotType2<PROPS, CustomS>, ModelInstanceType<PROPS, OTHERS>> implements IModelType<PROPS, OTHERS, CustomC, CustomS> {
121
- readonly flags = TypeFlags.Object;
122
- readonly initializers: ((instance: any) => any)[];
123
- readonly properties: PROPS;
124
- private preProcessor;
125
- private postProcessor;
126
- readonly propertyNames: string[];
127
- constructor(opts: ModelTypeConfig);
128
- private _getIdentifierAttribute;
129
- cloneAndEnhance(opts: ModelTypeConfig): IAnyModelType;
130
- actions<A extends ModelActions>(fn: (self: Instance<this>) => A): IAnyModelType;
131
- private instantiateActions;
132
- named: MT["named"];
133
- props: MT["props"];
134
- volatile<TP extends object>(fn: (self: Instance<this>) => TP): IAnyModelType;
135
- private instantiateVolatileState;
136
- extend<A extends ModelActions = {}, V extends object = {}, VS extends object = {}>(fn: (self: Instance<this>) => {
137
- actions?: A;
138
- views?: V;
139
- state?: VS;
140
- }): IAnyModelType;
141
- views<V extends object>(fn: (self: Instance<this>) => V): IAnyModelType;
142
- private instantiateViews;
143
- preProcessSnapshot: MT["preProcessSnapshot"];
144
- postProcessSnapshot: MT["postProcessSnapshot"];
145
- instantiate(parent: AnyObjectNode | null, subpath: string, environment: any, initialValue: this["C"] | this["T"]): this["N"];
146
- initializeChildNodes(objNode: this["N"], initialSnapshot?: any): IChildNodesMap;
147
- createNewInstance(childNodes: IChildNodesMap): this["T"];
148
- finalizeNewInstance(node: this["N"], instance: this["T"]): void;
149
- private willChange;
150
- private didChange;
151
- getChildren(node: this["N"]): ReadonlyArray<AnyNode>;
152
- getChildNode(node: this["N"], key: string): AnyNode;
153
- getSnapshot(node: this["N"], applyPostProcess?: boolean): this["S"];
154
- processInitialSnapshot(childNodes: IChildNodesMap): this["S"];
155
- applyPatchLocally(node: this["N"], subpath: string, patch: IJsonPatch): void;
156
- applySnapshot(node: this["N"], snapshot: this["C"]): void;
157
- applySnapshotPreProcessor(snapshot: any): any;
158
- applySnapshotPostProcessor(snapshot: any): any;
159
- getChildType(propertyName: string): IAnyType;
160
- isValidSnapshot(value: this["C"], context: IValidationContext): IValidationResult;
161
- private forAllProps;
162
- describe(): string;
163
- getDefaultSnapshot(): this["C"];
164
- removeChild(node: this["N"], subpath: string): void;
165
- }
166
- export declare function model<P extends ModelPropertiesDeclaration = {}>(name: string, properties?: P): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>;
167
- export declare function model<P extends ModelPropertiesDeclaration = {}>(properties?: P): IModelType<ModelPropertiesDeclarationToProperties<P>, {}>;
168
- /** @hidden */
169
- export type _CustomJoin<A, B> = A extends _NotCustomized ? B : A & B;
170
- export declare 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>>;
171
- export declare 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>>;
172
- export declare 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>>>;
173
- export declare 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>>>;
174
- export declare 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>>>>;
175
- export declare 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>>>>;
176
- export declare 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>>>>>;
177
- export declare 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: 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>>>>>;
178
- export declare 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 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>>>>>>;
179
- export declare 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 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>>>>>>;
180
- export declare 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 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>>>>>>>;
181
- export declare 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 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>>>>>>>;
182
- export declare 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 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>>>>>>>>;
183
- export declare 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 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>>>>>>>>;
184
- export declare 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 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>>>>>>>>>;
185
- export declare 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 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>>>>>>>>>;
186
- /**
187
- * Returns if a given value represents a model type.
188
- *
189
- * @param type
190
- * @returns
191
- */
192
- export declare function isModelType<IT extends IAnyModelType = IAnyModelType>(type: IAnyType): type is IT;
193
- export {};