@mikro-orm/core 7.0.0-dev.7 → 7.0.0-dev.71

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 (161) hide show
  1. package/EntityManager.d.ts +85 -42
  2. package/EntityManager.js +282 -194
  3. package/MikroORM.d.ts +11 -29
  4. package/MikroORM.js +33 -127
  5. package/README.md +3 -2
  6. package/cache/FileCacheAdapter.js +1 -2
  7. package/connections/Connection.d.ts +11 -7
  8. package/connections/Connection.js +16 -14
  9. package/drivers/DatabaseDriver.d.ts +11 -5
  10. package/drivers/DatabaseDriver.js +13 -4
  11. package/drivers/IDatabaseDriver.d.ts +27 -5
  12. package/entity/BaseEntity.d.ts +0 -1
  13. package/entity/BaseEntity.js +0 -3
  14. package/entity/Collection.d.ts +98 -30
  15. package/entity/Collection.js +432 -93
  16. package/entity/EntityAssigner.d.ts +1 -1
  17. package/entity/EntityAssigner.js +9 -1
  18. package/entity/EntityFactory.d.ts +7 -0
  19. package/entity/EntityFactory.js +63 -40
  20. package/entity/EntityHelper.js +26 -9
  21. package/entity/EntityLoader.d.ts +5 -4
  22. package/entity/EntityLoader.js +69 -36
  23. package/entity/EntityRepository.d.ts +1 -1
  24. package/entity/EntityValidator.js +4 -4
  25. package/entity/Reference.d.ts +9 -7
  26. package/entity/Reference.js +32 -5
  27. package/entity/WrappedEntity.d.ts +0 -2
  28. package/entity/WrappedEntity.js +1 -5
  29. package/entity/defineEntity.d.ts +549 -0
  30. package/entity/defineEntity.js +529 -0
  31. package/entity/index.d.ts +2 -1
  32. package/entity/index.js +2 -1
  33. package/entity/utils.d.ts +7 -0
  34. package/entity/utils.js +15 -3
  35. package/enums.d.ts +20 -5
  36. package/enums.js +13 -0
  37. package/errors.d.ts +6 -1
  38. package/errors.js +14 -4
  39. package/events/EventSubscriber.d.ts +3 -1
  40. package/hydration/ObjectHydrator.d.ts +4 -4
  41. package/hydration/ObjectHydrator.js +35 -24
  42. package/index.d.ts +2 -2
  43. package/index.js +1 -2
  44. package/logging/DefaultLogger.d.ts +1 -1
  45. package/logging/SimpleLogger.d.ts +1 -1
  46. package/metadata/EntitySchema.d.ts +9 -13
  47. package/metadata/EntitySchema.js +44 -26
  48. package/metadata/MetadataDiscovery.d.ts +6 -7
  49. package/metadata/MetadataDiscovery.js +161 -162
  50. package/metadata/MetadataProvider.d.ts +2 -2
  51. package/metadata/MetadataProvider.js +15 -0
  52. package/metadata/MetadataStorage.d.ts +0 -4
  53. package/metadata/MetadataStorage.js +6 -10
  54. package/metadata/MetadataValidator.d.ts +0 -7
  55. package/metadata/MetadataValidator.js +4 -13
  56. package/metadata/discover-entities.d.ts +5 -0
  57. package/metadata/discover-entities.js +39 -0
  58. package/metadata/index.d.ts +1 -1
  59. package/metadata/index.js +1 -1
  60. package/metadata/types.d.ts +480 -0
  61. package/metadata/types.js +1 -0
  62. package/naming-strategy/AbstractNamingStrategy.d.ts +5 -1
  63. package/naming-strategy/AbstractNamingStrategy.js +7 -1
  64. package/naming-strategy/NamingStrategy.d.ts +11 -1
  65. package/package.json +11 -10
  66. package/platforms/Platform.d.ts +6 -10
  67. package/platforms/Platform.js +6 -22
  68. package/serialization/EntitySerializer.d.ts +2 -0
  69. package/serialization/EntitySerializer.js +29 -11
  70. package/serialization/EntityTransformer.js +22 -12
  71. package/serialization/SerializationContext.js +14 -11
  72. package/types/ArrayType.d.ts +1 -1
  73. package/types/ArrayType.js +1 -2
  74. package/types/BigIntType.d.ts +8 -6
  75. package/types/BlobType.d.ts +0 -1
  76. package/types/BlobType.js +0 -3
  77. package/types/BooleanType.d.ts +2 -1
  78. package/types/BooleanType.js +3 -0
  79. package/types/DecimalType.d.ts +6 -4
  80. package/types/DecimalType.js +1 -1
  81. package/types/DoubleType.js +1 -1
  82. package/types/JsonType.d.ts +1 -1
  83. package/types/JsonType.js +7 -2
  84. package/types/Type.d.ts +2 -1
  85. package/types/Type.js +1 -1
  86. package/types/Uint8ArrayType.d.ts +0 -1
  87. package/types/Uint8ArrayType.js +0 -3
  88. package/types/index.d.ts +1 -1
  89. package/typings.d.ts +112 -77
  90. package/typings.js +32 -32
  91. package/unit-of-work/ChangeSetComputer.js +8 -3
  92. package/unit-of-work/ChangeSetPersister.d.ts +4 -2
  93. package/unit-of-work/ChangeSetPersister.js +37 -16
  94. package/unit-of-work/UnitOfWork.d.ts +8 -1
  95. package/unit-of-work/UnitOfWork.js +111 -54
  96. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  97. package/utils/AbstractSchemaGenerator.js +10 -8
  98. package/utils/Configuration.d.ts +200 -191
  99. package/utils/Configuration.js +141 -152
  100. package/utils/ConfigurationLoader.d.ts +3 -44
  101. package/utils/ConfigurationLoader.js +26 -239
  102. package/utils/Cursor.d.ts +3 -3
  103. package/utils/Cursor.js +3 -0
  104. package/utils/DataloaderUtils.d.ts +15 -5
  105. package/utils/DataloaderUtils.js +53 -7
  106. package/utils/EntityComparator.d.ts +8 -4
  107. package/utils/EntityComparator.js +107 -60
  108. package/utils/QueryHelper.d.ts +9 -1
  109. package/utils/QueryHelper.js +69 -8
  110. package/utils/RawQueryFragment.d.ts +36 -4
  111. package/utils/RawQueryFragment.js +34 -13
  112. package/utils/TransactionManager.d.ts +65 -0
  113. package/utils/TransactionManager.js +223 -0
  114. package/utils/Utils.d.ts +17 -84
  115. package/utils/Utils.js +132 -252
  116. package/utils/index.d.ts +1 -0
  117. package/utils/index.js +1 -0
  118. package/utils/upsert-utils.d.ts +7 -2
  119. package/utils/upsert-utils.js +52 -1
  120. package/decorators/Check.d.ts +0 -3
  121. package/decorators/Check.js +0 -13
  122. package/decorators/CreateRequestContext.d.ts +0 -3
  123. package/decorators/CreateRequestContext.js +0 -32
  124. package/decorators/Embeddable.d.ts +0 -8
  125. package/decorators/Embeddable.js +0 -11
  126. package/decorators/Embedded.d.ts +0 -18
  127. package/decorators/Embedded.js +0 -18
  128. package/decorators/Entity.d.ts +0 -18
  129. package/decorators/Entity.js +0 -12
  130. package/decorators/Enum.d.ts +0 -9
  131. package/decorators/Enum.js +0 -16
  132. package/decorators/Filter.d.ts +0 -2
  133. package/decorators/Filter.js +0 -8
  134. package/decorators/Formula.d.ts +0 -4
  135. package/decorators/Formula.js +0 -15
  136. package/decorators/Indexed.d.ts +0 -19
  137. package/decorators/Indexed.js +0 -20
  138. package/decorators/ManyToMany.d.ts +0 -40
  139. package/decorators/ManyToMany.js +0 -14
  140. package/decorators/ManyToOne.d.ts +0 -30
  141. package/decorators/ManyToOne.js +0 -14
  142. package/decorators/OneToMany.d.ts +0 -28
  143. package/decorators/OneToMany.js +0 -17
  144. package/decorators/OneToOne.d.ts +0 -24
  145. package/decorators/OneToOne.js +0 -7
  146. package/decorators/PrimaryKey.d.ts +0 -8
  147. package/decorators/PrimaryKey.js +0 -20
  148. package/decorators/Property.d.ts +0 -250
  149. package/decorators/Property.js +0 -32
  150. package/decorators/Transactional.d.ts +0 -13
  151. package/decorators/Transactional.js +0 -28
  152. package/decorators/hooks.d.ts +0 -16
  153. package/decorators/hooks.js +0 -47
  154. package/decorators/index.d.ts +0 -17
  155. package/decorators/index.js +0 -17
  156. package/entity/ArrayCollection.d.ts +0 -116
  157. package/entity/ArrayCollection.js +0 -402
  158. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  159. package/metadata/ReflectMetadataProvider.js +0 -44
  160. package/utils/resolveContextProvider.d.ts +0 -10
  161. package/utils/resolveContextProvider.js +0 -28
