@jbrowse/mobx-state-tree 5.6.9 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/core/action.js.map +1 -1
  2. package/dist/core/actionContext.js.map +1 -1
  3. package/dist/core/flow.js.map +1 -1
  4. package/dist/core/json-patch.js.map +1 -1
  5. package/dist/core/mst-operations.js.map +1 -1
  6. package/dist/core/node/BaseNode.js.map +1 -1
  7. package/dist/core/node/Hook.js.map +1 -1
  8. package/dist/core/node/create-node.js.map +1 -1
  9. package/dist/core/node/identifier-cache.js.map +1 -1
  10. package/dist/core/node/livelinessChecking.js.map +1 -1
  11. package/dist/core/node/node-utils.js.map +1 -1
  12. package/dist/core/node/object-node.d.ts +3 -1
  13. package/dist/core/node/object-node.js +2 -1
  14. package/dist/core/node/object-node.js.map +1 -1
  15. package/dist/core/node/scalar-node.d.ts +3 -1
  16. package/dist/core/node/scalar-node.js +2 -1
  17. package/dist/core/node/scalar-node.js.map +1 -1
  18. package/dist/core/process.js.map +1 -1
  19. package/dist/core/type/type-checker.js.map +1 -1
  20. package/dist/core/type/type.js.map +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/internal.js.map +1 -1
  23. package/dist/middlewares/create-action-tracking-middleware.js.map +1 -1
  24. package/dist/middlewares/createActionTrackingMiddleware2.js.map +1 -1
  25. package/dist/middlewares/on-action.js.map +1 -1
  26. package/dist/package.json +1 -0
  27. package/dist/types/complex-types/array.d.ts +2 -1
  28. package/dist/types/complex-types/array.js +2 -1
  29. package/dist/types/complex-types/array.js.map +1 -1
  30. package/dist/types/complex-types/map.d.ts +2 -1
  31. package/dist/types/complex-types/map.js +2 -1
  32. package/dist/types/complex-types/map.js.map +1 -1
  33. package/dist/types/complex-types/model.d.ts +2 -1
  34. package/dist/types/complex-types/model.js +2 -1
  35. package/dist/types/complex-types/model.js.map +1 -1
  36. package/dist/types/index.js.map +1 -1
  37. package/dist/types/primitives.d.ts +2 -1
  38. package/dist/types/primitives.js +2 -1
  39. package/dist/types/primitives.js.map +1 -1
  40. package/dist/types/utility-types/custom.d.ts +2 -1
  41. package/dist/types/utility-types/custom.js +2 -1
  42. package/dist/types/utility-types/custom.js.map +1 -1
  43. package/dist/types/utility-types/enumeration.js.map +1 -1
  44. package/dist/types/utility-types/frozen.d.ts +2 -1
  45. package/dist/types/utility-types/frozen.js +2 -1
  46. package/dist/types/utility-types/frozen.js.map +1 -1
  47. package/dist/types/utility-types/identifier.d.ts +2 -1
  48. package/dist/types/utility-types/identifier.js +2 -1
  49. package/dist/types/utility-types/identifier.js.map +1 -1
  50. package/dist/types/utility-types/late.js +2 -1
  51. package/dist/types/utility-types/late.js.map +1 -1
  52. package/dist/types/utility-types/lazy.d.ts +2 -1
  53. package/dist/types/utility-types/lazy.js +2 -1
  54. package/dist/types/utility-types/lazy.js.map +1 -1
  55. package/dist/types/utility-types/literal.d.ts +2 -1
  56. package/dist/types/utility-types/literal.js +2 -1
  57. package/dist/types/utility-types/literal.js.map +1 -1
  58. package/dist/types/utility-types/maybe.js.map +1 -1
  59. package/dist/types/utility-types/optional.d.ts +2 -1
  60. package/dist/types/utility-types/optional.js +2 -1
  61. package/dist/types/utility-types/optional.js.map +1 -1
  62. package/dist/types/utility-types/reference.d.ts +2 -1
  63. package/dist/types/utility-types/reference.js +2 -1
  64. package/dist/types/utility-types/reference.js.map +1 -1
  65. package/dist/types/utility-types/refinement.js +2 -1
  66. package/dist/types/utility-types/refinement.js.map +1 -1
  67. package/dist/types/utility-types/resilient.js +2 -1
  68. package/dist/types/utility-types/resilient.js.map +1 -1
  69. package/dist/types/utility-types/snapshotProcessor.js +3 -2
  70. package/dist/types/utility-types/snapshotProcessor.js.map +1 -1
  71. package/dist/types/utility-types/union.d.ts +2 -1
  72. package/dist/types/utility-types/union.js +2 -1
  73. package/dist/types/utility-types/union.js.map +1 -1
  74. package/dist/utils.js.map +1 -1
  75. package/esm/core/action.d.ts +87 -0
  76. package/esm/core/action.js +219 -0
  77. package/esm/core/action.js.map +1 -0
  78. package/esm/core/actionContext.d.ts +27 -0
  79. package/esm/core/actionContext.js +37 -0
  80. package/esm/core/actionContext.js.map +1 -0
  81. package/esm/core/flow.d.ts +69 -0
  82. package/esm/core/flow.js +173 -0
  83. package/esm/core/flow.js.map +1 -0
  84. package/esm/core/json-patch.d.ts +46 -0
  85. package/esm/core/json-patch.js +125 -0
  86. package/esm/core/json-patch.js.map +1 -0
  87. package/esm/core/mst-operations.d.ts +459 -0
  88. package/esm/core/mst-operations.js +844 -0
  89. package/esm/core/mst-operations.js.map +1 -0
  90. package/esm/core/node/BaseNode.d.ts +62 -0
  91. package/esm/core/node/BaseNode.js +148 -0
  92. package/esm/core/node/BaseNode.js.map +1 -0
  93. package/esm/core/node/Hook.d.ts +17 -0
  94. package/esm/core/node/Hook.js +12 -0
  95. package/esm/core/node/Hook.js.map +1 -0
  96. package/esm/core/node/create-node.d.ts +16 -0
  97. package/esm/core/node/create-node.js +36 -0
  98. package/esm/core/node/create-node.js.map +1 -0
  99. package/esm/core/node/identifier-cache.d.ts +19 -0
  100. package/esm/core/node/identifier-cache.js +111 -0
  101. package/esm/core/node/identifier-cache.js.map +1 -0
  102. package/esm/core/node/livelinessChecking.d.ts +37 -0
  103. package/esm/core/node/livelinessChecking.js +33 -0
  104. package/esm/core/node/livelinessChecking.js.map +1 -0
  105. package/esm/core/node/node-utils.d.ts +83 -0
  106. package/esm/core/node/node-utils.js +153 -0
  107. package/esm/core/node/node-utils.js.map +1 -0
  108. package/esm/core/node/object-node.d.ts +101 -0
  109. package/esm/core/node/object-node.js +542 -0
  110. package/esm/core/node/object-node.js.map +1 -0
  111. package/esm/core/node/scalar-node.d.ts +21 -0
  112. package/esm/core/node/scalar-node.js +86 -0
  113. package/esm/core/node/scalar-node.js.map +1 -0
  114. package/esm/core/process.d.ts +50 -0
  115. package/esm/core/process.js +35 -0
  116. package/esm/core/process.js.map +1 -0
  117. package/esm/core/type/type-checker.d.ts +69 -0
  118. package/esm/core/type/type-checker.js +144 -0
  119. package/esm/core/type/type-checker.js.map +1 -0
  120. package/esm/core/type/type.d.ts +317 -0
  121. package/esm/core/type/type.js +243 -0
  122. package/esm/core/type/type.js.map +1 -0
  123. package/esm/index.d.ts +2 -0
  124. package/esm/index.js +2 -0
  125. package/esm/index.js.map +1 -0
  126. package/esm/internal.d.ts +39 -0
  127. package/esm/internal.js +44 -0
  128. package/esm/internal.js.map +1 -0
  129. package/esm/middlewares/create-action-tracking-middleware.d.ts +24 -0
  130. package/esm/middlewares/create-action-tracking-middleware.js +78 -0
  131. package/esm/middlewares/create-action-tracking-middleware.js.map +1 -0
  132. package/esm/middlewares/createActionTrackingMiddleware2.d.ts +34 -0
  133. package/esm/middlewares/createActionTrackingMiddleware2.js +130 -0
  134. package/esm/middlewares/createActionTrackingMiddleware2.js.map +1 -0
  135. package/esm/middlewares/on-action.d.ts +87 -0
  136. package/esm/middlewares/on-action.js +210 -0
  137. package/esm/middlewares/on-action.js.map +1 -0
  138. package/esm/types/complex-types/array.d.ts +81 -0
  139. package/esm/types/complex-types/array.js +347 -0
  140. package/esm/types/complex-types/array.js.map +1 -0
  141. package/esm/types/complex-types/map.d.ts +111 -0
  142. package/esm/types/complex-types/map.js +356 -0
  143. package/esm/types/complex-types/map.js.map +1 -0
  144. package/esm/types/complex-types/model.d.ts +193 -0
  145. package/esm/types/complex-types/model.js +471 -0
  146. package/esm/types/complex-types/model.js.map +1 -0
  147. package/esm/types/index.d.ts +33 -0
  148. package/esm/types/index.js +35 -0
  149. package/esm/types/index.js.map +1 -0
  150. package/esm/types/primitives.d.ts +125 -0
  151. package/esm/types/primitives.js +177 -0
  152. package/esm/types/primitives.js.map +1 -0
  153. package/esm/types/utility-types/custom.d.ts +75 -0
  154. package/esm/types/utility-types/custom.js +106 -0
  155. package/esm/types/utility-types/custom.js.map +1 -0
  156. package/esm/types/utility-types/enumeration.d.ts +5 -0
  157. package/esm/types/utility-types/enumeration.js +31 -0
  158. package/esm/types/utility-types/enumeration.js.map +1 -0
  159. package/esm/types/utility-types/frozen.d.ts +24 -0
  160. package/esm/types/utility-types/frozen.js +92 -0
  161. package/esm/types/utility-types/frozen.js.map +1 -0
  162. package/esm/types/utility-types/identifier.d.ts +87 -0
  163. package/esm/types/utility-types/identifier.js +121 -0
  164. package/esm/types/utility-types/identifier.js.map +1 -0
  165. package/esm/types/utility-types/late.d.ts +10 -0
  166. package/esm/types/utility-types/late.js +106 -0
  167. package/esm/types/utility-types/late.js.map +1 -0
  168. package/esm/types/utility-types/lazy.d.ts +23 -0
  169. package/esm/types/utility-types/lazy.js +72 -0
  170. package/esm/types/utility-types/lazy.js.map +1 -0
  171. package/esm/types/utility-types/literal.d.ts +38 -0
  172. package/esm/types/utility-types/literal.js +58 -0
  173. package/esm/types/utility-types/literal.js.map +1 -0
  174. package/esm/types/utility-types/maybe.d.ts +26 -0
  175. package/esm/types/utility-types/maybe.js +26 -0
  176. package/esm/types/utility-types/maybe.js.map +1 -0
  177. package/esm/types/utility-types/optional.d.ts +42 -0
  178. package/esm/types/utility-types/optional.js +135 -0
  179. package/esm/types/utility-types/optional.js.map +1 -0
  180. package/esm/types/utility-types/reference.d.ts +90 -0
  181. package/esm/types/utility-types/reference.js +383 -0
  182. package/esm/types/utility-types/reference.js.map +1 -0
  183. package/esm/types/utility-types/refinement.d.ts +10 -0
  184. package/esm/types/utility-types/refinement.js +82 -0
  185. package/esm/types/utility-types/refinement.js.map +1 -0
  186. package/esm/types/utility-types/resilient.d.ts +18 -0
  187. package/esm/types/utility-types/resilient.js +118 -0
  188. package/esm/types/utility-types/resilient.js.map +1 -0
  189. package/esm/types/utility-types/snapshotProcessor.d.ts +63 -0
  190. package/esm/types/utility-types/snapshotProcessor.js +159 -0
  191. package/esm/types/utility-types/snapshotProcessor.js.map +1 -0
  192. package/esm/types/utility-types/union.d.ts +78 -0
  193. package/esm/types/utility-types/union.js +240 -0
  194. package/esm/types/utility-types/union.js.map +1 -0
  195. package/esm/utils.d.ts +230 -0
  196. package/esm/utils.js +449 -0
  197. package/esm/utils.js.map +1 -0
  198. package/package.json +23 -22
  199. package/dist/mobx-state-tree.js +0 -85
  200. package/dist/mobx-state-tree.module.js +0 -83
