@mikro-orm/core 7.0.0-dev.15 → 7.0.0-dev.151

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 (209) hide show
  1. package/EntityManager.d.ts +81 -55
  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 +38 -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 +7 -0
  24. package/entity/EntityFactory.js +72 -53
  25. package/entity/EntityHelper.d.ts +2 -2
  26. package/entity/EntityHelper.js +35 -15
  27. package/entity/EntityLoader.d.ts +5 -5
  28. package/entity/EntityLoader.js +80 -70
  29. package/entity/EntityRepository.d.ts +6 -2
  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 +575 -0
  36. package/entity/defineEntity.js +529 -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 +18 -9
  46. package/errors.js +44 -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 +50 -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 +50 -34
  65. package/metadata/MetadataDiscovery.d.ts +6 -10
  66. package/metadata/MetadataDiscovery.js +315 -304
  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 +11 -9
  72. package/metadata/MetadataValidator.js +50 -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 +480 -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 +158 -113
  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 +14 -12
  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/UnitOfWork.d.ts +10 -3
  130. package/unit-of-work/UnitOfWork.js +141 -98
  131. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  132. package/utils/AbstractSchemaGenerator.js +18 -16
  133. package/utils/AsyncContext.d.ts +6 -0
  134. package/utils/AsyncContext.js +42 -0
  135. package/utils/Configuration.d.ts +754 -207
  136. package/utils/Configuration.js +146 -190
  137. package/utils/ConfigurationLoader.d.ts +1 -54
  138. package/utils/ConfigurationLoader.js +1 -352
  139. package/utils/Cursor.d.ts +0 -3
  140. package/utils/Cursor.js +27 -11
  141. package/utils/DataloaderUtils.d.ts +15 -5
  142. package/utils/DataloaderUtils.js +64 -30
  143. package/utils/EntityComparator.d.ts +13 -9
  144. package/utils/EntityComparator.js +84 -42
  145. package/utils/QueryHelper.d.ts +14 -6
  146. package/utils/QueryHelper.js +87 -25
  147. package/utils/RawQueryFragment.d.ts +48 -25
  148. package/utils/RawQueryFragment.js +66 -70
  149. package/utils/RequestContext.js +2 -2
  150. package/utils/TransactionContext.js +2 -2
  151. package/utils/TransactionManager.d.ts +65 -0
  152. package/utils/TransactionManager.js +223 -0
  153. package/utils/Utils.d.ts +13 -120
  154. package/utils/Utils.js +100 -376
  155. package/utils/clone.js +8 -23
  156. package/utils/env-vars.d.ts +7 -0
  157. package/utils/env-vars.js +97 -0
  158. package/utils/fs-utils.d.ts +32 -0
  159. package/utils/fs-utils.js +178 -0
  160. package/utils/index.d.ts +2 -1
  161. package/utils/index.js +2 -1
  162. package/utils/upsert-utils.d.ts +9 -4
  163. package/utils/upsert-utils.js +55 -4
  164. package/decorators/Check.d.ts +0 -3
  165. package/decorators/Check.js +0 -13
  166. package/decorators/CreateRequestContext.d.ts +0 -3
  167. package/decorators/CreateRequestContext.js +0 -32
  168. package/decorators/Embeddable.d.ts +0 -8
  169. package/decorators/Embeddable.js +0 -11
  170. package/decorators/Embedded.d.ts +0 -12
  171. package/decorators/Embedded.js +0 -18
  172. package/decorators/Entity.d.ts +0 -18
  173. package/decorators/Entity.js +0 -12
  174. package/decorators/Enum.d.ts +0 -9
  175. package/decorators/Enum.js +0 -16
  176. package/decorators/Filter.d.ts +0 -2
  177. package/decorators/Filter.js +0 -8
  178. package/decorators/Formula.d.ts +0 -4
  179. package/decorators/Formula.js +0 -15
  180. package/decorators/Indexed.d.ts +0 -19
  181. package/decorators/Indexed.js +0 -20
  182. package/decorators/ManyToMany.d.ts +0 -40
  183. package/decorators/ManyToMany.js +0 -14
  184. package/decorators/ManyToOne.d.ts +0 -32
  185. package/decorators/ManyToOne.js +0 -14
  186. package/decorators/OneToMany.d.ts +0 -28
  187. package/decorators/OneToMany.js +0 -17
  188. package/decorators/OneToOne.d.ts +0 -26
  189. package/decorators/OneToOne.js +0 -7
  190. package/decorators/PrimaryKey.d.ts +0 -8
  191. package/decorators/PrimaryKey.js +0 -20
  192. package/decorators/Property.d.ts +0 -250
  193. package/decorators/Property.js +0 -32
  194. package/decorators/Transactional.d.ts +0 -13
  195. package/decorators/Transactional.js +0 -28
  196. package/decorators/hooks.d.ts +0 -16
  197. package/decorators/hooks.js +0 -47
  198. package/decorators/index.d.ts +0 -17
  199. package/decorators/index.js +0 -17
  200. package/entity/ArrayCollection.d.ts +0 -116
  201. package/entity/ArrayCollection.js +0 -402
  202. package/entity/EntityValidator.d.ts +0 -19
  203. package/entity/EntityValidator.js +0 -150
  204. package/exports.d.ts +0 -24
  205. package/exports.js +0 -23
  206. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  207. package/metadata/ReflectMetadataProvider.js +0 -44
  208. package/utils/resolveContextProvider.d.ts +0 -10
  209. 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,14 @@ 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 IndexCallback<T> = (table: TableName, columns: Record<PropertyName<T>, string>, indexName: string) => string | Raw;