@@ -1,16 +1,15 @@
1
1
  import { inspect } from 'node:util';
2
- import DataLoader from 'dataloader';
3
2
  import { type Configuration } from './utils/Configuration.js';
4
3
  import { Cursor } from './utils/Cursor.js';
5
4
  import { EntityFactory } from './entity/EntityFactory.js';
6
5
  import { type AssignOptions } from './entity/EntityAssigner.js';
7
6
  import { EntityValidator } from './entity/EntityValidator.js';
8
7
  import { type EntityRepository } from './entity/EntityRepository.js';
9
- import { type EntityLoaderOptions } from './entity/EntityLoader.js';
8
+ import { EntityLoader, type EntityLoaderOptions } from './entity/EntityLoader.js';
10
9
  import { Reference } from './entity/Reference.js';
11
10
  import { UnitOfWork } from './unit-of-work/UnitOfWork.js';
12
- import type { CountOptions, DeleteOptions, FindAllOptions, FindByCursorOptions, FindOneOptions, FindOneOrFailOptions, FindOptions, GetReferenceOptions, IDatabaseDriver, LockOptions, NativeInsertUpdateOptions, UpdateOptions, UpsertManyOptions, UpsertOptions } from './drivers/IDatabaseDriver.js';
13
- import type { AnyEntity, AnyString, ArrayElement, AutoPath, ConnectionType, Dictionary, EntityData, EntityDictionary, EntityDTO, EntityMetadata, EntityName, FilterQuery, FromEntityType, GetRepository, IHydrator, IsSubset, Loaded, MaybePromise, MergeLoaded, MergeSelected, NoInfer, ObjectQuery, Primary, Ref, RequiredEntityData, UnboxArray } from './typings.js';
11
+ import type { CountOptions, DeleteOptions, FilterOptions, FindAllOptions, FindByCursorOptions, FindOneOptions, FindOneOrFailOptions, FindOptions, GetReferenceOptions, IDatabaseDriver, LockOptions, NativeInsertUpdateOptions, StreamOptions, UpdateOptions, UpsertManyOptions, UpsertOptions } from './drivers/IDatabaseDriver.js';
12
+ import type { AnyString, ArrayElement, AutoPath, ConnectionType, Dictionary, EntityData, EntityDictionary, EntityDTO, EntityMetadata, EntityName, FilterDef, FilterQuery, FromEntityType, GetRepository, IHydrator, IsSubset, Loaded, MergeLoaded, MergeSelected, NoInfer, ObjectQuery, Primary, Ref, RequiredEntityData, UnboxArray } from './typings.js';
14
13
  import { FlushMode, LockMode, PopulatePath, type TransactionOptions } from './enums.js';
