@jbrowse/mobx-state-tree 5.6.10 → 5.7.1

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 (202) 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 -86
  200. package/dist/mobx-state-tree.js.map +0 -1
  201. package/dist/mobx-state-tree.module.js +0 -84
  202. package/dist/mobx-state-tree.module.js.map +0 -1
@@ -0,0 +1,240 @@
1
+ import { BaseType } from "../../core/type/type.js";
2
+ import { ModelType, TypeFlags, assertArg, assertIsType, devMode, fail, flattenTypeErrors, isPlainObject, isStateTreeNode, isType, isTypeCheckingEnabled, typeCheckFailure, typeCheckSuccess } from "../../internal.js";
3
+ /**
4
+ * @internal
5
+ * @hidden
6
+ */
7
+ export class Union extends BaseType {
8
+ _types;
9
+ _dispatcher;
10
+ _eager = true;
11
+ get flags() {
12
+ let result = TypeFlags.Union;
13
+ this._types.forEach(type => {
14
+ result |= type.flags;
15
+ });
16
+ return result;
17
+ }
18
+ constructor(name, _types, options) {
19
+ super(name);
20
+ this._types = _types;
21
+ options = {
22
+ eager: true,
23
+ dispatcher: undefined,
24
+ ...options
25
+ };
26
+ this._dispatcher = options.dispatcher;
27
+ if (!options.eager) {
28
+ this._eager = false;
29
+ }
30
+ }
31
+ isAssignableFrom(type) {
32
+ return this._types.some(subType => subType.isAssignableFrom(type));
33
+ }
34
+ describe() {
35
+ return ("(" + this._types.map(factory => factory.describe()).join(" | ") + ")");
36
+ }
37
+ instantiate(parent, subpath, environment, initialValue) {
38
+ const type = this.determineType(initialValue, undefined);
39
+ if (!type) {
40
+ throw fail(this.noMatchMessage(initialValue));
41
+ } // can happen in prod builds
42
+ return type.instantiate(parent, subpath, environment, initialValue);
43
+ }
44
+ reconcile(current, newValue, parent, subpath) {
45
+ const type = this.determineType(newValue, current.getReconciliationType());
46
+ if (!type) {
47
+ throw fail(this.noMatchMessage(newValue));
48
+ } // can happen in prod builds
49
+ return type.reconcile(current, newValue, parent, subpath);
50
+ }
51
+ noMatchMessage(value) {
52
+ const discriminator = isPlainObject(value) && typeof value.type === "string"
53
+ ? ` for snapshot with type "${value.type}"`
54
+ : "";
55
+ return `No matching type for union ${this.name}${discriminator}`;
56
+ }
57
+ determineType(value, reconcileCurrentType) {
58
+ // try the dispatcher, if defined
59
+ if (this._dispatcher) {
60
+ return this._dispatcher(value);
61
+ }
62
+ // fast path: when type checking is disabled, try quick structural matching first
63
+ if (!isTypeCheckingEnabled()) {
64
+ const quickMatch = this.tryQuickMatch(value, reconcileCurrentType);
65
+ if (quickMatch) {
66
+ return quickMatch;
67
+ }
68
+ // for plain object snapshots that didn't match via quick path, try all types
69
+ // with quick matching before falling back to full validation
70
+ // (state tree nodes must go through full validation for type identity checks)
71
+ if (isPlainObject(value) && !isStateTreeNode(value)) {
72
+ for (const type of this._types) {
73
+ if (this.snapshotLooksLikeType(value, type)) {
74
+ return type;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ // find the most accomodating type
80
+ // if we are using reconciliation try the current node type first (fix for #1045)
81
+ if (reconcileCurrentType) {
82
+ if (reconcileCurrentType.is(value)) {
83
+ return reconcileCurrentType;
84
+ }
85
+ return this._types
86
+ .filter(t => t !== reconcileCurrentType)
87
+ .find(type => type.is(value));
88
+ }
89
+ else {
90
+ return this._types.find(type => type.is(value));
91
+ }
92
+ }
93
+ tryQuickMatch(value, reconcileCurrentType) {
94
+ // state tree nodes need full type compatibility checking
95
+ // (e.g., A.is(B.create()) must return false even if snapshots are compatible)
96
+ if (isStateTreeNode(value)) {
97
+ return undefined;
98
+ }
99
+ // for non-object values, try primitive matching
100
+ if (!isPlainObject(value)) {
101
+ return this.tryMatchPrimitive(value);
102
+ }
103
+ // for objects, try structural matching against model types
104
+ const typesToCheck = reconcileCurrentType
105
+ ? [
106
+ reconcileCurrentType,
107
+ ...this._types.filter(t => t !== reconcileCurrentType)
108
+ ]
109
+ : this._types;
110
+ for (const type of typesToCheck) {
111
+ if (this.snapshotLooksLikeType(value, type)) {
112
+ return type;
113
+ }
114
+ }
115
+ return undefined;
116
+ }
117
+ tryMatchPrimitive(value) {
118
+ const valueType = typeof value;
119
+ for (const type of this._types) {
120
+ const flags = type.flags;
121
+ if ((valueType === "string" && flags & TypeFlags.String) ||
122
+ (valueType === "number" &&
123
+ flags &
124
+ (TypeFlags.Number |
125
+ TypeFlags.Integer |
126
+ TypeFlags.Float |
127
+ TypeFlags.Finite)) ||
128
+ (valueType === "boolean" && flags & TypeFlags.Boolean) ||
129
+ (value === null && flags & TypeFlags.Null) ||
130
+ (value === undefined && flags & TypeFlags.Undefined)) {
131
+ return type;
132
+ }
133
+ // for literals, check exact value match
134
+ if (flags & TypeFlags.Literal) {
135
+ if (type.is(value)) {
136
+ return type;
137
+ }
138
+ }
139
+ }
140
+ return undefined;
141
+ }
142
+ snapshotLooksLikeType(value, type) {
143
+ // for model types, check if snapshot has all the required property keys
144
+ // and that any literal-typed properties match exactly
145
+ if (type instanceof ModelType) {
146
+ const props = type.properties;
147
+ // use cached propertyNames from ModelType instead of Object.keys()
148
+ for (const key of type.propertyNames) {
149
+ const propType = props[key];
150
+ const isOptional = propType.flags & TypeFlags.Optional;
151
+ const propValue = value[key];
152
+ // check required properties exist and are not undefined
153
+ // (unless the type accepts undefined, which Optional types do)
154
+ if (!isOptional) {
155
+ if (!(key in value) || propValue === undefined) {
156
+ return false;
157
+ }
158
+ }
159
+ // for literal types, verify the value matches exactly
160
+ // this is critical for discriminated unions
161
+ if (propType.flags & TypeFlags.Literal) {
162
+ if (!propType.is(propValue)) {
163
+ return false;
164
+ }
165
+ }
166
+ }
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ isValidSnapshot(value, context) {
172
+ if (this._dispatcher) {
173
+ return this._dispatcher(value).validate(value, context);
174
+ }
175
+ // for plain-object snapshots, prefer union members whose literal-typed
176
+ // discriminator properties match the value (e.g. {type: "MsaView"})
177
+ // so error output is scoped to the intended branch instead of every member
178
+ const candidates = isPlainObject(value) && !isStateTreeNode(value)
179
+ ? this._types.filter(t => this.snapshotLooksLikeType(value, t))
180
+ : [];
181
+ const typesToValidate = candidates.length > 0 ? candidates : this._types;
182
+ const allErrors = [];
183
+ let applicableTypes = 0;
184
+ for (const type of typesToValidate) {
185
+ const errors = type.validate(value, context);
186
+ if (errors.length === 0) {
187
+ if (this._eager) {
188
+ return typeCheckSuccess();
189
+ }
190
+ else {
191
+ applicableTypes++;
192
+ }
193
+ }
194
+ else {
195
+ allErrors.push(errors);
196
+ }
197
+ }
198
+ if (applicableTypes === 1) {
199
+ return typeCheckSuccess();
200
+ }
201
+ return typeCheckFailure(context, value, "No type is applicable for the union").concat(flattenTypeErrors(allErrors));
202
+ }
203
+ getSubTypes() {
204
+ return this._types;
205
+ }
206
+ }
207
+ /**
208
+ * `types.union` - Create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function of the form `(snapshot) => Type`.
209
+ *
210
+ * @param optionsOrType
211
+ * @param otherTypes
212
+ * @returns
213
+ */
214
+ export function union(optionsOrType, ...otherTypes) {
215
+ const options = isType(optionsOrType) ? undefined : optionsOrType;
216
+ const types = isType(optionsOrType)
217
+ ? [optionsOrType, ...otherTypes]
218
+ : otherTypes;
219
+ const name = "(" + types.map(type => type.name).join(" | ") + ")";
220
+ // check all options
221
+ if (devMode()) {
222
+ if (options) {
223
+ assertArg(options, o => isPlainObject(o), "object { eager?: boolean, dispatcher?: Function }", 1);
224
+ }
225
+ types.forEach((type, i) => {
226
+ assertIsType(type, options ? i + 2 : i + 1);
227
+ });
228
+ }
229
+ return new Union(name, types, options);
230
+ }
231
+ /**
232
+ * Returns if a given value represents a union type.
233
+ *
234
+ * @param type
235
+ * @returns
236
+ */
237
+ export function isUnionType(type) {
238
+ return (type.flags & TypeFlags.Union) > 0;
239
+ }
240
+ //# sourceMappingURL=union.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.js","sourceRoot":"","sources":["../../../src/types/utility-types/union.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseType } from \"../../core/type/type.ts\"\nimport {\n type AnyObjectNode,\n type IAnyType,\n type IModelType,\n type IType,\n type IValidationContext,\n type IValidationError,\n type IValidationResult,\n type ModelCreationType2,\n type ModelInstanceType,\n type ModelProperties,\n type ModelSnapshotType2,\n ModelType,\n TypeFlags,\n type _NotCustomized,\n assertArg,\n assertIsType,\n devMode,\n fail,\n flattenTypeErrors,\n isPlainObject,\n isStateTreeNode,\n isType,\n isTypeCheckingEnabled,\n typeCheckFailure,\n typeCheckSuccess\n} from \"../../internal.ts\"\n\nexport type ITypeDispatcher = (snapshot: any) => IAnyType\n\nexport interface UnionOptions {\n eager?: boolean\n dispatcher?: ITypeDispatcher\n}\n\n/**\n * @internal\n * @hidden\n */\nexport class Union extends BaseType<any, any, any> {\n private readonly _dispatcher?: ITypeDispatcher\n private readonly _eager: boolean = true\n\n get flags() {\n let result: TypeFlags = TypeFlags.Union\n\n this._types.forEach(type => {\n result |= type.flags\n })\n\n return result\n }\n\n constructor(\n name: string,\n private readonly _types: IAnyType[],\n options?: UnionOptions\n ) {\n super(name)\n options = {\n eager: true,\n dispatcher: undefined,\n ...options\n }\n this._dispatcher = options.dispatcher\n if (!options.eager) {\n this._eager = false\n }\n }\n\n isAssignableFrom(type: IAnyType) {\n return this._types.some(subType => subType.isAssignableFrom(type))\n }\n\n describe() {\n return (\n \"(\" + this._types.map(factory => factory.describe()).join(\" | \") + \")\"\n )\n }\n\n instantiate(\n parent: AnyObjectNode | null,\n subpath: string,\n environment: any,\n initialValue: this[\"C\"] | this[\"T\"]\n ): this[\"N\"] {\n const type = this.determineType(initialValue, undefined)\n if (!type) {\n throw fail(this.noMatchMessage(initialValue))\n } // can happen in prod builds\n return type.instantiate(parent, subpath, environment, initialValue)\n }\n\n reconcile(\n current: this[\"N\"],\n newValue: this[\"C\"] | this[\"T\"],\n parent: AnyObjectNode,\n subpath: string\n ): this[\"N\"] {\n const type = this.determineType(newValue, current.getReconciliationType())\n if (!type) {\n throw fail(this.noMatchMessage(newValue))\n } // can happen in prod builds\n return type.reconcile(current, newValue, parent, subpath)\n }\n\n private noMatchMessage(value: unknown): string {\n const discriminator =\n isPlainObject(value) && typeof (value as any).type === \"string\"\n ? ` for snapshot with type \"${(value as any).type}\"`\n : \"\"\n return `No matching type for union ${this.name}${discriminator}`\n }\n\n determineType(\n value: this[\"C\"] | this[\"T\"],\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // try the dispatcher, if defined\n if (this._dispatcher) {\n return this._dispatcher(value)\n }\n\n // fast path: when type checking is disabled, try quick structural matching first\n if (!isTypeCheckingEnabled()) {\n const quickMatch = this.tryQuickMatch(value, reconcileCurrentType)\n if (quickMatch) {\n return quickMatch\n }\n // for plain object snapshots that didn't match via quick path, try all types\n // with quick matching before falling back to full validation\n // (state tree nodes must go through full validation for type identity checks)\n if (isPlainObject(value) && !isStateTreeNode(value)) {\n for (const type of this._types) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n }\n }\n\n // find the most accomodating type\n // if we are using reconciliation try the current node type first (fix for #1045)\n if (reconcileCurrentType) {\n if (reconcileCurrentType.is(value)) {\n return reconcileCurrentType\n }\n return this._types\n .filter(t => t !== reconcileCurrentType)\n .find(type => type.is(value))\n } else {\n return this._types.find(type => type.is(value))\n }\n }\n\n private tryQuickMatch(\n value: any,\n reconcileCurrentType: IAnyType | undefined\n ): IAnyType | undefined {\n // state tree nodes need full type compatibility checking\n // (e.g., A.is(B.create()) must return false even if snapshots are compatible)\n if (isStateTreeNode(value)) {\n return undefined\n }\n\n // for non-object values, try primitive matching\n if (!isPlainObject(value)) {\n return this.tryMatchPrimitive(value)\n }\n\n // for objects, try structural matching against model types\n const typesToCheck = reconcileCurrentType\n ? [\n reconcileCurrentType,\n ...this._types.filter(t => t !== reconcileCurrentType)\n ]\n : this._types\n\n for (const type of typesToCheck) {\n if (this.snapshotLooksLikeType(value, type)) {\n return type\n }\n }\n return undefined\n }\n\n private tryMatchPrimitive(value: any): IAnyType | undefined {\n const valueType = typeof value\n for (const type of this._types) {\n const flags = type.flags\n if (\n (valueType === \"string\" && flags & TypeFlags.String) ||\n (valueType === \"number\" &&\n flags &\n (TypeFlags.Number |\n TypeFlags.Integer |\n TypeFlags.Float |\n TypeFlags.Finite)) ||\n (valueType === \"boolean\" && flags & TypeFlags.Boolean) ||\n (value === null && flags & TypeFlags.Null) ||\n (value === undefined && flags & TypeFlags.Undefined)\n ) {\n return type\n }\n // for literals, check exact value match\n if (flags & TypeFlags.Literal) {\n if (type.is(value)) {\n return type\n }\n }\n }\n return undefined\n }\n\n private snapshotLooksLikeType(value: any, type: IAnyType): boolean {\n // for model types, check if snapshot has all the required property keys\n // and that any literal-typed properties match exactly\n if (type instanceof ModelType) {\n const props = type.properties\n // use cached propertyNames from ModelType instead of Object.keys()\n for (const key of type.propertyNames) {\n const propType = props[key]!\n const isOptional = propType.flags & TypeFlags.Optional\n const propValue = value[key]\n\n // check required properties exist and are not undefined\n // (unless the type accepts undefined, which Optional types do)\n if (!isOptional) {\n if (!(key in value) || propValue === undefined) {\n return false\n }\n }\n\n // for literal types, verify the value matches exactly\n // this is critical for discriminated unions\n if (propType.flags & TypeFlags.Literal) {\n if (!propType.is(propValue)) {\n return false\n }\n }\n }\n return true\n }\n return false\n }\n\n isValidSnapshot(\n value: this[\"C\"],\n context: IValidationContext\n ): IValidationResult {\n if (this._dispatcher) {\n return this._dispatcher(value).validate(value, context)\n }\n\n // for plain-object snapshots, prefer union members whose literal-typed\n // discriminator properties match the value (e.g. {type: \"MsaView\"})\n // so error output is scoped to the intended branch instead of every member\n const candidates =\n isPlainObject(value) && !isStateTreeNode(value)\n ? this._types.filter(t => this.snapshotLooksLikeType(value, t))\n : []\n const typesToValidate = candidates.length > 0 ? candidates : this._types\n\n const allErrors: IValidationError[][] = []\n let applicableTypes = 0\n for (const type of typesToValidate) {\n const errors = type.validate(value, context)\n if (errors.length === 0) {\n if (this._eager) {\n return typeCheckSuccess()\n } else {\n applicableTypes++\n }\n } else {\n allErrors.push(errors)\n }\n }\n\n if (applicableTypes === 1) {\n return typeCheckSuccess()\n }\n return typeCheckFailure(\n context,\n value,\n \"No type is applicable for the union\"\n ).concat(flattenTypeErrors(allErrors))\n }\n\n getSubTypes() {\n return this._types\n }\n}\n\n/**\n * Transform _NotCustomized | _NotCustomized... to _NotCustomized, _NotCustomized | A | B to A | B\n * @hidden\n */\nexport type _CustomCSProcessor<T> =\n Exclude<T, _NotCustomized> extends never\n ? _NotCustomized\n : Exclude<T, _NotCustomized>\n\n/** @hidden */\nexport interface ITypeUnion<C, S, T> extends IType<\n _CustomCSProcessor<C>,\n _CustomCSProcessor<S>,\n T\n> {}\n\n// generated with packages/mobx-state-tree/scripts/generate-union-types.js\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB,\n OB, FCB, FSB>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G:\n IModelType<PG, OG, FCG, FSG>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE,\n FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD, OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<PA extends ModelProperties, OA, FCA, FSA, PB extends ModelProperties, OB, FCB, FSB, PC extends ModelProperties, OC, FCC, FSC, PD extends ModelProperties, OD,\n FCD, FSD, PE extends ModelProperties, OE, FCE, FSE, PF extends ModelProperties, OF, FCF, FSF, PG extends ModelProperties, OG, FCG, FSG, PH extends ModelProperties, OH, FCH, FSH, PI extends ModelProperties, OI, FCI, FSI>(options: UnionOptions, A: IModelType<PA, OA, FCA, FSA>, B: IModelType<PB, OB, FCB, FSB>, C: IModelType<PC, OC, FCC, FSC>, D: IModelType<PD,\n OD, FCD, FSD>, E: IModelType<PE, OE, FCE, FSE>, F: IModelType<PF, OF, FCF, FSF>, G: IModelType<PG, OG, FCG, FSG>, H: IModelType<PH, OH, FCH, FSH>, I: IModelType<PI, OI, FCI, FSI>): ITypeUnion<ModelCreationType2<PA, FCA> | ModelCreationType2<PB, FCB> | ModelCreationType2<PC, FCC> | ModelCreationType2<PD, FCD> | ModelCreationType2<PE, FCE> | ModelCreationType2<PF, FCF> | ModelCreationType2<PG, FCG> | ModelCreationType2<PH, FCH> | ModelCreationType2<PI, FCI>, ModelSnapshotType2<PA, FSA> | ModelSnapshotType2<PB, FSB> | ModelSnapshotType2<PC, FSC> | ModelSnapshotType2<PD, FSD> | ModelSnapshotType2<PE, FSE> | ModelSnapshotType2<PF, FSF> | ModelSnapshotType2<PG, FSG> | ModelSnapshotType2<PH, FSH> | ModelSnapshotType2<PI, FSI>, ModelInstanceType<PA, OA> | ModelInstanceType<PB, OB> | ModelInstanceType<PC, OC> | ModelInstanceType<PD, OD> | ModelInstanceType<PE, OE> | ModelInstanceType<PF, OF> | ModelInstanceType<PG, OG> | ModelInstanceType<PH, OH> | ModelInstanceType<PI, OI>>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>): ITypeUnion<CA | CB, SA | SB, TA | TB>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>): ITypeUnion<CA | CB | CC, SA | SB | SC, TA | TB | TC>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB |\n CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>): ITypeUnion<CA | CB | CC | CD, SA | SB | SC | SD, TA | TB | TC | TD>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>): ITypeUnion<CA | CB | CC | CD | CE, SA | SB | SC | SD | SE, TA | TB | TC | TD | TE>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>): ITypeUnion<CA | CB | CC | CD | CE | CF, SA | SB | SC | SD | SE | SF, TA | TB | TC | TD | TE | TF>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD |\n TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG, SA | SB | SC | SD | SE | SF | SG, TA | TB | TC | TD | TE | TF | TG>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC |\n SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB,\n TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH, SA | SB | SC | SD | SE | SF | SG | SH, TA | TB | TC | TD | TE | TF | TG | TH>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD |\n CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n// prettier-ignore\nexport function union<CA, SA, TA, CB, SB, TB, CC, SC, TC, CD, SD, TD, CE, SE, TE, CF, SF, TF, CG, SG, TG, CH, SH, TH, CI, SI, TI>(options: UnionOptions, A: IType<CA, SA, TA>, B: IType<CB, SB, TB>, C: IType<CC, SC, TC>, D: IType<CD, SD, TD>, E: IType<CE, SE, TE>, F: IType<CF, SF, TF>, G: IType<CG, SG, TG>, H: IType<CH, SH, TH>, I: IType<CI, SI, TI>): ITypeUnion<CA | CB | CC | CD | CE | CF | CG | CH | CI, SA | SB | SC | SD | SE | SF | SG | SH | SI, TA | TB | TC | TD | TE | TF | TG | TH | TI>\n\n// manually written\nexport function union(...types: IAnyType[]): IAnyType\nexport function union(\n dispatchOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType\n/**\n * `types.union` - Create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function of the form `(snapshot) => Type`.\n *\n * @param optionsOrType\n * @param otherTypes\n * @returns\n */\nexport function union(\n optionsOrType: UnionOptions | IAnyType,\n ...otherTypes: IAnyType[]\n): IAnyType {\n const options = isType(optionsOrType) ? undefined : optionsOrType\n const types = isType(optionsOrType)\n ? [optionsOrType, ...otherTypes]\n : otherTypes\n const name = \"(\" + types.map(type => type.name).join(\" | \") + \")\"\n\n // check all options\n if (devMode()) {\n if (options) {\n assertArg(\n options,\n o => isPlainObject(o),\n \"object { eager?: boolean, dispatcher?: Function }\",\n 1\n )\n }\n types.forEach((type, i) => {\n assertIsType(type, options ? i + 2 : i + 1)\n })\n }\n return new Union(name, types, options)\n}\n\n/**\n * Returns if a given value represents a union type.\n *\n * @param type\n * @returns\n */\nexport function isUnionType<IT extends IAnyType>(type: IT): type is IT {\n return (type.flags & TypeFlags.Union) > 0\n}\n"]}
package/esm/utils.d.ts ADDED
@@ -0,0 +1,230 @@
1
+ import type { Primitives } from "./core/type/type.ts";
2
+ /**
3
+ * @internal
4
+ * @hidden
5
+ */
6
+ export declare const EMPTY_ARRAY: ReadonlyArray<any>;
7
+ /**
8
+ * @internal
9
+ * @hidden
10
+ */
11
+ export declare const EMPTY_OBJECT: {};
12
+ /**
13
+ * @internal
14
+ * @hidden
15
+ */
16
+ export declare const mobxShallow: {
17
+ deep: boolean;
18
+ proxy?: undefined;
19
+ } | {
20
+ deep: boolean;
21
+ proxy: boolean;
22
+ };
23
+ /**
24
+ * A generic disposer.
25
+ */
26
+ export type IDisposer = () => void;
27
+ /**
28
+ * @internal
29
+ * @hidden
30
+ */
31
+ export declare function fail(message?: string): Error;
32
+ /**
33
+ * @internal
34
+ * @hidden
35
+ */
36
+ export declare function identity(_: any): any;
37
+ /**
38
+ * @internal
39
+ * @hidden
40
+ */
41
+ export declare function noop(): void;
42
+ /**
43
+ * @internal
44
+ * @hidden
45
+ */
46
+ export declare const isInteger: (number: unknown) => boolean;
47
+ /**
48
+ * @internal
49
+ * @hidden
50
+ */
51
+ export declare function isFloat(val: any): boolean;
52
+ /**
53
+ * @internal
54
+ * @hidden
55
+ */
56
+ export declare function isFinite(val: any): boolean;
57
+ /**
58
+ * @internal
59
+ * @hidden
60
+ */
61
+ export declare function isArray(val: any): val is any[];
62
+ /**
63
+ * @internal
64
+ * @hidden
65
+ */
66
+ export declare function asArray<T>(val: undefined | null | T | T[] | ReadonlyArray<T>): T[];
67
+ /**
68
+ * @internal
69
+ * @hidden
70
+ */
71
+ export declare function extend<A, B>(a: A, b: B): A & B;
72
+ /**
73
+ * @internal
74
+ * @hidden
75
+ */
76
+ export declare function extend<A, B, C>(a: A, b: B, c: C): A & B & C;
77
+ /**
78
+ * @internal
79
+ * @hidden
80
+ */
81
+ export declare function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
82
+ /**
83
+ * @internal
84
+ * @hidden
85
+ */
86
+ export declare function extend(a: any, ...b: any[]): any;
87
+ /**
88
+ * @internal
89
+ * @hidden
90
+ */
91
+ export declare function isPlainObject(value: any): value is {
92
+ [k: string]: any;
93
+ };
94
+ /**
95
+ * @internal
96
+ * @hidden
97
+ */
98
+ export declare function isMutable(value: any): boolean;
99
+ /**
100
+ * @internal
101
+ * @hidden
102
+ */
103
+ export declare function isPrimitive(value: any, includeDate?: boolean): value is Primitives;
104
+ /**
105
+ * @internal
106
+ * @hidden
107
+ * Freeze a value and return it (if not in production)
108
+ */
109
+ export declare function freeze<T>(value: T): T;
110
+ /**
111
+ * @internal
112
+ * @hidden
113
+ * Recursively freeze a value (if not in production)
114
+ */
115
+ export declare function deepFreeze<T>(value: T): T;
116
+ /**
117
+ * @internal
118
+ * @hidden
119
+ */
120
+ export declare function isSerializable(value: any): boolean;
121
+ /**
122
+ * @internal
123
+ * @hidden
124
+ */
125
+ export declare function defineProperty(object: any, key: PropertyKey, descriptor: PropertyDescriptor): void;
126
+ /**
127
+ * @internal
128
+ * @hidden
129
+ */
130
+ export declare function addHiddenFinalProp(object: any, propName: string, value: any): void;
131
+ /**
132
+ * @internal
133
+ * @hidden
134
+ */
135
+ export declare function addHiddenWritableProp(object: any, propName: string, value: any): void;
136
+ /**
137
+ * @internal
138
+ * @hidden
139
+ */
140
+ export type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;
141
+ /**
142
+ * @internal
143
+ * @hidden
144
+ */
145
+ export declare class EventHandlers<E extends {
146
+ [k: string]: Function;
147
+ }> {
148
+ private eventHandlers?;
149
+ hasSubscribers(event: keyof E): boolean;
150
+ register<N extends keyof E>(event: N, fn: E[N], atTheBeginning?: boolean): IDisposer;
151
+ has<N extends keyof E>(event: N, fn: E[N]): boolean;
152
+ unregister<N extends keyof E>(event: N, fn: E[N]): void;
153
+ clear<N extends keyof E>(event: N): void;
154
+ clearAll(): void;
155
+ emit<N extends keyof E>(event: N, ...args: ArgumentTypes<E[N]>): void;
156
+ }
157
+ /**
158
+ * @internal
159
+ * @hidden
160
+ */
161
+ export declare function hasOwnProperty(object: object, propName: string): boolean;
162
+ /**
163
+ * @internal
164
+ * @hidden
165
+ */
166
+ export declare function argsToArray(args: IArguments): any[];
167
+ /**
168
+ * @internal
169
+ * @hidden
170
+ */
171
+ export declare function stringStartsWith(str: string, beginning: string): boolean;
172
+ /**
173
+ * @internal
174
+ * @hidden
175
+ */
176
+ export type DeprecatedFunction = Function & {
177
+ ids?: {
178
+ [id: string]: true;
179
+ };
180
+ };
181
+ /**
182
+ * @internal
183
+ * @hidden
184
+ */
185
+ export declare const deprecated: DeprecatedFunction;
186
+ /**
187
+ * @internal
188
+ * @hidden
189
+ */
190
+ export declare function warnError(msg: string): void;
191
+ /**
192
+ * @internal
193
+ * @hidden
194
+ */
195
+ export declare function isTypeCheckingEnabled(): boolean;
196
+ /**
197
+ * @internal
198
+ * @hidden
199
+ */
200
+ export declare function devMode(): boolean;
201
+ /**
202
+ * @internal
203
+ * @hidden
204
+ */
205
+ export declare function setDevMode(value: boolean): void;
206
+ /**
207
+ * @internal
208
+ * @hidden
209
+ */
210
+ export declare function assertArg<T>(value: T, fn: (value: T) => boolean, typeName: string, argNumber: number | number[]): void;
211
+ /**
212
+ * @internal
213
+ * @hidden
214
+ */
215
+ export declare function assertIsFunction(value: Function, argNumber: number | number[]): void;
216
+ /**
217
+ * @internal
218
+ * @hidden
219
+ */
220
+ export declare function assertIsNumber(value: number, argNumber: number | number[], min?: number, max?: number): void;
221
+ /**
222
+ * @internal
223
+ * @hidden
224
+ */
225
+ export declare function assertIsString(value: string, argNumber: number | number[], canBeEmpty?: boolean): void;
226
+ /**
227
+ * @internal
228
+ * @hidden
229
+ */
230
+ export declare function setImmediateWithFallback(fn: (...args: any[]) => void): void;