mobx-keystone 1.20.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +864 -853
- package/README.md +61 -61
- package/dist/mobx-keystone.esm.js +11336 -11148
- package/dist/mobx-keystone.esm.mjs +11336 -11148
- package/dist/mobx-keystone.umd.js +12229 -11738
- package/dist/types/actionMiddlewares/undoMiddleware.d.ts +1 -1
- package/dist/types/modelShared/prop.d.ts +5 -0
- package/dist/types/redux/connectReduxDevTools.d.ts +17 -4
- package/dist/types/ref/Ref.d.ts +1 -1
- package/dist/types/treeUtils/sandbox.d.ts +1 -1
- package/dist/types/types/TypeChecker.d.ts +1 -1
- package/dist/types/types/arrayBased/typesArray.d.ts +1 -1
- package/dist/types/types/arrayBased/typesTuple.d.ts +1 -1
- package/dist/types/types/objectBased/typesArraySet.d.ts +1 -1
- package/dist/types/types/objectBased/typesDataModelData.d.ts +1 -1
- package/dist/types/types/objectBased/typesModel.d.ts +1 -1
- package/dist/types/types/objectBased/typesObject.d.ts +3 -3
- package/dist/types/types/objectBased/typesObjectMap.d.ts +1 -1
- package/dist/types/types/objectBased/typesRecord.d.ts +1 -1
- package/dist/types/types/primitiveBased/typesPrimitive.d.ts +1 -1
- package/dist/types/types/types.d.ts +3 -3
- package/dist/types/types/utility/typesCodec.d.ts +1 -6
- package/dist/types/types/utility/typesCodecCore.d.ts +1 -1
- package/dist/types/types/utility/typesOr.d.ts +1 -1
- package/dist/types/types/utility/typesRefinement.d.ts +1 -1
- package/dist/types/types/utility/typesSkipCheck.d.ts +1 -1
- package/dist/types/types/utility/typesTag.d.ts +1 -1
- package/dist/types/wrappers/ObjectMap.d.ts +2 -0
- package/dist/types/wrappers/asMap.d.ts +10 -6
- package/package.json +14 -12
- package/src/action/applyAction.ts +125 -114
- package/src/action/applyMethodCall.ts +37 -37
- package/src/action/isModelAction.ts +16 -16
- package/src/action/middleware.ts +137 -137
- package/src/action/modelFlow.ts +240 -240
- package/src/action/modelFlowPromiseGenerator.ts +127 -125
- package/src/action/pendingActions.ts +42 -42
- package/src/action/wrapInAction.ts +156 -156
- package/src/actionMiddlewares/actionSerialization/actionSerialization.ts +1 -1
- package/src/actionMiddlewares/actionSerialization/applySerializedAction.ts +172 -172
- package/src/actionMiddlewares/actionSerialization/arraySerializer.ts +20 -20
- package/src/actionMiddlewares/actionSerialization/dateSerializer.ts +17 -17
- package/src/actionMiddlewares/actionSerialization/mapSerializer.ts +42 -42
- package/src/actionMiddlewares/actionSerialization/objectPathSerializer.ts +50 -50
- package/src/actionMiddlewares/actionSerialization/objectSnapshotSerializer.ts +21 -21
- package/src/actionMiddlewares/actionSerialization/plainObjectSerializer.ts +24 -32
- package/src/actionMiddlewares/actionSerialization/primitiveSerializer.ts +51 -51
- package/src/actionMiddlewares/actionSerialization/setSerializer.ts +37 -37
- package/src/actionMiddlewares/actionTrackingMiddleware.ts +3 -3
- package/src/actionMiddlewares/onActionMiddleware.ts +2 -2
- package/src/actionMiddlewares/readonlyMiddleware.ts +2 -2
- package/src/actionMiddlewares/transactionMiddleware.ts +4 -4
- package/src/actionMiddlewares/undoMiddleware.ts +804 -796
- package/src/actionMiddlewares/utils.ts +2 -2
- package/src/computedTree/computedTree.ts +143 -143
- package/src/context/context.ts +1 -1
- package/src/dataModel/BaseDataModel.ts +194 -192
- package/src/dataModel/actions.ts +1 -1
- package/src/dataModel/newDataModel.ts +57 -57
- package/src/deepChange/index.ts +1 -1
- package/src/deepChange/onDeepChange.ts +244 -244
- package/src/frozen/Frozen.ts +146 -146
- package/src/globalConfig/globalConfig.ts +107 -107
- package/src/index.ts +24 -24
- package/src/model/BaseModel.ts +275 -273
- package/src/model/ModelConstructorOptions.ts +15 -15
- package/src/model/getModelMetadata.ts +51 -51
- package/src/model/index.ts +6 -6
- package/src/model/mixins.ts +288 -288
- package/src/model/newModel.ts +301 -301
- package/src/model/utils.ts +249 -249
- package/src/modelShared/modelDecorator.ts +260 -253
- package/src/modelShared/modelInfo.ts +50 -50
- package/src/modelShared/modelSymbols.ts +3 -3
- package/src/modelShared/newModel.ts +25 -25
- package/src/modelShared/prop.ts +713 -684
- package/src/modelShared/sharedInternalModel.ts +427 -417
- package/src/modelShared/utils.ts +24 -24
- package/src/parent/core.ts +65 -65
- package/src/parent/coreObjectChildren.ts +180 -180
- package/src/parent/detach.ts +47 -47
- package/src/parent/findParent.ts +1 -1
- package/src/parent/getChildrenObjects.ts +25 -25
- package/src/parent/path.ts +386 -381
- package/src/parent/setParent.ts +149 -149
- package/src/parent/walkTree.ts +1 -1
- package/src/patch/applyPatches.ts +187 -187
- package/src/patch/jsonPatch.ts +108 -108
- package/src/patch/patchRecorder.ts +6 -1
- package/src/redux/connectReduxDevTools.ts +39 -7
- package/src/redux/redux.ts +6 -2
- package/src/ref/Ref.ts +1 -1
- package/src/ref/core.ts +339 -345
- package/src/ref/customRef.ts +3 -3
- package/src/ref/rootRef.ts +100 -100
- package/src/rootStore/attachDetach.ts +89 -89
- package/src/rootStore/rootStore.ts +1 -1
- package/src/snapshot/SnapshotOf.ts +104 -104
- package/src/snapshot/SnapshotProcessingError.ts +45 -45
- package/src/snapshot/applySnapshot.ts +177 -181
- package/src/snapshot/cloneTreeValue.ts +30 -30
- package/src/snapshot/fromArraySnapshot.ts +27 -33
- package/src/snapshot/fromModelSnapshot.ts +70 -70
- package/src/snapshot/fromPlainObjectSnapshot.ts +47 -42
- package/src/snapshot/fromSnapshot.ts +198 -198
- package/src/snapshot/getSnapshot.ts +80 -79
- package/src/snapshot/index.ts +8 -8
- package/src/snapshot/internal.ts +230 -230
- package/src/snapshot/reconcileArraySnapshot.ts +70 -70
- package/src/snapshot/reconcileModelSnapshot.ts +155 -150
- package/src/snapshot/reconcilePlainObjectSnapshot.ts +72 -72
- package/src/snapshot/reconcileSnapshot.ts +88 -88
- package/src/standardActions/actions.ts +64 -64
- package/src/standardActions/objectActions.ts +60 -60
- package/src/transforms/ImmutableDate.ts +93 -93
- package/src/transforms/asMap.ts +50 -50
- package/src/transforms/asSet.ts +22 -22
- package/src/transforms/bigint.ts +20 -20
- package/src/transforms/date.ts +40 -40
- package/src/treeUtils/deepEquals.ts +55 -55
- package/src/treeUtils/sandbox.ts +6 -3
- package/src/tweaker/TweakerPriority.ts +9 -9
- package/src/tweaker/tweak.ts +4 -3
- package/src/tweaker/tweakArray.ts +530 -475
- package/src/tweaker/tweakFrozen.ts +42 -42
- package/src/tweaker/tweakModel.ts +1 -1
- package/src/tweaker/tweakPlainObject.ts +355 -355
- package/src/tweaker/typeChecking.ts +101 -101
- package/src/types/SnapshotTypeMismatchError.ts +46 -46
- package/src/types/TypeCheckError.ts +183 -184
- package/src/types/TypeChecker.ts +202 -185
- package/src/types/arrayBased/typesArray.ts +136 -137
- package/src/types/arrayBased/typesTuple.ts +138 -139
- package/src/types/createPerEntryCachedCheck.ts +166 -160
- package/src/types/index.ts +6 -6
- package/src/types/objectBased/typesArraySet.ts +133 -134
- package/src/types/objectBased/typesDataModelData.ts +203 -204
- package/src/types/objectBased/typesModel.ts +220 -221
- package/src/types/objectBased/typesObject.ts +308 -310
- package/src/types/objectBased/typesObjectMap.ts +142 -143
- package/src/types/objectBased/typesRecord.ts +156 -157
- package/src/types/objectBased/typesRef.ts +89 -89
- package/src/types/primitiveBased/typesEnum.ts +63 -63
- package/src/types/primitiveBased/typesPrimitive.ts +219 -220
- package/src/types/registerDefaultStandardTypeResolvers.ts +21 -21
- package/src/types/resolveTypeChecker.ts +78 -78
- package/src/types/schemas.ts +208 -208
- package/src/types/tProp.ts +277 -268
- package/src/types/typeCheck.ts +21 -21
- package/src/types/typeCheckErrorUtils.ts +23 -23
- package/src/types/types.ts +142 -142
- package/src/types/utility/typeToStoredData.ts +37 -37
- package/src/types/utility/typesBigInt.ts +15 -15
- package/src/types/utility/typesCodec.ts +41 -38
- package/src/types/utility/typesCodecCore.ts +178 -178
- package/src/types/utility/typesCodecSupport.ts +806 -806
- package/src/types/utility/typesDate.ts +27 -27
- package/src/types/utility/typesMap.ts +253 -222
- package/src/types/utility/typesOr.ts +263 -259
- package/src/types/utility/typesRefinement.ts +131 -125
- package/src/types/utility/typesSet.ts +110 -110
- package/src/types/utility/typesSkipCheck.ts +69 -70
- package/src/types/utility/typesTag.ts +88 -82
- package/src/types/utility/typesUnchecked.ts +40 -40
- package/src/utils/AnyFunction.ts +4 -4
- package/src/utils/ModelPool.ts +59 -59
- package/src/utils/chainFns.ts +18 -18
- package/src/utils/decorators.ts +274 -274
- package/src/utils/errorDiagnostics.ts +204 -204
- package/src/utils/index.ts +443 -372
- package/src/wrappers/ArraySet.ts +156 -156
- package/src/wrappers/ObjectMap.ts +155 -136
- package/src/wrappers/asMap.ts +65 -30
- package/src/wrappers/asSet.ts +3 -3
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { modelTypeKey } from "../../model/metadata"
|
|
2
|
-
import { modelInfoByClass } from "../../modelShared/modelInfo"
|
|
3
|
-
import { Ref, RefConstructor } from "../../ref/Ref"
|
|
4
|
-
import { isObject } from "../../utils"
|
|
5
|
-
import { typesString } from "../primitiveBased/typesPrimitive"
|
|
6
|
-
import { resolveTypeChecker } from "../resolveTypeChecker"
|
|
7
|
-
import type { ModelType } from "../schemas"
|
|
8
|
-
import { TypeCheckError } from "../TypeCheckError"
|
|
9
|
-
import { TypeChecker, TypeCheckerBaseType, TypeInfo } from "../TypeChecker"
|
|
10
|
-
import { typesObject } from "./typesObject"
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* A type that represents a reference to an object or model.
|
|
14
|
-
*
|
|
15
|
-
* Example:
|
|
16
|
-
* ```ts
|
|
17
|
-
* const refToSomeObject = types.ref(SomeObject)
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* @template O Object or model type.
|
|
21
|
-
* @param refConstructor Ref object type.
|
|
22
|
-
* @returns
|
|
23
|
-
*/
|
|
24
|
-
export function typesRef<O extends object>(refConstructor: RefConstructor<O>): ModelType<Ref<O>> {
|
|
25
|
-
const typeName = "Ref"
|
|
26
|
-
|
|
27
|
-
const modelInfo = modelInfoByClass.get(refConstructor.refClass)!
|
|
28
|
-
|
|
29
|
-
const refDataTypeChecker = resolveTypeChecker(
|
|
30
|
-
typesObject(() => ({
|
|
31
|
-
id: typesString,
|
|
32
|
-
}))
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
const thisTc: TypeChecker = new TypeChecker(
|
|
36
|
-
TypeCheckerBaseType.Object,
|
|
37
|
-
|
|
38
|
-
(value, path, typeCheckedValue) => {
|
|
39
|
-
if (!(value instanceof Ref)) {
|
|
40
|
-
return new TypeCheckError({
|
|
41
|
-
path,
|
|
42
|
-
expectedTypeName: typeName,
|
|
43
|
-
actualValue: value,
|
|
44
|
-
typeCheckedValue,
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return refDataTypeChecker.check(value.$, path, typeCheckedValue)
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
() => typeName,
|
|
52
|
-
(t) => new RefTypeInfo(t),
|
|
53
|
-
|
|
54
|
-
(obj) => {
|
|
55
|
-
if (!isObject(obj)) {
|
|
56
|
-
return null
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (obj[modelTypeKey] !== undefined) {
|
|
60
|
-
// fast check
|
|
61
|
-
return obj[modelTypeKey] === modelInfo.name ? thisTc : null
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return refDataTypeChecker.snapshotType(obj) ? thisTc : null
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
(sn: Record<string, unknown>) => {
|
|
68
|
-
if (sn[modelTypeKey]) {
|
|
69
|
-
return sn
|
|
70
|
-
} else {
|
|
71
|
-
return {
|
|
72
|
-
...sn,
|
|
73
|
-
[modelTypeKey]: modelInfo.name,
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
(sn) => sn
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
return thisTc as any
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* `types.ref` type info.
|
|
86
|
-
*/
|
|
87
|
-
export class RefTypeInfo extends TypeInfo {
|
|
88
|
-
readonly kind = "ref"
|
|
89
|
-
}
|
|
1
|
+
import { modelTypeKey } from "../../model/metadata"
|
|
2
|
+
import { modelInfoByClass } from "../../modelShared/modelInfo"
|
|
3
|
+
import { Ref, type RefConstructor } from "../../ref/Ref"
|
|
4
|
+
import { isObject } from "../../utils"
|
|
5
|
+
import { typesString } from "../primitiveBased/typesPrimitive"
|
|
6
|
+
import { resolveTypeChecker } from "../resolveTypeChecker"
|
|
7
|
+
import type { ModelType } from "../schemas"
|
|
8
|
+
import { TypeCheckError } from "../TypeCheckError"
|
|
9
|
+
import { TypeChecker, TypeCheckerBaseType, TypeInfo } from "../TypeChecker"
|
|
10
|
+
import { typesObject } from "./typesObject"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A type that represents a reference to an object or model.
|
|
14
|
+
*
|
|
15
|
+
* Example:
|
|
16
|
+
* ```ts
|
|
17
|
+
* const refToSomeObject = types.ref(SomeObject)
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @template O Object or model type.
|
|
21
|
+
* @param refConstructor Ref object type.
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
export function typesRef<O extends object>(refConstructor: RefConstructor<O>): ModelType<Ref<O>> {
|
|
25
|
+
const typeName = "Ref"
|
|
26
|
+
|
|
27
|
+
const modelInfo = modelInfoByClass.get(refConstructor.refClass)!
|
|
28
|
+
|
|
29
|
+
const refDataTypeChecker = resolveTypeChecker(
|
|
30
|
+
typesObject(() => ({
|
|
31
|
+
id: typesString,
|
|
32
|
+
}))
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
const thisTc: TypeChecker = new TypeChecker(
|
|
36
|
+
TypeCheckerBaseType.Object,
|
|
37
|
+
|
|
38
|
+
(value, path, typeCheckedValue) => {
|
|
39
|
+
if (!(value instanceof Ref)) {
|
|
40
|
+
return new TypeCheckError({
|
|
41
|
+
path,
|
|
42
|
+
expectedTypeName: typeName,
|
|
43
|
+
actualValue: value,
|
|
44
|
+
typeCheckedValue,
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return refDataTypeChecker.check(value.$, path, typeCheckedValue)
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
() => typeName,
|
|
52
|
+
(t) => new RefTypeInfo(t),
|
|
53
|
+
|
|
54
|
+
(obj) => {
|
|
55
|
+
if (!isObject(obj)) {
|
|
56
|
+
return null
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (obj[modelTypeKey] !== undefined) {
|
|
60
|
+
// fast check
|
|
61
|
+
return obj[modelTypeKey] === modelInfo.name ? thisTc : null
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return refDataTypeChecker.snapshotType(obj) ? thisTc : null
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
(sn: Record<string, unknown>) => {
|
|
68
|
+
if (sn[modelTypeKey]) {
|
|
69
|
+
return sn
|
|
70
|
+
} else {
|
|
71
|
+
return {
|
|
72
|
+
...sn,
|
|
73
|
+
[modelTypeKey]: modelInfo.name,
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
(sn) => sn
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
return thisTc as any
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* `types.ref` type info.
|
|
86
|
+
*/
|
|
87
|
+
export class RefTypeInfo extends TypeInfo {
|
|
88
|
+
readonly kind = "ref"
|
|
89
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { assertIsObject } from "../../utils"
|
|
2
|
-
import type { IdentityType } from "../schemas"
|
|
3
|
-
import { typesOr } from "../utility/typesOr"
|
|
4
|
-
import { typesLiteral } from "./typesPrimitive"
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @ignore
|
|
8
|
-
* Enum like object.
|
|
9
|
-
*/
|
|
10
|
-
export interface EnumLike {
|
|
11
|
-
[k: string]: number | string
|
|
12
|
-
[v: number]: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @internal
|
|
17
|
-
*/
|
|
18
|
-
export function enumValues(e: EnumLike): (string | number)[] {
|
|
19
|
-
const vals: (string | number)[] = []
|
|
20
|
-
for (const k of Object.keys(e)) {
|
|
21
|
-
const v = e[k]
|
|
22
|
-
// we have to do this since TS does something weird
|
|
23
|
-
// to number values
|
|
24
|
-
// Hi = 0 -> { Hi: 0, 0: "Hi" }
|
|
25
|
-
// and SWC currently generates enum code inconsistent with TS/Babel
|
|
26
|
-
// https://github.com/swc-project/swc/issues/3711
|
|
27
|
-
if (!vals.includes(v) && ((typeof v !== "string" && v !== +k) || e[v] !== +k)) {
|
|
28
|
-
vals.push(v)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return vals
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @ignore
|
|
36
|
-
* Extract enum values out of a enum object.
|
|
37
|
-
*/
|
|
38
|
-
export type EnumValues<E extends EnumLike> = E extends Record<infer _K, infer V> ? V : never
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* An enum type, based on a TypeScript alike enum object.
|
|
42
|
-
* Syntactic sugar for `types.or(...enum_values.map(types.literal))`
|
|
43
|
-
*
|
|
44
|
-
* Example:
|
|
45
|
-
* ```ts
|
|
46
|
-
* enum Color {
|
|
47
|
-
* Red = "red",
|
|
48
|
-
* Green = "green"
|
|
49
|
-
* }
|
|
50
|
-
*
|
|
51
|
-
* const colorType = types.enum(Color)
|
|
52
|
-
* ```
|
|
53
|
-
*
|
|
54
|
-
* @template E Enum type.
|
|
55
|
-
* @param enumObject
|
|
56
|
-
* @returns
|
|
57
|
-
*/
|
|
58
|
-
export function typesEnum<E extends EnumLike>(enumObject: E): IdentityType<EnumValues<E>> {
|
|
59
|
-
assertIsObject(enumObject, "enumObject")
|
|
60
|
-
|
|
61
|
-
const literals = enumValues(enumObject).map((e) => typesLiteral(e))
|
|
62
|
-
return typesOr(...literals) as any
|
|
63
|
-
}
|
|
1
|
+
import { assertIsObject } from "../../utils"
|
|
2
|
+
import type { IdentityType } from "../schemas"
|
|
3
|
+
import { typesOr } from "../utility/typesOr"
|
|
4
|
+
import { typesLiteral } from "./typesPrimitive"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @ignore
|
|
8
|
+
* Enum like object.
|
|
9
|
+
*/
|
|
10
|
+
export interface EnumLike {
|
|
11
|
+
[k: string]: number | string
|
|
12
|
+
[v: number]: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export function enumValues(e: EnumLike): (string | number)[] {
|
|
19
|
+
const vals: (string | number)[] = []
|
|
20
|
+
for (const k of Object.keys(e)) {
|
|
21
|
+
const v = e[k]
|
|
22
|
+
// we have to do this since TS does something weird
|
|
23
|
+
// to number values
|
|
24
|
+
// Hi = 0 -> { Hi: 0, 0: "Hi" }
|
|
25
|
+
// and SWC currently generates enum code inconsistent with TS/Babel
|
|
26
|
+
// https://github.com/swc-project/swc/issues/3711
|
|
27
|
+
if (!vals.includes(v) && ((typeof v !== "string" && v !== +k) || e[v] !== +k)) {
|
|
28
|
+
vals.push(v)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return vals
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @ignore
|
|
36
|
+
* Extract enum values out of a enum object.
|
|
37
|
+
*/
|
|
38
|
+
export type EnumValues<E extends EnumLike> = E extends Record<infer _K, infer V> ? V : never
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* An enum type, based on a TypeScript alike enum object.
|
|
42
|
+
* Syntactic sugar for `types.or(...enum_values.map(types.literal))`
|
|
43
|
+
*
|
|
44
|
+
* Example:
|
|
45
|
+
* ```ts
|
|
46
|
+
* enum Color {
|
|
47
|
+
* Red = "red",
|
|
48
|
+
* Green = "green"
|
|
49
|
+
* }
|
|
50
|
+
*
|
|
51
|
+
* const colorType = types.enum(Color)
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @template E Enum type.
|
|
55
|
+
* @param enumObject
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
export function typesEnum<E extends EnumLike>(enumObject: E): IdentityType<EnumValues<E>> {
|
|
59
|
+
assertIsObject(enumObject, "enumObject")
|
|
60
|
+
|
|
61
|
+
const literals = enumValues(enumObject).map((e) => typesLiteral(e))
|
|
62
|
+
return typesOr(...literals) as any
|
|
63
|
+
}
|