15
14
  import type { MetadataStorage } from './metadata/MetadataStorage.js';
16
15
  import type { Transaction } from './connections/Connection.js';
@@ -27,12 +26,13 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
27
26
  protected readonly metadata: MetadataStorage;
28
27
  protected readonly useContext: boolean;
29
28
  protected readonly eventManager: EventManager;
29
+ /** @internal */
30
+ readonly '~entities'?: unknown;
30
31
  private static counter;
31
32
  readonly _id: number;
32
33
  readonly global = false;
33
34
  readonly name: string;
34
- protected readonly refLoader: DataLoader<[Reference<any>, (Omit<import("./entity/Reference.js").LoadReferenceOptions<any, any, "*", never>, "dataloader"> | undefined)?], any, [Reference<any>, (Omit<import("./entity/Reference.js").LoadReferenceOptions<any, any, "*", never>, "dataloader"> | undefined)?]>;
35
- protected readonly colLoader: DataLoader<[import("./index.js").Collection<any, object>, (Omit<import("./index.js").InitCollectionOptions<any, any, "*", never>, "dataloader"> | undefined)?], any, [import("./index.js").Collection<any, object>, (Omit<import("./index.js").InitCollectionOptions<any, any, "*", never>, "dataloader"> | undefined)?]>;
35
+ private readonly loaders;
36
36
  private readonly validator;
