@jbrowse/mobx-state-tree 5.7.1 → 5.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -10
- package/dist/index.d.ts +2135 -2
- package/dist/mobx-state-tree.cjs +6894 -0
- package/dist/mobx-state-tree.cjs.map +1 -0
- package/dist/mobx-state-tree.mjs +6814 -0
- package/dist/mobx-state-tree.mjs.map +1 -0
- package/package.json +30 -26
- package/dist/core/action.d.ts +0 -87
- package/dist/core/action.js +0 -228
- package/dist/core/action.js.map +0 -1
- package/dist/core/actionContext.d.ts +0 -27
- package/dist/core/actionContext.js +0 -42
- package/dist/core/actionContext.js.map +0 -1
- package/dist/core/flow.d.ts +0 -69
- package/dist/core/flow.js +0 -180
- package/dist/core/flow.js.map +0 -1
- package/dist/core/json-patch.d.ts +0 -46
- package/dist/core/json-patch.js +0 -133
- package/dist/core/json-patch.js.map +0 -1
- package/dist/core/mst-operations.d.ts +0 -459
- package/dist/core/mst-operations.js +0 -885
- package/dist/core/mst-operations.js.map +0 -1
- package/dist/core/node/BaseNode.d.ts +0 -62
- package/dist/core/node/BaseNode.js +0 -152
- package/dist/core/node/BaseNode.js.map +0 -1
- package/dist/core/node/Hook.d.ts +0 -17
- package/dist/core/node/Hook.js +0 -15
- package/dist/core/node/Hook.js.map +0 -1
- package/dist/core/node/create-node.d.ts +0 -16
- package/dist/core/node/create-node.js +0 -41
- package/dist/core/node/create-node.js.map +0 -1
- package/dist/core/node/identifier-cache.d.ts +0 -19
- package/dist/core/node/identifier-cache.js +0 -115
- package/dist/core/node/identifier-cache.js.map +0 -1
- package/dist/core/node/livelinessChecking.d.ts +0 -37
- package/dist/core/node/livelinessChecking.js +0 -38
- package/dist/core/node/livelinessChecking.js.map +0 -1
- package/dist/core/node/node-utils.d.ts +0 -83
- package/dist/core/node/node-utils.js +0 -165
- package/dist/core/node/node-utils.js.map +0 -1
- package/dist/core/node/object-node.d.ts +0 -101
- package/dist/core/node/object-node.js +0 -546
- package/dist/core/node/object-node.js.map +0 -1
- package/dist/core/node/scalar-node.d.ts +0 -21
- package/dist/core/node/scalar-node.js +0 -90
- package/dist/core/node/scalar-node.js.map +0 -1
- package/dist/core/process.d.ts +0 -50
- package/dist/core/process.js +0 -39
- package/dist/core/process.js.map +0 -1
- package/dist/core/type/type-checker.d.ts +0 -69
- package/dist/core/type/type-checker.js +0 -154
- package/dist/core/type/type-checker.js.map +0 -1
- package/dist/core/type/type.d.ts +0 -317
- package/dist/core/type/type.js +0 -251
- package/dist/core/type/type.js.map +0 -1
- package/dist/index.js +0 -85
- package/dist/index.js.map +0 -1
- package/dist/internal.d.ts +0 -39
- package/dist/internal.js +0 -60
- package/dist/internal.js.map +0 -1
- package/dist/middlewares/create-action-tracking-middleware.d.ts +0 -24
- package/dist/middlewares/create-action-tracking-middleware.js +0 -81
- package/dist/middlewares/create-action-tracking-middleware.js.map +0 -1
- package/dist/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
- package/dist/middlewares/createActionTrackingMiddleware2.js +0 -133
- package/dist/middlewares/createActionTrackingMiddleware2.js.map +0 -1
- package/dist/middlewares/on-action.d.ts +0 -87
- package/dist/middlewares/on-action.js +0 -215
- package/dist/middlewares/on-action.js.map +0 -1
- package/dist/package.json +0 -1
- package/dist/types/complex-types/array.d.ts +0 -81
- package/dist/types/complex-types/array.js +0 -353
- package/dist/types/complex-types/array.js.map +0 -1
- package/dist/types/complex-types/map.d.ts +0 -111
- package/dist/types/complex-types/map.js +0 -362
- package/dist/types/complex-types/map.js.map +0 -1
- package/dist/types/complex-types/model.d.ts +0 -193
- package/dist/types/complex-types/model.js +0 -478
- package/dist/types/complex-types/model.js.map +0 -1
- package/dist/types/index.d.ts +0 -33
- package/dist/types/index.js +0 -38
- package/dist/types/index.js.map +0 -1
- package/dist/types/primitives.d.ts +0 -125
- package/dist/types/primitives.js +0 -183
- package/dist/types/primitives.js.map +0 -1
- package/dist/types/utility-types/custom.d.ts +0 -75
- package/dist/types/utility-types/custom.js +0 -111
- package/dist/types/utility-types/custom.js.map +0 -1
- package/dist/types/utility-types/enumeration.d.ts +0 -5
- package/dist/types/utility-types/enumeration.js +0 -34
- package/dist/types/utility-types/enumeration.js.map +0 -1
- package/dist/types/utility-types/frozen.d.ts +0 -24
- package/dist/types/utility-types/frozen.js +0 -98
- package/dist/types/utility-types/frozen.js.map +0 -1
- package/dist/types/utility-types/identifier.d.ts +0 -87
- package/dist/types/utility-types/identifier.js +0 -130
- package/dist/types/utility-types/identifier.js.map +0 -1
- package/dist/types/utility-types/late.d.ts +0 -10
- package/dist/types/utility-types/late.js +0 -110
- package/dist/types/utility-types/late.js.map +0 -1
- package/dist/types/utility-types/lazy.d.ts +0 -23
- package/dist/types/utility-types/lazy.js +0 -77
- package/dist/types/utility-types/lazy.js.map +0 -1
- package/dist/types/utility-types/literal.d.ts +0 -38
- package/dist/types/utility-types/literal.js +0 -64
- package/dist/types/utility-types/literal.js.map +0 -1
- package/dist/types/utility-types/maybe.d.ts +0 -26
- package/dist/types/utility-types/maybe.js +0 -30
- package/dist/types/utility-types/maybe.js.map +0 -1
- package/dist/types/utility-types/optional.d.ts +0 -42
- package/dist/types/utility-types/optional.js +0 -141
- package/dist/types/utility-types/optional.js.map +0 -1
- package/dist/types/utility-types/reference.d.ts +0 -90
- package/dist/types/utility-types/reference.js +0 -393
- package/dist/types/utility-types/reference.js.map +0 -1
- package/dist/types/utility-types/refinement.d.ts +0 -10
- package/dist/types/utility-types/refinement.js +0 -86
- package/dist/types/utility-types/refinement.js.map +0 -1
- package/dist/types/utility-types/resilient.d.ts +0 -18
- package/dist/types/utility-types/resilient.js +0 -121
- package/dist/types/utility-types/resilient.js.map +0 -1
- package/dist/types/utility-types/snapshotProcessor.d.ts +0 -63
- package/dist/types/utility-types/snapshotProcessor.js +0 -162
- package/dist/types/utility-types/snapshotProcessor.js.map +0 -1
- package/dist/types/utility-types/union.d.ts +0 -78
- package/dist/types/utility-types/union.js +0 -246
- package/dist/types/utility-types/union.js.map +0 -1
- package/dist/utils.d.ts +0 -230
- package/dist/utils.js +0 -483
- package/dist/utils.js.map +0 -1
- package/esm/core/action.d.ts +0 -87
- package/esm/core/action.js +0 -219
- package/esm/core/action.js.map +0 -1
- package/esm/core/actionContext.d.ts +0 -27
- package/esm/core/actionContext.js +0 -37
- package/esm/core/actionContext.js.map +0 -1
- package/esm/core/flow.d.ts +0 -69
- package/esm/core/flow.js +0 -173
- package/esm/core/flow.js.map +0 -1
- package/esm/core/json-patch.d.ts +0 -46
- package/esm/core/json-patch.js +0 -125
- package/esm/core/json-patch.js.map +0 -1
- package/esm/core/mst-operations.d.ts +0 -459
- package/esm/core/mst-operations.js +0 -844
- package/esm/core/mst-operations.js.map +0 -1
- package/esm/core/node/BaseNode.d.ts +0 -62
- package/esm/core/node/BaseNode.js +0 -148
- package/esm/core/node/BaseNode.js.map +0 -1
- package/esm/core/node/Hook.d.ts +0 -17
- package/esm/core/node/Hook.js +0 -12
- package/esm/core/node/Hook.js.map +0 -1
- package/esm/core/node/create-node.d.ts +0 -16
- package/esm/core/node/create-node.js +0 -36
- package/esm/core/node/create-node.js.map +0 -1
- package/esm/core/node/identifier-cache.d.ts +0 -19
- package/esm/core/node/identifier-cache.js +0 -111
- package/esm/core/node/identifier-cache.js.map +0 -1
- package/esm/core/node/livelinessChecking.d.ts +0 -37
- package/esm/core/node/livelinessChecking.js +0 -33
- package/esm/core/node/livelinessChecking.js.map +0 -1
- package/esm/core/node/node-utils.d.ts +0 -83
- package/esm/core/node/node-utils.js +0 -153
- package/esm/core/node/node-utils.js.map +0 -1
- package/esm/core/node/object-node.d.ts +0 -101
- package/esm/core/node/object-node.js +0 -542
- package/esm/core/node/object-node.js.map +0 -1
- package/esm/core/node/scalar-node.d.ts +0 -21
- package/esm/core/node/scalar-node.js +0 -86
- package/esm/core/node/scalar-node.js.map +0 -1
- package/esm/core/process.d.ts +0 -50
- package/esm/core/process.js +0 -35
- package/esm/core/process.js.map +0 -1
- package/esm/core/type/type-checker.d.ts +0 -69
- package/esm/core/type/type-checker.js +0 -144
- package/esm/core/type/type-checker.js.map +0 -1
- package/esm/core/type/type.d.ts +0 -317
- package/esm/core/type/type.js +0 -243
- package/esm/core/type/type.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.js +0 -2
- package/esm/index.js.map +0 -1
- package/esm/internal.d.ts +0 -39
- package/esm/internal.js +0 -44
- package/esm/internal.js.map +0 -1
- package/esm/middlewares/create-action-tracking-middleware.d.ts +0 -24
- package/esm/middlewares/create-action-tracking-middleware.js +0 -78
- package/esm/middlewares/create-action-tracking-middleware.js.map +0 -1
- package/esm/middlewares/createActionTrackingMiddleware2.d.ts +0 -34
- package/esm/middlewares/createActionTrackingMiddleware2.js +0 -130
- package/esm/middlewares/createActionTrackingMiddleware2.js.map +0 -1
- package/esm/middlewares/on-action.d.ts +0 -87
- package/esm/middlewares/on-action.js +0 -210
- package/esm/middlewares/on-action.js.map +0 -1
- package/esm/types/complex-types/array.d.ts +0 -81
- package/esm/types/complex-types/array.js +0 -347
- package/esm/types/complex-types/array.js.map +0 -1
- package/esm/types/complex-types/map.d.ts +0 -111
- package/esm/types/complex-types/map.js +0 -356
- package/esm/types/complex-types/map.js.map +0 -1
- package/esm/types/complex-types/model.d.ts +0 -193
- package/esm/types/complex-types/model.js +0 -471
- package/esm/types/complex-types/model.js.map +0 -1
- package/esm/types/index.d.ts +0 -33
- package/esm/types/index.js +0 -35
- package/esm/types/index.js.map +0 -1
- package/esm/types/primitives.d.ts +0 -125
- package/esm/types/primitives.js +0 -177
- package/esm/types/primitives.js.map +0 -1
- package/esm/types/utility-types/custom.d.ts +0 -75
- package/esm/types/utility-types/custom.js +0 -106
- package/esm/types/utility-types/custom.js.map +0 -1
- package/esm/types/utility-types/enumeration.d.ts +0 -5
- package/esm/types/utility-types/enumeration.js +0 -31
- package/esm/types/utility-types/enumeration.js.map +0 -1
- package/esm/types/utility-types/frozen.d.ts +0 -24
- package/esm/types/utility-types/frozen.js +0 -92
- package/esm/types/utility-types/frozen.js.map +0 -1
- package/esm/types/utility-types/identifier.d.ts +0 -87
- package/esm/types/utility-types/identifier.js +0 -121
- package/esm/types/utility-types/identifier.js.map +0 -1
- package/esm/types/utility-types/late.d.ts +0 -10
- package/esm/types/utility-types/late.js +0 -106
- package/esm/types/utility-types/late.js.map +0 -1
- package/esm/types/utility-types/lazy.d.ts +0 -23
- package/esm/types/utility-types/lazy.js +0 -72
- package/esm/types/utility-types/lazy.js.map +0 -1
- package/esm/types/utility-types/literal.d.ts +0 -38
- package/esm/types/utility-types/literal.js +0 -58
- package/esm/types/utility-types/literal.js.map +0 -1
- package/esm/types/utility-types/maybe.d.ts +0 -26
- package/esm/types/utility-types/maybe.js +0 -26
- package/esm/types/utility-types/maybe.js.map +0 -1
- package/esm/types/utility-types/optional.d.ts +0 -42
- package/esm/types/utility-types/optional.js +0 -135
- package/esm/types/utility-types/optional.js.map +0 -1
- package/esm/types/utility-types/reference.d.ts +0 -90
- package/esm/types/utility-types/reference.js +0 -383
- package/esm/types/utility-types/reference.js.map +0 -1
- package/esm/types/utility-types/refinement.d.ts +0 -10
- package/esm/types/utility-types/refinement.js +0 -82
- package/esm/types/utility-types/refinement.js.map +0 -1
- package/esm/types/utility-types/resilient.d.ts +0 -18
- package/esm/types/utility-types/resilient.js +0 -118
- package/esm/types/utility-types/resilient.js.map +0 -1
- package/esm/types/utility-types/snapshotProcessor.d.ts +0 -63
- package/esm/types/utility-types/snapshotProcessor.js +0 -159
- package/esm/types/utility-types/snapshotProcessor.js.map +0 -1
- package/esm/types/utility-types/union.d.ts +0 -78
- package/esm/types/utility-types/union.js +0 -240
- package/esm/types/utility-types/union.js.map +0 -1
- package/esm/utils.d.ts +0 -230
- package/esm/utils.js +0 -449
- package/esm/utils.js.map +0 -1
|
@@ -1,240 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
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;
|