@@ -0,0 +1,542 @@
1
+ import { _allowStateChangesInsideComputed, action, computed, reaction } from "mobx";
2
+ import { BaseNode } from "./BaseNode.js";
3
+ import { EMPTY_OBJECT, EventHandlers, Hook, IdentifierCache, NodeLifeCycle, addHiddenFinalProp, convertChildNodesToArray, createActionInvoker, devMode, escapeJsonPath, extend, fail, freeze, getCurrentActionContext, getLivelinessChecking, getPath, normalizeIdentifier, resolveNodeByPathParts, splitJsonPath, splitPatch, toJSON, warnError } from "../../internal.js";
4
+ let nextNodeId = 1;
5
+ const snapshotReactionOptions = {
6
+ onError(e) {
7
+ throw e;
8
+ }
9
+ };
10
+ /**
11
+ * @internal
12
+ * @hidden
13
+ */
14
+ export class ObjectNode extends BaseNode {
15
+ nodeId = ++nextNodeId;
16
+ identifierAttribute;
17
+ identifier; // Identifier is always normalized to string, even if the identifier property isn't
18
+ unnormalizedIdentifier;
19
+ identifierCache;
20
+ isProtectionEnabled = true;
21
+ middlewares;
22
+ hasSnapshotPostProcessor = false;
23
+ _applyPatches;
24
+ applyPatches(patches) {
25
+ this.createObservableInstanceIfNeeded();
26
+ this._applyPatches(patches);
27
+ }
28
+ _applySnapshot;
29
+ applySnapshot(snapshot) {
30
+ this.createObservableInstanceIfNeeded();
31
+ this._applySnapshot(snapshot);
32
+ }
33
+ _autoUnbox = true; // unboxing is disabled when reading child nodes
34
+ _isRunningAction = false; // only relevant for root
35
+ _hasSnapshotReaction = false;
36
+ _observableInstanceState = 0 /* ObservableInstanceLifecycle.UNINITIALIZED */;
37
+ _childNodes;
38
+ _initialSnapshot;
39
+ _cachedInitialSnapshot;
40
+ _cachedInitialSnapshotCreated = false;
41
+ _snapshotComputed;
42
+ constructor(complexType, parent, subpath, environment, initialValue) {
43
+ super(complexType, parent, subpath, environment);
44
+ this._snapshotComputed = computed(() => freeze(this.getSnapshot()));
45
+ this.unbox = this.unbox.bind(this);
46
+ this._initialSnapshot = freeze(initialValue);
47
+ this.identifierAttribute = complexType.identifierAttribute;
48
+ if (!parent) {
49
+ this.identifierCache = new IdentifierCache();
50
+ }
51
+ this._childNodes = complexType.initializeChildNodes(this, this._initialSnapshot);
52
+ // identifier can not be changed during lifecycle of a node
53
+ // so we safely can read it from initial snapshot
54
+ this.identifier = null;
55
+ this.unnormalizedIdentifier = null;
56
+ if (this.identifierAttribute && this._initialSnapshot) {
57
+ let id = this._initialSnapshot[this.identifierAttribute];
58
+ if (id === undefined) {
59
+ // try with the actual node if not (for optional identifiers)
60
+ const childNode = this._childNodes[this.identifierAttribute];
61
+ if (childNode) {
62
+ id = childNode.value;
63
+ }
64
+ }
65
+ if (typeof id !== "string" && typeof id !== "number") {
66
+ throw fail(`Instance identifier '${this.identifierAttribute}' for type '${this.type.name}' must be a string or a number`);
67
+ }
68
+ // normalize internal identifier to string
69
+ this.identifier = normalizeIdentifier(id);
70
+ this.unnormalizedIdentifier = id;
71
+ }
72
+ if (!parent) {
73
+ this.identifierCache.addNodeToCache(this);
74
+ }
75
+ else {
76
+ parent.root.identifierCache.addNodeToCache(this);
77
+ }
78
+ }
79
+ createObservableInstanceIfNeeded(fireHooks = true) {
80
+ if (this._observableInstanceState ===
81
+ 0 /* ObservableInstanceLifecycle.UNINITIALIZED */) {
82
+ this.createObservableInstance(fireHooks);
83
+ }
84
+ }
85
+ createObservableInstance(fireHooks = true) {
86
+ if (devMode()) {
87
+ if (this.state !== NodeLifeCycle.INITIALIZING) {
88
+ // istanbul ignore next
89
+ throw fail("assertion failed: the creation of the observable instance must be done on the initializing phase");
90
+ }
91
+ }
92
+ this._observableInstanceState = 1 /* ObservableInstanceLifecycle.CREATING */;
93
+ // make sure the parent chain is created as well
94
+ // array with parent chain from parent to child
95
+ const parentChain = [];
96
+ let parent = this.parent;
97
+ // for performance reasons we never go back further than the most direct
98
+ // uninitialized parent
99
+ // this is done to avoid traversing the whole tree to the root when using
100
+ // the same reference again
101
+ while (parent &&
102
+ parent._observableInstanceState ===
103
+ 0 /* ObservableInstanceLifecycle.UNINITIALIZED */) {
104
+ parentChain.unshift(parent);
105
+ parent = parent.parent;
106
+ }
107
+ // initialize the uninitialized parent chain from parent to child
108
+ for (const p of parentChain) {
109
+ // delay firing hooks until after all parents have been created
110
+ p.createObservableInstanceIfNeeded(false);
111
+ }
112
+ const type = this.type;
113
+ try {
114
+ // @ts-expect-error storedValue type mismatch during initialization
115
+ this.storedValue = type.createNewInstance(this._childNodes);
116
+ this.preboot();
117
+ this._isRunningAction = true;
118
+ type.finalizeNewInstance(this, this.storedValue);
119
+ }
120
+ catch (e) {
121
+ // short-cut to die the instance, to avoid the snapshot computed starting to throw...
122
+ this.state = NodeLifeCycle.DEAD;
123
+ throw e;
124
+ }
125
+ finally {
126
+ this._isRunningAction = false;
127
+ }
128
+ this._observableInstanceState = 2 /* ObservableInstanceLifecycle.CREATED */;
129
+ this._snapshotComputed.trackAndCompute();
130
+ if (this.isRoot) {
131
+ this._addSnapshotReaction();
132
+ }
133
+ this._childNodes = EMPTY_OBJECT;
134
+ this.state = NodeLifeCycle.CREATED;
135
+ if (fireHooks) {
136
+ this.fireHook(Hook.afterCreate);
137
+ // Note that the parent might not be finalized at this point
138
+ // so afterAttach won't be called until later in that case
139
+ this.finalizeCreation();
140
+ // fire the hooks of the parents that we created
141
+ for (const p of parentChain.reverse()) {
142
+ p.fireHook(Hook.afterCreate);
143
+ // This will call afterAttach on the child if necessary
144
+ p.finalizeCreation();
145
+ }
146
+ }
147
+ }
148
+ get root() {
149
+ const parent = this.parent;
150
+ return parent ? parent.root : this;
151
+ }
152
+ clearParent() {
153
+ if (!this.parent) {
154
+ return;
155
+ }
156
+ // detach if attached
157
+ this.fireHook(Hook.beforeDetach);
158
+ const previousState = this.state;
159
+ this.state = NodeLifeCycle.DETACHING;
160
+ const root = this.root;
161
+ const newEnv = root.environment;
162
+ const newIdCache = root.identifierCache.splitCache(this);
163
+ try {
164
+ this.parent.removeChild(this.subpath);
165
+ this.baseSetParent(null, "");
166
+ this.environment = newEnv;
167
+ this.identifierCache = newIdCache;
168
+ }
169
+ finally {
170
+ this.state = previousState;
171
+ }
172
+ }
173
+ setParent(newParent, subpath) {
174
+ const parentChanged = newParent !== this.parent;
175
+ const subpathChanged = subpath !== this.subpath;
176
+ if (!parentChanged && !subpathChanged) {
177
+ return;
178
+ }
179
+ if (devMode()) {
180
+ if (!subpath) {
181
+ // istanbul ignore next
182
+ throw fail("assertion failed: subpath expected");
183
+ }
184
+ if (!newParent) {
185
+ // istanbul ignore next
186
+ throw fail("assertion failed: new parent expected");
187
+ }
188
+ if (this.parent && parentChanged) {
189
+ throw fail(`A node cannot exists twice in the state tree. Failed to add ${this} to path '${newParent.path}/${subpath}'.`);
190
+ }
191
+ if (!this.parent && newParent.root === this) {
192
+ throw fail(`A state tree is not allowed to contain itself. Cannot assign ${this} to path '${newParent.path}/${subpath}'`);
193
+ }
194
+ if (!this.parent &&
195
+ !!this.environment &&
196
+ this.environment !== newParent.root.environment) {
197
+ throw fail(`A state tree cannot be made part of another state tree as long as their environments are different.`);
198
+ }
199
+ }
200
+ if (parentChanged) {
201
+ // attach to new parent
202
+ this.environment = undefined; // will use root's
203
+ newParent.root.identifierCache.mergeCache(this);
204
+ this.baseSetParent(newParent, subpath);
205
+ this.fireHook(Hook.afterAttach);
206
+ }
207
+ else if (subpathChanged) {
208
+ // moving to a new subpath on the same parent
209
+ this.baseSetParent(this.parent, subpath);
210
+ }
211
+ }
212
+ fireHook(name) {
213
+ this.fireInternalHook(name);
214
+ const fn = this.storedValue &&
215
+ typeof this.storedValue === "object" &&
216
+ this.storedValue[name];
217
+ if (typeof fn === "function") {
218
+ // we check for it to allow old mobx peer dependencies that don't have the method to work (even when still bugged)
219
+ if (_allowStateChangesInsideComputed) {
220
+ _allowStateChangesInsideComputed(() => {
221
+ fn.apply(this.storedValue);
222
+ });
223
+ }
224
+ else {
225
+ fn.apply(this.storedValue);
226
+ }
227
+ }
228
+ }
229
+ _snapshotUponDeath;
230
+ // advantage of using computed for a snapshot is that nicely respects transactions etc.
231
+ get snapshot() {
232
+ if (this.hasSnapshotPostProcessor) {
233
+ this.createObservableInstanceIfNeeded();
234
+ }
235
+ return this._snapshotComputed.get();
236
+ }
237
+ // NOTE: we use this method to get snapshot without creating @computed overhead
238
+ getSnapshot() {
239
+ if (!this.isAlive) {
240
+ return this._snapshotUponDeath;
241
+ }
242
+ return this._observableInstanceState === 2 /* ObservableInstanceLifecycle.CREATED */
243
+ ? this._getActualSnapshot()
244
+ : this._getCachedInitialSnapshot();
245
+ }
246
+ _getActualSnapshot() {
247
+ return this.type.getSnapshot(this);
248
+ }
249
+ _getCachedInitialSnapshot() {
250
+ if (!this._cachedInitialSnapshotCreated) {
251
+ const type = this.type;
252
+ const childNodes = this._childNodes;
253
+ const snapshot = this._initialSnapshot;
254
+ this._cachedInitialSnapshot = type.processInitialSnapshot(childNodes, snapshot);
255
+ this._cachedInitialSnapshotCreated = true;
256
+ }
257
+ return this._cachedInitialSnapshot;
258
+ }
259
+ isRunningAction() {
260
+ if (this._isRunningAction) {
261
+ return true;
262
+ }
263
+ if (this.isRoot) {
264
+ return false;
265
+ }
266
+ return this.parent.isRunningAction();
267
+ }
268
+ assertAlive(context) {
269
+ const livelinessChecking = getLivelinessChecking();
270
+ if (!this.isAlive && livelinessChecking !== "ignore") {
271
+ const error = this._getAssertAliveError(context);
272
+ switch (livelinessChecking) {
273
+ case "error":
274
+ throw fail(error);
275
+ case "warn":
276
+ warnError(error);
277
+ }
278
+ }
279
+ }
280
+ _getAssertAliveError(context) {
281
+ const escapedPath = this.getEscapedPath(false) || this.pathUponDeath || "";
282
+ const subpath = (context.subpath && escapeJsonPath(context.subpath)) || "";
283
+ let actionContext = context.actionContext || getCurrentActionContext();
284
+ // try to use a real action context if possible since it includes the action name
285
+ if (actionContext &&
286
+ actionContext.type !== "action" &&
287
+ actionContext.parentActionEvent) {
288
+ actionContext = actionContext.parentActionEvent;
289
+ }
290
+ let actionFullPath = "";
291
+ if (actionContext && actionContext.name != null) {
292
+ // try to use the context, and if it not available use the node one
293
+ const actionPath = (actionContext &&
294
+ actionContext.context &&
295
+ getPath(actionContext.context)) ||
296
+ escapedPath;
297
+ actionFullPath = `${actionPath}.${actionContext.name}()`;
298
+ }
299
+ return `You are trying to read or write to an object that is no longer part of a state tree. (Object type: '${this.type.name}', Path upon death: '${escapedPath}', Subpath: '${subpath}', Action: '${actionFullPath}'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.`;
300
+ }
301
+ getChildNode(subpath) {
302
+ this.assertAlive({
303
+ subpath
304
+ });
305
+ this._autoUnbox = false;
306
+ try {
307
+ return this._observableInstanceState ===
308
+ 2 /* ObservableInstanceLifecycle.CREATED */
309
+ ? this.type.getChildNode(this, subpath)
310
+ : this._childNodes[subpath];
311
+ }
312
+ finally {
313
+ this._autoUnbox = true;
314
+ }
315
+ }
316
+ getChildren() {
317
+ this.assertAlive(EMPTY_OBJECT);
318
+ this._autoUnbox = false;
319
+ try {
320
+ return this._observableInstanceState ===
321
+ 2 /* ObservableInstanceLifecycle.CREATED */
322
+ ? this.type.getChildren(this)
323
+ : convertChildNodesToArray(this._childNodes);
324
+ }
325
+ finally {
326
+ this._autoUnbox = true;
327
+ }
328
+ }
329
+ getChildType(propertyName) {
330
+ return this.type.getChildType(propertyName);
331
+ }
332
+ get isProtected() {
333
+ return this.root.isProtectionEnabled;
334
+ }
335
+ assertWritable(context) {
336
+ this.assertAlive(context);
337
+ if (!this.isRunningAction() && this.isProtected) {
338
+ throw fail(`Cannot modify '${this}', the object is protected and can only be modified by using an action.`);
339
+ }
340
+ }
341
+ removeChild(subpath) {
342
+ this.type.removeChild(this, subpath);
343
+ }
344
+ // bound on the constructor
345
+ unbox(childNode) {
346
+ if (!childNode) {
347
+ return childNode;
348
+ }
349
+ this.assertAlive({
350
+ subpath: childNode.subpath || childNode.subpathUponDeath
351
+ });
352
+ return this._autoUnbox ? childNode.value : childNode;
353
+ }
354
+ toString() {
355
+ const path = (this.isAlive ? this.path : this.pathUponDeath) || "<root>";
356
+ const identifier = this.identifier ? `(id: ${this.identifier})` : "";
357
+ return `${this.type.name}@${path}${identifier}${this.isAlive ? "" : " [dead]"}`;
358
+ }
359
+ finalizeCreation() {
360
+ this.baseFinalizeCreation(() => {
361
+ for (const child of this.getChildren()) {
362
+ child.finalizeCreation();
363
+ }
364
+ this.fireInternalHook(Hook.afterCreationFinalization);
365
+ });
366
+ }
367
+ detach() {
368
+ if (!this.isAlive) {
369
+ throw fail(`Error while detaching, node is not alive.`);
370
+ }
371
+ this.clearParent();
372
+ }
373
+ preboot() {
374
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
375
+ const self = this;
376
+ this._applyPatches = createActionInvoker(this.storedValue, "@APPLY_PATCHES", (patches) => {
377
+ patches.forEach(patch => {
378
+ if (!patch.path) {
379
+ self.type.applySnapshot(self, patch.value);
380
+ return;
381
+ }
382
+ const parts = splitJsonPath(patch.path);
383
+ const node = resolveNodeByPathParts(self, parts.slice(0, -1));
384
+ node.applyPatchLocally(parts[parts.length - 1], patch);
385
+ });
386
+ });
387
+ this._applySnapshot = createActionInvoker(this.storedValue, "@APPLY_SNAPSHOT", (snapshot) => {
388
+ // if the snapshot is the same as the current one, avoid performing a reconcile
389
+ if (snapshot === self.snapshot) {
390
+ return;
391
+ }
392
+ // else, apply it by calling the type logic
393
+ return self.type.applySnapshot(self, snapshot);
394
+ });
395
+ addHiddenFinalProp(this.storedValue, "$treenode", this);
396
+ addHiddenFinalProp(this.storedValue, "toJSON", toJSON);
397
+ }
398
+ die() {
399
+ if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {
400
+ return;
401
+ }
402
+ this.aboutToDie();
403
+ this.finalizeDeath();
404
+ }
405
+ aboutToDie() {
406
+ if (this._observableInstanceState ===
407
+ 0 /* ObservableInstanceLifecycle.UNINITIALIZED */) {
408
+ return;
409
+ }
410
+ this.getChildren().forEach(node => {
411
+ node.aboutToDie();
412
+ });
413
+ // beforeDestroy should run before the disposers since else we could end up in a situation where
414
+ // a disposer added with addDisposer at this stage (beforeDestroy) is actually never released
415
+ this.baseAboutToDie();
416
+ this._internalEventsEmit("dispose" /* InternalEvents.Dispose */);
417
+ this._internalEventsClear("dispose" /* InternalEvents.Dispose */);
418
+ }
419
+ finalizeDeath() {
420
+ // invariant: not called directly but from "die"
421
+ this.getChildren().forEach(node => {
422
+ node.finalizeDeath();
423
+ });
424
+ this.root.identifierCache.notifyDied(this);
425
+ // "kill" the computed prop and just store the last snapshot
426
+ const snapshot = this.snapshot;
427
+ this._snapshotUponDeath = snapshot;
428
+ this._internalEventsClearAll();
429
+ this.baseFinalizeDeath();
430
+ }
431
+ onSnapshot(onChange) {
432
+ this._addSnapshotReaction();
433
+ return this._internalEventsRegister("snapshot" /* InternalEvents.Snapshot */, onChange);
434
+ }
435
+ emitSnapshot(snapshot) {
436
+ this._internalEventsEmit("snapshot" /* InternalEvents.Snapshot */, snapshot);
437
+ }
438
+ onPatch(handler) {
439
+ return this._internalEventsRegister("patch" /* InternalEvents.Patch */, handler);
440
+ }
441
+ emitPatch(basePatch, source) {
442
+ if (this._internalEventsHasSubscribers("patch" /* InternalEvents.Patch */)) {
443
+ const localizedPatch = extend({}, basePatch, {
444
+ path: source.path.substr(this.path.length) + "/" + basePatch.path // calculate the relative path of the patch
445
+ });
446
+ const [patch, reversePatch] = splitPatch(localizedPatch);
447
+ this._internalEventsEmit("patch" /* InternalEvents.Patch */, patch, reversePatch);
448
+ }
449
+ if (this.parent) {
450
+ this.parent.emitPatch(basePatch, source);
451
+ }
452
+ }
453
+ hasDisposer(disposer) {
454
+ return this._internalEventsHas("dispose" /* InternalEvents.Dispose */, disposer);
455
+ }
456
+ addDisposer(disposer) {
457
+ if (!this.hasDisposer(disposer)) {
458
+ this._internalEventsRegister("dispose" /* InternalEvents.Dispose */, disposer, true);
459
+ return;
460
+ }
461
+ throw fail("cannot add a disposer when it is already registered for execution");
462
+ }
463
+ removeDisposer(disposer) {
464
+ if (!this._internalEventsHas("dispose" /* InternalEvents.Dispose */, disposer)) {
465
+ throw fail("cannot remove a disposer which was never registered for execution");
466
+ }
467
+ this._internalEventsUnregister("dispose" /* InternalEvents.Dispose */, disposer);
468
+ }
469
+ removeMiddleware(middleware) {
470
+ if (this.middlewares) {
471
+ const index = this.middlewares.indexOf(middleware);
472
+ if (index >= 0) {
473
+ this.middlewares.splice(index, 1);
474
+ }
475
+ }
476
+ }
477
+ addMiddleWare(handler, includeHooks = true) {
478
+ const middleware = { handler, includeHooks };
479
+ if (!this.middlewares) {
480
+ this.middlewares = [middleware];
481
+ }
482
+ else {
483
+ this.middlewares.push(middleware);
484
+ }
485
+ return () => {
486
+ this.removeMiddleware(middleware);
487
+ };
488
+ }
489
+ applyPatchLocally(subpath, patch) {
490
+ this.assertWritable({
491
+ subpath
492
+ });
493
+ this.createObservableInstanceIfNeeded();
494
+ this.type.applyPatchLocally(this, subpath, patch);
495
+ }
496
+ _addSnapshotReaction() {
497
+ if (!this._hasSnapshotReaction) {
498
+ const snapshotDisposer = reaction(() => this.snapshot, snapshot => this.emitSnapshot(snapshot), snapshotReactionOptions);
499
+ this.addDisposer(snapshotDisposer);
500
+ this._hasSnapshotReaction = true;
501
+ }
502
+ }
503
+ // #region internal event handling
504
+ _internalEvents;
505
+ // we proxy the methods to avoid creating an EventHandlers instance when it is not needed
506
+ _internalEventsHasSubscribers(event) {
507
+ return !!this._internalEvents && this._internalEvents.hasSubscribers(event);
508
+ }
509
+ _internalEventsRegister(event, eventHandler, atTheBeginning = false) {
510
+ if (!this._internalEvents) {
511
+ this._internalEvents = new EventHandlers();
512
+ }
513
+ return this._internalEvents.register(event, eventHandler, atTheBeginning);
514
+ }
515
+ _internalEventsHas(event, eventHandler) {
516
+ return (!!this._internalEvents && this._internalEvents.has(event, eventHandler));
517
+ }
518
+ _internalEventsUnregister(event, eventHandler) {
519
+ if (this._internalEvents) {
520
+ this._internalEvents.unregister(event, eventHandler);
521
+ }
522
+ }
523
+ _internalEventsEmit(event, ...args) {
524
+ if (this._internalEvents) {
525
+ this._internalEvents.emit(event, ...args);
526
+ }
527
+ }
528
+ _internalEventsClear(event) {
529
+ if (this._internalEvents) {
530
+ this._internalEvents.clear(event);
531
+ }
532
+ }
533
+ _internalEventsClearAll() {
534
+ if (this._internalEvents) {
535
+ this._internalEvents.clearAll();
536
+ }
537
+ }
538
+ }
539
+ ObjectNode.prototype.createObservableInstance = action(ObjectNode.prototype.createObservableInstance);
540
+ ObjectNode.prototype.detach = action(ObjectNode.prototype.detach);
541
+ ObjectNode.prototype.die = action(ObjectNode.prototype.die);
542
+ //# sourceMappingURL=object-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-node.js","sourceRoot":"","sources":["../../../src/core/node/object-node.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type IComputedValue,\n _allowStateChangesInsideComputed,\n action,\n computed,\n reaction\n} from \"mobx\"\n\nimport { BaseNode } from \"./BaseNode.ts\"\nimport { ComplexType } from \"../type/type.ts\"\nimport {\n EMPTY_OBJECT,\n EventHandlers,\n Hook,\n IdentifierCache,\n NodeLifeCycle,\n addHiddenFinalProp,\n convertChildNodesToArray,\n createActionInvoker,\n devMode,\n escapeJsonPath,\n extend,\n fail,\n freeze,\n getCurrentActionContext,\n getLivelinessChecking,\n getPath,\n normalizeIdentifier,\n resolveNodeByPathParts,\n splitJsonPath,\n splitPatch,\n toJSON,\n warnError\n} from \"../../internal.ts\"\n\nimport type {\n AnyNode,\n ArgumentTypes,\n IAnyType,\n IDisposer,\n IJsonPatch,\n IMiddleware,\n IMiddlewareEvent,\n IMiddlewareHandler,\n IReversibleJsonPatch,\n IStateTreeNode,\n IType,\n ReferenceIdentifier\n} from \"../../internal.ts\"\n\nlet nextNodeId = 1\n\nconst enum ObservableInstanceLifecycle {\n // the actual observable instance has not been created yet\n UNINITIALIZED,\n // the actual observable instance is being created\n CREATING,\n // the actual observable instance has been created\n CREATED\n}\n\nconst enum InternalEvents {\n Dispose = \"dispose\",\n Patch = \"patch\",\n Snapshot = \"snapshot\"\n}\n\n/**\n * @internal\n * @hidden\n */\nexport interface IChildNodesMap {\n [key: string]: AnyNode\n}\n\nconst snapshotReactionOptions = {\n onError(e: any) {\n throw e\n }\n}\n\ntype InternalEventHandlers<S> = {\n [InternalEvents.Dispose]: IDisposer\n [InternalEvents.Patch]: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n [InternalEvents.Snapshot]: (snapshot: S) => void\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class ObjectNode<C, S, T> extends BaseNode<C, S, T> {\n declare readonly type: ComplexType<C, S, T>\n declare storedValue: T & IStateTreeNode<IType<C, S, T>>\n\n readonly nodeId = ++nextNodeId\n readonly identifierAttribute?: string\n readonly identifier: string | null // Identifier is always normalized to string, even if the identifier property isn't\n readonly unnormalizedIdentifier: ReferenceIdentifier | null\n\n identifierCache?: IdentifierCache\n isProtectionEnabled = true\n middlewares?: IMiddleware[]\n hasSnapshotPostProcessor = false\n\n private _applyPatches?: (patches: IJsonPatch[]) => void\n\n applyPatches(patches: IJsonPatch[]): void {\n this.createObservableInstanceIfNeeded()\n this._applyPatches!(patches)\n }\n\n private _applySnapshot?: (snapshot: C) => void\n\n applySnapshot(snapshot: C): void {\n this.createObservableInstanceIfNeeded()\n this._applySnapshot!(snapshot)\n }\n\n private _autoUnbox = true // unboxing is disabled when reading child nodes\n _isRunningAction = false // only relevant for root\n private _hasSnapshotReaction = false\n\n private _observableInstanceState = ObservableInstanceLifecycle.UNINITIALIZED\n private _childNodes: IChildNodesMap\n private _initialSnapshot: C\n private _cachedInitialSnapshot?: S\n private _cachedInitialSnapshotCreated = false\n private _snapshotComputed: IComputedValue<S>\n\n constructor(\n complexType: ComplexType<C, S, T>,\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: C\n ) {\n super(complexType, parent, subpath, environment)\n this._snapshotComputed = computed<S>(() => freeze(this.getSnapshot()))\n\n this.unbox = this.unbox.bind(this)\n\n this._initialSnapshot = freeze(initialValue)\n this.identifierAttribute = complexType.identifierAttribute\n\n if (!parent) {\n this.identifierCache = new IdentifierCache()\n }\n\n this._childNodes = complexType.initializeChildNodes(\n this,\n this._initialSnapshot\n )\n\n // identifier can not be changed during lifecycle of a node\n // so we safely can read it from initial snapshot\n this.identifier = null\n this.unnormalizedIdentifier = null\n if (this.identifierAttribute && this._initialSnapshot) {\n let id = (this._initialSnapshot as any)[this.identifierAttribute]\n if (id === undefined) {\n // try with the actual node if not (for optional identifiers)\n const childNode = this._childNodes[this.identifierAttribute]\n if (childNode) {\n id = childNode.value\n }\n }\n\n if (typeof id !== \"string\" && typeof id !== \"number\") {\n throw fail(\n `Instance identifier '${this.identifierAttribute}' for type '${this.type.name}' must be a string or a number`\n )\n }\n\n // normalize internal identifier to string\n this.identifier = normalizeIdentifier(id)\n this.unnormalizedIdentifier = id\n }\n\n if (!parent) {\n this.identifierCache!.addNodeToCache(this)\n } else {\n parent.root.identifierCache!.addNodeToCache(this)\n }\n }\n\n createObservableInstanceIfNeeded(fireHooks = true): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n this.createObservableInstance(fireHooks)\n }\n }\n\n createObservableInstance(fireHooks = true): void {\n if (devMode()) {\n if (this.state !== NodeLifeCycle.INITIALIZING) {\n // istanbul ignore next\n throw fail(\n \"assertion failed: the creation of the observable instance must be done on the initializing phase\"\n )\n }\n }\n this._observableInstanceState = ObservableInstanceLifecycle.CREATING\n\n // make sure the parent chain is created as well\n\n // array with parent chain from parent to child\n const parentChain = []\n\n let parent = this.parent\n // for performance reasons we never go back further than the most direct\n // uninitialized parent\n // this is done to avoid traversing the whole tree to the root when using\n // the same reference again\n while (\n parent &&\n parent._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n parentChain.unshift(parent)\n parent = parent.parent\n }\n\n // initialize the uninitialized parent chain from parent to child\n for (const p of parentChain) {\n // delay firing hooks until after all parents have been created\n p.createObservableInstanceIfNeeded(false)\n }\n\n const type = this.type\n\n try {\n // @ts-expect-error storedValue type mismatch during initialization\n this.storedValue = type.createNewInstance(this._childNodes)\n this.preboot()\n\n this._isRunningAction = true\n type.finalizeNewInstance(this, this.storedValue)\n } catch (e) {\n // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n this.state = NodeLifeCycle.DEAD\n throw e\n } finally {\n this._isRunningAction = false\n }\n\n this._observableInstanceState = ObservableInstanceLifecycle.CREATED\n\n // NOTE: we need to touch snapshot, because non-observable\n // \"_observableInstanceState\" field was touched\n ;(this._snapshotComputed as any).trackAndCompute()\n\n if (this.isRoot) {\n this._addSnapshotReaction()\n }\n\n this._childNodes = EMPTY_OBJECT\n\n this.state = NodeLifeCycle.CREATED\n\n if (fireHooks) {\n this.fireHook(Hook.afterCreate)\n // Note that the parent might not be finalized at this point\n // so afterAttach won't be called until later in that case\n this.finalizeCreation()\n\n // fire the hooks of the parents that we created\n for (const p of parentChain.reverse()) {\n p.fireHook(Hook.afterCreate)\n // This will call afterAttach on the child if necessary\n p.finalizeCreation()\n }\n }\n }\n\n get root(): AnyObjectNode {\n const parent = this.parent\n return parent ? parent.root : this\n }\n\n clearParent(): void {\n if (!this.parent) {\n return\n }\n\n // detach if attached\n this.fireHook(Hook.beforeDetach)\n const previousState = this.state\n this.state = NodeLifeCycle.DETACHING\n\n const root = this.root\n const newEnv = root.environment\n const newIdCache = root.identifierCache!.splitCache(this)\n\n try {\n this.parent.removeChild(this.subpath)\n this.baseSetParent(null, \"\")\n this.environment = newEnv\n this.identifierCache = newIdCache\n } finally {\n this.state = previousState\n }\n }\n\n setParent(newParent: AnyObjectNode, subpath: string): void {\n const parentChanged = newParent !== this.parent\n const subpathChanged = subpath !== this.subpath\n\n if (!parentChanged && !subpathChanged) {\n return\n }\n\n if (devMode()) {\n if (!subpath) {\n // istanbul ignore next\n throw fail(\"assertion failed: subpath expected\")\n }\n if (!newParent) {\n // istanbul ignore next\n throw fail(\"assertion failed: new parent expected\")\n }\n\n if (this.parent && parentChanged) {\n throw fail(\n `A node cannot exists twice in the state tree. Failed to add ${this} to path '${newParent.path}/${subpath}'.`\n )\n }\n if (!this.parent && newParent.root === this) {\n throw fail(\n `A state tree is not allowed to contain itself. Cannot assign ${this} to path '${newParent.path}/${subpath}'`\n )\n }\n if (\n !this.parent &&\n !!this.environment &&\n this.environment !== newParent.root.environment\n ) {\n throw fail(\n `A state tree cannot be made part of another state tree as long as their environments are different.`\n )\n }\n }\n\n if (parentChanged) {\n // attach to new parent\n this.environment = undefined // will use root's\n newParent.root.identifierCache!.mergeCache(this)\n this.baseSetParent(newParent, subpath)\n this.fireHook(Hook.afterAttach)\n } else if (subpathChanged) {\n // moving to a new subpath on the same parent\n this.baseSetParent(this.parent, subpath)\n }\n }\n\n protected fireHook(name: Hook): void {\n this.fireInternalHook(name)\n\n const fn =\n this.storedValue &&\n typeof this.storedValue === \"object\" &&\n (this.storedValue as any)[name]\n if (typeof fn === \"function\") {\n // we check for it to allow old mobx peer dependencies that don't have the method to work (even when still bugged)\n if (_allowStateChangesInsideComputed) {\n _allowStateChangesInsideComputed(() => {\n fn.apply(this.storedValue)\n })\n } else {\n fn.apply(this.storedValue)\n }\n }\n }\n\n private _snapshotUponDeath?: S\n\n // advantage of using computed for a snapshot is that nicely respects transactions etc.\n get snapshot(): S {\n if (this.hasSnapshotPostProcessor) {\n this.createObservableInstanceIfNeeded()\n }\n return this._snapshotComputed.get()\n }\n\n // NOTE: we use this method to get snapshot without creating @computed overhead\n getSnapshot(): S {\n if (!this.isAlive) {\n return this._snapshotUponDeath!\n }\n return this._observableInstanceState === ObservableInstanceLifecycle.CREATED\n ? this._getActualSnapshot()\n : this._getCachedInitialSnapshot()\n }\n\n private _getActualSnapshot(): S {\n return this.type.getSnapshot(this)\n }\n\n private _getCachedInitialSnapshot(): S {\n if (!this._cachedInitialSnapshotCreated) {\n const type = this.type\n const childNodes = this._childNodes\n const snapshot = this._initialSnapshot\n\n this._cachedInitialSnapshot = type.processInitialSnapshot(\n childNodes,\n snapshot\n )\n this._cachedInitialSnapshotCreated = true\n }\n\n return this._cachedInitialSnapshot!\n }\n\n private isRunningAction(): boolean {\n if (this._isRunningAction) {\n return true\n }\n if (this.isRoot) {\n return false\n }\n return this.parent!.isRunningAction()\n }\n\n assertAlive(context: AssertAliveContext): void {\n const livelinessChecking = getLivelinessChecking()\n if (!this.isAlive && livelinessChecking !== \"ignore\") {\n const error = this._getAssertAliveError(context)\n switch (livelinessChecking) {\n case \"error\":\n throw fail(error)\n case \"warn\":\n warnError(error)\n }\n }\n }\n\n private _getAssertAliveError(context: AssertAliveContext): string {\n const escapedPath = this.getEscapedPath(false) || this.pathUponDeath || \"\"\n const subpath = (context.subpath && escapeJsonPath(context.subpath)) || \"\"\n\n let actionContext = context.actionContext || getCurrentActionContext()\n\n // try to use a real action context if possible since it includes the action name\n if (\n actionContext &&\n actionContext.type !== \"action\" &&\n actionContext.parentActionEvent\n ) {\n actionContext = actionContext.parentActionEvent\n }\n\n let actionFullPath = \"\"\n if (actionContext && actionContext.name != null) {\n // try to use the context, and if it not available use the node one\n const actionPath =\n (actionContext &&\n actionContext.context &&\n getPath(actionContext.context)) ||\n escapedPath\n actionFullPath = `${actionPath}.${actionContext.name}()`\n }\n\n return `You are trying to read or write to an object that is no longer part of a state tree. (Object type: '${this.type.name}', Path upon death: '${escapedPath}', Subpath: '${subpath}', Action: '${actionFullPath}'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.`\n }\n\n getChildNode(subpath: string): AnyNode {\n this.assertAlive({\n subpath\n })\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildNode(this, subpath)\n : this._childNodes![subpath]\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildren(): ReadonlyArray<AnyNode> {\n this.assertAlive(EMPTY_OBJECT)\n this._autoUnbox = false\n try {\n return this._observableInstanceState ===\n ObservableInstanceLifecycle.CREATED\n ? this.type.getChildren(this)\n : convertChildNodesToArray(this._childNodes)\n } finally {\n this._autoUnbox = true\n }\n }\n\n getChildType(propertyName?: string): IAnyType {\n return this.type.getChildType(propertyName)\n }\n\n get isProtected(): boolean {\n return this.root.isProtectionEnabled\n }\n\n assertWritable(context: AssertAliveContext): void {\n this.assertAlive(context)\n if (!this.isRunningAction() && this.isProtected) {\n throw fail(\n `Cannot modify '${this}', the object is protected and can only be modified by using an action.`\n )\n }\n }\n\n removeChild(subpath: string): void {\n this.type.removeChild(this, subpath)\n }\n\n // bound on the constructor\n unbox(childNode: AnyNode | undefined): AnyNode | undefined {\n if (!childNode) {\n return childNode\n }\n\n this.assertAlive({\n subpath: childNode.subpath || childNode.subpathUponDeath\n })\n return this._autoUnbox ? childNode.value : childNode\n }\n\n toString(): string {\n const path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\"\n const identifier = this.identifier ? `(id: ${this.identifier})` : \"\"\n return `${this.type.name}@${path}${identifier}${this.isAlive ? \"\" : \" [dead]\"}`\n }\n\n finalizeCreation(): void {\n this.baseFinalizeCreation(() => {\n for (const child of this.getChildren()) {\n child.finalizeCreation()\n }\n\n this.fireInternalHook(Hook.afterCreationFinalization)\n })\n }\n\n detach(): void {\n if (!this.isAlive) {\n throw fail(`Error while detaching, node is not alive.`)\n }\n\n this.clearParent()\n }\n\n private preboot(): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n this._applyPatches = createActionInvoker(\n this.storedValue,\n \"@APPLY_PATCHES\",\n (patches: IJsonPatch[]) => {\n patches.forEach(patch => {\n if (!patch.path) {\n self.type.applySnapshot(self, patch.value)\n return\n }\n const parts = splitJsonPath(patch.path)\n const node = resolveNodeByPathParts(\n self,\n parts.slice(0, -1)\n ) as AnyObjectNode\n node.applyPatchLocally(parts[parts.length - 1], patch)\n })\n }\n )\n this._applySnapshot = createActionInvoker(\n this.storedValue,\n \"@APPLY_SNAPSHOT\",\n (snapshot: C) => {\n // if the snapshot is the same as the current one, avoid performing a reconcile\n if (snapshot === (self.snapshot as any)) {\n return\n }\n // else, apply it by calling the type logic\n return self.type.applySnapshot(self, snapshot as any)\n }\n )\n\n addHiddenFinalProp(this.storedValue, \"$treenode\", this)\n addHiddenFinalProp(this.storedValue, \"toJSON\", toJSON)\n }\n\n die(): void {\n if (!this.isAlive || this.state === NodeLifeCycle.DETACHING) {\n return\n }\n this.aboutToDie()\n this.finalizeDeath()\n }\n\n aboutToDie(): void {\n if (\n this._observableInstanceState ===\n ObservableInstanceLifecycle.UNINITIALIZED\n ) {\n return\n }\n\n this.getChildren().forEach(node => {\n node.aboutToDie()\n })\n\n // beforeDestroy should run before the disposers since else we could end up in a situation where\n // a disposer added with addDisposer at this stage (beforeDestroy) is actually never released\n this.baseAboutToDie()\n\n this._internalEventsEmit(InternalEvents.Dispose)\n this._internalEventsClear(InternalEvents.Dispose)\n }\n\n finalizeDeath(): void {\n // invariant: not called directly but from \"die\"\n this.getChildren().forEach(node => {\n node.finalizeDeath()\n })\n this.root.identifierCache!.notifyDied(this)\n\n // \"kill\" the computed prop and just store the last snapshot\n const snapshot = this.snapshot\n this._snapshotUponDeath = snapshot\n\n this._internalEventsClearAll()\n\n this.baseFinalizeDeath()\n }\n\n onSnapshot(onChange: (snapshot: S) => void): IDisposer {\n this._addSnapshotReaction()\n return this._internalEventsRegister(InternalEvents.Snapshot, onChange)\n }\n\n protected emitSnapshot(snapshot: S): void {\n this._internalEventsEmit(InternalEvents.Snapshot, snapshot)\n }\n\n onPatch(\n handler: (patch: IJsonPatch, reversePatch: IJsonPatch) => void\n ): IDisposer {\n return this._internalEventsRegister(InternalEvents.Patch, handler)\n }\n\n emitPatch(basePatch: IReversibleJsonPatch, source: AnyNode): void {\n if (this._internalEventsHasSubscribers(InternalEvents.Patch)) {\n const localizedPatch: IReversibleJsonPatch = extend({}, basePatch, {\n path: source.path.substr(this.path.length) + \"/\" + basePatch.path // calculate the relative path of the patch\n })\n const [patch, reversePatch] = splitPatch(localizedPatch)\n this._internalEventsEmit(InternalEvents.Patch, patch, reversePatch)\n }\n if (this.parent) {\n this.parent.emitPatch(basePatch, source)\n }\n }\n\n hasDisposer(disposer: () => void): boolean {\n return this._internalEventsHas(InternalEvents.Dispose, disposer)\n }\n\n addDisposer(disposer: () => void): void {\n if (!this.hasDisposer(disposer)) {\n this._internalEventsRegister(InternalEvents.Dispose, disposer, true)\n return\n }\n throw fail(\n \"cannot add a disposer when it is already registered for execution\"\n )\n }\n\n removeDisposer(disposer: () => void): void {\n if (!this._internalEventsHas(InternalEvents.Dispose, disposer)) {\n throw fail(\n \"cannot remove a disposer which was never registered for execution\"\n )\n }\n this._internalEventsUnregister(InternalEvents.Dispose, disposer)\n }\n\n private removeMiddleware(middleware: IMiddleware): void {\n if (this.middlewares) {\n const index = this.middlewares.indexOf(middleware)\n if (index >= 0) {\n this.middlewares.splice(index, 1)\n }\n }\n }\n\n addMiddleWare(\n handler: IMiddlewareHandler,\n includeHooks: boolean = true\n ): IDisposer {\n const middleware = { handler, includeHooks }\n if (!this.middlewares) {\n this.middlewares = [middleware]\n } else {\n this.middlewares.push(middleware)\n }\n\n return () => {\n this.removeMiddleware(middleware)\n }\n }\n\n applyPatchLocally(subpath: string, patch: IJsonPatch): void {\n this.assertWritable({\n subpath\n })\n this.createObservableInstanceIfNeeded()\n this.type.applyPatchLocally(this, subpath, patch)\n }\n\n private _addSnapshotReaction(): void {\n if (!this._hasSnapshotReaction) {\n const snapshotDisposer = reaction(\n () => this.snapshot,\n snapshot => this.emitSnapshot(snapshot),\n snapshotReactionOptions\n )\n this.addDisposer(snapshotDisposer)\n this._hasSnapshotReaction = true\n }\n }\n\n // #region internal event handling\n\n private _internalEvents?: EventHandlers<InternalEventHandlers<S>>\n\n // we proxy the methods to avoid creating an EventHandlers instance when it is not needed\n\n private _internalEventsHasSubscribers(event: InternalEvents): boolean {\n return !!this._internalEvents && this._internalEvents.hasSubscribers(event)\n }\n\n private _internalEventsRegister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE],\n atTheBeginning = false\n ): IDisposer {\n if (!this._internalEvents) {\n this._internalEvents = new EventHandlers()\n }\n return this._internalEvents.register(event, eventHandler, atTheBeginning)\n }\n\n private _internalEventsHas<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): boolean {\n return (\n !!this._internalEvents && this._internalEvents.has(event, eventHandler)\n )\n }\n\n private _internalEventsUnregister<IE extends InternalEvents>(\n event: IE,\n eventHandler: InternalEventHandlers<S>[IE]\n ): void {\n if (this._internalEvents) {\n this._internalEvents.unregister(event, eventHandler)\n }\n }\n\n private _internalEventsEmit<IE extends InternalEvents>(\n event: IE,\n ...args: ArgumentTypes<InternalEventHandlers<S>[IE]>\n ): void {\n if (this._internalEvents) {\n this._internalEvents.emit(event, ...args)\n }\n }\n\n private _internalEventsClear(event: InternalEvents): void {\n if (this._internalEvents) {\n this._internalEvents.clear(event)\n }\n }\n\n private _internalEventsClearAll(): void {\n if (this._internalEvents) {\n this._internalEvents.clearAll()\n }\n }\n\n // #endregion\n}\nObjectNode.prototype.createObservableInstance = action(\n ObjectNode.prototype.createObservableInstance\n)\nObjectNode.prototype.detach = action(ObjectNode.prototype.detach)\nObjectNode.prototype.die = action(ObjectNode.prototype.die)\n\n/**\n * @internal\n * @hidden\n */\nexport type AnyObjectNode = ObjectNode<any, any, any>\n\n/**\n * @internal\n * @hidden\n */\nexport interface AssertAliveContext {\n subpath?: string\n actionContext?: IMiddlewareEvent\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { BaseNode } from "./BaseNode.ts";
2
+ import { SimpleType } from "../type/type.ts";
3
+ import { type AnyObjectNode, Hook } from "../../internal.ts";
4
+ /**
5
+ * @internal
6
+ * @hidden
7
+ */
8
+ export declare class ScalarNode<C, S, T> extends BaseNode<C, S, T> {
9
+ readonly type: SimpleType<C, S, T>;
10
+ constructor(simpleType: SimpleType<C, S, T>, parent: AnyObjectNode | null, subpath: string, environment: any, initialSnapshot: C);
11
+ get root(): AnyObjectNode;
12
+ setParent(newParent: AnyObjectNode, subpath: string): void;
13
+ get snapshot(): S;
14
+ getSnapshot(): S;
15
+ toString(): string;
16
+ die(): void;
17
+ finalizeCreation(): void;
18
+ aboutToDie(): void;
19
+ finalizeDeath(): void;
20
+ protected fireHook(name: Hook): void;
21
+ }