37
37
  private readonly repositoryMap;
38
38
  private readonly entityLoader;
@@ -80,6 +80,24 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
80
80
  * Finds all entities matching your `where` query. You can pass additional options via the `options` parameter.
81
81
  */
82
82
  find<Entity extends object, Hint extends string = never, Fields extends string = PopulatePath.ALL, Excludes extends string = never>(entityName: EntityName<Entity>, where: FilterQuery<NoInfer<Entity>>, options?: FindOptions<Entity, Hint, Fields, Excludes>): Promise<Loaded<Entity, Hint, Fields, Excludes>[]>;
83
+ /**
84
+ * Finds all entities and returns an async iterable (async generator) that yields results one by one.
85
+ * The results are merged and mapped to entity instances, without adding them to the identity map.
86
+ * You can disable merging by passing the options `{ mergeResults: false }`.
87
+ * With `mergeResults` disabled, to-many collections will contain at most one item, and you will get duplicate
88
+ * root entities when there are multiple items in the populated collection.
89
+ * This is useful for processing large datasets without loading everything into memory at once.
90
+ *
91
+ * ```ts
92
+ * const stream = em.stream(Book, { populate: ['author'] });
93
+ *
94
+ * for await (const book of stream) {
95
+ * // book is an instance of Book entity
96
+ * console.log(book.title, book.author.name);
97
+ * }
98
+ * ```
99
+ */
100
+ stream<Entity extends object, Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(entityName: EntityName<Entity>, options?: StreamOptions<NoInfer<Entity>, Hint, Fields, Excludes>): AsyncIterableIterator<Loaded<Entity, Hint, Fields, Excludes>>;
83
101
  /**
84
102
  * Finds all entities of given type, optionally matching the `where` condition provided in the `options` parameter.
85
103
  */
@@ -88,19 +106,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
88
106
  /**
89
107
  * Registers global filter to this entity manager. Global filters are enabled by default (unless disabled via last parameter).
90
108
  */
91
- addFilter<T1>(name: string, cond: FilterQuery<T1> | ((args: Dictionary) => MaybePromise<FilterQuery<T1>>), entityName?: EntityName<T1> | [EntityName<T1>], enabled?: boolean): void;
92
- /**
93
- * Registers global filter to this entity manager. Global filters are enabled by default (unless disabled via last parameter).
94
- */
95
- addFilter<T1, T2>(name: string, cond: FilterQuery<T1 | T2> | ((args: Dictionary) => MaybePromise<FilterQuery<T1 | T2>>), entityName?: [EntityName<T1>, EntityName<T2>], enabled?: boolean): void;
96
- /**
97
- * Registers global filter to this entity manager. Global filters are enabled by default (unless disabled via last parameter).
98
- */
99
- addFilter<T1, T2, T3>(name: string, cond: FilterQuery<T1 | T2 | T3> | ((args: Dictionary) => MaybePromise<FilterQuery<T1 | T2 | T3>>), entityName?: [EntityName<T1>, EntityName<T2>, EntityName<T3>], enabled?: boolean): void;
100
- /**
101
- * Registers global filter to this entity manager. Global filters are enabled by default (unless disabled via last parameter).
102
- */
103
- addFilter(name: string, cond: Dictionary | ((args: Dictionary) => MaybePromise<FilterQuery<AnyEntity>>), entityName?: EntityName<AnyEntity> | EntityName<AnyEntity>[], enabled?: boolean): void;
109
+ addFilter<T extends EntityName<any> | readonly EntityName<any>[]>(options: FilterDef<T>): void;
104
110
  /**
105
111
  * Sets filter parameter values globally inside context defined by this entity manager.
106
112
  * If you want to set shared value for all contexts, be sure to use the root entity manager.
@@ -117,20 +123,25 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
117
123
  /**
118
124
  * Gets logger context for this entity manager.
119
125
  */
