@mikro-orm/core 7.0.0-dev.16 → 7.0.0-dev.161

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 (211) hide show
  1. package/EntityManager.d.ts +99 -57
  2. package/EntityManager.js +292 -262
  3. package/MikroORM.d.ts +44 -35
  4. package/MikroORM.js +103 -143
  5. package/README.md +3 -2
  6. package/cache/FileCacheAdapter.d.ts +1 -1
  7. package/cache/FileCacheAdapter.js +8 -7
  8. package/cache/GeneratedCacheAdapter.d.ts +0 -1
  9. package/cache/GeneratedCacheAdapter.js +0 -2
  10. package/cache/index.d.ts +0 -1
  11. package/cache/index.js +0 -1
  12. package/connections/Connection.d.ts +16 -7
  13. package/connections/Connection.js +23 -14
  14. package/drivers/DatabaseDriver.d.ts +25 -16
  15. package/drivers/DatabaseDriver.js +80 -35
  16. package/drivers/IDatabaseDriver.d.ts +43 -17
  17. package/entity/BaseEntity.d.ts +2 -2
  18. package/entity/BaseEntity.js +0 -3
  19. package/entity/Collection.d.ts +94 -29
  20. package/entity/Collection.js +434 -97
  21. package/entity/EntityAssigner.d.ts +1 -1
  22. package/entity/EntityAssigner.js +26 -18
  23. package/entity/EntityFactory.d.ts +13 -1
  24. package/entity/EntityFactory.js +84 -53
  25. package/entity/EntityHelper.d.ts +2 -2
  26. package/entity/EntityHelper.js +35 -15
  27. package/entity/EntityLoader.d.ts +6 -6
  28. package/entity/EntityLoader.js +109 -72
  29. package/entity/EntityRepository.d.ts +24 -4
  30. package/entity/EntityRepository.js +8 -2
  31. package/entity/Reference.d.ts +6 -5
  32. package/entity/Reference.js +34 -9
  33. package/entity/WrappedEntity.d.ts +2 -7
  34. package/entity/WrappedEntity.js +3 -8
  35. package/entity/defineEntity.d.ts +580 -0
  36. package/entity/defineEntity.js +533 -0
  37. package/entity/index.d.ts +3 -2
  38. package/entity/index.js +3 -2
  39. package/entity/utils.d.ts +7 -0
  40. package/entity/utils.js +16 -4
  41. package/entity/validators.d.ts +11 -0
  42. package/entity/validators.js +65 -0
  43. package/enums.d.ts +21 -5
  44. package/enums.js +15 -1
  45. package/errors.d.ts +21 -9
  46. package/errors.js +53 -21
  47. package/events/EventManager.d.ts +2 -1
  48. package/events/EventManager.js +19 -11
  49. package/hydration/Hydrator.js +1 -2
  50. package/hydration/ObjectHydrator.d.ts +4 -4
  51. package/hydration/ObjectHydrator.js +52 -33
  52. package/index.d.ts +2 -2
  53. package/index.js +1 -2
  54. package/logging/DefaultLogger.d.ts +1 -1
  55. package/logging/DefaultLogger.js +1 -0
  56. package/logging/SimpleLogger.d.ts +1 -1
  57. package/logging/colors.d.ts +1 -1
  58. package/logging/colors.js +7 -6
  59. package/logging/index.d.ts +1 -0
  60. package/logging/index.js +1 -0
  61. package/logging/inspect.d.ts +2 -0
  62. package/logging/inspect.js +11 -0
  63. package/metadata/EntitySchema.d.ts +18 -22
  64. package/metadata/EntitySchema.js +59 -34
  65. package/metadata/MetadataDiscovery.d.ts +6 -10
  66. package/metadata/MetadataDiscovery.js +348 -319
  67. package/metadata/MetadataProvider.d.ts +11 -2
  68. package/metadata/MetadataProvider.js +46 -2
  69. package/metadata/MetadataStorage.d.ts +13 -11
  70. package/metadata/MetadataStorage.js +70 -37
  71. package/metadata/MetadataValidator.d.ts +12 -9
  72. package/metadata/MetadataValidator.js +69 -38
  73. package/metadata/discover-entities.d.ts +5 -0
  74. package/metadata/discover-entities.js +40 -0
  75. package/metadata/index.d.ts +1 -1
  76. package/metadata/index.js +1 -1
  77. package/metadata/types.d.ts +484 -0
  78. package/metadata/types.js +1 -0
  79. package/naming-strategy/AbstractNamingStrategy.d.ts +8 -4
  80. package/naming-strategy/AbstractNamingStrategy.js +8 -2
  81. package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
  82. package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
  83. package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
  84. package/naming-strategy/MongoNamingStrategy.js +6 -6
  85. package/naming-strategy/NamingStrategy.d.ts +14 -4
  86. package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
  87. package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
  88. package/not-supported.d.ts +2 -0
  89. package/not-supported.js +4 -0
  90. package/package.json +18 -11
  91. package/platforms/ExceptionConverter.js +1 -1
  92. package/platforms/Platform.d.ts +6 -13
  93. package/platforms/Platform.js +17 -43
  94. package/serialization/EntitySerializer.d.ts +5 -0
  95. package/serialization/EntitySerializer.js +47 -27
  96. package/serialization/EntityTransformer.js +28 -18
  97. package/serialization/SerializationContext.d.ts +6 -6
  98. package/serialization/SerializationContext.js +16 -13
  99. package/types/ArrayType.d.ts +1 -1
  100. package/types/ArrayType.js +2 -3
  101. package/types/BigIntType.d.ts +8 -6
  102. package/types/BigIntType.js +1 -1
  103. package/types/BlobType.d.ts +0 -1
  104. package/types/BlobType.js +0 -3
  105. package/types/BooleanType.d.ts +2 -1
  106. package/types/BooleanType.js +3 -0
  107. package/types/DecimalType.d.ts +6 -4
  108. package/types/DecimalType.js +3 -3
  109. package/types/DoubleType.js +2 -2
  110. package/types/EnumArrayType.js +1 -2
  111. package/types/JsonType.d.ts +1 -1
  112. package/types/JsonType.js +7 -2
  113. package/types/TinyIntType.js +1 -1
  114. package/types/Type.d.ts +2 -4
  115. package/types/Type.js +3 -3
  116. package/types/Uint8ArrayType.d.ts +0 -1
  117. package/types/Uint8ArrayType.js +1 -4
  118. package/types/index.d.ts +1 -1
  119. package/typings.d.ts +174 -114
  120. package/typings.js +55 -42
  121. package/unit-of-work/ChangeSet.d.ts +2 -6
  122. package/unit-of-work/ChangeSet.js +4 -5
  123. package/unit-of-work/ChangeSetComputer.d.ts +1 -3
  124. package/unit-of-work/ChangeSetComputer.js +26 -13
  125. package/unit-of-work/ChangeSetPersister.d.ts +5 -4
  126. package/unit-of-work/ChangeSetPersister.js +70 -34
  127. package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
  128. package/unit-of-work/CommitOrderCalculator.js +13 -13
  129. package/unit-of-work/IdentityMap.d.ts +12 -0
  130. package/unit-of-work/IdentityMap.js +39 -1
  131. package/unit-of-work/UnitOfWork.d.ts +23 -3
  132. package/unit-of-work/UnitOfWork.js +175 -98
  133. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  134. package/utils/AbstractSchemaGenerator.js +18 -16
  135. package/utils/AsyncContext.d.ts +6 -0
  136. package/utils/AsyncContext.js +42 -0
  137. package/utils/Configuration.d.ts +754 -207
  138. package/utils/Configuration.js +146 -190
  139. package/utils/ConfigurationLoader.d.ts +1 -54
  140. package/utils/ConfigurationLoader.js +1 -352
  141. package/utils/Cursor.d.ts +0 -3
  142. package/utils/Cursor.js +27 -11
  143. package/utils/DataloaderUtils.d.ts +15 -5
  144. package/utils/DataloaderUtils.js +64 -30
  145. package/utils/EntityComparator.d.ts +13 -9
  146. package/utils/EntityComparator.js +101 -42
  147. package/utils/QueryHelper.d.ts +14 -6
  148. package/utils/QueryHelper.js +87 -25
  149. package/utils/RawQueryFragment.d.ts +48 -25
  150. package/utils/RawQueryFragment.js +66 -70
  151. package/utils/RequestContext.js +2 -2
  152. package/utils/TransactionContext.js +2 -2
  153. package/utils/TransactionManager.d.ts +65 -0
  154. package/utils/TransactionManager.js +223 -0
  155. package/utils/Utils.d.ts +13 -126
  156. package/utils/Utils.js +100 -391
  157. package/utils/clone.js +8 -23
  158. package/utils/env-vars.d.ts +7 -0
  159. package/utils/env-vars.js +97 -0
  160. package/utils/fs-utils.d.ts +32 -0
  161. package/utils/fs-utils.js +178 -0
  162. package/utils/index.d.ts +2 -1
  163. package/utils/index.js +2 -1
  164. package/utils/upsert-utils.d.ts +9 -4
  165. package/utils/upsert-utils.js +55 -4
  166. package/decorators/Check.d.ts +0 -3
  167. package/decorators/Check.js +0 -13
  168. package/decorators/CreateRequestContext.d.ts +0 -3
  169. package/decorators/CreateRequestContext.js +0 -32
  170. package/decorators/Embeddable.d.ts +0 -8
  171. package/decorators/Embeddable.js +0 -11
  172. package/decorators/Embedded.d.ts +0 -12
  173. package/decorators/Embedded.js +0 -18
  174. package/decorators/Entity.d.ts +0 -18
  175. package/decorators/Entity.js +0 -12
  176. package/decorators/Enum.d.ts +0 -9
  177. package/decorators/Enum.js +0 -16
  178. package/decorators/Filter.d.ts +0 -2
  179. package/decorators/Filter.js +0 -8
  180. package/decorators/Formula.d.ts +0 -4
  181. package/decorators/Formula.js +0 -15
  182. package/decorators/Indexed.d.ts +0 -19
  183. package/decorators/Indexed.js +0 -20
  184. package/decorators/ManyToMany.d.ts +0 -40
  185. package/decorators/ManyToMany.js +0 -14
  186. package/decorators/ManyToOne.d.ts +0 -32
  187. package/decorators/ManyToOne.js +0 -14
  188. package/decorators/OneToMany.d.ts +0 -28
  189. package/decorators/OneToMany.js +0 -17
  190. package/decorators/OneToOne.d.ts +0 -26
  191. package/decorators/OneToOne.js +0 -7
  192. package/decorators/PrimaryKey.d.ts +0 -8
  193. package/decorators/PrimaryKey.js +0 -20
  194. package/decorators/Property.d.ts +0 -250
  195. package/decorators/Property.js +0 -32
  196. package/decorators/Transactional.d.ts +0 -13
  197. package/decorators/Transactional.js +0 -28
  198. package/decorators/hooks.d.ts +0 -16
  199. package/decorators/hooks.js +0 -47
  200. package/decorators/index.d.ts +0 -17
  201. package/decorators/index.js +0 -17
  202. package/entity/ArrayCollection.d.ts +0 -116
  203. package/entity/ArrayCollection.js +0 -402
  204. package/entity/EntityValidator.d.ts +0 -19
  205. package/entity/EntityValidator.js +0 -150
  206. package/exports.d.ts +0 -24
  207. package/exports.js +0 -23
  208. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  209. package/metadata/ReflectMetadataProvider.js +0 -44
  210. package/utils/resolveContextProvider.d.ts +0 -10
  211. package/utils/resolveContextProvider.js +0 -28
