mobx-keystone 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +1 -1
  3. package/dist/mobx-keystone.esm.js +555 -516
  4. package/dist/mobx-keystone.esm.mjs +555 -516
  5. package/dist/mobx-keystone.umd.js +558 -519
  6. package/dist/types/actionMiddlewares/undoMiddleware.d.ts +2 -10
  7. package/dist/types/modelShared/modelDecorator.d.ts +5 -2
  8. package/dist/types/modelShared/prop.d.ts +42 -29
  9. package/dist/types/ref/Ref.d.ts +1 -4
  10. package/dist/types/snapshot/SnapshotOf.d.ts +4 -4
  11. package/dist/types/snapshot/applySnapshot.d.ts +1 -1
  12. package/dist/types/snapshot/fromSnapshot.d.ts +2 -2
  13. package/dist/types/snapshot/getSnapshot.d.ts +1 -1
  14. package/dist/types/types/SnapshotTypeMismatchError.d.ts +3 -1
  15. package/dist/types/types/index.d.ts +1 -0
  16. package/dist/types/types/modelTypeMatching.d.ts +1 -0
  17. package/dist/types/types/schemas.d.ts +41 -37
  18. package/dist/types/types/tProp.d.ts +12 -6
  19. package/dist/types/types/types.d.ts +6 -6
  20. package/dist/types/types/utility/typeToStoredData.d.ts +14 -10
  21. package/dist/types/types/utility/typesCodecCore.d.ts +3 -0
  22. package/dist/types/utils/ModelPool.d.ts +0 -1
  23. package/dist/types/utils/types.d.ts +6 -0
  24. package/dist/types/wrappers/ArraySet.d.ts +1 -0
  25. package/package.json +13 -11
  26. package/src/action/modelFlow.ts +35 -66
  27. package/src/actionMiddlewares/actionTrackingMiddleware.ts +41 -71
  28. package/src/actionMiddlewares/transactionMiddleware.ts +1 -1
  29. package/src/actionMiddlewares/undoMiddleware.ts +16 -22
  30. package/src/context/context.ts +15 -36
  31. package/src/dataModel/utils.ts +5 -28
  32. package/src/deepChange/onDeepChange.ts +44 -126
  33. package/src/model/BaseModel.ts +1 -1
  34. package/src/model/utils.ts +5 -10
  35. package/src/modelShared/modelDecorator.ts +13 -10
  36. package/src/modelShared/modelInfo.ts +75 -0
  37. package/src/modelShared/prop.ts +115 -111
  38. package/src/modelShared/sharedInternalModel.ts +2 -2
  39. package/src/parent/arrayPaths.ts +1 -4
  40. package/src/parent/path.ts +0 -10
  41. package/src/patch/patchRecorder.ts +13 -28
  42. package/src/ref/core.ts +6 -19
  43. package/src/rootStore/rootStore.ts +1 -3
  44. package/src/snapshot/SnapshotOf.ts +24 -48
  45. package/src/snapshot/applySnapshot.ts +1 -1
  46. package/src/snapshot/fromSnapshot.ts +10 -3
  47. package/src/snapshot/getSnapshot.ts +1 -1
  48. package/src/snapshot/internal.ts +0 -2
  49. package/src/snapshot/reconcileModelSnapshot.ts +5 -3
  50. package/src/snapshot/reconcilePlainObjectSnapshot.ts +3 -1
  51. package/src/treeUtils/draft.ts +6 -1
  52. package/src/treeUtils/sandbox.ts +10 -7
  53. package/src/tweaker/tweakArray.ts +20 -50
  54. package/src/tweaker/tweakPlainObject.ts +9 -15
  55. package/src/types/SnapshotTypeMismatchError.ts +3 -1
  56. package/src/types/arrayBased/typesArray.ts +13 -19
  57. package/src/types/arrayBased/typesTuple.ts +16 -25
  58. package/src/types/createCachedTypeCheck.ts +17 -30
  59. package/src/types/index.ts +1 -0
  60. package/src/types/modelTypeMatching.ts +276 -0
  61. package/src/types/objectBased/typesDataModelData.ts +7 -8
  62. package/src/types/objectBased/typesModel.ts +23 -6
  63. package/src/types/objectBased/typesObject.ts +11 -15
  64. package/src/types/objectBased/typesRecord.ts +11 -15
  65. package/src/types/objectBased/typesRef.ts +23 -4
  66. package/src/types/schemas.ts +59 -71
  67. package/src/types/tProp.ts +29 -29
  68. package/src/types/utility/typeToStoredData.ts +22 -21
  69. package/src/types/utility/typesCodecCore.ts +8 -1
  70. package/src/types/utility/typesCodecSupport.ts +16 -10
  71. package/src/types/utility/typesMap.ts +43 -51
  72. package/src/types/utility/typesOr.ts +38 -8
  73. package/src/types/utility/typesRefinement.ts +7 -8
  74. package/src/types/utility/typesSkipCheck.ts +7 -8
  75. package/src/types/utility/typesTag.ts +7 -8
  76. package/src/utils/ModelPool.ts +1 -18
  77. package/src/utils/decorators.ts +5 -5
  78. package/src/utils/index.ts +1 -20
  79. package/src/utils/types.ts +5 -0
  80. package/src/wrappers/ArraySet.ts +27 -14
  81. package/src/wrappers/ObjectMap.ts +1 -6
  82. package/src/wrappers/asMap.ts +1 -21
  83. package/src/wrappers/asSet.ts +0 -8
@@ -77,16 +77,8 @@ export interface UndoEventGroup {
77
77
  readonly events: ReadonlyArray<UndoEventWithoutAttachedState>;
78
78
  }