120
- getLoggerContext<T extends Dictionary = Dictionary>(): T;
121
- setFlushMode(flushMode?: FlushMode): void;
126
+ getLoggerContext<T extends Dictionary = Dictionary>(options?: {
127
+ disableContextResolution?: boolean;
128
+ }): T;
129
+ setFlushMode(flushMode?: FlushMode | `${FlushMode}`): void;
122
130
  protected processWhere<Entity extends object, Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(entityName: string, where: FilterQuery<Entity>, options: FindOptions<Entity, Hint, Fields, Excludes> | FindOneOptions<Entity, Hint, Fields, Excludes>, type: 'read' | 'update' | 'delete'): Promise<FilterQuery<Entity>>;
123
131
  protected applyDiscriminatorCondition<Entity extends object>(entityName: string, where: FilterQuery<Entity>): FilterQuery<Entity>;
124
132
  protected createPopulateWhere<Entity extends object>(cond: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any> | FindOneOptions<Entity, any, any, any> | CountOptions<Entity, any>): ObjectQuery<Entity>;
125
- protected getJoinedFilters<Entity extends object>(meta: EntityMetadata<Entity>, cond: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any> | FindOneOptions<Entity, any, any, any>): Promise<ObjectQuery<Entity>>;
133
+ protected getJoinedFilters<Entity extends object>(meta: EntityMetadata<Entity>, options: FindOptions<Entity, any, any, any> | FindOneOptions<Entity, any, any, any>): Promise<ObjectQuery<Entity> | undefined>;
126
134
  /**
127
135
  * When filters are active on M:1 or 1:1 relations, we need to ref join them eagerly as they might affect the FK value.
128
136
  */
129
- protected autoJoinRefsForFilters<T extends object>(meta: EntityMetadata<T>, options: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any>): Promise<void>;
137
+ protected autoJoinRefsForFilters<T extends object>(meta: EntityMetadata<T>, options: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any>, parent?: {
138
+ className: string;
139
+ propName: string;
140
+ }): Promise<void>;
130
141
  /**
131
142
  * @internal
132
143
  */
133
- applyFilters<Entity extends object>(entityName: string, where: FilterQuery<Entity> | undefined, options: Dictionary<boolean | Dictionary> | string[] | boolean, type: 'read' | 'update' | 'delete', findOptions?: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any>): Promise<FilterQuery<Entity> | undefined>;
144
+ applyFilters<Entity extends object>(entityName: string, where: FilterQuery<Entity> | undefined, options: FilterOptions | undefined, type: 'read' | 'update' | 'delete', findOptions?: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any>): Promise<FilterQuery<Entity> | undefined>;
134
145
  /**
135
146
  * Calls `em.find()` and `em.count()` with the same arguments (where applicable) and returns the results as tuple
136
147
  * where the first element is the array of entities, and the second is the count.
@@ -171,6 +182,10 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
171
182
  * });
172
183
  * ```
173
184
  *
185
+ * The options also support an `includeCount` (true by default) option. If set to false, the `totalCount` is not
186
+ * returned as part of the cursor. This is useful for performance reason, when you don't care about the total number
187
+ * of pages.
188
+ *
174
189
  * The `Cursor` object provides the following interface:
175
190
  *
176
191
  * ```ts
@@ -180,7 +195,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
180
195
  * User { ... },
181
196
  * User { ... },
182
197
  * ],
183
- * totalCount: 50,
198
+ * totalCount: 50, // not included if `includeCount: false`
184
199
  * startCursor: 'WzRd',
185
200
  * endCursor: 'WzZd',
186
201
  * hasPrevPage: true,
@@ -188,7 +203,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
188
203
  * }
189
204
  * ```
190
205
  */