package/typings.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Transaction } from './connections/Connection.js';
2
- import { type Cascade, type DeferMode, type EventType, type LoadStrategy, type PopulatePath, type QueryOrderMap, ReferenceKind } from './enums.js';
2
+ import { type Cascade, type DeferMode, type EmbeddedPrefixMode, type EventType, type LoadStrategy, type PopulatePath, type QueryOrderMap, ReferenceKind } from './enums.js';
3
3
  import { type AssignOptions } from './entity/EntityAssigner.js';
4
4
  import { type EntityIdentifier } from './entity/EntityIdentifier.js';
5
5
  import { type EntityLoaderOptions } from './entity/EntityLoader.js';
@@ -7,7 +7,6 @@ import { type Collection } from './entity/Collection.js';
7
7
  import { type EntityFactory } from './entity/EntityFactory.js';
8
8
  import { type EntityRepository } from './entity/EntityRepository.js';
9
9
  import { Reference, type ScalarReference } from './entity/Reference.js';
10
- import type { MikroORM } from './MikroORM.js';
11
10
  import type { SerializationContext } from './serialization/SerializationContext.js';
12
11
  import type { SerializeOptions } from './serialization/EntitySerializer.js';
13
12
  import type { MetadataStorage } from './metadata/MetadataStorage.js';