79
79
  declare const UndoStore_base: import('..')._Model<unknown, {
80
- undoEvents: import('..').OptionalModelProp<Frozen<UndoEvent>[]> & {
81
- $storedValueType: Frozen<UndoEvent>[];
82
- $storedCreationValueType: Frozen<UndoEvent>[] | null | undefined;
83
- $typedFromSnapshotOverride: import('..').SnapshotInOfFrozen<Frozen<UndoEvent>>[] | null | undefined;
84
- };
85
- redoEvents: import('..').OptionalModelProp<Frozen<UndoEvent>[]> & {
86
- $storedValueType: Frozen<UndoEvent>[];
87
- $storedCreationValueType: Frozen<UndoEvent>[] | null | undefined;
88
- $typedFromSnapshotOverride: import('..').SnapshotInOfFrozen<Frozen<UndoEvent>>[] | null | undefined;
89
- };
80
+ undoEvents: import('..').TypedOptionalModelProp<import('..').ArrayType<import('..').ModelType<Frozen<UndoEvent>>[]>>;
81
+ redoEvents: import('..').TypedOptionalModelProp<import('..').ArrayType<import('..').ModelType<Frozen<UndoEvent>>[]>>;
90
82
  }, {
91
83
  undoEvents?: ReadonlyArray<UndoEvent | FrozenData<UndoEvent>>;
92
84
  redoEvents?: ReadonlyArray<UndoEvent | FrozenData<UndoEvent>>;
@@ -1,6 +1,5 @@
1
1
  import { AnyDataModel } from '../dataModel/BaseDataModel';
2
2
  import { AnyModel } from '../model/BaseModel';
3
- import { ModelClass } from '../modelShared/BaseModelShared';
4
3
  import { AnyFunction } from '../utils/AnyFunction';
5
4
  /**
6
5
  * Decorator that marks this class (which MUST inherit from the `Model` or `DataModel` abstract classes)
@@ -9,7 +8,10 @@ import { AnyFunction } from '../utils/AnyFunction';
9
8
  * @param name Unique name for the model type. Note that this name must be unique for your whole
10
9
  * application, so it is usually a good idea to use some prefix unique to your application domain.
11
10
  */
12
- export declare const model: (name: string) => <MC extends ModelClass<AnyModel | AnyDataModel>>(clazz: MC, _context?: ClassDecoratorContext<MC>) => MC;
11
+ export declare const model: (name: string) => <MC extends ModelDecoratorTarget>(clazz: MC, _context?: ClassDecoratorContext<MC>) => MC;
12
+ type ModelDecoratorTarget = (new (...args: any) => any) & {
13
+ prototype: AnyModel | AnyDataModel;
14
+ };
13
15
  /**
14
16
  * Marks a class (which MUST inherit from the `Model` abstract class)
15
17
  * as a model and decorates some of its methods/properties.
@@ -23,3 +25,4 @@ export declare const model: (name: string) => <MC extends ModelClass<AnyModel |
23
25
  export declare function decoratedModel<M, MC extends abstract new (...ags: any) => M>(name: string | undefined, clazz: MC, decorators: {
24
26
  [k in keyof M]?: AnyFunction | ReadonlyArray<AnyFunction>;
25
27
  }): MC;
28
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { SnapshotInOf, SnapshotOutOf } from '../snapshot/SnapshotOf';
2
2
  import { AnyStandardType } from '../types/schemas';
3
- import { Flatten, IsNeverType, IsOptionalValue } from '../utils/types';
3
+ import { IsNeverType, IsOptionalValue, SimplifyObject } from '../utils/types';
4
4
  /**
5
5
  * @ignore
6
6
  */
@@ -44,16 +44,16 @@ export interface ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TT
44
44
  * Adds a setter to the property. The setter will be named `set${CapitalizedPropName}`
45
45
  * and will be available in the model instance.
46
46
  */
47
- withSetter(): ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TTransformedCreationValue, TIsRequired, TIsId, string, TFromSnapshotOverride, TToSnapshotOverride>;
47
+ withSetter(): ModelPropWithSetter<this>;
48
48
  /**
49
49
  * Adds a setter with a transform to the property. The setter will be named `set${CapitalizedPropName}`
50
50
  * and will be available in the model instance.
51
51
  */
52
- withSetter(valueTransform: ModelPropSetterValueTransform<TTransformedValue>): ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TTransformedCreationValue, TIsRequired, TIsId, string, TFromSnapshotOverride, TToSnapshotOverride>;
52
+ withSetter(valueTransform: ModelPropSetterValueTransform<TTransformedValue>): ModelPropWithSetter<this>;
53
53
  /**
54
54
  * @deprecated Setter methods are preferred.
55
55
  */
56
- withSetter(mode: "assign"): ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TTransformedCreationValue, TIsRequired, TIsId, string, TFromSnapshotOverride, TToSnapshotOverride>;
56
+ withSetter(mode: "assign"): ModelPropWithSetter<this>;
57
57
  /**
58
58
  * Sets a transform for the property instance value.
59
59
  *
@@ -66,7 +66,7 @@ export interface ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TT
66
66
  * @param transform Transform to be used.
67
67
  * @returns
68
68
  */
69
- withTransform<TTV>(transform: ModelPropTransform<NonNullable<TPropValue>, TTV>): ModelProp<TPropValue, TPropCreationValue, TTV | Extract<TPropValue, null | undefined>, TTV | Extract<TPropCreationValue, null | undefined>, TIsRequired, TIsId, THasSetter, TFromSnapshotOverride, TToSnapshotOverride>;
69
+ withTransform<TTV>(transform: ModelPropTransform<NonNullable<TPropValue>, TTV>): ModelPropWithTransform<this, TTV>;
70
70
  /**
71
71
  * Sets snapshot processors for this property.
72
72
  *
@@ -79,8 +79,24 @@ export interface ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TT
79
79
  withSnapshotProcessor<FS = TFromSnapshotOverride, TS = TToSnapshotOverride, This extends AnyModelProp = this>(processor: {
80
80
  fromSnapshot?: (sn: FS) => ModelPropFromSnapshot<This>;
81
81
  toSnapshot?: (sn: ModelPropToSnapshot<This>) => TS;
82
- }): ModelProp<TPropValue, TPropCreationValue, TTransformedValue, TTransformedCreationValue, TIsRequired, TIsId, THasSetter, FS, TS>;
82
+ }): ModelPropWithSnapshotProcessor<this, FS, TS>;
83
83
  }
84
+ type ModelPropStoredMetadataKey = "$storedValueType" | "$storedCreationValueType";
85
+ type ModelPropStoredMetadata<MP, K extends PropertyKey> = MP extends {
86
+ $storedValueType: unknown;
87
+ } ? Pick<MP, Extract<keyof MP, K>> : {};
88
+ /**
89
+ * The model property returned by `withSetter`.
90
+ */
91
+ export type ModelPropWithSetter<MP extends AnyModelProp> = ModelProp<MP["$valueType"], MP["$creationValueType"], MP["$transformedValueType"], MP["$transformedCreationValueType"], MP["$isRequired"], MP["$isId"], string, MP["$fromSnapshotOverride"], MP["$toSnapshotOverride"]> & ModelPropStoredMetadata<MP, ModelPropStoredMetadataKey | "$typedFromSnapshotOverride">;
92
+ /**
93
+ * The model property returned by `withTransform`.
94
+ */
95
+ export type ModelPropWithTransform<MP extends AnyModelProp, TTV> = ModelProp<MP["$valueType"], MP["$creationValueType"], TTV | Extract<MP["$valueType"], null | undefined>, TTV | Extract<MP["$creationValueType"], null | undefined>, MP["$isRequired"], MP["$isId"], MP["$hasSetter"], MP["$fromSnapshotOverride"], MP["$toSnapshotOverride"]> & ModelPropStoredMetadata<MP, ModelPropStoredMetadataKey | "$typedFromSnapshotOverride">;
96
+ /**
97
+ * The model property returned by `withSnapshotProcessor`.
98
+ */
99
+ export type ModelPropWithSnapshotProcessor<MP extends AnyModelProp, FS, TS> = ModelProp<MP["$valueType"], MP["$creationValueType"], MP["$transformedValueType"], MP["$transformedCreationValueType"], MP["$isRequired"], MP["$isId"], MP["$hasSetter"], FS, TS> & ModelPropStoredMetadata<MP, ModelPropStoredMetadataKey>;
84
100
  /**
85
101
  * The snapshot in type of a model property.
86
102
  */
@@ -89,15 +105,9 @@ export type ModelPropFromSnapshot<MP extends AnyModelProp> = IsNeverType<ModelPr
89
105
  * The snapshot out type of a model property.
90
106
  */
91
107
  export type ModelPropToSnapshot<MP extends AnyModelProp> = IsNeverType<MP["$toSnapshotOverride"], SnapshotOutOf<ModelPropStoredValue<MP>>, MP["$toSnapshotOverride"]>;
92
- export type ModelPropStoredValue<MP extends AnyModelProp> = MP extends {
93
- $storedValueType: infer TStoredValue;
94
- } ? TStoredValue : MP["$valueType"];
95
- export type ModelPropStoredCreationValue<MP extends AnyModelProp> = MP extends {
96
- $storedCreationValueType: infer TStoredCreationValue;
97
- } ? TStoredCreationValue : MP["$creationValueType"];
98
- export type ModelPropFromSnapshotOverride<MP extends AnyModelProp> = MP extends {
99
- $typedFromSnapshotOverride: infer TFromSnapshotOverride;
100
- } ? TFromSnapshotOverride : MP["$fromSnapshotOverride"];
108
+ export type ModelPropStoredValue<MP extends AnyModelProp> = "$storedValueType" extends keyof MP ? MP["$storedValueType" & keyof MP] : MP["$valueType"];
109
+ export type ModelPropStoredCreationValue<MP extends AnyModelProp> = "$storedCreationValueType" extends keyof MP ? MP["$storedCreationValueType" & keyof MP] : MP["$creationValueType"];
110
+ export type ModelPropFromSnapshotOverride<MP extends AnyModelProp> = "$typedFromSnapshotOverride" extends keyof MP ? MP["$typedFromSnapshotOverride" & keyof MP] : MP["$fromSnapshotOverride"];
101
111
  /**
102
112
  * A model prop transform.
103
113
  */
@@ -131,39 +141,42 @@ export interface ModelProps {
131
141
  export type RequiredModelProps<MP extends ModelProps> = {
132
142
  [K in keyof MP]: MP[K]["$isRequired"] & K;
133
143
  }[keyof MP];
134
- export type ModelPropsToUntransformedData<MP extends ModelProps> = Flatten<{
144
+ export type ModelPropsToUntransformedData<MP extends ModelProps> = {
135
145
  [k in keyof MP]: ModelPropStoredValue<MP[k]>;
136
- }>;
137
- export type ModelPropsToSnapshotData<MP extends ModelProps> = Flatten<{
146
+ } & {};
147
+ export type ModelPropsToSnapshotData<MP extends ModelProps> = {
138
148
  [k in keyof MP]: ModelPropToSnapshot<MP[k]> extends infer R ? R : never;
139
- }>;
149
+ } & {};
140
150
  export type ModelPropsToUntransformedCreationData<MP extends ModelProps> = {
141
151
  [k in keyof MP]?: ModelPropStoredCreationValue<MP[k]>;
142
152
  } & {
143
153
  [k in RequiredModelProps<MP>]: ModelPropStoredCreationValue<MP[k]>;
144
154
  };
145
- export type ModelPropsToSnapshotCreationData<MP extends ModelProps> = Flatten<{
155
+ export type ModelPropsToSnapshotCreationData<MP extends ModelProps> = SimplifyObject<{
146
156
  [k in keyof MP]?: ModelPropFromSnapshot<MP[k]> extends infer R ? R : never;
147
157
  } & {
148
- [k in {
149
- [K in keyof MP]: IsNeverType<ModelPropFromSnapshotOverride<MP[K]>, MP[K]["$isRequired"] & K, // no override
150
- IsOptionalValue<ModelPropFromSnapshotOverride<MP[K]>, never, K>>;
151
- }[keyof MP]]: ModelPropFromSnapshot<MP[k]> extends infer R ? R : never;
158
+ [k in SnapshotCreationRequiredKeys<MP>]: ModelPropFromSnapshot<MP[k]> extends infer R ? R : never;
152
159
  }>;
153
- export type ModelPropsToTransformedData<MP extends ModelProps> = Flatten<{
160
+ type SnapshotCreationRequiredKeys<MP extends ModelProps> = {
161
+ [K in keyof MP]: IsNeverType<ModelPropFromSnapshotOverride<MP[K]>, MP[K]["$isRequired"] & K, IsOptionalValue<ModelPropFromSnapshotOverride<MP[K]>, never, K>>;
162
+ }[keyof MP];
163
+ export type ModelPropsToTransformedData<MP extends ModelProps> = {
154
164
  [k in keyof MP]: MP[k]["$transformedValueType"];
155
- }>;
165
+ } & {};
156
166
  export type ModelPropsToTransformedCreationData<MP extends ModelProps> = {
157
167
  [k in keyof MP]?: MP[k]["$transformedCreationValueType"];
158
168
  } & {
159
169
  [k in RequiredModelProps<MP>]: MP[k]["$transformedCreationValueType"];
160
170
  };
161
- export type ModelPropsToSetter<MP extends ModelProps> = Flatten<{
171
+ export type ModelPropsToSetter<MP extends ModelProps> = {
162
172
  [k in keyof MP as MP[k]["$hasSetter"] & `set${Capitalize<k & string>}`]: (value: MP[k]["$transformedValueType"]) => void;
163
- }>;
173
+ } & {};
164
174
  export type ModelIdProp<T extends string = string> = ModelProp<T, T | undefined, T, T | undefined, never, // not required
165
175
  true>;
166
- type TypedModelIdProp<T extends string = string, THasSetter = never> = Omit<ModelProp<T, T | undefined, T, T | undefined, never, true, THasSetter>, "withSetter"> & {
176
+ /**
177
+ * The type of `idProp`.
178
+ */
179
+ export type TypedModelIdProp<T extends string = string, THasSetter = never> = Omit<ModelProp<T, T | undefined, T, T | undefined, never, true, THasSetter>, "withSetter"> & {
167
180
  /**
168
181
  * Enables generation of a setter method for the ID prop (`setId` for `id`, `setCustomId` for `customId`).
169
182
  */
@@ -3,10 +3,7 @@ declare const Ref_base: import('..')._Model<unknown, {
3
3
  /**
4
4
  * Reference id.
5
5
  */
6
- id: import('..').MaybeOptionalModelProp<string> & {
7
- $storedValueType: string;
8
- $storedCreationValueType: string;
9
- };
6
+ id: import('..').TypedMaybeOptionalModelProp<import('..').IdentityType<string>>;
10
7
  }, never, never>;
11
8
  /**
12
9
  * A reference model base type.
@@ -8,7 +8,7 @@ export type FrozenData<D> = {
8
8
  data: D;
9
9
  };
10
10
  export type SnapshotOutOfObject<T> = {
11
- [k in keyof T]: SnapshotOutOf<T[k]> extends infer R ? R : never;
11
+ [k in keyof T]: SnapshotOutOf<T[k]>;
12
12
  };
13
13
  export type SnapshotOutOfModel<M extends AnyModel> = ModelToSnapshot<M>;
14
14
  export interface SnapshotOutOfFrozen<F extends Frozen<any>> extends FrozenData<F["data"]> {
@@ -25,9 +25,9 @@ export interface SnapshotOutOfArraySet<V> {
25
25
  [modelTypeKey]?: string;
26
26
  [modelIdKey]: string;
27
27
  }
28
- export type SnapshotOutOf<T> = T extends ObjectMap<infer V> ? SnapshotOutOfObjectMap<V> extends infer R ? R : never : T extends ArraySet<infer V> ? SnapshotOutOfArraySet<V> extends infer R ? R : never : T extends AnyModel ? SnapshotOutOfModel<T> extends infer R ? R : never : T extends Frozen<any> ? SnapshotOutOfFrozen<T> extends infer R ? R : never : T extends object ? SnapshotOutOfObject<T> extends infer R ? R : never : T;
28
+ export type SnapshotOutOf<T> = T extends object ? T extends AnyModel ? T extends ObjectMap<infer V> ? SnapshotOutOfObjectMap<V> : T extends ArraySet<infer V> ? SnapshotOutOfArraySet<V> : SnapshotOutOfModel<T> : T extends Frozen<any> ? SnapshotOutOfFrozen<T> : SnapshotOutOfObject<T> : T;
29
29
  export type SnapshotInOfObject<T> = {
30
- [k in keyof T]: SnapshotInOf<T[k]> extends infer R ? R : never;
30
+ [k in keyof T]: SnapshotInOf<T[k]>;
31
31
  };
32
32
  export type SnapshotInOfModel<M extends AnyModel> = ModelFromSnapshot<M>;
33
33
  export interface SnapshotInOfFrozen<F extends Frozen<any>> extends FrozenData<F["data"]> {
@@ -44,4 +44,4 @@ export interface SnapshotInOfArraySet<V> {
44
44
  [modelTypeKey]?: string;
45
45
  [modelIdKey]: string;
46
46
  }
47
- export type SnapshotInOf<T> = T extends ObjectMap<infer V> ? SnapshotInOfObjectMap<V> extends infer R ? R : never : T extends ArraySet<infer V> ? SnapshotInOfArraySet<V> extends infer R ? R : never : T extends AnyModel ? SnapshotInOfModel<T> extends infer R ? R : never : T extends Frozen<any> ? SnapshotInOfFrozen<T> extends infer R ? R : never : T extends object ? SnapshotInOfObject<T> extends infer R ? R : never : T;
47
+ export type SnapshotInOf<T> = T extends object ? T extends AnyModel ? T extends ObjectMap<infer V> ? SnapshotInOfObjectMap<V> : T extends ArraySet<infer V> ? SnapshotInOfArraySet<V> : SnapshotInOfModel<T> : T extends Frozen<any> ? SnapshotInOfFrozen<T> : SnapshotInOfObject<T> : T;
@@ -7,4 +7,4 @@ import { SnapshotInOf, SnapshotOutOf } from './SnapshotOf';
7
7
  * @param node Target object (model object, object or array).
8
8
  * @param snapshot Snapshot to apply.
9
9
  */
10
- export declare function applySnapshot<T extends object>(node: T, snapshot: SnapshotInOf<T> | SnapshotOutOf<T>): void;
10
+ export declare function applySnapshot<T extends object>(node: T, snapshot: NoInfer<SnapshotInOf<T> | SnapshotOutOf<T>>): void;
@@ -1,4 +1,4 @@
1
- import { AnyType, TypeToData, TypeToSnapshotIn } from '../types/schemas';
1
+ import { AnyType, TypeToData, TypeToSnapshotIn, TypeToSnapshotOut } from '../types/schemas';
2
2
  import { SnapshotInOf, SnapshotOutOf } from './SnapshotOf';
3
3
  /**
4
4
  * From snapshot options.
@@ -18,7 +18,7 @@ export interface FromSnapshotOptions {
18
18
  * @param options Options.
19
19
  * @returns The deserialized object.
20
20
  */
21
- export declare function fromSnapshot<TType extends AnyType>(type: TType, snapshot: TypeToSnapshotIn<TType>, options?: Partial<FromSnapshotOptions>): TypeToData<TType>;
21
+ export declare function fromSnapshot<TType extends AnyType>(type: TType, snapshot: NoInfer<TypeToSnapshotIn<TType> | TypeToSnapshotOut<TType>>, options?: Partial<FromSnapshotOptions>): TypeToData<TType>;
22
22
  /**
23
23
  * Deserializes a data structure from its snapshot form.
24
24
  *
@@ -9,7 +9,7 @@ import { SnapshotOutOf } from './SnapshotOf';
9
9
  * @param nodeOrPrimitive Data structure, including primtives.
10
10
  * @returns The snapshot.
11
11
  */
12
- export declare function getSnapshot<T extends AnyType>(type: T, nodeOrPrimitive: TypeToData<T>): TypeToSnapshotOut<T>;
12
+ export declare function getSnapshot<T extends AnyType>(type: T, nodeOrPrimitive: NoInfer<TypeToData<T>>): TypeToSnapshotOut<T>;
13
13
  /**
14
14
  * Retrieves an immutable snapshot for a data structure.
15
15
  * Since returned snapshots are immutable they will respect shallow equality, this is,
@@ -7,7 +7,9 @@ export interface SnapshotTypeMismatchErrorData {
7
7
  modelTrail?: readonly string[];
8
8
  }
9
9
  /**
10
- * Thrown when a snapshot value does not match any of the expected types in a union (extends `MobxKeystoneError`).
10
+ * Thrown when a snapshot value does not match any of the expected types in a union, or when a
11
+ * model snapshot names a model (`$modelType`) that is not the expected model or a subclass of it
12
+ * (extends `MobxKeystoneError`).
11
13
  *
12
14
  * Use `instanceof SnapshotTypeMismatchError` to distinguish snapshot type-mismatch errors
13
15
  * from other `MobxKeystoneError` instances.
@@ -4,3 +4,4 @@ export * from './TypeCheckError';
4
4
  export * from './tProp';
5
5
  export { typeCheck } from './typeCheck';
6
6
  export * from './types';
7
+ export type { CodecFromEncoded } from './utility/typesCodecCore';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,8 @@
1
- import { O } from 'ts-toolbelt';
2
1
  import { AnyDataModel } from '../dataModel/BaseDataModel';
3
2
  import { AnyModel } from '../model/BaseModel';
4
3
  import { ModelClass } from '../modelShared/BaseModelShared';
5
4
  import { SnapshotInOf, SnapshotOutOf } from '../snapshot/SnapshotOf';
6
- import { IsOptionalValue } from '../utils/types';
5
+ import { IsOptionalValue, SimplifyObject } from '../utils/types';
7
6
  export interface Type<Name, Data> {
8
7
  /** @ignore */
9
8
  $$type: Name;
@@ -22,14 +21,14 @@ export interface CodecType<Runtime, SnapshotIn = Runtime, SnapshotOut = Snapshot
22
21
  /** @ignore */
23
22
  $$storedData: StoredData;
24
23
  }
25
- type ArrayData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToData<S[number]> extends infer R ? R : never> : {
26
- [k in keyof S]: TypeToData<S[k]> extends infer R ? R : never;
24
+ type ArrayData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToData<S[number]>> : {
25
+ [k in keyof S]: TypeToData<S[k]>;
27
26
  };
28
- type ArraySnapshotInData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToSnapshotIn<S[number]> extends infer R ? R : never> : {
29
- [k in keyof S]: TypeToSnapshotIn<S[k]> extends infer R ? R : never;
27
+ type ArraySnapshotInData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToSnapshotIn<S[number]>> : {
28
+ [k in keyof S]: TypeToSnapshotIn<S[k]>;
30
29
  };
31
- type ArraySnapshotOutData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToSnapshotOut<S[number]> extends infer R ? R : never> : {
32
- [k in keyof S]: TypeToSnapshotOut<S[k]> extends infer R ? R : never;
30
+ type ArraySnapshotOutData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToSnapshotOut<S[number]>> : {
31
+ [k in keyof S]: TypeToSnapshotOut<S[k]>;
33
32
  };
34
33
  export interface ArrayType<S extends readonly unknown[]> extends Type<"array", ArrayData<S>> {
35
34
  }
@@ -48,33 +47,32 @@ export type UndefinablePropsNames<T> = {
48
47
  * Computes the optional keys for an object type schema.
49
48
  * @ignore
50
49
  */
51
- export type ObjectOptionalKeys<S> = UndefinablePropsNames<{
52
- [k in keyof S]: TypeToDataOpt<S[k]> extends infer R ? R : never;
50
+ export type ObjectOptionalKeys<S> = {
51
+ [K in keyof S]: IsOptionalValue<TypeToDataOpt<S[K]>, K, never>;
52
+ }[keyof S];
53
+ type ObjectData<S, OK = ObjectOptionalKeys<S>> = SimplifyObject<{
54
+ [k in keyof S as k extends OK ? never : k]: TypeToData<S[k]>;
55
+ } & {
56
+ [k in keyof S as k extends OK ? k : never]?: TypeToData<S[k]>;
57
+ }>;
58
+ type ObjectSnapshotInData<S, OK = ObjectOptionalKeys<S>> = SimplifyObject<{
59
+ [k in keyof S as k extends OK ? never : k]: TypeToSnapshotIn<S[k]>;
60
+ } & {
61
+ [k in keyof S as k extends OK ? k : never]?: TypeToSnapshotIn<S[k]>;
62
+ }>;
63
+ type ObjectSnapshotOutData<S, OK = ObjectOptionalKeys<S>> = SimplifyObject<{
64
+ [k in keyof S as k extends OK ? never : k]: TypeToSnapshotOut<S[k]>;
65
+ } & {
66
+ [k in keyof S as k extends OK ? k : never]?: TypeToSnapshotOut<S[k]>;
53
67
  }>;
54
- type ObjectData<S> = O.Optional<{
55
- [k in keyof S]: TypeToData<S[k]> extends infer R ? R : never;
56
- }, ObjectOptionalKeys<S>>;
57
- type ObjectSnapshotInData<S> = O.Optional<{
58
- [k in keyof S]: TypeToSnapshotIn<S[k]> extends infer R ? R : never;
59
- }, ObjectOptionalKeys<S>>;
60
- type ObjectSnapshotOutData<S> = O.Optional<{
61
- [k in keyof S]: TypeToSnapshotOut<S[k]> extends infer R ? R : never;
62
- }, ObjectOptionalKeys<S>>;
63
- type RecordData<S> = {
64
- [k: string]: TypeToData<S> extends infer R ? R : never;
65
- };
66
- type RecordSnapshotInData<S> = {
67
- [k: string]: TypeToSnapshotIn<S> extends infer D ? D : never;
68
- };
69
- type RecordSnapshotOutData<S> = {
70
- [k: string]: TypeToSnapshotOut<S> extends infer D ? D : never;
71
- };
72
68
  export interface ObjectType<S> extends Type<"object", ObjectData<S>> {
73
69
  }
74
70
  export interface ObjectTypeFunction {
75
71
  (): ObjectOfTypes;
76
72
  }
77
- export interface RecordType<S> extends Type<"record", RecordData<S>> {
73
+ export interface RecordType<S> extends Type<"record", {
74
+ [k: string]: TypeToData<S>;
75
+ }> {
78
76
  }
79
77
  export type AnyStandardType = IdentityType<any> | ModelType<any> | CodecType<any, any> | ArrayType<any> | ObjectType<any> | RecordType<any> | ObjectTypeFunction;
80
78
  export type AnyType = null | undefined | AnyNonValueType;
@@ -85,14 +83,20 @@ type ConstructorToSnapshotData<S> = ConstructorToType<S, string>;
85
83
  type TypeToDataLeaf<S> = S extends ModelClass<infer M> ? M : S extends {
86
84
  $$data: infer D;
87
85
  } ? D : ConstructorToData<S>;
88
- type TypeToSnapshotLeaf<S, Dir extends "in" | "out"> = S extends ModelClass<infer M> ? Dir extends "in" ? SnapshotInOf<M> : SnapshotOutOf<M> : S extends {
89
- $$data: infer D;
90
- } ? D : ConstructorToSnapshotData<S>;
91
- export type TypeToData<S> = S extends ObjectTypeFunction ? ObjectType<ReturnType<S>>["$$data"] extends infer R ? R : never : TypeToDataLeaf<S>;
92
- export type TypeToSnapshotIn<S> = S extends ObjectTypeFunction ? ObjectSnapshotInData<ReturnType<S>> extends infer R ? R : never : S extends CodecType<any, infer D, any> ? D : S extends ArrayType<infer A> ? ArraySnapshotInData<A> : S extends ObjectType<infer O> ? ObjectSnapshotInData<O> : S extends RecordType<infer R> ? RecordSnapshotInData<R> : S extends ModelType<infer M> ? SnapshotInOf<M> : TypeToSnapshotLeaf<S, "in">;
93
- export type TypeToSnapshotOut<S> = S extends ObjectTypeFunction ? ObjectSnapshotOutData<ReturnType<S>> extends infer R ? R : never : S extends CodecType<any, any, infer D> ? D : S extends ArrayType<infer A> ? ArraySnapshotOutData<A> : S extends ObjectType<infer O> ? ObjectSnapshotOutData<O> : S extends RecordType<infer R> ? RecordSnapshotOutData<R> : S extends ModelType<infer M> ? SnapshotOutOf<M> : TypeToSnapshotLeaf<S, "out">;
86
+ type TypeToSnapshotLeaf<S, Dir extends "in" | "out"> = S extends ModelClass<infer M> ? Dir extends "in" ? SnapshotInOf<M> : SnapshotOutOf<M> : ConstructorToSnapshotData<S>;
87
+ export type TypeToData<S> = S extends ObjectTypeFunction ? ObjectType<ReturnType<S>>["$$data"] : TypeToDataLeaf<S>;
88
+ export type TypeToSnapshotIn<S> = S extends ObjectTypeFunction ? ObjectSnapshotInData<ReturnType<S>> : S extends {
89
+ $$type: infer K;
90
+ } ? K extends "codec" ? S["$$snapshotIn" & keyof S] : S extends ArrayType<infer A> ? ArraySnapshotInData<A> : S extends ObjectType<infer O> ? ObjectSnapshotInData<O> : S extends RecordType<infer R> ? {
91
+ [k: string]: TypeToSnapshotIn<R>;
92
+ } : S extends ModelType<infer M> ? SnapshotInOf<M> : S["$$data" & keyof S] : TypeToSnapshotLeaf<S, "in">;
93
+ export type TypeToSnapshotOut<S> = S extends ObjectTypeFunction ? ObjectSnapshotOutData<ReturnType<S>> : S extends {
94
+ $$type: infer K;
95
+ } ? K extends "codec" ? S["$$snapshotOut" & keyof S] : S extends ArrayType<infer A> ? ArraySnapshotOutData<A> : S extends ObjectType<infer O> ? ObjectSnapshotOutData<O> : S extends RecordType<infer R> ? {
96
+ [k: string]: TypeToSnapshotOut<R>;
97
+ } : S extends ModelType<infer M> ? SnapshotOutOf<M> : S["$$data" & keyof S] : TypeToSnapshotLeaf<S, "out">;
94
98
  /** @ignore */
95
99
  export type TypeToDataOpt<S> = S extends {
96
- $$data: infer D;
97
- } ? D & undefined : never;
100
+ $$data: unknown;
101
+ } ? S["$$data"] & undefined : never;
98
102
  export {};
@@ -6,8 +6,14 @@ type StoredRequiredPropMetadata<TType extends AnyType> = {
6
6
  $storedValueType: TypeToStoredData<TType>;
7
7
  $storedCreationValueType: TypeToStoredData<TType>;
8
8
  };
9
- type TypedMaybeOptionalModelProp<TType extends AnyType> = MaybeOptionalModelProp<TypeToData<TType>> & StoredRequiredPropMetadata<TType>;
10
- type TypedOptionalModelProp<TType extends AnyType> = OptionalModelProp<TypeToData<TType>> & {
9
+ /**
10
+ * A model property created by `tProp` without a default value.
11
+ */
12
+ export type TypedMaybeOptionalModelProp<TType extends AnyType> = MaybeOptionalModelProp<TypeToData<TType>> & StoredRequiredPropMetadata<TType>;
13
+ /**
14
+ * A model property created by `tProp` with a default value.
15
+ */
16
+ export type TypedOptionalModelProp<TType extends AnyType> = OptionalModelProp<TypeToData<TType>> & {
11
17
  $storedValueType: TypeToStoredData<TType>;
12
18
  $storedCreationValueType: TypeToStoredData<TType> | null | undefined;
13
19
  $typedFromSnapshotOverride: TypeToSnapshotIn<TType> | null | undefined;
@@ -67,7 +73,7 @@ export declare function tProp(defaultValue: boolean): TypedOptionalModelProp<typ
67
73
  * @param defaultFn Default value generator function.
68
74
  * @returns
69
75
  */
70
- export declare function tProp<TType extends AnyType>(type: TType, defaultFn: () => TypeToData<TType>): TypedOptionalModelProp<TType>;
76
+ export declare function tProp<TType extends AnyType>(type: TType, defaultFn: () => NoInfer<TypeToData<TType>>): TypedOptionalModelProp<TType>;
71
77
  /**
72
78
  * Defines a model property using array syntax as a shorthand for `types.or(...)`,
73
79
  * with an optional function to generate a default value if the input snapshot /
@@ -84,7 +90,7 @@ export declare function tProp<TType extends AnyType>(type: TType, defaultFn: ()
84
90
  * @param defaultFn Default value generator function.
85
91
  * @returns
86
92
  */
87
- export declare function tProp<TType extends ReadonlyArray<AnyType>>(type: TType, defaultFn: () => TypeToData<TType[number]>): TypedOptionalModelProp<TType[number]>;
93
+ export declare function tProp<TType extends ReadonlyArray<AnyType>>(type: TType, defaultFn: () => NoInfer<TypeToData<TType[number]>>): TypedOptionalModelProp<TType[number]>;
88
94
  /**
89
95
  * Defines a model property, with an optional default value
90
96
  * if the input snapshot / model creation data is `null` or `undefined` and with an associated type checker.
@@ -102,7 +108,7 @@ export declare function tProp<TType extends ReadonlyArray<AnyType>>(type: TType,
102
108
  * @param defaultValue Default value generator function.
103
109
  * @returns
104
110
  */
105
- export declare function tProp<TType extends AnyType>(type: TType, defaultValue: TypeToData<TType>): TypedOptionalModelProp<TType>;
111
+ export declare function tProp<TType extends AnyType>(type: TType, defaultValue: NoInfer<TypeToData<TType>>): TypedOptionalModelProp<TType>;
106
112
  /**
107
113
  * Defines a model property using array syntax as a shorthand for `types.or(...)`,
108
114
  * with an optional default value if the input snapshot / model creation data is
@@ -119,7 +125,7 @@ export declare function tProp<TType extends AnyType>(type: TType, defaultValue:
119
125
  * @param defaultValue Default value.
120
126
  * @returns
121
127
  */
122
- export declare function tProp<TType extends ReadonlyArray<AnyType>>(type: TType, defaultValue: TypeToData<TType[number]>): TypedOptionalModelProp<TType[number]>;
128
+ export declare function tProp<TType extends ReadonlyArray<AnyType>>(type: TType, defaultValue: NoInfer<TypeToData<TType[number]>>): TypedOptionalModelProp<TType[number]>;
123
129
  /**
124
130
  * Defines a model property with no default value and an associated type checker.
125
131
  *
@@ -49,9 +49,9 @@ export declare const types: {
49
49
  objectMap: typeof typesObjectMap;
50
50
  arraySet: typeof typesArraySet;
51
51
  tuple: typeof typesTuple;
52
- bigint: import('./utility/typesCodecCore').CodecFromEncoded<StringConstructor, bigint>;
53
- dateAsTimestamp: import('./utility/typesCodecCore').CodecFromEncoded<NumberConstructor, Date>;
54
- dateAsIsoString: import('./utility/typesCodecCore').CodecFromEncoded<StringConstructor, Date>;
52
+ bigint: import('.').CodecFromEncoded<StringConstructor, bigint>;
53
+ dateAsTimestamp: import('.').CodecFromEncoded<NumberConstructor, Date>;
54
+ dateAsIsoString: import('.').CodecFromEncoded<StringConstructor, Date>;
55
55
  /**
56
56
  * @deprecated Prefer `types.mapFromArray(...)` for runtime `Map` values.
57
57
  */
@@ -64,9 +64,9 @@ export declare const types: {
64
64
  * @deprecated Prefer `types.mapFromObject(...)` for runtime `Map` values.
65
65
  */
66
66
  mapObject<T extends AnyType>(valueType: T): import('./schemas').RecordType<T>;
67
- mapFromObject<T extends AnyType>(valueType: T): import('./utility/typesCodecCore').CodecFromEncoded<import('./schemas').RecordType<T>, Map<string, import('./schemas').TypeToData<T>>>;
68
- mapFromArray<TKeyType extends AnyType, TValueType extends AnyType>(keyType: TKeyType, valueType: TValueType): import('./utility/typesCodecCore').CodecFromEncoded<import('./schemas').ArrayType<import('./schemas').ArrayType<[TKeyType, TValueType]>[]>, Map<import('./schemas').TypeToData<TKeyType>, import('./schemas').TypeToData<TValueType>>>;
69
- setFromArray<T extends AnyType>(valueType: T): import('./utility/typesCodecCore').CodecFromEncoded<import('./schemas').ArrayType<T[]>, Set<import('./schemas').TypeToData<T>> | import('mobx').ObservableSet<import('./schemas').TypeToData<T>>>;
67
+ mapFromObject<T extends AnyType>(valueType: T): import('.').CodecFromEncoded<import('./schemas').RecordType<T>, Map<string, import('./schemas').TypeToData<T>>>;
68
+ mapFromArray<TKeyType extends AnyType, TValueType extends AnyType>(keyType: TKeyType, valueType: TValueType): import('.').CodecFromEncoded<import('./schemas').ArrayType<import('./schemas').ArrayType<[TKeyType, TValueType]>[]>, Map<import('./schemas').TypeToData<TKeyType>, import('./schemas').TypeToData<TValueType>>>;
69
+ setFromArray<T extends AnyType>(valueType: T): import('.').CodecFromEncoded<import('./schemas').ArrayType<T[]>, Set<import('./schemas').TypeToData<T>> | import('mobx').ObservableSet<import('./schemas').TypeToData<T>>>;
70
70
  /**
71
71
  * @deprecated Prefer `types.dateAsIsoString` instead.
72
72
  */
@@ -1,12 +1,16 @@
1
- import { O } from 'ts-toolbelt';
2
- import { ArrayType, CodecType, ObjectOptionalKeys, ObjectType, ObjectTypeFunction, RecordType, TypeToData } from '../schemas';
3
- type ArrayStoredData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToStoredData<S[number]> extends infer R ? R : never> : {
4
- [k in keyof S]: TypeToStoredData<S[k]> extends infer R ? R : never;
1
+ import { SimplifyObject } from '../../utils/types';
2
+ import { ArrayType, ObjectOptionalKeys, ObjectType, ObjectTypeFunction, RecordType, TypeToData } from '../schemas';
3
+ type ArrayStoredData<S extends readonly unknown[]> = number extends S["length"] ? Array<TypeToStoredData<S[number]>> : {
4
+ [k in keyof S]: TypeToStoredData<S[k]>;
5
5
  };
6
- type ObjectStoredData<S> = O.Optional<{
7
- [k in keyof S]: TypeToStoredData<S[k]> extends infer R ? R : never;
8
- }, ObjectOptionalKeys<S>>;
9
- export type TypeToStoredData<S> = S extends ObjectTypeFunction ? ObjectStoredData<ReturnType<S>> extends infer R ? R : never : S extends CodecType<any, any, any, infer D> ? D : S extends ArrayType<infer A> ? ArrayStoredData<A> : S extends ObjectType<infer O> ? ObjectStoredData<O> : S extends RecordType<infer R> ? {
10
- [k: string]: TypeToStoredData<R> extends infer D ? D : never;
11
- } : TypeToData<S>;
6
+ type ObjectStoredData<S, OK = ObjectOptionalKeys<S>> = SimplifyObject<{
7
+ [k in keyof S as k extends OK ? never : k]: TypeToStoredData<S[k]>;
8
+ } & {
9
+ [k in keyof S as k extends OK ? k : never]?: TypeToStoredData<S[k]>;
10
+ }>;
11
+ export type TypeToStoredData<S> = S extends ObjectTypeFunction ? ObjectStoredData<ReturnType<S>> : S extends {
12
+ $$type: infer K;
13
+ } ? K extends "codec" ? S["$$storedData" & keyof S] : S extends ArrayType<infer A> ? ArrayStoredData<A> : S extends ObjectType<infer O> ? ObjectStoredData<O> : S extends RecordType<infer R> ? {
14
+ [k: string]: TypeToStoredData<R>;
15
+ } : TypeToData<S> : TypeToData<S>;
12
16
  export {};
@@ -28,6 +28,9 @@ type CodecConfig<TEncodedType extends AnyType, TRuntime> = {
28
28
  encodedType: TEncodedType;
29
29
  is(value: unknown): value is TRuntime;
30
30
  } & ModelPropTransform<TypeToData<TEncodedType>, TRuntime>;
31
+ /**
32
+ * A codec type whose snapshot and stored forms are those of its encoded type.
33
+ */
31
34
  export type CodecFromEncoded<TEncodedType extends AnyType, TRuntime> = CodecType<TRuntime, TypeToSnapshotIn<TEncodedType>, TypeToSnapshotOut<TEncodedType>, TypeToStoredData<TEncodedType>>;
32
35
  export declare const identityRuntimeAdapter: RuntimeAdapter<any, any>;
33
36
  /**
@@ -9,5 +9,4 @@ export declare class ModelPool {
9
9
  constructor(root: object);
10
10
  release(): void;
11
11
  findModelByTypeAndId(modelType: string, modelId: string | undefined): AnyModel | undefined;
12
- findModelForSnapshot(sn: any): AnyModel | undefined;
13
12
  }
@@ -37,3 +37,9 @@ export type IsNeverType<T, IfNever, IfNotNever> = [T] extends [never] ? IfNever
37
37
  export type Flatten<T> = T extends Record<any, any> ? {
38
38
  [P in keyof T]: T[P];
39
39
  } : T;
40
+ /**
41
+ * @ignore
42
+ */
43
+ export type SimplifyObject<T> = {
44
+ [P in keyof T]: T[P];
45
+ } & {};
@@ -21,6 +21,7 @@ export declare class ArraySet<V> extends arraySetBase implements Set<V> {
21
21
  entries(): ReturnType<Set<V>["entries"]>;
22
22
  [Symbol.iterator](): ReturnType<Set<V>[typeof Symbol.iterator]>;
23
23
  readonly [Symbol.toStringTag] = "ArraySet";
24
+ private toSetLike;
24
25
  union<U>(other: ReadonlySetLike<U>): Set<V | U>;
25
26
  intersection<U>(other: ReadonlySetLike<U>): Set<V & U>;
26
27
  difference<U>(other: ReadonlySetLike<U>): Set<V>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-keystone",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "A MobX powered state management solution based on data trees with first class support for TypeScript, snapshots, patches and much more",
5
5
  "keywords": [
6
6
  "mobx",
@@ -61,23 +61,23 @@
61
61
  "test:perf": "pnpm run build && pnpm run test:perf:run",
62
62
  "test:perf:run": "cd perf_bench && NODE_ENV=production TS_NODE_COMPILER=@typescript/typescript6 /usr/bin/time node --expose-gc --require ts-node/register ./report.ts",
63
63
  "memtest": "cd perf_bench && NODE_ENV=production TS_NODE_COMPILER=@typescript/typescript6 node --expose-gc --require ts-node/register ./memtest.ts",
64
- "build-docs": "shx rm -rf api-docs && node --import ./scripts/typedoc-typescript6-register.mjs ./node_modules/typedoc/dist/cli.js --options ./typedocconfig.js src/index.ts && shx rm -rf ../../apps/site/generated-static/api && shx mkdir -p ../../apps/site/generated-static/api && shx cp -R ./api-docs/* ../../apps/site/generated-static/api"
64
+ "build-docs": "shx rm -rf ../../apps/site/generated-api && node --import ./scripts/typedoc-typescript6-register.mjs ./node_modules/typedoc/dist/cli.js --options ./typedocconfig.js src/index.ts"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "mobx": "^7.0.0 || ^6.0.0 || ^5.0.0 || ^4.0.0"
68
68
  },
69
69
  "devDependencies": {
70
- "@babel/core": "^8.0.1",
70
+ "@babel/core": "^8.0.6",
71
71
  "@babel/plugin-proposal-decorators": "^8.0.2",
72
72
  "@babel/plugin-transform-class-properties": "^8.0.1",
73
- "@babel/plugin-transform-class-static-block": "^8.0.1",
74
- "@babel/plugin-transform-typescript": "^8.0.1",
75
- "@babel/preset-env": "^8.0.2",
73
+ "@babel/plugin-transform-class-static-block": "^8.0.5",
74
+ "@babel/plugin-transform-typescript": "^8.0.6",
75
+ "@babel/preset-env": "^8.0.6",
76
76
  "@swc/core": "^1.16.2",
77
77
  "@types/babel__core": "^7.20.5",
78
- "@types/node": "^26.4.1",
78
+ "@types/node": "^26.6.2",
79
79
  "@typescript/typescript6": "^6.0.2",
80
- "@vitest/coverage-v8": "^5.0.0",
80
+ "@vitest/coverage-v8": "^5.0.1",
81
81
  "expect-type": "^1.4.0",
82
82
  "mobx-v4": "npm:mobx@^4.15.7",
83
83
  "mobx-v5": "npm:mobx@^5.15.7",
@@ -86,10 +86,12 @@
86
86
  "shx": "^0.4.0",
87
87
  "ts-node": "^10.9.2",
88
88
  "typedoc": "^0.28.20",
89
+ "typedoc-docusaurus-theme": "^1.4.3",
90
+ "typedoc-plugin-markdown": "^4.13.1",
89
91
  "typescript": "^7.0.2",
90
- "vite": "^8.2.2",
91
- "vite-plugin-dts": "^5.1.0",
92
- "vitest": "^5.0.0"
92
+ "vite": "^8.3.1",
93
+ "vite-plugin-dts": "^5.1.1",
94
+ "vitest": "^5.0.1"
93
95
  },
94
96
  "dependencies": {
95
97
  "fast-deep-equal": "^3.1.3",