@mikro-orm/core 7.0.0-dev.5 → 7.0.0-dev.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EntityManager.d.ts +81 -27
- package/EntityManager.js +287 -175
- package/MikroORM.d.ts +6 -6
- package/MikroORM.js +31 -74
- package/README.md +3 -2
- package/cache/FileCacheAdapter.d.ts +2 -1
- package/cache/FileCacheAdapter.js +6 -4
- package/connections/Connection.d.ts +9 -5
- package/connections/Connection.js +16 -13
- package/decorators/Embedded.d.ts +5 -11
- package/decorators/Entity.d.ts +18 -3
- package/decorators/Indexed.d.ts +2 -2
- package/decorators/ManyToMany.d.ts +2 -0
- package/decorators/ManyToOne.d.ts +4 -0
- package/decorators/OneToOne.d.ts +4 -0
- package/decorators/Property.d.ts +53 -9
- package/decorators/Transactional.d.ts +1 -0
- package/decorators/Transactional.js +3 -3
- package/decorators/index.d.ts +1 -1
- package/drivers/DatabaseDriver.d.ts +10 -5
- package/drivers/DatabaseDriver.js +4 -4
- package/drivers/IDatabaseDriver.d.ts +28 -4
- package/entity/ArrayCollection.d.ts +6 -4
- package/entity/ArrayCollection.js +26 -9
- package/entity/BaseEntity.d.ts +0 -1
- package/entity/BaseEntity.js +0 -3
- package/entity/Collection.d.ts +3 -4
- package/entity/Collection.js +37 -17
- package/entity/EntityAssigner.d.ts +1 -1
- package/entity/EntityAssigner.js +9 -1
- package/entity/EntityFactory.d.ts +7 -0
- package/entity/EntityFactory.js +29 -11
- package/entity/EntityHelper.js +25 -8
- package/entity/EntityLoader.d.ts +5 -4
- package/entity/EntityLoader.js +69 -36
- package/entity/EntityRepository.d.ts +1 -1
- package/entity/EntityValidator.js +1 -1
- package/entity/Reference.d.ts +9 -7
- package/entity/Reference.js +30 -3
- package/entity/WrappedEntity.d.ts +0 -2
- package/entity/WrappedEntity.js +1 -5
- package/entity/defineEntity.d.ts +555 -0
- package/entity/defineEntity.js +529 -0
- package/entity/index.d.ts +2 -0
- package/entity/index.js +2 -0
- package/entity/utils.d.ts +7 -0
- package/entity/utils.js +15 -3
- package/enums.d.ts +16 -3
- package/enums.js +13 -0
- package/errors.d.ts +6 -1
- package/errors.js +14 -4
- package/events/EventSubscriber.d.ts +3 -1
- package/hydration/ObjectHydrator.d.ts +4 -4
- package/hydration/ObjectHydrator.js +35 -24
- package/index.d.ts +2 -1
- package/index.js +1 -1
- package/logging/DefaultLogger.d.ts +1 -1
- package/logging/SimpleLogger.d.ts +1 -1
- package/metadata/EntitySchema.d.ts +8 -4
- package/metadata/EntitySchema.js +39 -19
- package/metadata/MetadataDiscovery.d.ts +4 -4
- package/metadata/MetadataDiscovery.js +139 -122
- package/metadata/MetadataStorage.js +1 -1
- package/metadata/MetadataValidator.js +4 -3
- package/naming-strategy/AbstractNamingStrategy.d.ts +5 -1
- package/naming-strategy/AbstractNamingStrategy.js +7 -1
- package/naming-strategy/NamingStrategy.d.ts +11 -1
- package/package.json +5 -5
- package/platforms/Platform.d.ts +5 -3
- package/platforms/Platform.js +4 -8
- package/serialization/EntitySerializer.d.ts +2 -0
- package/serialization/EntitySerializer.js +23 -5
- package/serialization/EntityTransformer.js +16 -6
- package/serialization/SerializationContext.js +14 -11
- package/types/BigIntType.d.ts +9 -6
- package/types/BigIntType.js +3 -0
- package/types/BooleanType.d.ts +1 -1
- package/types/DecimalType.d.ts +6 -4
- package/types/DecimalType.js +1 -1
- package/types/DoubleType.js +1 -1
- package/types/JsonType.d.ts +1 -1
- package/types/JsonType.js +7 -2
- package/types/Type.d.ts +2 -1
- package/types/Type.js +1 -1
- package/types/index.d.ts +1 -1
- package/typings.d.ts +89 -49
- package/typings.js +31 -31
- package/unit-of-work/ChangeSetComputer.js +8 -3
- package/unit-of-work/ChangeSetPersister.d.ts +4 -2
- package/unit-of-work/ChangeSetPersister.js +37 -16
- package/unit-of-work/UnitOfWork.d.ts +8 -1
- package/unit-of-work/UnitOfWork.js +110 -53
- package/utils/AbstractSchemaGenerator.js +3 -1
- package/utils/Configuration.d.ts +200 -183
- package/utils/Configuration.js +137 -144
- package/utils/ConfigurationLoader.d.ts +9 -22
- package/utils/ConfigurationLoader.js +49 -72
- package/utils/Cursor.d.ts +3 -3
- package/utils/Cursor.js +3 -0
- package/utils/DataloaderUtils.d.ts +7 -2
- package/utils/DataloaderUtils.js +38 -7
- package/utils/EntityComparator.d.ts +6 -2
- package/utils/EntityComparator.js +104 -58
- package/utils/QueryHelper.d.ts +9 -1
- package/utils/QueryHelper.js +66 -5
- package/utils/RawQueryFragment.d.ts +36 -4
- package/utils/RawQueryFragment.js +34 -13
- package/utils/TransactionManager.d.ts +65 -0
- package/utils/TransactionManager.js +223 -0
- package/utils/Utils.d.ts +13 -11
- package/utils/Utils.js +82 -55
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/upsert-utils.d.ts +7 -2
- package/utils/upsert-utils.js +52 -1
package/EntityManager.d.ts
CHANGED
|
@@ -6,11 +6,11 @@ import { EntityFactory } from './entity/EntityFactory.js';
|
|
|
6
6
|
import { type AssignOptions } from './entity/EntityAssigner.js';
|
|
7
7
|
import { EntityValidator } from './entity/EntityValidator.js';
|
|
8
8
|
import { type EntityRepository } from './entity/EntityRepository.js';
|
|
9
|
-
import { type EntityLoaderOptions } from './entity/EntityLoader.js';
|
|
9
|
+
import { EntityLoader, type EntityLoaderOptions } from './entity/EntityLoader.js';
|
|
10
10
|
import { Reference } from './entity/Reference.js';
|
|
11
11
|
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,
|
|
12
|
+
import type { CountOptions, DeleteOptions, FilterOptions, FindAllOptions, FindByCursorOptions, FindOneOptions, FindOneOrFailOptions, FindOptions, GetReferenceOptions, IDatabaseDriver, LockOptions, NativeInsertUpdateOptions, StreamOptions, UpdateOptions, UpsertManyOptions, UpsertOptions } from './drivers/IDatabaseDriver.js';
|
|
13
|
+
import type { AnyEntity, 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
14
|
import { FlushMode, LockMode, PopulatePath, type TransactionOptions } from './enums.js';
|
|
15
15
|
import type { MetadataStorage } from './metadata/MetadataStorage.js';
|
|
16
16
|
import type { Transaction } from './connections/Connection.js';
|
|
@@ -27,12 +27,15 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
27
27
|
protected readonly metadata: MetadataStorage;
|
|
28
28
|
protected readonly useContext: boolean;
|
|
29
29
|
protected readonly eventManager: EventManager;
|
|
30
|
+
/** @internal */
|
|
31
|
+
readonly '~entities'?: unknown;
|
|
30
32
|
private static counter;
|
|
31
33
|
readonly _id: number;
|
|
32
34
|
readonly global = false;
|
|
33
35
|
readonly name: string;
|
|
34
36
|
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
37
|
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)?]>;
|
|
38
|
+
protected readonly colLoaderMtoN: 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)?]>;
|
|
36
39
|
private readonly validator;
|
|
37
40
|
private readonly repositoryMap;
|
|
38
41
|
private readonly entityLoader;
|
|
@@ -80,6 +83,24 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
80
83
|
* Finds all entities matching your `where` query. You can pass additional options via the `options` parameter.
|
|
81
84
|
*/
|
|
82
85
|
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>[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Finds all entities and returns an async iterable (async generator) that yields results one by one.
|
|
88
|
+
* The results are merged and mapped to entity instances, without adding them to the identity map.
|
|
89
|
+
* You can disable merging by passing the options `{ mergeResults: false }`.
|
|
90
|
+
* With `mergeResults` disabled, to-many collections will contain at most one item, and you will get duplicate
|
|
91
|
+
* root entities when there are multiple items in the populated collection.
|
|
92
|
+
* This is useful for processing large datasets without loading everything into memory at once.
|
|
93
|
+
*
|
|
94
|
+
* ```ts
|
|
95
|
+
* const stream = em.stream(Book, { populate: ['author'] });
|
|
96
|
+
*
|
|
97
|
+
* for await (const book of stream) {
|
|
98
|
+
* // book is an instance of Book entity
|
|
99
|
+
* console.log(book.title, book.author.name);
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
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
104
|
/**
|
|
84
105
|
* Finds all entities of given type, optionally matching the `where` condition provided in the `options` parameter.
|
|
85
106
|
*/
|
|
@@ -88,19 +109,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
88
109
|
/**
|
|
89
110
|
* Registers global filter to this entity manager. Global filters are enabled by default (unless disabled via last parameter).
|
|
90
111
|
*/
|
|
91
|
-
addFilter<
|
|
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;
|
|
112
|
+
addFilter<T extends object>(options: FilterDef<T>): void;
|
|
104
113
|
/**
|
|
105
114
|
* Sets filter parameter values globally inside context defined by this entity manager.
|
|
106
115
|
* If you want to set shared value for all contexts, be sure to use the root entity manager.
|
|
@@ -117,20 +126,25 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
117
126
|
/**
|
|
118
127
|
* Gets logger context for this entity manager.
|
|
119
128
|
*/
|
|
120
|
-
getLoggerContext<T extends Dictionary = Dictionary>(
|
|
129
|
+
getLoggerContext<T extends Dictionary = Dictionary>(options?: {
|
|
130
|
+
disableContextResolution?: boolean;
|
|
131
|
+
}): T;
|
|
121
132
|
setFlushMode(flushMode?: FlushMode): void;
|
|
122
133
|
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
134
|
protected applyDiscriminatorCondition<Entity extends object>(entityName: string, where: FilterQuery<Entity>): FilterQuery<Entity>;
|
|
124
135
|
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>,
|
|
136
|
+
protected getJoinedFilters<Entity extends object>(meta: EntityMetadata<Entity>, options: FindOptions<Entity, any, any, any> | FindOneOptions<Entity, any, any, any>): Promise<ObjectQuery<Entity> | undefined>;
|
|
126
137
|
/**
|
|
127
138
|
* 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
139
|
*/
|
|
129
|
-
protected autoJoinRefsForFilters<T extends object>(meta: EntityMetadata<T>, options: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any
|
|
140
|
+
protected autoJoinRefsForFilters<T extends object>(meta: EntityMetadata<T>, options: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any>, parent?: {
|
|
141
|
+
className: string;
|
|
142
|
+
propName: string;
|
|
143
|
+
}): Promise<void>;
|
|
130
144
|
/**
|
|
131
145
|
* @internal
|
|
132
146
|
*/
|
|
133
|
-
applyFilters<Entity extends object>(entityName: string, where: FilterQuery<Entity> | undefined, options:
|
|
147
|
+
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
148
|
/**
|
|
135
149
|
* Calls `em.find()` and `em.count()` with the same arguments (where applicable) and returns the results as tuple
|
|
136
150
|
* where the first element is the array of entities, and the second is the count.
|
|
@@ -171,6 +185,10 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
171
185
|
* });
|
|
172
186
|
* ```
|
|
173
187
|
*
|
|
188
|
+
* The options also support an `includeCount` (true by default) option. If set to false, the `totalCount` is not
|
|
189
|
+
* returned as part of the cursor. This is useful for performance reason, when you don't care about the total number
|
|
190
|
+
* of pages.
|
|
191
|
+
*
|
|
174
192
|
* The `Cursor` object provides the following interface:
|
|
175
193
|
*
|
|
176
194
|
* ```ts
|
|
@@ -180,7 +198,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
180
198
|
* User { ... },
|
|
181
199
|
* User { ... },
|
|
182
200
|
* ],
|
|
183
|
-
* totalCount: 50,
|
|
201
|
+
* totalCount: 50, // not included if `includeCount: false`
|
|
184
202
|
* startCursor: 'WzRd',
|
|
185
203
|
* endCursor: 'WzZd',
|
|
186
204
|
* hasPrevPage: true,
|
|
@@ -188,7 +206,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
188
206
|
* }
|
|
189
207
|
* ```
|
|
190
208
|
*/
|
|
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>>;
|
|
209
|
+
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
210
|
/**
|
|
193
211
|
* Refreshes the persistent state of an entity from the database, overriding any local changes that have not yet been
|
|
194
212
|
* persisted. Returns the same entity instance (same object reference), but re-hydrated. If the entity is no longer
|
|
@@ -263,6 +281,29 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
263
281
|
upsertMany<Entity extends object, Fields extends string = any>(entityNameOrEntity: EntityName<Entity> | Entity[], data?: (EntityData<Entity> | NoInfer<Entity>)[], options?: UpsertManyOptions<Entity, Fields>): Promise<Entity[]>;
|
|
264
282
|
/**
|
|
265
283
|
* Runs your callback wrapped inside a database transaction.
|
|
284
|
+
*
|
|
285
|
+
* If a transaction is already active, a new savepoint (nested transaction) will be created by default. This behavior
|
|
286
|
+
* can be controlled via the `propagation` option. Use the provided EntityManager instance for all operations that
|
|
287
|
+
* should be part of the transaction. You can safely use a global EntityManager instance from a DI container, as this
|
|
288
|
+
* method automatically creates an async context for the transaction.
|
|
289
|
+
*
|
|
290
|
+
* **Concurrency note:** When running multiple transactions concurrently (e.g. in parallel requests or jobs), use the
|
|
291
|
+
* `clear: true` option. This ensures the callback runs in a clear fork of the EntityManager, providing full isolation
|
|
292
|
+
* between concurrent transactional handlers. Using `clear: true` is an alternative to forking explicitly and calling
|
|
293
|
+
* the method on the new fork – it already provides the necessary isolation for safe concurrent usage.
|
|
294
|
+
*
|
|
295
|
+
* **Propagation note:** Changes made within a transaction (whether top-level or nested) are always propagated to the
|
|
296
|
+
* parent context, unless the parent context is a global one. If you want to avoid that, fork the EntityManager first
|
|
297
|
+
* and then call this method on the fork.
|
|
298
|
+
*
|
|
299
|
+
* **Example:**
|
|
300
|
+
* ```ts
|
|
301
|
+
* await em.transactional(async (em) => {
|
|
302
|
+
* const author = new Author('Jon');
|
|
303
|
+
* em.persist(author);
|
|
304
|
+
* // flush is called automatically at the end of the callback
|
|
305
|
+
* });
|
|
306
|
+
* ```
|
|
266
307
|
*/
|
|
267
308
|
transactional<T>(cb: (em: this) => T | Promise<T>, options?: TransactionOptions): Promise<T>;
|
|
268
309
|
/**
|
|
@@ -419,7 +460,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
419
460
|
/**
|
|
420
461
|
* Loads specified relations in batch. This will execute one query for each relation, that will populate it on all the specified entities.
|
|
421
462
|
*/
|
|
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>>;
|
|
463
|
+
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
464
|
/**
|
|
424
465
|
* Returns new EntityManager instance with its own identity map
|
|
425
466
|
*/
|
|
@@ -432,6 +473,10 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
432
473
|
* Gets the EntityFactory used by the EntityManager.
|
|
433
474
|
*/
|
|
434
475
|
getEntityFactory(): EntityFactory;
|
|
476
|
+
/**
|
|
477
|
+
* @internal use `em.populate()` as the user facing API, this is exposed only for internal usage
|
|
478
|
+
*/
|
|
479
|
+
getEntityLoader(): EntityLoader;
|
|
435
480
|
/**
|
|
436
481
|
* Gets the Hydrator used by the EntityManager.
|
|
437
482
|
*/
|
|
@@ -479,7 +524,7 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
479
524
|
* some additional lazy properties, if so, we reload and merge the data from database
|
|
480
525
|
*/
|
|
481
526
|
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;
|
|
527
|
+
protected prepareOptions(options: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any> | CountOptions<any, any>): void;
|
|
483
528
|
/**
|
|
484
529
|
* @internal
|
|
485
530
|
*/
|
|
@@ -488,15 +533,15 @@ export declare class EntityManager<Driver extends IDatabaseDriver = IDatabaseDri
|
|
|
488
533
|
* @internal
|
|
489
534
|
*/
|
|
490
535
|
tryCache<T extends object, R>(entityName: string, config: boolean | number | [string, number] | undefined, key: unknown, refresh?: boolean, merge?: boolean): Promise<{
|
|
491
|
-
data?: R;
|
|
536
|
+
data?: R | null;
|
|
492
537
|
key: string;
|
|
493
538
|
} | undefined>;
|
|
494
539
|
/**
|
|
495
540
|
* @internal
|
|
496
541
|
*/
|
|
497
|
-
storeCache(config: boolean | number | [string, number] | undefined, key: {
|
|
542
|
+
storeCache<T>(config: boolean | number | [string, number] | undefined, key: {
|
|
498
543
|
key: string;
|
|
499
|
-
}, data:
|
|
544
|
+
}, data: T | (() => T)): Promise<void>;
|
|
500
545
|
/**
|
|
501
546
|
* Clears result cache for given cache key. If we want to be able to call this method,
|
|
502
547
|
* we need to set the cache key explicitly when storing the cache.
|
|
@@ -539,11 +584,20 @@ export interface CreateOptions<Convert extends boolean> {
|
|
|
539
584
|
partial?: boolean;
|
|
540
585
|
/** convert raw database values based on mapped types (by default, already converted values are expected) */
|
|
541
586
|
convertCustomTypes?: Convert;
|
|
587
|
+
/**
|
|
588
|
+
* Property `onCreate` hooks are normally executed during `flush` operation.
|
|
589
|
+
* With this option, they will be processed early inside `em.create()` method.
|
|
590
|
+
*/
|
|
591
|
+
processOnCreateHooksEarly?: boolean;
|
|
542
592
|
}
|
|
543
593
|
export interface MergeOptions {
|
|
544
594
|
refresh?: boolean;
|
|
545
595
|
convertCustomTypes?: boolean;
|
|
546
596
|
schema?: string;
|
|
597
|
+
disableContextResolution?: boolean;
|
|
598
|
+
keepIdentity?: boolean;
|
|
599
|
+
validate?: boolean;
|
|
600
|
+
cascade?: boolean; /** @default true */
|
|
547
601
|
}
|
|
548
602
|
export interface ForkOptions {
|
|
549
603
|
/** do we want a clear identity map? defaults to true */
|