@@ -15,11 +14,10 @@ import type { EntitySchema } from './metadata/EntitySchema.js';
15
14
  import type { Type, types } from './types/index.js';
16
15
  import type { Platform } from './platforms/Platform.js';
17
16
  import type { Configuration } from './utils/Configuration.js';
18
- import type { RawQueryFragment } from './utils/RawQueryFragment.js';
17
+ import type { Raw } from './utils/RawQueryFragment.js';
19
18
  import type { EntityManager } from './EntityManager.js';
20
- import type { EmbeddedPrefixMode } from './decorators/Embedded.js';
21
19
  import type { EventSubscriber } from './events/EventSubscriber.js';
22
- import type { FindOneOptions, FindOptions, LoadHint } from './drivers/IDatabaseDriver.js';
20
+ import type { FilterOptions, FindOneOptions, FindOptions, LoadHint } from './drivers/IDatabaseDriver.js';
23
21
  export type Constructor<T = unknown> = new (...args: any[]) => T;
24
22
  export type Dictionary<T = any> = {
25
23
  [k: string]: T;
@@ -52,18 +50,34 @@ export declare const OptionalProps: unique symbol;
52
50
  export declare const EagerProps: unique symbol;
53
51
  export declare const HiddenProps: unique symbol;
54
52
  export declare const Config: unique symbol;
55
- declare const __optional: unique symbol;
56
- declare const __hidden: unique symbol;
57
- declare const __config: unique symbol;
58
- export type Opt<T = unknown> = T & {
59
- [__optional]?: 1;
60
- };
61
- export type Hidden<T = unknown> = T & {
62
- [__hidden]?: 1;
63
- };
64
- export type DefineConfig<T extends TypeConfig> = T & {
65
- [__config]?: 1;
66
- };
53
+ export type Opt<T = unknown> = T & Opt.Brand;
54
+ export declare namespace Opt {
55
+ const __optional: unique symbol;
56
+ interface Brand {
57
+ [__optional]?: 1;
58
+ }
59
+ }
60
+ export type RequiredNullable<T = never> = (T & RequiredNullable.Brand) | null;
61
+ export declare namespace RequiredNullable {
62
+ const __requiredNullable: unique symbol;
63
+ interface Brand {
64
+ [__requiredNullable]?: 1;
65
+ }
66
+ }
67
+ export type Hidden<T = unknown> = T & Hidden.Brand;
68
+ export declare namespace Hidden {
69
+ const __hidden: unique symbol;
70
+ interface Brand {
71
+ [__hidden]?: 1;
72
+ }
73
+ }
74
+ export type DefineConfig<T extends TypeConfig> = T & DefineConfig.Brand;
75
+ export declare namespace DefineConfig {
76
+ const __config: unique symbol;
77
+ interface Brand {
78
+ [__config]?: 1;
79
+ }
80
+ }
67
81
  export type CleanTypeConfig<T> = Compute<Pick<T, Extract<keyof T, keyof TypeConfig>>>;
68
82
  export interface TypeConfig {
69
83
  forceObject?: boolean;
@@ -75,13 +89,14 @@ type PrimaryPropToType<T, Keys extends (keyof T)[]> = {
75
89
  type ReadonlyPrimary<T> = T extends any[] ? Readonly<T> : T;
76
90
  export type Primary<T> = IsAny<T> extends true ? any : T extends {
77
91
  [PrimaryKeyProp]?: infer PK;
78
- } ? (PK extends keyof T ? ReadonlyPrimary<UnwrapPrimary<T[PK]>> : (PK extends (keyof T)[] ? ReadonlyPrimary<PrimaryPropToType<T, PK>> : PK)) : T extends {
92
+ } ? PK extends undefined ? Omit<T, typeof PrimaryKeyProp> : PK extends keyof T ? ReadonlyPrimary<UnwrapPrimary<T[PK]>> : PK extends (keyof T)[] ? ReadonlyPrimary<PrimaryPropToType<T, PK>> : PK : T extends {
79
93
  _id?: infer PK;
80
94
  } ? ReadonlyPrimary<PK> | string : T extends {
81
- uuid?: infer PK;
82
- } ? ReadonlyPrimary<PK> : T extends {
83
95
  id?: infer PK;
96
+ } ? ReadonlyPrimary<PK> : T extends {
97
+ uuid?: infer PK;
84
98
  } ? ReadonlyPrimary<PK> : T;
99
+ /** @internal */
85
100
  export type PrimaryProperty<T> = T extends {
86
101
  [PrimaryKeyProp]?: infer PK;
87
102
  } ? (PK extends keyof T ? PK : (PK extends any[] ? PK[number] : never)) : T extends {
@@ -89,10 +104,10 @@ export type PrimaryProperty<T> = T extends {
89
104
  } ? (T extends {
90
105
  id?: any;
91
106
  } ? 'id' | '_id' : '_id') : T extends {
92
- uuid?: any;
93
- } ? 'uuid' : T extends {
94
107
  id?: any;
95
- } ? 'id' : never;
108
+ } ? 'id' : T extends {
109
+ uuid?: any;
110
+ } ? 'uuid' : never;
96
111
  export type IPrimaryKeyValue = number | string | bigint | Date | {
97
112
  toHexString(): string;
98
113
  };
@@ -100,6 +115,7 @@ export type IPrimaryKey<T extends IPrimaryKeyValue = IPrimaryKeyValue> = T;
100
115
  export type Scalar = boolean | number | string | bigint | symbol | Date | RegExp | Uint8Array | {
101
116
  toHexString(): string;
102
117
  };
118
+ type Primitive = boolean | number | string | bigint | symbol;
103
119
  export type ExpandScalar<T> = null | (T extends string ? T | RegExp : T extends Date ? Date | string : T extends bigint ? bigint | string | number : T);
104
120
  export type OperatorMap<T> = {
105
121
  $and?: ExpandQuery<T>[];
@@ -112,6 +128,14 @@ export type OperatorMap<T> = {
112
128
  $none?: ExpandQuery<T>;
113
129
  $some?: ExpandQuery<T>;
114
130
  $every?: ExpandQuery<T>;
131
+ $size?: number | {
132
+ $eq?: number;
133
+ $ne?: number;
134
+ $gt?: number;
135
+ $gte?: number;
136
+ $lt?: number;
137
+ $lte?: number;
138
+ };
115
139
  $gt?: ExpandScalar<T>;
116
140
  $gte?: ExpandScalar<T>;
117
141
  $lt?: ExpandScalar<T>;
@@ -133,7 +157,6 @@ export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T
133
157
  export type FilterObject<T> = {
134
158
  -readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<T[K]>> | FilterValue<ExpandProperty<T[K]>> | null;
135
159
  };
136
- export type ExpandObject<T> = T extends object ? T extends Scalar ? never : FilterObject<T> : never;
137
160
  export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
138
161
  export type EntityProps<T> = {
139
162
  -readonly [K in EntityKey<T>]?: T[K];
@@ -143,10 +166,9 @@ export type FilterQuery<T> = ObjectQuery<T> | NonNullable<ExpandScalar<Primary<T
143
166
  export type QBFilterQuery<T = any> = ObjectQuery<T> | Dictionary;
144
167
  export interface IWrappedEntity<Entity extends object> {
145
168
  isInitialized(): boolean;
146
- isTouched(): boolean;
147
169
  isManaged(): boolean;
148
170
  populated(populated?: boolean): void;
149
- populate<Hint extends string = never>(populate: AutoPath<Entity, Hint>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
171
+ populate<Hint extends string = never>(populate: readonly AutoPath<Entity, Hint, PopulatePath.ALL>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
150
172
  init<Hint extends string = never, Fields extends string = '*', Exclude extends string = never>(options?: FindOneOptions<Entity, Hint, Fields, Exclude>): Promise<Loaded<Entity, Hint, Fields, Exclude> | null>;
151
173
  toReference(): Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>>;
152
174
  toObject(): EntityDTO<Entity>;
@@ -174,7 +196,6 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
174
196
  __factory: EntityFactory;
175
197
  __hydrator: IHydrator;
176
198
  __initialized: boolean;
177
- __touched: boolean;
178
199
  __originalEntityData?: EntityData<Entity>;
179
200
  __loadedProperties: Set<string>;
180
201
  __identifier?: EntityIdentifier | EntityIdentifier[];
@@ -194,16 +215,10 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
194
215
  };
195
216
  }
196
217
  export type AnyEntity<T = any> = Partial<T>;
197
- export type EntityClass<T> = Function & {
218
+ export type EntityClass<T = any> = Function & {
198
219
  prototype: T;
199
220
  };
200
- export type EntityClassGroup<T> = {
201
- entity: EntityClass<T>;
202
- schema: EntityMetadata<T> | EntitySchema<T>;
203
- };
204
- export type EntityName<T> = string | EntityClass<T> | EntitySchema<T, any> | {
205
- name: string;
206
- };
221
+ export type EntityName<T = any> = EntityClass<T> | EntityCtor<T> | EntitySchema<T, any>;
207
222
  export type GetRepository<Entity extends {
208
223
  [k: PropertyKey]: any;
209
224
  }, Fallback> = Entity[typeof EntityRepositoryType] extends EntityRepository<any> | undefined ? NonNullable<Entity[typeof EntityRepositoryType]> : Fallback;
@@ -224,7 +239,7 @@ export type EntityDataProp<T, C extends boolean> = T extends Date ? string | Dat
224
239
  __runtime?: infer Runtime;
225
240
  __raw?: infer Raw;
226
241
  } ? (C extends true ? Raw : Runtime) : T extends Reference<infer U> ? EntityDataNested<U, C> : T extends ScalarReference<infer U> ? EntityDataProp<U, C> : T extends Collection<infer U, any> ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : U[] | EntityDataNested<U, C>[] : EntityDataNested<T, C>;
227
- export type RequiredEntityDataProp<T, O, C extends boolean> = T extends Date ? string | Date : T extends Scalar ? T : T extends {
242
+ 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 {
228
243
  __runtime?: infer Runtime;
229
244
  __raw?: infer Raw;
230
245
  } ? (C extends true ? Raw : Runtime) : T extends Reference<infer U> ? RequiredEntityDataNested<U, O, C> : T extends ScalarReference<infer U> ? RequiredEntityDataProp<U, O, C> : T extends Collection<infer U, any> ? U | U[] | RequiredEntityDataNested<U, O, C> | RequiredEntityDataNested<U, 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>;
@@ -239,7 +254,10 @@ type ExplicitlyOptionalProps<T> = (T extends {
239
254
  type NullableKeys<T, V = null> = {
240
255
  [K in keyof T]: V extends T[K] ? K : never;
241
256
  }[keyof T];
242
- type ProbablyOptionalProps<T> = PrimaryProperty<T> | ExplicitlyOptionalProps<T> | NonNullable<NullableKeys<T, null | undefined>>;
257
+ type RequiredNullableKeys<T> = {
258
+ [K in keyof T]: Exclude<T[K], null> extends RequiredNullable.Brand ? K : never;
259
+ }[keyof T];
260
+ type ProbablyOptionalProps<T> = PrimaryProperty<T> | ExplicitlyOptionalProps<T> | Exclude<NonNullable<NullableKeys<T, null | undefined>>, RequiredNullableKeys<T>>;
243
261
  type IsOptional<T, K extends keyof T, I> = T[K] extends Collection<any, any> ? true : ExtractType<T[K]> extends I ? true : K extends ProbablyOptionalProps<T> ? true : false;
244
262
  type RequiredKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? CleanKeys<T, K> : never;
245
263
  type OptionalKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? never : CleanKeys<T, K>;
@@ -274,7 +292,7 @@ export type Ref<T> = T extends any ? IsAny<T> extends true ? Reference<T & objec
274
292
  type ExtractHiddenProps<T> = (T extends {
275
293
  [HiddenProps]?: infer K;
276
294
  } ? K : never) | ({
277
- [K in keyof T]: T[K] extends Hidden ? K : never;
295
+ [K in keyof T]: T[K] extends Primitive ? (T[K] extends Hidden ? K : never) : never;
278
296
  }[keyof T] & {});
279
297
  type ExcludeHidden<T, K extends keyof T> = K extends ExtractHiddenProps<T> ? never : K;
280
298
  type ExtractConfig<T> = T extends {
@@ -297,8 +315,22 @@ export type EntityDTO<T, C extends TypeConfig = never> = {
297
315
  [K in keyof T as DTOOptionalKeys<T, K>]?: EntityDTOProp<T, T[K], C> | AddOptional<T[K]>;
298
316
  };
299
317
  type TargetKeys<T> = T extends EntityClass<infer P> ? keyof P : keyof T;
300
- type CheckKey<T> = IsUnknown<T> extends false ? TargetKeys<T> : string;
301
- export type CheckCallback<T> = (columns: Record<CheckKey<T>, string>) => string;
318
+ type PropertyName<T> = IsUnknown<T> extends false ? TargetKeys<T> : string;
319
+ type TableName = {
320
+ name: string;
321
+ schema?: string;
322
+ toString: () => string;
323
+ };
324
+ export type FormulaTable = {
325
+ alias: string;
326
+ name: string;
327
+ schema?: string;
328
+ qualifiedName: string;
329
+ toString: () => string;
330
+ };
331
+ export type IndexCallback<T> = (table: TableName, columns: Record<PropertyName<T>, string>, indexName: string) => string | Raw;
332
+ export type FormulaCallback<T> = (table: FormulaTable, columns: Record<PropertyName<T>, string>) => string;
333
+ export type CheckCallback<T> = (columns: Record<PropertyName<T>, string>) => string;
302
334
  export type GeneratedColumnCallback<T> = (columns: Record<keyof T, string>) => string;
303
335
  export interface CheckConstraint<T = any> {
304
336
  name?: string;
@@ -309,6 +341,7 @@ export type AnyString = string & {};
309
341
  export interface EntityProperty<Owner = any, Target = any> {
310
342
  name: EntityKey<Owner>;
311
343
  entity: () => EntityName<Owner>;
344
+ target: EntityClass<Target>;
312
345
  type: keyof typeof types | AnyString;
313
346
  runtimeType: 'number' | 'string' | 'boolean' | 'bigint' | 'Buffer' | 'Date' | 'object' | 'any' | AnyString;
314
347
  targetMeta?: EntityMetadata<Target>;
@@ -334,7 +367,8 @@ export interface EntityProperty<Owner = any, Target = any> {
334
367
  fieldNameRaw?: string;
335
368
  default?: string | number | boolean | null;
336
369
  defaultRaw?: string;
337
- formula?: (alias: string) => string;
370
+ formula?: FormulaCallback<Owner>;
371
+ filters?: FilterOptions;
338
372
  prefix?: string | boolean;
339
373
  prefixMode?: EmbeddedPrefixMode;
340
374
  embedded?: [EntityKey<Owner>, EntityKey<Owner>];
@@ -347,11 +381,13 @@ export interface EntityProperty<Owner = any, Target = any> {
347
381
  unique?: boolean | string;
348
382
  nullable?: boolean;
349
383
  inherited?: boolean;
384
+ renamedFrom?: string;
385
+ stiFieldNames?: string[];
386
+ stiFieldNameMap?: Dictionary<string>;
350
387
  unsigned?: boolean;
351
388
  mapToPk?: boolean;
352
389
  persist?: boolean;
353
390
  hydrate?: boolean;
354
- trackChanges?: boolean;
355
391
  hidden?: boolean;
356
392
  enum?: boolean;
357
393
  items?: (number | string)[];
@@ -362,6 +398,7 @@ export interface EntityProperty<Owner = any, Target = any> {
362
398
  setter?: boolean;
363
399
  getter?: boolean;
364
400
  getterName?: keyof Owner;
401
+ accessor?: EntityKey<Owner>;
365
402
  cascade: Cascade[];
366
403
  orphanRemoval?: boolean;
367
404
  onCreate?: (entity: Owner, em: EntityManager) => any;
@@ -378,13 +415,14 @@ export interface EntityProperty<Owner = any, Target = any> {
378
415
  fixedOrder?: boolean;
379
416
  fixedOrderColumn?: string;
380
417
  pivotTable: string;
381
- pivotEntity: string;
418
+ pivotEntity: EntityClass<Target>;
382
419
  joinColumns: string[];
383
420
  ownColumns: string[];
384
421
  inverseJoinColumns: string[];
385
422
  referencedColumnNames: string[];
386
423
  referencedTableName: string;
387
424
  referencedPKs: EntityKey<Owner>[];
425
+ targetKey?: string;
388
426
  serializer?: (value: any, options?: SerializeOptions<any>) => any;
389
427
  serializedName?: string;
390
428
  comment?: string;
@@ -394,19 +432,22 @@ export interface EntityProperty<Owner = any, Target = any> {
394
432
  optional?: boolean;
395
433
  ignoreSchemaChanges?: ('type' | 'extra' | 'default')[];
396
434
  deferMode?: DeferMode;
435
+ createForeignKeyConstraint: boolean;
397
436
  foreignKeyName?: string;
398
437
  }
399
- export declare class EntityMetadata<T = any> {
438
+ export declare class EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
400
439
  private static counter;
401
440
  readonly _id: number;
402
441
  readonly propertyOrder: Map<string, number>;
403
442
  constructor(meta?: Partial<EntityMetadata>);
404
- addProperty(prop: Partial<EntityProperty<T>>, sync?: boolean): void;
443
+ addProperty(prop: Partial<EntityProperty<Entity>>): void;
405
444
  removeProperty(name: string, sync?: boolean): void;
406
- getPrimaryProps(): EntityProperty<T>[];
407
- getPrimaryProp(): EntityProperty<T>;
445
+ getPrimaryProps(flatten?: boolean): EntityProperty<Entity>[];
446
+ getPrimaryProp(): EntityProperty<Entity>;
447
+ createColumnMappingObject(): Record<PropertyName<Entity>, string>;
408
448
  get tableName(): string;
409
449
  set tableName(name: string);
450
+ get uniqueName(): string;
410
451
  sync(initIndexes?: boolean, config?: Configuration): void;
411
452
  private initIndexes;
412
453
  /** @internal */
@@ -416,67 +457,68 @@ export interface SimpleColumnMeta {
416
457
  name: string;
417
458
  type: string;
418
459
  }
419
- export interface EntityMetadata<T = any> {
460
+ export type EntityCtor<T = any> = abstract new (...args: any[]) => T;
461
+ export interface EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
420
462
  name?: string;
421
463
  className: string;
422
464
  tableName: string;
423
465
  schema?: string;
424
466
  pivotTable?: boolean;
425
467
  virtual?: boolean;
426
- expression?: string | ((em: any, where: ObjectQuery<T>, options: FindOptions<T, any, any, any>) => MaybePromise<RawQueryFragment | object | string>);
427
- discriminatorColumn?: EntityKey<T> | AnyString;
468
+ expression?: string | ((em: any, where: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any>, stream?: boolean) => MaybePromise<Raw | object | string>);
469
+ discriminatorColumn?: EntityKey<Entity> | AnyString;
428
470
  discriminatorValue?: number | string;
429
- discriminatorMap?: Dictionary<string>;
471
+ discriminatorMap?: Dictionary<EntityClass>;
430
472
  embeddable: boolean;
431
- constructorParams: EntityKey<T>[];
473
+ constructorParams?: (keyof Entity)[];
432
474
  forceConstructor: boolean;
433
- toJsonParams: string[];
434
- extends: string;
475
+ extends?: EntityName<Entity>;
435
476
  collection: string;
436
477
  path: string;
437
- primaryKeys: EntityKey<T>[];
478
+ primaryKeys: EntityKey<Entity>[];
438
479
  simplePK: boolean;
439
480
  compositePK: boolean;
440
- versionProperty: EntityKey<T>;
441
- concurrencyCheckKeys: Set<EntityKey<T>>;
442
- serializedPrimaryKey: EntityKey<T>;
481
+ versionProperty: EntityKey<Entity>;
482
+ concurrencyCheckKeys: Set<EntityKey<Entity>>;
483
+ serializedPrimaryKey?: EntityKey<Entity>;
443
484
  properties: {
444
- [K in EntityKey<T>]: EntityProperty<T>;
485
+ [K in EntityKey<Entity>]: EntityProperty<Entity>;
445
486
  };
446
- props: EntityProperty<T>[];
447
- relations: EntityProperty<T>[];
448
- bidirectionalRelations: EntityProperty<T>[];
487
+ props: EntityProperty<Entity>[];
488
+ relations: EntityProperty<Entity>[];
489
+ bidirectionalRelations: EntityProperty<Entity>[];
449
490
  referencingProperties: {
450
- meta: EntityMetadata<T>;
451
- prop: EntityProperty<T>;
491
+ meta: EntityMetadata<Entity>;
492
+ prop: EntityProperty<Entity>;
452
493
  }[];
453
- comparableProps: EntityProperty<T>[];
454
- trackingProps: EntityProperty<T>[];
455
- hydrateProps: EntityProperty<T>[];
456
- uniqueProps: EntityProperty<T>[];
457
- getterProps: EntityProperty<T>[];
494
+ comparableProps: EntityProperty<Entity>[];
495
+ trackingProps: EntityProperty<Entity>[];
496
+ hydrateProps: EntityProperty<Entity>[];
497
+ validateProps: EntityProperty<Entity>[];
498
+ uniqueProps: EntityProperty<Entity>[];
499
+ getterProps: EntityProperty<Entity>[];
458
500
  indexes: {
459
- properties: EntityKey<T> | EntityKey<T>[];
501
+ properties?: EntityKey<Entity> | EntityKey<Entity>[];
460
502
  name?: string;
461
503
  type?: string;
462
504
  options?: Dictionary;
463
- expression?: string;
505
+ expression?: string | IndexCallback<Entity>;
464
506
  }[];
465
507
  uniques: {
466
- properties: EntityKey<T> | EntityKey<T>[];
508
+ properties?: EntityKey<Entity> | EntityKey<Entity>[];
467
509
  name?: string;
468
510
  options?: Dictionary;
469
- expression?: string;
470
- deferMode?: DeferMode;
511
+ expression?: string | IndexCallback<Entity>;
512
+ deferMode?: DeferMode | `${DeferMode}`;
471
513
  }[];
472
- checks: CheckConstraint<T>[];
514
+ checks: CheckConstraint<Entity>[];
473
515
  repositoryClass?: string;
474
516
  repository: () => EntityClass<EntityRepository<any>>;
475
517
  hooks: {
476
- [K in EventType]?: (keyof T | EventSubscriber<T>[EventType])[];
518
+ [K in EventType]?: (keyof Entity | EventSubscriber<Entity>[EventType])[];
477
519
  };
478
- prototype: T;
479
- class: EntityClass<T>;
520
+ prototype: Entity;
521
+ class: Class;
480
522
  abstract: boolean;
481
523
  filters: Dictionary<FilterDef>;
482
524
  comment?: string;
@@ -484,8 +526,9 @@ export interface EntityMetadata<T = any> {
484
526
  hasUniqueProps?: boolean;
485
527
  readonly?: boolean;
486
528
  polymorphs?: EntityMetadata[];
487
- root: EntityMetadata<T>;
529
+ root: EntityMetadata<Entity>;
488
530
  definedProperties: Dictionary;
531
+ hasTriggers?: boolean;
489
532
  /** @internal can be used for computed numeric cache keys */
490
533
  readonly _id: number;
491
534
  }
@@ -496,6 +539,7 @@ export interface CreateSchemaOptions {
496
539
  export interface ClearDatabaseOptions {
497
540
  schema?: string;
498
541
  truncate?: boolean;
542
+ clearIdentityMap?: boolean;
499
543
  }
500
544
  export interface EnsureDatabaseOptions extends CreateSchemaOptions, ClearDatabaseOptions {
501
545
  clear?: boolean;
@@ -523,25 +567,25 @@ export interface RefreshDatabaseOptions extends CreateSchemaOptions {
523
567
  createSchema?: boolean;
524
568
  }
525
569
  export interface ISchemaGenerator {
526
- createSchema(options?: CreateSchemaOptions): Promise<void>;
527
- ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
570
+ create(options?: CreateSchemaOptions): Promise<void>;
571
+ update(options?: UpdateSchemaOptions): Promise<void>;
572
+ drop(options?: DropSchemaOptions): Promise<void>;
573
+ refresh(options?: RefreshDatabaseOptions): Promise<void>;
574
+ clear(options?: ClearDatabaseOptions): Promise<void>;
575
+ execute(sql: string, options?: {
576
+ wrap?: boolean;
577
+ }): Promise<void>;
528
578
  getCreateSchemaSQL(options?: CreateSchemaOptions): Promise<string>;
529
- dropSchema(options?: DropSchemaOptions): Promise<void>;
530
579
  getDropSchemaSQL(options?: Omit<DropSchemaOptions, 'dropDb'>): Promise<string>;
531
- updateSchema(options?: UpdateSchemaOptions): Promise<void>;
532
580
  getUpdateSchemaSQL(options?: UpdateSchemaOptions): Promise<string>;
533
581
  getUpdateSchemaMigrationSQL(options?: UpdateSchemaOptions): Promise<{
534
582
  up: string;
535
583
  down: string;
536
584
  }>;
585
+ ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
537
586
  createDatabase(name?: string): Promise<void>;
538
587
  dropDatabase(name?: string): Promise<void>;
539
- execute(sql: string, options?: {
540
- wrap?: boolean;
541
- }): Promise<void>;
542
588
  ensureIndexes(): Promise<void>;
543
- refreshDatabase(options?: RefreshDatabaseOptions): Promise<void>;
544
- clearDatabase(options?: ClearDatabaseOptions): Promise<void>;
545
589
  }
546
590
  export type ImportsResolver = (alias: string, basePath: string, extension: '.js' | '', originFileName: string) => {
547
591
  path: string;
@@ -558,7 +602,10 @@ export interface GenerateOptions {
558
602
  undefinedDefaults?: boolean;
559
603
  bidirectionalRelations?: boolean;
560
604
  identifiedReferences?: boolean;
561
- entitySchema?: boolean;
605
+ entityDefinition?: 'decorators' | 'defineEntity' | 'entitySchema';
606
+ decorators?: 'es' | 'legacy';
607
+ inferEntityType?: boolean;
608
+ enumMode?: 'ts-enum' | 'union-type' | 'dictionary';
562
609
  esmImport?: boolean;
563
610
  scalarTypeInDecorator?: boolean;
564
611
  scalarPropertiesForRelations?: 'always' | 'never' | 'smart';
@@ -618,26 +665,26 @@ export interface IMigrator {
618
665
  /**
619
666
  * Checks current schema for changes, generates new migration if there are any.
620
667
  */
621
- createMigration(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
668
+ create(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
622
669
  /**
623
670
  * Checks current schema for changes.
624
671
  */
625
- checkMigrationNeeded(): Promise<boolean>;
672
+ checkSchema(): Promise<boolean>;
626
673
  /**
627
674
  * Creates initial migration. This generates the schema based on metadata, and checks whether all the tables
628
675
  * are already present. If yes, it will also automatically log the migration as executed.
629
676
  * Initial migration can be created only if the schema is already aligned with the metadata, or when no schema
630
677
  * is present - in such case regular migration would have the same effect.
631
678
  */
632
- createInitialMigration(path?: string): Promise<MigrationResult>;
679
+ createInitial(path?: string): Promise<MigrationResult>;
633
680
  /**
634
681
  * Returns list of already executed migrations.
635
682
  */
636
- getExecutedMigrations(): Promise<MigrationRow[]>;
683
+ getExecuted(): Promise<MigrationRow[]>;
637
684
  /**
638
685
  * Returns list of pending (not yet executed) migrations found in the migration directory.
639
686
  */
640
- getPendingMigrations(): Promise<UmzugMigration[]>;
687
+ getPending(): Promise<UmzugMigration[]>;
641
688
  /**
642
689
  * Executes specified migrations. Without parameter it will migrate up to the latest version.
643
690
  */
@@ -686,12 +733,17 @@ export interface MigrationObject {
686
733
  name: string;
687
734
  class: Constructor<Migration>;
688
735
  }
689
- export type FilterDef = {
736
+ type EntityFromInput<T> = T extends readonly EntityName<infer U>[] ? U : T extends EntityName<infer U> ? U : never;
737
+ type FilterDefResolved<T extends object = any> = {
690
738
  name: string;
691
- cond: Dictionary | ((args: Dictionary, type: 'read' | 'update' | 'delete', em: any, options?: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any>, entityName?: EntityName<any>) => Dictionary | Promise<Dictionary>);
739
+ cond: FilterQuery<T> | ((args: Dictionary, type: 'read' | 'update' | 'delete', em: any, options?: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any>, entityName?: string) => MaybePromise<FilterQuery<T>>);
692
740
  default?: boolean;
693
- entity?: string[];
741
+ entity?: EntityName<T> | EntityName<T>[];
694
742
  args?: boolean;
743
+ strict?: boolean;
744
+ };
745
+ export type FilterDef<T extends EntityName | readonly EntityName[] = any> = FilterDefResolved<EntityFromInput<T>> & {
746
+ entity?: T;
695
747
  };
696
748
  export type Populate<T, P extends string = never> = readonly AutoPath<T, P, `${PopulatePath}`>[] | false;
697
749
  export type PopulateOptions<T> = {
@@ -699,18 +751,21 @@ export type PopulateOptions<T> = {
699
751
  strategy?: LoadStrategy;
700
752
  all?: boolean;
701
753
  filter?: boolean;
754
+ joinType?: 'inner join' | 'left join';
702
755
  children?: PopulateOptions<T[keyof T]>[];
756
+ /** When true, ignores `mapToPk` on the property and returns full entity data instead of just PKs. */
757
+ dataOnly?: boolean;
703
758
  };
704
759
  type Loadable<T extends object> = Collection<T, any> | Reference<T> | Ref<T> | readonly T[];
705
760
  type ExtractType<T> = T extends Loadable<infer U> ? U : T;
706
761
  type ExtractStringKeys<T> = {
707
- [K in keyof T]: CleanKeys<T, K>;
762
+ [K in keyof T]-?: CleanKeys<T, K>;
708
763
  }[keyof T] & {};
709
764
  type StringKeys<T, E extends string = never> = T extends Collection<any, any> ? ExtractStringKeys<ExtractType<T>> | E : T extends Reference<any> ? ExtractStringKeys<ExtractType<T>> | E : T extends object ? ExtractStringKeys<ExtractType<T>> | E : never;
710
765
  type GetStringKey<T, K extends StringKeys<T, string>, E extends string> = K extends keyof T ? ExtractType<T[K]> : (K extends E ? keyof T : never);
711
766
  type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
712
767
  type CollectionKeys<T> = T extends object ? {
713
- [K in keyof T]: T[K] extends Collection<any> ? IsAny<T[K]> extends true ? never : K & string : never;
768
+ [K in keyof T]-?: T[K] extends Collection<any> ? IsAny<T[K]> extends true ? never : K & string : never;
714
769
  }[keyof T] & {} : never;
715
770
  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 & `${string}.` extends never ? P : P & `${string}.`) extends infer Q ? Q extends `${infer A}.${infer B}` ? A extends StringKeys<O, E> ? `${A}.${AutoPath<NonNullable<GetStringKey<O, A, E>>, B, E, Prev[D]>}` : never : Q extends StringKeys<O, E> ? (NonNullable<GetStringKey<O, Q, E>> extends unknown ? Exclude<P, `${string}.`> : never) | (StringKeys<NonNullable<GetStringKey<O, Q, E>>, E> extends never ? never : `${Q & string}.`) : StringKeys<O, E> | `${CollectionKeys<O>}:ref` : never : never : never;
716
771
  export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
@@ -782,23 +837,23 @@ export interface Highlighter {
782
837
  highlight(text: string): string;
783
838
  }
784
839
  export interface IMetadataStorage {
785
- getAll(): Dictionary<EntityMetadata>;
786
- get<T = any>(entity: string, init?: boolean, validate?: boolean): EntityMetadata<T>;
787
- find<T = any>(entity: string): EntityMetadata<T> | undefined;
788
- has(entity: string): boolean;
789
- set(entity: string, meta: EntityMetadata): EntityMetadata;
790
- reset(entity: string): void;
840
+ getAll(): Map<EntityName, EntityMetadata>;
841
+ get<T = any>(entity: EntityName<T>, init?: boolean, validate?: boolean): EntityMetadata<T>;
842
+ find<T = any>(entity: EntityName<T>): EntityMetadata<T> | undefined;
843
+ has<T>(entity: EntityName<T>): boolean;
844
+ set<T>(entity: EntityName<T>, meta: EntityMetadata): EntityMetadata;
845
+ reset<T>(entity: EntityName<T>): void;
791
846
  }
792
847
  export interface IHydrator {
793
848
  /**
794
849
  * Hydrates the whole entity. This process handles custom type conversions, creating missing Collection instances,
795
850
  * mapping FKs to entity instances, as well as merging those entities.
796
851
  */
797
- hydrate<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, type: 'full' | 'reference', newEntity?: boolean, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
852
+ hydrate<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, type: 'full' | 'reference', newEntity?: boolean, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
798
853
  /**
799
854
  * Hydrates primary keys only
800
855
  */
801
- hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
856
+ hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
802
857
  isRunning(): boolean;
803
858
  }
804
859
  export interface HydratorConstructor {
@@ -808,17 +863,22 @@ export interface ISeedManager {
808
863
  seed(...classNames: Constructor<Seeder>[]): Promise<void>;
809
864
  /** @internal */
810
865
  seedString(...classNames: string[]): Promise<void>;
811
- createSeeder(className: string): Promise<string>;
866
+ create(className: string): Promise<string>;
812
867
  }
813
868
  export interface Seeder<T extends Dictionary = Dictionary> {
814
869
  run(em: EntityManager, context?: T): void | Promise<void>;
815
870
  }
816
871
  export type ConnectionType = 'read' | 'write';
817
872
  export type MetadataProcessor = (metadata: EntityMetadata[], platform: Platform) => MaybePromise<void>;
818
- /**
819
- * The type of context that the user intends to inject.
820
- */
821
- export type ContextProvider<T> = MaybePromise<MikroORM> | ((type: T) => MaybePromise<MikroORM | EntityManager | EntityRepository<any> | {
822
- getEntityManager(): EntityManager;
823
- }>);
873
+ export type MaybeReturnType<T> = T extends (...args: any[]) => infer R ? R : T;
874
+ export interface EntitySchemaWithMeta<TName extends string = string, TTableName extends string = string, TEntity = any, TBase = never, TProperties extends Record<string, any> = Record<string, any>, TClass extends EntityCtor = EntityCtor<TEntity>> extends EntitySchema<TEntity, TBase, TClass> {
875
+ readonly name: TName;
876
+ readonly properties: TProperties;
877
+ readonly tableName: TTableName;
878
+ /** @internal Direct entity type access - avoids expensive pattern matching */
879
+ readonly '~entity': TEntity;
880
+ }
881
+ export type InferEntity<Schema> = Schema extends {
882
+ '~entity': infer E;
883
+ } ? E : Schema extends EntitySchema<infer Entity> ? Entity : Schema extends EntityClass<infer Entity> ? Entity : Schema;
824
884
  export {};