@mikro-orm/core 7.0.0-dev.194 → 7.0.0-dev.195
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/errors.js +1 -1
- package/package.json +1 -1
- package/typings.d.ts +56 -16
- package/utils/Utils.js +1 -1
package/errors.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "7.0.0-dev.
|
|
4
|
+
"version": "7.0.0-dev.195",
|
|
5
5
|
"description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./package.json": "./package.json",
|
package/typings.d.ts
CHANGED
|
@@ -65,6 +65,31 @@ type CollectionShape<T = any> = {
|
|
|
65
65
|
type LoadedCollectionShape<T = any> = CollectionShape<T> & {
|
|
66
66
|
$: any;
|
|
67
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Structural type for matching Reference without triggering full class evaluation.
|
|
70
|
+
* Using `T extends ReferenceShape` instead of `T extends Reference<any>` avoids
|
|
71
|
+
* forcing TypeScript to evaluate Reference's methods, preventing instantiation overhead
|
|
72
|
+
* (~800 → ~15 instantiations).
|
|
73
|
+
*
|
|
74
|
+
* Usage:
|
|
75
|
+
* - Matching only: `T extends ReferenceShape`
|
|
76
|
+
* - With inference: `T extends ReferenceShape<infer U>`
|
|
77
|
+
*/
|
|
78
|
+
type ReferenceShape<T = any> = {
|
|
79
|
+
unwrap(): T;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Structural type for matching LoadedReference (Reference with `$` property).
|
|
83
|
+
*/
|
|
84
|
+
type LoadedReferenceShape<T = any> = ReferenceShape<T> & {
|
|
85
|
+
$: T;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Structural type for matching any loadable relation (Collection, Reference, or array).
|
|
89
|
+
* Using this instead of `Loadable<any>` in conditional type checks prevents
|
|
90
|
+
* TypeScript from evaluating the full Collection/Reference interfaces.
|
|
91
|
+
*/
|
|
92
|
+
type LoadableShape = CollectionShape | ReferenceShape | readonly any[];
|
|
68
93
|
export type UnionKeys<T> = T extends any ? keyof T : never;
|
|
69
94
|
export type UnionPropertyType<T, K extends PropertyKey> = T extends any ? K extends keyof T ? T[K] : never : never;
|
|
70
95
|
export type MergeUnion<T> = [T] extends [object] ? T extends Scalar ? T : {
|
|
@@ -111,7 +136,16 @@ export type CleanTypeConfig<T> = Compute<Pick<T, Extract<keyof T, keyof TypeConf
|
|
|
111
136
|
export interface TypeConfig {
|
|
112
137
|
forceObject?: boolean;
|
|
113
138
|
}
|
|
114
|
-
|
|
139
|
+
declare const __selectedType: unique symbol;
|
|
140
|
+
declare const __loadedType: unique symbol;
|
|
141
|
+
declare const __loadHint: unique symbol;
|
|
142
|
+
/**
|
|
143
|
+
* Expands a populate hint into all its prefixes.
|
|
144
|
+
* e.g., Prefixes<'a.b.c'> = 'a' | 'a.b' | 'a.b.c'
|
|
145
|
+
* This reflects that loading 'a.b.c' means 'a' and 'a.b' are also loaded.
|
|
146
|
+
*/
|
|
147
|
+
type Prefixes<S extends string> = S extends `${infer H}.${infer T}` ? H | `${H}.${Prefixes<T>}` : S;
|
|
148
|
+
export type UnwrapPrimary<T> = T extends Scalar ? T : T extends ReferenceShape<infer U> ? Primary<U> : Primary<T>;
|
|
115
149
|
type PrimaryPropToType<T, Keys extends (keyof T)[]> = {
|
|
116
150
|
[Index in keyof Keys]: UnwrapPrimary<T[Keys[Index]]>;
|
|
117
151
|
};
|
|
@@ -186,7 +220,7 @@ export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T
|
|
|
186
220
|
type FilterObjectProp<T, K extends PropertyKey> = K extends keyof MergeUnion<T> ? MergeUnion<T>[K] : K extends keyof T ? T[K] : never;
|
|
187
221
|
type ExpandQueryMerged<T> = [T] extends [object] ? [T] extends [Scalar] ? never : FilterQuery<MergeUnion<T>> : FilterValue<T>;
|
|
188
222
|
export type FilterObject<T> = {
|
|
189
|
-
-readonly [K in EntityKey<T>
|
|
223
|
+
-readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<FilterObjectProp<T, K>>> | ExpandQueryMerged<ExpandProperty<FilterObjectProp<T, K>>> | FilterValue<ExpandProperty<FilterObjectProp<T, K>>> | null;
|
|
190
224
|
};
|
|
191
225
|
export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
|
|
192
226
|
export type EntityProps<T> = {
|
|
@@ -269,11 +303,11 @@ type NonArrayObject = object & {
|
|
|
269
303
|
export type EntityDataProp<T, C extends boolean> = T extends Date ? string | Date : T extends Scalar ? T : T extends {
|
|
270
304
|
__runtime?: infer Runtime;
|
|
271
305
|
__raw?: infer Raw;
|
|
272
|
-
} ? (C extends true ? Raw : Runtime) : T extends
|
|
306
|
+
} ? (C extends true ? Raw : Runtime) : T extends ReferenceShape<infer U> ? EntityDataNested<U, C> : T extends ScalarReference<infer U> ? EntityDataProp<U, C> : T extends CollectionShape<infer U> ? U | U[] | EntityDataNested<U & object, C> | EntityDataNested<U & object, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : U[] | EntityDataNested<U, C>[] : EntityDataNested<T, C>;
|
|
273
307
|
export type RequiredEntityDataProp<T, O, C extends boolean> = T extends Date ? string | Date : Exclude<T, null> extends RequiredNullable.Brand ? T | null : T extends Scalar ? T : T extends {
|
|
274
308
|
__runtime?: infer Runtime;
|
|
275
309
|
__raw?: infer Raw;
|
|
276
|
-
} ? (C extends true ? Raw : Runtime) : T extends
|
|
310
|
+
} ? (C extends true ? Raw : Runtime) : T extends ReferenceShape<infer U> ? RequiredEntityDataNested<U, O, C> : T extends ScalarReference<infer U> ? RequiredEntityDataProp<U, O, C> : T extends CollectionShape<infer U> ? U | U[] | RequiredEntityDataNested<U & object, O, C> | RequiredEntityDataNested<U & object, O, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | RequiredEntityDataNested<U, O, C> | RequiredEntityDataNested<U, O, C>[] : U[] | RequiredEntityDataNested<U, O, C>[] : RequiredEntityDataNested<T, O, C>;
|
|
277
311
|
export type EntityDataNested<T, C extends boolean = false> = T extends undefined ? never : T extends any[] ? Readonly<T> : EntityData<T, C> | ExpandEntityProp<T, C>;
|
|
278
312
|
type EntityDataItem<T, C extends boolean> = C extends false ? T | EntityDataProp<T, C> | null : EntityDataProp<T, C> | null;
|
|
279
313
|
export type RequiredEntityDataNested<T, O, C extends boolean> = T extends any[] ? Readonly<T> : RequiredEntityData<T, O> | ExpandRequiredEntityProp<T, O, C>;
|
|
@@ -335,9 +369,12 @@ type PrimaryOrObject<T, U, C extends TypeConfig> = PreferExplicitConfig<C, Extra
|
|
|
335
369
|
} : Primary<U>;
|
|
336
370
|
export type EntityDTOProp<E, T, C extends TypeConfig = never> = T extends Scalar ? T : T extends {
|
|
337
371
|
__serialized?: infer U;
|
|
338
|
-
} ? (IsUnknown<U> extends false ? U : T) : T extends
|
|
339
|
-
type
|
|
340
|
-
|
|
372
|
+
} ? (IsUnknown<U> extends false ? U : T) : T extends LoadedReferenceShape<infer U> ? EntityDTO<U, C> : T extends ReferenceShape<infer U> ? PrimaryOrObject<E, U, C> : T extends ScalarReference<infer U> ? U : T extends LoadedCollectionShape<infer U> ? EntityDTO<U & object, C>[] : T extends CollectionShape<infer U> ? PrimaryOrObject<E, U & object, C>[] : T extends readonly (infer U)[] ? U extends Scalar ? T : EntityDTOProp<E, U, C>[] : T extends Relation<T> ? EntityDTO<T, C> : T;
|
|
373
|
+
type UnwrapLoadedEntity<T> = T extends {
|
|
374
|
+
[__loadedType]?: infer U;
|
|
375
|
+
} ? NonNullable<U> : T;
|
|
376
|
+
type DTOProbablyOptionalProps<T> = NonNullable<NullableKeys<UnwrapLoadedEntity<T>, undefined>>;
|
|
377
|
+
type DTOIsOptional<T, K extends keyof T> = T[K] extends LoadedCollectionShape ? false : K extends PrimaryProperty<UnwrapLoadedEntity<T>> ? false : K extends DTOProbablyOptionalProps<T> ? true : false;
|
|
341
378
|
type DTORequiredKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? ExcludeHidden<T, K> & CleanKeys<T, K> : never;
|
|
342
379
|
type DTOOptionalKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? never : ExcludeHidden<T, K> & CleanKeys<T, K>;
|
|
343
380
|
export type EntityDTO<T, C extends TypeConfig = never> = {
|
|
@@ -793,33 +830,34 @@ export type PopulateOptions<T> = {
|
|
|
793
830
|
/** When true, ignores `mapToPk` on the property and returns full entity data instead of just PKs. */
|
|
794
831
|
dataOnly?: boolean;
|
|
795
832
|
};
|
|
796
|
-
type
|
|
797
|
-
type ExtractType<T> = T extends CollectionShape<infer U> ? U : T extends Reference<infer U> ? U : T extends Ref<infer U> ? U : T extends readonly (infer U)[] ? U : T;
|
|
833
|
+
type ExtractType<T> = T extends CollectionShape<infer U> ? U : T extends ReferenceShape<infer U> ? U : T extends Ref<infer U> ? U : T extends readonly (infer U)[] ? U : T;
|
|
798
834
|
type ExtractStringKeys<T> = {
|
|
799
835
|
[K in keyof T]-?: CleanKeys<T, K>;
|
|
800
836
|
}[keyof T] & {};
|
|
801
|
-
|
|
837
|
+
/**
|
|
838
|
+
* Extracts string keys from an entity type, handling Collection/Reference wrappers.
|
|
839
|
+
* Simplified to just check `T extends object` since ExtractType handles the unwrapping.
|
|
840
|
+
*/
|
|
841
|
+
type StringKeys<T, E extends string = never> = T extends object ? ExtractStringKeys<ExtractType<T>> | E : never;
|
|
802
842
|
type GetStringKey<T, K extends StringKeys<T, string>, E extends string> = K extends keyof T ? ExtractType<T[K]> : (K extends E ? keyof T : never);
|
|
803
843
|
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
804
844
|
type CollectionKeys<T> = T extends object ? {
|
|
805
845
|
[K in keyof T]-?: T[K] extends CollectionShape ? IsAny<T[K]> extends true ? never : K & string : never;
|
|
806
846
|
}[keyof T] & {} : never;
|
|
807
|
-
export type AutoPath<O, P extends string | boolean, E extends string = never, D extends Prev[number] = 9> = P extends boolean ? P : [D] extends [never] ? never : P extends any ? P extends string ?
|
|
847
|
+
export type AutoPath<O, P extends string | boolean, E extends string = never, D extends Prev[number] = 9> = P extends boolean ? P : [D] extends [never] ? never : P extends any ? P extends string ? P extends `${infer A}.${infer B}` ? A extends StringKeys<O, E> ? `${A}.${AutoPath<NonNullable<GetStringKey<O, A, E>>, B, E, Prev[D]>}` : never : P extends StringKeys<O, E> ? (NonNullable<GetStringKey<O, P & StringKeys<O, E>, E>> extends unknown ? Exclude<P, `${string}.`> : never) | (StringKeys<NonNullable<GetStringKey<O, P & StringKeys<O, E>, E>>, E> extends never ? never : `${P & string}.`) : StringKeys<O, E> | `${CollectionKeys<O>}:ref` : never : never;
|
|
808
848
|
export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
|
|
809
849
|
export type ArrayElement<ArrayType extends unknown[]> = ArrayType extends (infer ElementType)[] ? ElementType : never;
|
|
810
|
-
export type ExpandProperty<T> = T extends
|
|
811
|
-
type LoadedLoadable<T, E extends object> = T extends CollectionShape ? LoadedCollection<E> : T extends
|
|
850
|
+
export type ExpandProperty<T> = T extends ReferenceShape<infer U> ? NonNullable<U> : T extends CollectionShape<infer U> ? NonNullable<U> : T extends (infer U)[] ? NonNullable<U> : NonNullable<T>;
|
|
851
|
+
type LoadedLoadable<T, E extends object> = T extends CollectionShape ? LoadedCollection<E> : T extends ScalarReference<infer U> ? LoadedScalarReference<U> : T extends ReferenceShape ? T & LoadedReference<E> : T extends Scalar ? T : T extends (infer U)[] ? U extends Scalar ? T : E[] : E;
|
|
812
852
|
type IsTrue<T> = IsNever<T> extends true ? false : T extends boolean ? T extends true ? true : false : false;
|
|
813
853
|
type StringLiteral<T> = T extends string ? string extends T ? never : T : never;
|
|
814
854
|
type Prefix<T, K> = K extends `${infer S}.${string}` ? S : (K extends '*' ? keyof T : K);
|
|
815
855
|
type IsPrefixedExclude<T, K extends keyof T, E extends string> = K extends E ? never : K;
|
|
816
|
-
export type IsPrefixed<T, K extends keyof T, L extends string, E extends string = never> = IsNever<E> extends false ? IsPrefixedExclude<T, K, E> : K extends symbol ? never : IsTrue<L> extends true ? (T[K] & {} extends
|
|
856
|
+
export type IsPrefixed<T, K extends keyof T, L extends string, E extends string = never> = IsNever<E> extends false ? IsPrefixedExclude<T, K, E> : K extends symbol ? never : IsTrue<L> extends true ? (T[K] & {} extends LoadableShape ? K : never) : IsNever<StringLiteral<L>> extends true ? never : L extends '*' ? K : K extends Prefix<T, L> ? K : K extends PrimaryProperty<T> ? K : never;
|
|
817
857
|
type Suffix<Key, Hint extends string, All = true | '*'> = Hint extends `${infer Pref}.${infer Suf}` ? (Pref extends Key ? Suf : never) : Hint extends All ? Hint : never;
|
|
818
858
|
export type IsSubset<T, U> = keyof U extends keyof T ? {} : string extends keyof U ? {} : {
|
|
819
859
|
[K in keyof U as K extends keyof T ? never : CleanKeys<U, K>]: never;
|
|
820
860
|
};
|
|
821
|
-
declare const __selectedType: unique symbol;
|
|
822
|
-
declare const __loadedType: unique symbol;
|
|
823
861
|
/**
|
|
824
862
|
* Fast check if T is a Loaded type by looking for the marker symbol.
|
|
825
863
|
* This is much cheaper than matching against the full Loaded structure.
|
|
@@ -867,9 +905,11 @@ type LoadedInternal<T, L extends string = never, F extends string = '*', E exten
|
|
|
867
905
|
} : Selected<T, L, F>;
|
|
868
906
|
/**
|
|
869
907
|
* Represents entity with its loaded relations (`populate` hint) and selected properties (`fields` hint).
|
|
908
|
+
* The __loadHint marker uses contravariance to ensure Loaded<A, 'b'> is NOT assignable to Loaded<A, 'b.c'>.
|
|
870
909
|
*/
|
|
871
910
|
export type Loaded<T, L extends string = never, F extends string = '*', E extends string = never> = LoadedInternal<T, L, F, E> & {
|
|
872
911
|
[__loadedType]?: T;
|
|
912
|
+
[__loadHint]?: (hint: Prefixes<L>) => void;
|
|
873
913
|
};
|
|
874
914
|
export interface LoadedReference<T> extends Reference<NonNullable<T>> {
|
|
875
915
|
$: NonNullable<T>;
|
package/utils/Utils.js
CHANGED
|
@@ -123,7 +123,7 @@ export function parseJsonSafe(value) {
|
|
|
123
123
|
}
|
|
124
124
|
export class Utils {
|
|
125
125
|
static PK_SEPARATOR = '~~~';
|
|
126
|
-
static #ORM_VERSION = '7.0.0-dev.
|
|
126
|
+
static #ORM_VERSION = '7.0.0-dev.195';
|
|
127
127
|
/**
|
|
128
128
|
* Checks if the argument is instance of `Object`. Returns false for arrays.
|
|
129
129
|
*/
|