191
- findByCursor<Entity extends object, Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(entityName: EntityName<Entity>, where: FilterQuery<NoInfer<Entity>>, options: FindByCursorOptions<Entity, Hint, Fields, Excludes>): Promise<Cursor<Entity, Hint, Fields, Excludes>>;
206
+ findByCursor<Entity extends object, Hint extends string = never, Fields extends string = '*', Excludes extends string = never, IncludeCount extends boolean = true>(entityName: EntityName<Entity>, where: FilterQuery<NoInfer<Entity>>, options: FindByCursorOptions<Entity, Hint, Fields, Excludes, IncludeCount>): Promise<Cursor<Entity, Hint, Fields, Excludes, IncludeCount>>;
192
207
  /**
193
208
  * Refreshes the persistent state of an entity from the database, overriding any local changes that have not yet been
194
209
  * persisted. Returns the same entity instance (same object reference), but re-hydrated. If the entity is no longer
@@ -263,6 +278,29 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
263
278
  upsertMany<Entity extends object, Fields extends string = any>(entityNameOrEntity: EntityName<Entity> | Entity[], data?: (EntityData<Entity> | NoInfer<Entity>)[], options?: UpsertManyOptions<Entity, Fields>): Promise<Entity[]>;
264
279
  /**
265
280
  * Runs your callback wrapped inside a database transaction.
281
+ *
282
+ * If a transaction is already active, a new savepoint (nested transaction) will be created by default. This behavior
283
+ * can be controlled via the `propagation` option. Use the provided EntityManager instance for all operations that
284
+ * should be part of the transaction. You can safely use a global EntityManager instance from a DI container, as this
285
+ * method automatically creates an async context for the transaction.
286
+ *
287
+ * **Concurrency note:** When running multiple transactions concurrently (e.g. in parallel requests or jobs), use the
288
+ * `clear: true` option. This ensures the callback runs in a clear fork of the EntityManager, providing full isolation
289
+ * between concurrent transactional handlers. Using `clear: true` is an alternative to forking explicitly and calling
290
+ * the method on the new fork – it already provides the necessary isolation for safe concurrent usage.
291
+ *
292
+ * **Propagation note:** Changes made within a transaction (whether top-level or nested) are always propagated to the
293
+ * parent context, unless the parent context is a global one. If you want to avoid that, fork the EntityManager first
294
+ * and then call this method on the fork.
295
+ *
296
+ * **Example:**
297
+ * ```ts
298
+ * await em.transactional(async (em) => {
299
+ * const author = new Author('Jon');
300
+ * em.persist(author);
301
+ * // flush is called automatically at the end of the callback
302
+ * });
303
+ * ```
266
304
  */
267
305
  transactional<T>(cb: (em: this) => T | Promise<T>, options?: TransactionOptions): Promise<T>;
268
306
  /**
@@ -380,11 +418,6 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
380
418
  * The entity will be entered into the database at or before transaction commit or as a result of the flush operation.
381
419
  */
382
420
  persist<Entity extends object>(entity: Entity | Reference<Entity> | Iterable<Entity | Reference<Entity>>): this;
383
- /**
384
- * Persists your entity immediately, flushing all not yet persisted changes to the database too.
385
- * Equivalent to `em.persist(e).flush()`.
386
- */
387
- persistAndFlush(entity: AnyEntity | Reference<AnyEntity> | Iterable<AnyEntity | Reference<AnyEntity>>): Promise<void>;
388
421
  /**
389
422
  * Marks entity for removal.
390
423
  * A removed entity will be removed from the database at or before transaction commit or as a result of the flush operation.
@@ -392,11 +425,6 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
392
425
  * To remove entities by condition, use `em.nativeDelete()`.
393
426
  */
394
427
  remove<Entity extends object>(entity: Entity | Reference<Entity> | Iterable<Entity | Reference<Entity>>): this;
395
- /**
396
- * Removes an entity instance immediately, flushing all not yet persisted changes to the database too.
397
- * Equivalent to `em.remove(e).flush()`
398
- */
399
- removeAndFlush(entity: AnyEntity | Reference<AnyEntity> | Iterable<AnyEntity | Reference<AnyEntity>>): Promise<void>;
400
428
  /**
401
429
  * Flushes all changes to objects that have been queued up to now to the database.
402
430
  * This effectively synchronizes the in-memory state of managed objects with the database.
@@ -419,7 +447,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
419
447
  /**
420
448
  * Loads specified relations in batch. This will execute one query for each relation, that will populate it on all the specified entities.
421
449
  */
422
- populate<Entity extends object, Naked extends FromEntityType<UnboxArray<Entity>> = FromEntityType<UnboxArray<Entity>>, Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(entities: Entity, populate: AutoPath<Naked, Hint, PopulatePath.ALL>[] | false, options?: EntityLoaderOptions<Naked, Fields, Excludes>): Promise<Entity extends object[] ? MergeLoaded<ArrayElement<Entity>, Naked, Hint, Fields, Excludes>[] : MergeLoaded<Entity, Naked, Hint, Fields, Excludes>>;
450
+ populate<Entity extends object, Naked extends FromEntityType<UnboxArray<Entity>> = FromEntityType<UnboxArray<Entity>>, Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(entities: Entity, populate: readonly AutoPath<Naked, Hint, PopulatePath.ALL>[] | false, options?: EntityLoaderOptions<Naked, Fields, Excludes>): Promise<Entity extends object[] ? MergeLoaded<ArrayElement<Entity>, Naked, Hint, Fields, Excludes>[] : MergeLoaded<Entity, Naked, Hint, Fields, Excludes>>;
423
451
  /**
424
452
  * Returns new EntityManager instance with its own identity map
425
453
  */