325
+ export type CheckCallback<T> = (columns: Record<PropertyName<T>, string>) => string;
302
326
  export type GeneratedColumnCallback<T> = (columns: Record<keyof T, string>) => string;
303
327
  export interface CheckConstraint<T = any> {
304
328
  name?: string;
@@ -309,6 +333,7 @@ export type AnyString = string & {};
309
333
  export interface EntityProperty<Owner = any, Target = any> {
310
334
  name: EntityKey<Owner>;
311
335
  entity: () => EntityName<Owner>;
336
+ target: EntityClass<Target>;
312
337
  type: keyof typeof types | AnyString;
313
338
  runtimeType: 'number' | 'string' | 'boolean' | 'bigint' | 'Buffer' | 'Date' | 'object' | 'any' | AnyString;
314
339
  targetMeta?: EntityMetadata<Target>;
@@ -335,6 +360,7 @@ export interface EntityProperty<Owner = any, Target = any> {
335
360
  default?: string | number | boolean | null;
336
361
  defaultRaw?: string;
337
362
  formula?: (alias: string) => string;
363
+ filters?: FilterOptions;
338
364
  prefix?: string | boolean;
339
365
  prefixMode?: EmbeddedPrefixMode;
340
366
  embedded?: [EntityKey<Owner>, EntityKey<Owner>];
@@ -347,11 +373,13 @@ export interface EntityProperty<Owner = any, Target = any> {
347
373
  unique?: boolean | string;
348
374
  nullable?: boolean;
349
375
  inherited?: boolean;
376
+ renamedFrom?: string;
377
+ stiFieldNames?: string[];
378
+ stiFieldNameMap?: Dictionary<string>;
350
379
  unsigned?: boolean;
351
380
  mapToPk?: boolean;
352
381
  persist?: boolean;
353
382
  hydrate?: boolean;
354
- trackChanges?: boolean;
355
383
  hidden?: boolean;
356
384
  enum?: boolean;
357
385
  items?: (number | string)[];
@@ -362,6 +390,7 @@ export interface EntityProperty<Owner = any, Target = any> {
362
390
  setter?: boolean;
363
391
  getter?: boolean;
364
392
  getterName?: keyof Owner;
393
+ accessor?: EntityKey<Owner>;
365
394
  cascade: Cascade[];
366
395
  orphanRemoval?: boolean;
367
396
  onCreate?: (entity: Owner, em: EntityManager) => any;
@@ -378,7 +407,7 @@ export interface EntityProperty<Owner = any, Target = any> {
378
407
  fixedOrder?: boolean;
379
408
  fixedOrderColumn?: string;
380
409
  pivotTable: string;
381
- pivotEntity: string;
410
+ pivotEntity: EntityClass<Target>;
382
411
  joinColumns: string[];
383
412
  ownColumns: string[];
384
413
  inverseJoinColumns: string[];
@@ -394,19 +423,22 @@ export interface EntityProperty<Owner = any, Target = any> {
394
423
  optional?: boolean;
395
424
  ignoreSchemaChanges?: ('type' | 'extra' | 'default')[];
396
425
  deferMode?: DeferMode;
426
+ createForeignKeyConstraint: boolean;
397
427
  foreignKeyName?: string;
398
428
  }
399
- export declare class EntityMetadata<T = any> {
429
+ export declare class EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
400
430
  private static counter;
401
431
  readonly _id: number;
402
432
  readonly propertyOrder: Map<string, number>;
403
433
  constructor(meta?: Partial<EntityMetadata>);
404
- addProperty(prop: Partial<EntityProperty<T>>, sync?: boolean): void;
434
+ addProperty(prop: Partial<EntityProperty<Entity>>): void;
405
435
  removeProperty(name: string, sync?: boolean): void;
406
- getPrimaryProps(): EntityProperty<T>[];
407
- getPrimaryProp(): EntityProperty<T>;
436
+ getPrimaryProps(flatten?: boolean): EntityProperty<Entity>[];
437
+ getPrimaryProp(): EntityProperty<Entity>;
438
+ createColumnMappingObject(): Dictionary<any>;
408
439
  get tableName(): string;
409
440
  set tableName(name: string);
441
+ get uniqueName(): string;
410
442
  sync(initIndexes?: boolean, config?: Configuration): void;
411
443
  private initIndexes;
412
444
  /** @internal */
@@ -416,67 +448,68 @@ export interface SimpleColumnMeta {
416
448
  name: string;
417
449
  type: string;
418
450
  }
419
- export interface EntityMetadata<T = any> {
451
+ export type EntityCtor<T = any> = abstract new (...args: any[]) => T;
452
+ export interface EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
420
453
  name?: string;
421
454
  className: string;
422
455
  tableName: string;
423
456
  schema?: string;
424
457
  pivotTable?: boolean;
425
458
  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;
459
+ expression?: string | ((em: any, where: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any>, stream?: boolean) => MaybePromise<Raw | object | string>);
460
+ discriminatorColumn?: EntityKey<Entity> | AnyString;
428
461
  discriminatorValue?: number | string;
429
- discriminatorMap?: Dictionary<string>;
462
+ discriminatorMap?: Dictionary<EntityClass>;
430
463
  embeddable: boolean;
431
- constructorParams: EntityKey<T>[];
464
+ constructorParams?: (keyof Entity)[];
432
465
  forceConstructor: boolean;
433
- toJsonParams: string[];
434
- extends: string;
466
+ extends?: EntityName<Entity>;
435
467
  collection: string;
436
468
  path: string;
437
- primaryKeys: EntityKey<T>[];
469
+ primaryKeys: EntityKey<Entity>[];
438
470
  simplePK: boolean;
439
471
  compositePK: boolean;
440
- versionProperty: EntityKey<T>;
441
- concurrencyCheckKeys: Set<EntityKey<T>>;
442
- serializedPrimaryKey: EntityKey<T>;
472
+ versionProperty: EntityKey<Entity>;
473
+ concurrencyCheckKeys: Set<EntityKey<Entity>>;
474
+ serializedPrimaryKey?: EntityKey<Entity>;
443
475
  properties: {
444
- [K in EntityKey<T>]: EntityProperty<T>;
476
+ [K in EntityKey<Entity>]: EntityProperty<Entity>;
445
477
  };
446
- props: EntityProperty<T>[];
447
- relations: EntityProperty<T>[];
448
- bidirectionalRelations: EntityProperty<T>[];
478
+ props: EntityProperty<Entity>[];
479
+ relations: EntityProperty<Entity>[];
480
+ bidirectionalRelations: EntityProperty<Entity>[];
449
481
  referencingProperties: {
450
- meta: EntityMetadata<T>;
451
- prop: EntityProperty<T>;
482
+ meta: EntityMetadata<Entity>;
483
+ prop: EntityProperty<Entity>;
452
484
  }[];
453
- comparableProps: EntityProperty<T>[];
454
- trackingProps: EntityProperty<T>[];
455
- hydrateProps: EntityProperty<T>[];
456
- uniqueProps: EntityProperty<T>[];
457
- getterProps: EntityProperty<T>[];
485
+ comparableProps: EntityProperty<Entity>[];
486
+ trackingProps: EntityProperty<Entity>[];
487
+ hydrateProps: EntityProperty<Entity>[];
488
+ validateProps: EntityProperty<Entity>[];
489
+ uniqueProps: EntityProperty<Entity>[];
490
+ getterProps: EntityProperty<Entity>[];
458
491
  indexes: {
459
- properties: EntityKey<T> | EntityKey<T>[];
492
+ properties?: EntityKey<Entity> | EntityKey<Entity>[];
460
493
  name?: string;
461
494
  type?: string;
462
495
  options?: Dictionary;
463
- expression?: string;
496
+ expression?: string | IndexCallback<Entity>;
464
497
  }[];
465
498
  uniques: {
466
- properties: EntityKey<T> | EntityKey<T>[];
499
+ properties?: EntityKey<Entity> | EntityKey<Entity>[];
467
500
  name?: string;
468
501
  options?: Dictionary;
469
- expression?: string;
470
- deferMode?: DeferMode;
502
+ expression?: string | IndexCallback<Entity>;
503
+ deferMode?: DeferMode | `${DeferMode}`;
471
504
  }[];
472
- checks: CheckConstraint<T>[];
505
+ checks: CheckConstraint<Entity>[];
473
506
  repositoryClass?: string;
474
507
  repository: () => EntityClass<EntityRepository<any>>;
475
508
  hooks: {
476
- [K in EventType]?: (keyof T | EventSubscriber<T>[EventType])[];
509
+ [K in EventType]?: (keyof Entity | EventSubscriber<Entity>[EventType])[];
477
510
  };
478
- prototype: T;
479
- class: EntityClass<T>;
511
+ prototype: Entity;
512
+ class: Class;
480
513
  abstract: boolean;
481
514
  filters: Dictionary<FilterDef>;
482
515
  comment?: string;
@@ -484,8 +517,9 @@ export interface EntityMetadata<T = any> {
484
517
  hasUniqueProps?: boolean;
485
518
  readonly?: boolean;
486
519
  polymorphs?: EntityMetadata[];
487
- root: EntityMetadata<T>;
520
+ root: EntityMetadata<Entity>;
488
521
  definedProperties: Dictionary;
522
+ hasTriggers?: boolean;
489
523
  /** @internal can be used for computed numeric cache keys */
490
524
  readonly _id: number;
491
525
  }
@@ -496,6 +530,7 @@ export interface CreateSchemaOptions {
496
530
  export interface ClearDatabaseOptions {
497
531
  schema?: string;
498
532
  truncate?: boolean;
533
+ clearIdentityMap?: boolean;
499
534
  }
500
535
  export interface EnsureDatabaseOptions extends CreateSchemaOptions, ClearDatabaseOptions {
501
536
  clear?: boolean;
@@ -523,25 +558,25 @@ export interface RefreshDatabaseOptions extends CreateSchemaOptions {
523
558
  createSchema?: boolean;
524
559
  }
525
560
  export interface ISchemaGenerator {
526
- createSchema(options?: CreateSchemaOptions): Promise<void>;
527
- ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
561
+ create(options?: CreateSchemaOptions): Promise<void>;
562
+ update(options?: UpdateSchemaOptions): Promise<void>;
563
+ drop(options?: DropSchemaOptions): Promise<void>;
564
+ refresh(options?: RefreshDatabaseOptions): Promise<void>;
565
+ clear(options?: ClearDatabaseOptions): Promise<void>;
566
+ execute(sql: string, options?: {
567
+ wrap?: boolean;
568
+ }): Promise<void>;
528
569
  getCreateSchemaSQL(options?: CreateSchemaOptions): Promise<string>;
529
- dropSchema(options?: DropSchemaOptions): Promise<void>;
530
570
  getDropSchemaSQL(options?: Omit<DropSchemaOptions, 'dropDb'>): Promise<string>;
531
- updateSchema(options?: UpdateSchemaOptions): Promise<void>;
532
571
  getUpdateSchemaSQL(options?: UpdateSchemaOptions): Promise<string>;
533
572
  getUpdateSchemaMigrationSQL(options?: UpdateSchemaOptions): Promise<{
534
573
  up: string;
535
574
  down: string;
536
575
  }>;
576
+ ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
537
577
  createDatabase(name?: string): Promise<void>;
538
578
  dropDatabase(name?: string): Promise<void>;
539
- execute(sql: string, options?: {
540
- wrap?: boolean;
541
- }): Promise<void>;
542
579
  ensureIndexes(): Promise<void>;
543
- refreshDatabase(options?: RefreshDatabaseOptions): Promise<void>;
544
- clearDatabase(options?: ClearDatabaseOptions): Promise<void>;
545
580
  }
546
581
  export type ImportsResolver = (alias: string, basePath: string, extension: '.js' | '', originFileName: string) => {
547
582
  path: string;
@@ -558,7 +593,10 @@ export interface GenerateOptions {
558
593
  undefinedDefaults?: boolean;
559
594
  bidirectionalRelations?: boolean;
560
595
  identifiedReferences?: boolean;
561
- entitySchema?: boolean;
596
+ entityDefinition?: 'decorators' | 'defineEntity' | 'entitySchema';
597
+ decorators?: 'es' | 'legacy';
598
+ inferEntityType?: boolean;
599
+ enumMode?: 'ts-enum' | 'union-type' | 'dictionary';
562
600
  esmImport?: boolean;
563
601
  scalarTypeInDecorator?: boolean;
564
602
  scalarPropertiesForRelations?: 'always' | 'never' | 'smart';
@@ -618,26 +656,26 @@ export interface IMigrator {
618
656
  /**
619
657
  * Checks current schema for changes, generates new migration if there are any.
620
658
  */
621
- createMigration(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
659
+ create(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
622
660
  /**
623
661
  * Checks current schema for changes.
624
662
  */
625
- checkMigrationNeeded(): Promise<boolean>;
663
+ checkSchema(): Promise<boolean>;
626
664
  /**
627
665
  * Creates initial migration. This generates the schema based on metadata, and checks whether all the tables
628
666
  * are already present. If yes, it will also automatically log the migration as executed.
629
667
  * Initial migration can be created only if the schema is already aligned with the metadata, or when no schema
630
668
  * is present - in such case regular migration would have the same effect.
631
669
  */
632
- createInitialMigration(path?: string): Promise<MigrationResult>;
670
+ createInitial(path?: string): Promise<MigrationResult>;
633
671
  /**
634
672
  * Returns list of already executed migrations.
635
673
  */
636
- getExecutedMigrations(): Promise<MigrationRow[]>;
674
+ getExecuted(): Promise<MigrationRow[]>;
637
675
  /**
638
676
  * Returns list of pending (not yet executed) migrations found in the migration directory.
639
677
  */
640
- getPendingMigrations(): Promise<UmzugMigration[]>;
678
+ getPending(): Promise<UmzugMigration[]>;
641
679
  /**
642
680
  * Executes specified migrations. Without parameter it will migrate up to the latest version.
643
681
  */
@@ -686,12 +724,17 @@ export interface MigrationObject {
686
724
  name: string;
687
725
  class: Constructor<Migration>;
688
726
  }
689
- export type FilterDef = {
727
+ type EntityFromInput<T> = T extends readonly EntityName<infer U>[] ? U : T extends EntityName<infer U> ? U : never;
728
+ type FilterDefResolved<T extends object = any> = {
690
729
  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>);
730
+ 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
731
  default?: boolean;
693
- entity?: string[];
732
+ entity?: EntityName<T> | EntityName<T>[];
694
733
  args?: boolean;
734
+ strict?: boolean;
735
+ };
736
+ export type FilterDef<T extends EntityName | readonly EntityName[] = any> = FilterDefResolved<EntityFromInput<T>> & {
737
+ entity?: T;
695
738
  };
696
739
  export type Populate<T, P extends string = never> = readonly AutoPath<T, P, `${PopulatePath}`>[] | false;
697
740
  export type PopulateOptions<T> = {
@@ -699,18 +742,19 @@ export type PopulateOptions<T> = {
699
742
  strategy?: LoadStrategy;
700
743
  all?: boolean;
701
744
  filter?: boolean;
745
+ joinType?: 'inner join' | 'left join';
702
746
  children?: PopulateOptions<T[keyof T]>[];
703
747
  };
704
748
  type Loadable<T extends object> = Collection<T, any> | Reference<T> | Ref<T> | readonly T[];
705
749
  type ExtractType<T> = T extends Loadable<infer U> ? U : T;
706
750
  type ExtractStringKeys<T> = {
707
- [K in keyof T]: CleanKeys<T, K>;
751
+ [K in keyof T]-?: CleanKeys<T, K>;
708
752
  }[keyof T] & {};
709
753
  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
754
  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
755
  type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
712
756
  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;
757
+ [K in keyof T]-?: T[K] extends Collection<any> ? IsAny<T[K]> extends true ? never : K & string : never;
714
758
  }[keyof T] & {} : never;
715
759
  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
760
  export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
@@ -782,23 +826,23 @@ export interface Highlighter {
782
826
  highlight(text: string): string;
783
827
  }
784
828
  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;
829
+ getAll(): Map<EntityName, EntityMetadata>;
830
+ get<T = any>(entity: EntityName<T>, init?: boolean, validate?: boolean): EntityMetadata<T>;
831
+ find<T = any>(entity: EntityName<T>): EntityMetadata<T> | undefined;
832
+ has<T>(entity: EntityName<T>): boolean;
833
+ set<T>(entity: EntityName<T>, meta: EntityMetadata): EntityMetadata;
834
+ reset<T>(entity: EntityName<T>): void;
791
835
  }
792
836
  export interface IHydrator {
793
837
  /**
794
838
  * Hydrates the whole entity. This process handles custom type conversions, creating missing Collection instances,
795
839
  * mapping FKs to entity instances, as well as merging those entities.
796
840
  */
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;
841
+ 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
842
  /**
799
843
  * Hydrates primary keys only
800
844
  */
801
- hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
845
+ hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
802
846
  isRunning(): boolean;
803
847
  }
804
848
  export interface HydratorConstructor {
@@ -808,17 +852,18 @@ export interface ISeedManager {
808
852
  seed(...classNames: Constructor<Seeder>[]): Promise<void>;
809
853
  /** @internal */
810
854
  seedString(...classNames: string[]): Promise<void>;
811
- createSeeder(className: string): Promise<string>;
855
+ create(className: string): Promise<string>;
812
856
  }
813
857
  export interface Seeder<T extends Dictionary = Dictionary> {
814
858
  run(em: EntityManager, context?: T): void | Promise<void>;
815
859
  }
816
860
  export type ConnectionType = 'read' | 'write';
817
861
  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
- }>);
862
+ export type MaybeReturnType<T> = T extends (...args: any[]) => infer R ? R : T;
863
+ 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> {
864
+ readonly name: TName;
865
+ readonly properties: TProperties;
866
+ readonly tableName: TTableName;
867
+ }
868
+ export type InferEntity<Schema> = Schema extends EntitySchemaWithMeta<any, any, infer Entity, any, any> ? Entity : Schema extends EntitySchema<infer Entity> ? Entity : Schema extends EntityClass<infer Entity> ? Entity : Schema;
824
869
  export {};