@@ -432,6 +460,10 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
432
460
  * Gets the EntityFactory used by the EntityManager.
433
461
  */
434
462
  getEntityFactory(): EntityFactory;
463
+ /**
464
+ * @internal use `em.populate()` as the user facing API, this is exposed only for internal usage
465
+ */
466
+ getEntityLoader(): EntityLoader;
435
467
  /**
436
468
  * Gets the Hydrator used by the EntityManager.
437
469
  */
@@ -479,7 +511,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
479
511
  * some additional lazy properties, if so, we reload and merge the data from database
480
512
  */
481
513
  protected shouldRefresh<T extends object, P extends string = never, F extends string = '*', E extends string = never>(meta: EntityMetadata<T>, entity: T, options: FindOneOptions<T, P, F, E>): boolean;
482
- protected prepareOptions(options: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any>): void;
514
+ protected prepareOptions(options: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any> | CountOptions<any, any>): void;
483
515
  /**
484
516
  * @internal
485
517
  */
@@ -488,15 +520,15 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
488
520
  * @internal
489
521
  */
490
522
  tryCache<T extends object, R>(entityName: string, config: boolean | number | [string, number] | undefined, key: unknown, refresh?: boolean, merge?: boolean): Promise<{
491
- data?: R;
523
+ data?: R | null;
492
524
  key: string;
493
525
  } | undefined>;
494
526
  /**
495
527
  * @internal
496
528
  */
497
- storeCache(config: boolean | number | [string, number] | undefined, key: {
529
+ storeCache<T>(config: boolean | number | [string, number] | undefined, key: {
498
530
  key: string;
499
- }, data: unknown | (() => unknown)): Promise<void>;
531
+ }, data: T | (() => T)): Promise<void>;
500
532
  /**
501
533
  * Clears result cache for given cache key. If we want to be able to call this method,
502
534
  * we need to set the cache key explicitly when storing the cache.
@@ -520,6 +552,8 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
520
552
  * if executed inside request context handler.
521
553
  */
522
554
  set schema(schema: string | null | undefined);
555
+ /** @internal */
556
+ getDataLoader(type: 'ref' | '1:m' | 'm:n'): Promise<any>;
523
557
  /**
524
558
  * Returns the ID of this EntityManager. Respects the context, so global EM will give you the contextual ID
525
559
  * if executed inside request context handler.
@@ -539,11 +573,20 @@ export interface CreateOptions<Convert extends boolean> {
539
573
  partial?: boolean;
540
574
  /** convert raw database values based on mapped types (by default, already converted values are expected) */
541
575
  convertCustomTypes?: Convert;
576
+ /**
577
+ * Property `onCreate` hooks are normally executed during `flush` operation.
578
+ * With this option, they will be processed early inside `em.create()` method.
579
+ */
580
+ processOnCreateHooksEarly?: boolean;
542
581
  }
543
582
  export interface MergeOptions {
544
583
  refresh?: boolean;
545
584
  convertCustomTypes?: boolean;
546
585
  schema?: string;
586
+ disableContextResolution?: boolean;
587
+ keepIdentity?: boolean;
588
+ validate?: boolean;
589
+ cascade?: boolean; /** @default true */
547
590
  }
548
591
  export interface ForkOptions {
549
592
  /** do we want a clear identity map? defaults to true */
@@ -557,7 +600,7 @@ export interface ForkOptions {
557
600
  /** use this flag to ignore the current async context - this is required if we want to call `em.fork()` inside the `getContext` handler */
558
601
  disableContextResolution?: boolean;
559
602
  /** set flush mode for this fork, overrides the global option can be overridden locally via FindOptions */
560
- flushMode?: FlushMode;
603
+ flushMode?: FlushMode | `${FlushMode}`;
561
604
  /** disable transactions for this fork */
562
605
  disableTransactions?: boolean;
563
606
  /** should we keep the transaction context of the parent EM? */