@mikro-orm/core 7.0.10 → 7.0.11-dev.1

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 (206) hide show
  1. package/EntityManager.d.ts +584 -885
  2. package/EntityManager.js +1900 -1927
  3. package/MikroORM.d.ts +74 -103
  4. package/MikroORM.js +178 -177
  5. package/README.md +1 -1
  6. package/cache/CacheAdapter.d.ts +36 -36
  7. package/cache/FileCacheAdapter.d.ts +24 -30
  8. package/cache/FileCacheAdapter.js +78 -80
  9. package/cache/GeneratedCacheAdapter.d.ts +20 -18
  10. package/cache/GeneratedCacheAdapter.js +30 -30
  11. package/cache/MemoryCacheAdapter.d.ts +20 -18
  12. package/cache/MemoryCacheAdapter.js +36 -35
  13. package/cache/NullCacheAdapter.d.ts +16 -16
  14. package/cache/NullCacheAdapter.js +24 -24
  15. package/connections/Connection.d.ts +84 -95
  16. package/connections/Connection.js +168 -165
  17. package/drivers/DatabaseDriver.d.ts +80 -186
  18. package/drivers/DatabaseDriver.js +443 -450
  19. package/drivers/IDatabaseDriver.d.ts +301 -440
  20. package/entity/BaseEntity.d.ts +83 -120
  21. package/entity/BaseEntity.js +43 -43
  22. package/entity/Collection.d.ts +181 -215
  23. package/entity/Collection.js +724 -730
  24. package/entity/EntityAssigner.d.ts +77 -88
  25. package/entity/EntityAssigner.js +230 -231
  26. package/entity/EntityFactory.d.ts +55 -67
  27. package/entity/EntityFactory.js +416 -457
  28. package/entity/EntityHelper.d.ts +23 -35
  29. package/entity/EntityHelper.js +290 -302
  30. package/entity/EntityIdentifier.d.ts +4 -4
  31. package/entity/EntityIdentifier.js +10 -10
  32. package/entity/EntityLoader.d.ts +72 -98
  33. package/entity/EntityLoader.js +776 -805
  34. package/entity/EntityRepository.d.ts +201 -316
  35. package/entity/EntityRepository.js +213 -213
  36. package/entity/PolymorphicRef.d.ts +5 -5
  37. package/entity/PolymorphicRef.js +10 -10
  38. package/entity/Reference.d.ts +83 -127
  39. package/entity/Reference.js +277 -281
  40. package/entity/WrappedEntity.d.ts +72 -115
  41. package/entity/WrappedEntity.js +166 -168
  42. package/entity/defineEntity.d.ts +654 -1359
  43. package/entity/defineEntity.js +518 -527
  44. package/entity/utils.d.ts +3 -13
  45. package/entity/utils.js +73 -71
  46. package/entity/validators.js +43 -43
  47. package/entity/wrap.js +8 -8
  48. package/enums.d.ts +253 -258
  49. package/enums.js +252 -251
  50. package/errors.d.ts +72 -114
  51. package/errors.js +253 -350
  52. package/events/EventManager.d.ts +14 -26
  53. package/events/EventManager.js +77 -79
  54. package/events/EventSubscriber.d.ts +29 -29
  55. package/events/TransactionEventBroadcaster.d.ts +8 -15
  56. package/events/TransactionEventBroadcaster.js +14 -14
  57. package/exceptions.d.ts +40 -23
  58. package/exceptions.js +52 -35
  59. package/hydration/Hydrator.d.ts +17 -42
  60. package/hydration/Hydrator.js +43 -43
  61. package/hydration/ObjectHydrator.d.ts +17 -50
  62. package/hydration/ObjectHydrator.js +418 -483
  63. package/index.d.ts +2 -116
  64. package/index.js +1 -10
  65. package/logging/DefaultLogger.d.ts +32 -34
  66. package/logging/DefaultLogger.js +86 -86
  67. package/logging/Logger.d.ts +41 -41
  68. package/logging/SimpleLogger.d.ts +11 -13
  69. package/logging/SimpleLogger.js +22 -22
  70. package/logging/colors.d.ts +6 -6
  71. package/logging/colors.js +10 -11
  72. package/logging/inspect.js +7 -7
  73. package/metadata/EntitySchema.d.ts +130 -214
  74. package/metadata/EntitySchema.js +412 -411
  75. package/metadata/MetadataDiscovery.d.ts +114 -114
  76. package/metadata/MetadataDiscovery.js +1884 -1962
  77. package/metadata/MetadataProvider.d.ts +26 -29
  78. package/metadata/MetadataProvider.js +97 -95
  79. package/metadata/MetadataStorage.d.ts +32 -38
  80. package/metadata/MetadataStorage.js +118 -118
  81. package/metadata/MetadataValidator.d.ts +39 -39
  82. package/metadata/MetadataValidator.js +338 -381
  83. package/metadata/discover-entities.d.ts +2 -5
  84. package/metadata/discover-entities.js +37 -35
  85. package/metadata/types.d.ts +531 -615
  86. package/naming-strategy/AbstractNamingStrategy.d.ts +39 -54
  87. package/naming-strategy/AbstractNamingStrategy.js +85 -90
  88. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  89. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  90. package/naming-strategy/MongoNamingStrategy.d.ts +6 -6
  91. package/naming-strategy/MongoNamingStrategy.js +18 -18
  92. package/naming-strategy/NamingStrategy.d.ts +99 -109
  93. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  94. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  95. package/not-supported.js +4 -7
  96. package/package.json +1 -1
  97. package/platforms/ExceptionConverter.d.ts +1 -1
  98. package/platforms/ExceptionConverter.js +4 -4
  99. package/platforms/Platform.d.ts +303 -312
  100. package/platforms/Platform.js +675 -695
  101. package/serialization/EntitySerializer.d.ts +26 -49
  102. package/serialization/EntitySerializer.js +218 -224
  103. package/serialization/EntityTransformer.d.ts +6 -10
  104. package/serialization/EntityTransformer.js +217 -219
  105. package/serialization/SerializationContext.d.ts +23 -27
  106. package/serialization/SerializationContext.js +105 -105
  107. package/types/ArrayType.d.ts +8 -8
  108. package/types/ArrayType.js +33 -33
  109. package/types/BigIntType.d.ts +10 -17
  110. package/types/BigIntType.js +37 -37
  111. package/types/BlobType.d.ts +3 -3
  112. package/types/BlobType.js +13 -13
  113. package/types/BooleanType.d.ts +4 -4
  114. package/types/BooleanType.js +12 -12
  115. package/types/CharacterType.d.ts +2 -2
  116. package/types/CharacterType.js +6 -6
  117. package/types/DateTimeType.d.ts +5 -5
  118. package/types/DateTimeType.js +15 -15
  119. package/types/DateType.d.ts +5 -5
  120. package/types/DateType.js +15 -15
  121. package/types/DecimalType.d.ts +7 -7
  122. package/types/DecimalType.js +26 -26
  123. package/types/DoubleType.d.ts +3 -3
  124. package/types/DoubleType.js +12 -12
  125. package/types/EnumArrayType.d.ts +5 -5
  126. package/types/EnumArrayType.js +24 -24
  127. package/types/EnumType.d.ts +3 -3
  128. package/types/EnumType.js +11 -11
  129. package/types/FloatType.d.ts +3 -3
  130. package/types/FloatType.js +9 -9
  131. package/types/IntegerType.d.ts +3 -3
  132. package/types/IntegerType.js +9 -9
  133. package/types/IntervalType.d.ts +4 -4
  134. package/types/IntervalType.js +12 -12
  135. package/types/JsonType.d.ts +8 -8
  136. package/types/JsonType.js +32 -32
  137. package/types/MediumIntType.d.ts +1 -1
  138. package/types/MediumIntType.js +3 -3
  139. package/types/SmallIntType.d.ts +3 -3
  140. package/types/SmallIntType.js +9 -9
  141. package/types/StringType.d.ts +4 -4
  142. package/types/StringType.js +12 -12
  143. package/types/TextType.d.ts +3 -3
  144. package/types/TextType.js +9 -9
  145. package/types/TimeType.d.ts +5 -5
  146. package/types/TimeType.js +17 -17
  147. package/types/TinyIntType.d.ts +3 -3
  148. package/types/TinyIntType.js +10 -10
  149. package/types/Type.d.ts +79 -83
  150. package/types/Type.js +82 -82
  151. package/types/Uint8ArrayType.d.ts +4 -4
  152. package/types/Uint8ArrayType.js +21 -21
  153. package/types/UnknownType.d.ts +4 -4
  154. package/types/UnknownType.js +12 -12
  155. package/types/UuidType.d.ts +5 -5
  156. package/types/UuidType.js +19 -19
  157. package/types/index.d.ts +49 -75
  158. package/types/index.js +26 -52
  159. package/typings.d.ts +741 -1254
  160. package/typings.js +233 -244
  161. package/unit-of-work/ChangeSet.d.ts +26 -26
  162. package/unit-of-work/ChangeSet.js +56 -56
  163. package/unit-of-work/ChangeSetComputer.d.ts +12 -12
  164. package/unit-of-work/ChangeSetComputer.js +179 -187
  165. package/unit-of-work/ChangeSetPersister.d.ts +50 -69
  166. package/unit-of-work/ChangeSetPersister.js +442 -465
  167. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  168. package/unit-of-work/CommitOrderCalculator.js +88 -89
  169. package/unit-of-work/IdentityMap.d.ts +31 -31
  170. package/unit-of-work/IdentityMap.js +105 -105
  171. package/unit-of-work/UnitOfWork.d.ts +141 -181
  172. package/unit-of-work/UnitOfWork.js +1223 -1237
  173. package/utils/AbstractMigrator.d.ts +91 -111
  174. package/utils/AbstractMigrator.js +275 -275
  175. package/utils/AbstractSchemaGenerator.d.ts +34 -43
  176. package/utils/AbstractSchemaGenerator.js +122 -121
  177. package/utils/AsyncContext.d.ts +3 -3
  178. package/utils/AsyncContext.js +35 -34
  179. package/utils/Configuration.d.ts +808 -852
  180. package/utils/Configuration.js +344 -359
  181. package/utils/Cursor.d.ts +22 -40
  182. package/utils/Cursor.js +127 -135
  183. package/utils/DataloaderUtils.d.ts +43 -58
  184. package/utils/DataloaderUtils.js +198 -203
  185. package/utils/EntityComparator.d.ts +82 -99
  186. package/utils/EntityComparator.js +737 -829
  187. package/utils/NullHighlighter.d.ts +1 -1
  188. package/utils/NullHighlighter.js +3 -3
  189. package/utils/QueryHelper.d.ts +51 -79
  190. package/utils/QueryHelper.js +364 -375
  191. package/utils/RawQueryFragment.d.ts +34 -50
  192. package/utils/RawQueryFragment.js +121 -122
  193. package/utils/RequestContext.d.ts +32 -32
  194. package/utils/RequestContext.js +53 -52
  195. package/utils/TransactionContext.d.ts +16 -16
  196. package/utils/TransactionContext.js +27 -27
  197. package/utils/TransactionManager.d.ts +58 -58
  198. package/utils/TransactionManager.js +200 -202
  199. package/utils/Utils.d.ts +145 -204
  200. package/utils/Utils.js +826 -826
  201. package/utils/clone.js +114 -105
  202. package/utils/env-vars.js +88 -90
  203. package/utils/fs-utils.d.ts +15 -15
  204. package/utils/fs-utils.js +182 -181
  205. package/utils/upsert-utils.d.ts +5 -20
  206. package/utils/upsert-utils.js +116 -114
package/MikroORM.d.ts CHANGED
@@ -3,16 +3,7 @@ import { type EntitySchema } from './metadata/EntitySchema.js';
3
3
  import { MetadataStorage } from './metadata/MetadataStorage.js';
4
4
  import { Configuration, type Options } from './utils/Configuration.js';
5
5
  import type { EntityManager } from './EntityManager.js';
6
- import type {
7
- AnyEntity,
8
- Constructor,
9
- EntityClass,
10
- EntityMetadata,
11
- EntityName,
12
- IEntityGenerator,
13
- IMigrator,
14
- ISeedManager,
15
- } from './typings.js';
6
+ import type { AnyEntity, Constructor, EntityClass, EntityMetadata, EntityName, IEntityGenerator, IMigrator, ISeedManager } from './typings.js';
16
7
  /** @internal */
17
8
  export declare function loadOptionalDependencies(options: Partial<Options>): Promise<void>;
18
9
  /**
@@ -43,101 +34,81 @@ export declare function loadOptionalDependencies(options: Partial<Options>): Pro
43
34
  * await em.flush();
44
35
  * ```
45
36
  */
46
- export declare class MikroORM<
47
- Driver extends IDatabaseDriver = IDatabaseDriver,
48
- EM extends Driver[typeof EntityManagerType] & EntityManager<Driver> = Driver[typeof EntityManagerType] &
49
- EntityManager<Driver>,
50
- Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
51
- | string
52
- | EntityClass<AnyEntity>
53
- | EntitySchema
54
- )[],
55
- > {
56
- #private;
57
- /** The global EntityManager instance. If you are using `RequestContext` helper, it will automatically pick the request specific context under the hood */
58
- em: EM & {
59
- '~entities'?: Entities;
60
- };
61
- /** The database driver instance used by this ORM. */
62
- readonly driver: Driver;
63
- /** The ORM configuration instance. */
64
- readonly config: Configuration<Driver>;
65
- /**
66
- * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
67
- * If you omit the `options` parameter, your CLI config will be used.
68
- */
69
- static init<
70
- D extends IDatabaseDriver = IDatabaseDriver,
71
- EM extends D[typeof EntityManagerType] & EntityManager<D> = D[typeof EntityManagerType] & EntityManager<D>,
72
- Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
73
- | string
74
- | EntityClass<AnyEntity>
75
- | EntitySchema
76
- )[],
77
- >(options: Partial<Options<D, EM, Entities>>): Promise<MikroORM<D, EM, Entities>>;
78
- /**
79
- * Synchronous variant of the `init` method with some limitations:
80
- * - folder-based discovery not supported
81
- * - ORM extensions are not autoloaded
82
- * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
83
- */
84
- constructor(options: Partial<Options<Driver, EM, Entities>>);
85
- /**
86
- * Connects to the database.
87
- */
88
- connect(): Promise<Driver>;
89
- /**
90
- * Reconnects, possibly to a different database.
91
- */
92
- reconnect(options?: Partial<Options<Driver, EM, Entities>>): Promise<void>;
93
- /**
94
- * Checks whether the database connection is active.
95
- */
96
- isConnected(): Promise<boolean>;
97
- /**
98
- * Checks whether the database connection is active, returns the reason if not.
99
- */
100
- checkConnection(): Promise<
101
- | {
37
+ export declare class MikroORM<Driver extends IDatabaseDriver = IDatabaseDriver, EM extends Driver[typeof EntityManagerType] & EntityManager<Driver> = Driver[typeof EntityManagerType] & EntityManager<Driver>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]> {
38
+ #private;
39
+ /** The global EntityManager instance. If you are using `RequestContext` helper, it will automatically pick the request specific context under the hood */
40
+ em: EM & {
41
+ '~entities'?: Entities;
42
+ };
43
+ /** The database driver instance used by this ORM. */
44
+ readonly driver: Driver;
45
+ /** The ORM configuration instance. */
46
+ readonly config: Configuration<Driver>;
47
+ /**
48
+ * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
49
+ * If you omit the `options` parameter, your CLI config will be used.
50
+ */
51
+ static init<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager<D> = D[typeof EntityManagerType] & EntityManager<D>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]>(options: Partial<Options<D, EM, Entities>>): Promise<MikroORM<D, EM, Entities>>;
52
+ /**
53
+ * Synchronous variant of the `init` method with some limitations:
54
+ * - folder-based discovery not supported
55
+ * - ORM extensions are not autoloaded
56
+ * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
57
+ */
58
+ constructor(options: Partial<Options<Driver, EM, Entities>>);
59
+ /**
60
+ * Connects to the database.
61
+ */
62
+ connect(): Promise<Driver>;
63
+ /**
64
+ * Reconnects, possibly to a different database.
65
+ */
66
+ reconnect(options?: Partial<Options<Driver, EM, Entities>>): Promise<void>;
67
+ /**
68
+ * Checks whether the database connection is active.
69
+ */
70
+ isConnected(): Promise<boolean>;
71
+ /**
72
+ * Checks whether the database connection is active, returns the reason if not.
73
+ */
74
+ checkConnection(): Promise<{
102
75
  ok: true;
103
- }
104
- | {
76
+ } | {
105
77
  ok: false;
106
78
  reason: string;
107
79
  error?: Error;
108
- }
109
- >;
110
- /**
111
- * Closes the database connection.
112
- */
113
- close(force?: boolean): Promise<void>;
114
- /**
115
- * Gets the `MetadataStorage`.
116
- */
117
- getMetadata(): MetadataStorage;
118
- /**
119
- * Gets the `EntityMetadata` instance when provided with the `entityName` parameter.
120
- */
121
- getMetadata<Entity extends object>(entityName: EntityName<Entity>): EntityMetadata<Entity>;
122
- private createEntityManager;
123
- /**
124
- * Allows dynamically discovering new entity by reference, handy for testing schema diffing.
125
- */
126
- discoverEntity<T extends Constructor | EntitySchema>(entities: T | T[], reset?: EntityName | EntityName[]): void;
127
- /**
128
- * Gets the SchemaGenerator.
129
- */
130
- get schema(): ReturnType<ReturnType<Driver['getPlatform']>['getSchemaGenerator']>;
131
- /**
132
- * Gets the SeedManager
133
- */
134
- get seeder(): ISeedManager;
135
- /**
136
- * Gets the Migrator.
137
- */
138
- get migrator(): IMigrator;
139
- /**
140
- * Gets the EntityGenerator.
141
- */
142
- get entityGenerator(): IEntityGenerator;
80
+ }>;
81
+ /**
82
+ * Closes the database connection.
83
+ */
84
+ close(force?: boolean): Promise<void>;
85
+ /**
86
+ * Gets the `MetadataStorage`.
87
+ */
88
+ getMetadata(): MetadataStorage;
89
+ /**
90
+ * Gets the `EntityMetadata` instance when provided with the `entityName` parameter.
91
+ */
92
+ getMetadata<Entity extends object>(entityName: EntityName<Entity>): EntityMetadata<Entity>;
93
+ private createEntityManager;
94
+ /**
95
+ * Allows dynamically discovering new entity by reference, handy for testing schema diffing.
96
+ */
97
+ discoverEntity<T extends Constructor | EntitySchema>(entities: T | T[], reset?: EntityName | EntityName[]): void;
98
+ /**
99
+ * Gets the SchemaGenerator.
100
+ */
101
+ get schema(): ReturnType<ReturnType<Driver['getPlatform']>['getSchemaGenerator']>;
102
+ /**
103
+ * Gets the SeedManager
104
+ */
105
+ get seeder(): ISeedManager;
106
+ /**
107
+ * Gets the Migrator.
108
+ */
109
+ get migrator(): IMigrator;
110
+ /**
111
+ * Gets the EntityGenerator.
112
+ */
113
+ get entityGenerator(): IEntityGenerator;
143
114
  }
package/MikroORM.js CHANGED
@@ -5,40 +5,41 @@ import { loadEnvironmentVars } from './utils/env-vars.js';
5
5
  import { Utils } from './utils/Utils.js';
6
6
  import { colors } from './logging/colors.js';
7
7
  async function tryRegisterExtension(name, pkg, extensions) {
8
- try {
9
- const url = import.meta.resolve(pkg);
10
- const mod = await import(url);
11
- if (mod[name]) {
12
- extensions.push(mod[name]);
13
- }
14
- } catch {
15
- // not installed
16
- }
8
+ try {
9
+ const url = import.meta.resolve(pkg);
10
+ const mod = await import(url);
11
+ if (mod[name]) {
12
+ extensions.push(mod[name]);
13
+ }
14
+ }
15
+ catch {
16
+ // not installed
17
+ }
17
18
  }
18
19
  /** @internal */
19
20
  export async function loadOptionalDependencies(options) {
20
- await import('@mikro-orm/core/fs-utils').then(m => m.fs.init()).catch(() => null);
21
- const extensions = options.extensions ?? [];
22
- const exists = name => extensions.some(ext => ext.name === name);
23
- if (!exists('SeedManager')) {
24
- await tryRegisterExtension('SeedManager', '@mikro-orm/seeder', extensions);
25
- }
26
- if (!exists('Migrator')) {
27
- await tryRegisterExtension('Migrator', '@mikro-orm/migrations', extensions);
28
- }
29
- /* v8 ignore if */
30
- if (!exists('Migrator')) {
31
- await tryRegisterExtension('Migrator', '@mikro-orm/migrations-mongodb', extensions);
32
- }
33
- if (!exists('EntityGenerator')) {
34
- await tryRegisterExtension('EntityGenerator', '@mikro-orm/entity-generator', extensions);
35
- }
36
- options.extensions = extensions;
37
- const metadataCacheEnabled = options.metadataCache?.enabled || options.metadataProvider?.useCache?.();
38
- if (metadataCacheEnabled) {
39
- options.metadataCache ??= {};
40
- options.metadataCache.adapter ??= await import('@mikro-orm/core/fs-utils').then(m => m.FileCacheAdapter);
41
- }
21
+ await import('@mikro-orm/core/fs-utils').then(m => m.fs.init()).catch(() => null);
22
+ const extensions = options.extensions ?? [];
23
+ const exists = (name) => extensions.some(ext => ext.name === name);
24
+ if (!exists('SeedManager')) {
25
+ await tryRegisterExtension('SeedManager', '@mikro-orm/seeder', extensions);
26
+ }
27
+ if (!exists('Migrator')) {
28
+ await tryRegisterExtension('Migrator', '@mikro-orm/migrations', extensions);
29
+ }
30
+ /* v8 ignore if */
31
+ if (!exists('Migrator')) {
32
+ await tryRegisterExtension('Migrator', '@mikro-orm/migrations-mongodb', extensions);
33
+ }
34
+ if (!exists('EntityGenerator')) {
35
+ await tryRegisterExtension('EntityGenerator', '@mikro-orm/entity-generator', extensions);
36
+ }
37
+ options.extensions = extensions;
38
+ const metadataCacheEnabled = options.metadataCache?.enabled || options.metadataProvider?.useCache?.();
39
+ if (metadataCacheEnabled) {
40
+ options.metadataCache ??= {};
41
+ options.metadataCache.adapter ??= await import('@mikro-orm/core/fs-utils').then(m => m.FileCacheAdapter);
42
+ }
42
43
  }
43
44
  /**
44
45
  * The main class used to configure and bootstrap the ORM.
@@ -69,150 +70,150 @@ export async function loadOptionalDependencies(options) {
69
70
  * ```
70
71
  */
71
72
  export class MikroORM {
72
- /** The global EntityManager instance. If you are using `RequestContext` helper, it will automatically pick the request specific context under the hood */
73
- em;
74
- /** The database driver instance used by this ORM. */
75
- driver;
76
- /** The ORM configuration instance. */
77
- config;
78
- #metadata;
79
- #logger;
80
- #discovery;
81
- /**
82
- * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
83
- * If you omit the `options` parameter, your CLI config will be used.
84
- */
85
- static async init(options) {
86
- /* v8 ignore next */
87
- if (!options) {
88
- throw new Error(`options parameter is required`);
89
- }
90
- options = { ...options };
91
- options.discovery ??= {};
92
- options.discovery.skipSyncDiscovery ??= true;
93
- await loadOptionalDependencies(options);
94
- const orm = new this(options);
95
- const preferTs = orm.config.get('preferTs', Utils.detectTypeScriptSupport());
96
- orm.#metadata = await orm.#discovery.discover(preferTs);
97
- orm.createEntityManager();
98
- return orm;
99
- }
100
- /**
101
- * Synchronous variant of the `init` method with some limitations:
102
- * - folder-based discovery not supported
103
- * - ORM extensions are not autoloaded
104
- * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
105
- */
106
- constructor(options) {
107
- const env = loadEnvironmentVars();
108
- options = options.preferEnvVars ? Utils.merge(options, env) : Utils.merge(env, options);
109
- this.config = new Configuration(options);
110
- const discovery = this.config.get('discovery');
111
- this.driver = this.config.getDriver();
112
- this.#logger = this.config.getLogger();
113
- this.#logger.log('info', `MikroORM version: ${colors.green(Utils.getORMVersion())}`);
114
- this.#discovery = new MetadataDiscovery(new MetadataStorage(), this.driver.getPlatform(), this.config);
115
- this.driver.getPlatform().init(this);
116
- for (const extension of this.config.get('extensions')) {
117
- extension.register(this);
118
- }
119
- if (!discovery.skipSyncDiscovery) {
120
- this.#metadata = this.#discovery.discoverSync();
121
- this.createEntityManager();
122
- }
123
- }
124
- /**
125
- * Connects to the database.
126
- */
127
- async connect() {
128
- await this.driver.connect();
129
- return this.driver;
130
- }
131
- /**
132
- * Reconnects, possibly to a different database.
133
- */
134
- async reconnect(options = {}) {
135
- /* v8 ignore next */
136
- for (const key of Utils.keys(options)) {
137
- this.config.set(key, options[key]);
138
- }
139
- await this.driver.reconnect();
140
- }
141
- /**
142
- * Checks whether the database connection is active.
143
- */
144
- async isConnected() {
145
- return this.driver.getConnection().isConnected();
146
- }
147
- /**
148
- * Checks whether the database connection is active, returns the reason if not.
149
- */
150
- async checkConnection() {
151
- return this.driver.getConnection().checkConnection();
152
- }
153
- /**
154
- * Closes the database connection.
155
- */
156
- async close(force = false) {
157
- await this.driver.close(force);
158
- await this.config.getMetadataCacheAdapter()?.close?.();
159
- await this.config.getResultCacheAdapter()?.close?.();
160
- }
161
- /**
162
- * Gets the `MetadataStorage` (without parameters) or `EntityMetadata` instance when provided with the `entityName` parameter.
163
- */
164
- getMetadata(entityName) {
165
- if (entityName) {
166
- return this.#metadata.get(entityName);
167
- }
168
- return this.#metadata;
169
- }
170
- createEntityManager() {
171
- this.driver.setMetadata(this.#metadata);
172
- this.em = this.driver.createEntityManager();
173
- this.em.global = true;
174
- this.#metadata.decorate(this.em);
175
- }
176
- /**
177
- * Allows dynamically discovering new entity by reference, handy for testing schema diffing.
178
- */
179
- discoverEntity(entities, reset) {
180
- for (const className of Utils.asArray(reset)) {
181
- this.#metadata.reset(className);
182
- this.#discovery.reset(className);
183
- }
184
- const tmp = this.#discovery.discoverReferences(Utils.asArray(entities));
185
- const metadata = this.#discovery.processDiscoveredEntities(tmp);
186
- for (const meta of metadata) {
187
- this.#metadata.set(meta.class, meta);
188
- meta.root = this.#metadata.get(meta.root.class);
189
- }
190
- this.#metadata.decorate(this.em);
191
- }
192
- /**
193
- * Gets the SchemaGenerator.
194
- */
195
- get schema() {
196
- return this.config.getExtension('@mikro-orm/schema-generator');
197
- }
198
- /**
199
- * Gets the SeedManager
200
- */
201
- get seeder() {
202
- return this.driver.getPlatform().getExtension('SeedManager', '@mikro-orm/seeder', '@mikro-orm/seeder', this.em);
203
- }
204
- /**
205
- * Gets the Migrator.
206
- */
207
- get migrator() {
208
- return this.driver.getPlatform().getExtension('Migrator', '@mikro-orm/migrator', '@mikro-orm/migrations', this.em);
209
- }
210
- /**
211
- * Gets the EntityGenerator.
212
- */
213
- get entityGenerator() {
214
- return this.driver
215
- .getPlatform()
216
- .getExtension('EntityGenerator', '@mikro-orm/entity-generator', '@mikro-orm/entity-generator', this.em);
217
- }
73
+ /** The global EntityManager instance. If you are using `RequestContext` helper, it will automatically pick the request specific context under the hood */
74
+ em;
75
+ /** The database driver instance used by this ORM. */
76
+ driver;
77
+ /** The ORM configuration instance. */
78
+ config;
79
+ #metadata;
80
+ #logger;
81
+ #discovery;
82
+ /**
83
+ * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
84
+ * If you omit the `options` parameter, your CLI config will be used.
85
+ */
86
+ static async init(options) {
87
+ /* v8 ignore next */
88
+ if (!options) {
89
+ throw new Error(`options parameter is required`);
90
+ }
91
+ options = { ...options };
92
+ options.discovery ??= {};
93
+ options.discovery.skipSyncDiscovery ??= true;
94
+ await loadOptionalDependencies(options);
95
+ const orm = new this(options);
96
+ const preferTs = orm.config.get('preferTs', Utils.detectTypeScriptSupport());
97
+ orm.#metadata = await orm.#discovery.discover(preferTs);
98
+ orm.createEntityManager();
99
+ return orm;
100
+ }
101
+ /**
102
+ * Synchronous variant of the `init` method with some limitations:
103
+ * - folder-based discovery not supported
104
+ * - ORM extensions are not autoloaded
105
+ * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
106
+ */
107
+ constructor(options) {
108
+ const env = loadEnvironmentVars();
109
+ options = options.preferEnvVars ? Utils.merge(options, env) : Utils.merge(env, options);
110
+ this.config = new Configuration(options);
111
+ const discovery = this.config.get('discovery');
112
+ this.driver = this.config.getDriver();
113
+ this.#logger = this.config.getLogger();
114
+ this.#logger.log('info', `MikroORM version: ${colors.green(Utils.getORMVersion())}`);
115
+ this.#discovery = new MetadataDiscovery(new MetadataStorage(), this.driver.getPlatform(), this.config);
116
+ this.driver.getPlatform().init(this);
117
+ for (const extension of this.config.get('extensions')) {
118
+ extension.register(this);
119
+ }
120
+ if (!discovery.skipSyncDiscovery) {
121
+ this.#metadata = this.#discovery.discoverSync();
122
+ this.createEntityManager();
123
+ }
124
+ }
125
+ /**
126
+ * Connects to the database.
127
+ */
128
+ async connect() {
129
+ await this.driver.connect();
130
+ return this.driver;
131
+ }
132
+ /**
133
+ * Reconnects, possibly to a different database.
134
+ */
135
+ async reconnect(options = {}) {
136
+ /* v8 ignore next */
137
+ for (const key of Utils.keys(options)) {
138
+ this.config.set(key, options[key]);
139
+ }
140
+ await this.driver.reconnect();
141
+ }
142
+ /**
143
+ * Checks whether the database connection is active.
144
+ */
145
+ async isConnected() {
146
+ return this.driver.getConnection().isConnected();
147
+ }
148
+ /**
149
+ * Checks whether the database connection is active, returns the reason if not.
150
+ */
151
+ async checkConnection() {
152
+ return this.driver.getConnection().checkConnection();
153
+ }
154
+ /**
155
+ * Closes the database connection.
156
+ */
157
+ async close(force = false) {
158
+ await this.driver.close(force);
159
+ await this.config.getMetadataCacheAdapter()?.close?.();
160
+ await this.config.getResultCacheAdapter()?.close?.();
161
+ }
162
+ /**
163
+ * Gets the `MetadataStorage` (without parameters) or `EntityMetadata` instance when provided with the `entityName` parameter.
164
+ */
165
+ getMetadata(entityName) {
166
+ if (entityName) {
167
+ return this.#metadata.get(entityName);
168
+ }
169
+ return this.#metadata;
170
+ }
171
+ createEntityManager() {
172
+ this.driver.setMetadata(this.#metadata);
173
+ this.em = this.driver.createEntityManager();
174
+ this.em.global = true;
175
+ this.#metadata.decorate(this.em);
176
+ }
177
+ /**
178
+ * Allows dynamically discovering new entity by reference, handy for testing schema diffing.
179
+ */
180
+ discoverEntity(entities, reset) {
181
+ for (const className of Utils.asArray(reset)) {
182
+ this.#metadata.reset(className);
183
+ this.#discovery.reset(className);
184
+ }
185
+ const tmp = this.#discovery.discoverReferences(Utils.asArray(entities));
186
+ const metadata = this.#discovery.processDiscoveredEntities(tmp);
187
+ for (const meta of metadata) {
188
+ this.#metadata.set(meta.class, meta);
189
+ meta.root = this.#metadata.get(meta.root.class);
190
+ }
191
+ this.#metadata.decorate(this.em);
192
+ }
193
+ /**
194
+ * Gets the SchemaGenerator.
195
+ */
196
+ get schema() {
197
+ return this.config.getExtension('@mikro-orm/schema-generator');
198
+ }
199
+ /**
200
+ * Gets the SeedManager
201
+ */
202
+ get seeder() {
203
+ return this.driver.getPlatform().getExtension('SeedManager', '@mikro-orm/seeder', '@mikro-orm/seeder', this.em);
204
+ }
205
+ /**
206
+ * Gets the Migrator.
207
+ */
208
+ get migrator() {
209
+ return this.driver.getPlatform().getExtension('Migrator', '@mikro-orm/migrator', '@mikro-orm/migrations', this.em);
210
+ }
211
+ /**
212
+ * Gets the EntityGenerator.
213
+ */
214
+ get entityGenerator() {
215
+ return this.driver
216
+ .getPlatform()
217
+ .getExtension('EntityGenerator', '@mikro-orm/entity-generator', '@mikro-orm/entity-generator', this.em);
218
+ }
218
219
  }
package/README.md CHANGED
@@ -133,7 +133,7 @@ const author = await em.findOneOrFail(Author, 1, {
133
133
  populate: ['books'],
134
134
  });
135
135
  author.name = 'Jon Snow II';
136
- author.books.getItems().forEach(book => (book.title += ' (2nd ed.)'));
136
+ author.books.getItems().forEach(book => book.title += ' (2nd ed.)');
137
137
  author.books.add(orm.em.create(Book, { title: 'New Book', author }));
138
138
 
139
139
  // Flush computes change sets and executes them in a single transaction
@@ -1,42 +1,42 @@
1
1
  /** Interface for async-capable cache storage used by result cache and metadata cache. */
2
2
  export interface CacheAdapter {
3
- /**
4
- * Gets the items under `name` key from the cache.
5
- */
6
- get<T = any>(name: string): T | Promise<T | undefined> | undefined;
7
- /**
8
- * Sets the item to the cache. `origin` is used for cache invalidation and should reflect the change in data.
9
- */
10
- set(name: string, data: any, origin: string, expiration?: number): void | Promise<void>;
11
- /**
12
- * Removes the item from cache.
13
- */
14
- remove(name: string): void | Promise<void>;
15
- /**
16
- * Clears all items stored in the cache.
17
- */
18
- clear(): void | Promise<void>;
19
- /**
20
- * Called inside `MikroORM.close()` Allows graceful shutdowns (e.g. for redis).
21
- */
22
- close?(): void | Promise<void>;
3
+ /**
4
+ * Gets the items under `name` key from the cache.
5
+ */
6
+ get<T = any>(name: string): T | Promise<T | undefined> | undefined;
7
+ /**
8
+ * Sets the item to the cache. `origin` is used for cache invalidation and should reflect the change in data.
9
+ */
10
+ set(name: string, data: any, origin: string, expiration?: number): void | Promise<void>;
11
+ /**
12
+ * Removes the item from cache.
13
+ */
14
+ remove(name: string): void | Promise<void>;
15
+ /**
16
+ * Clears all items stored in the cache.
17
+ */
18
+ clear(): void | Promise<void>;
19
+ /**
20
+ * Called inside `MikroORM.close()` Allows graceful shutdowns (e.g. for redis).
21
+ */
22
+ close?(): void | Promise<void>;
23
23
  }
24
24
  /** Synchronous variant of CacheAdapter, used for metadata cache where async access is not needed. */
25
25
  export interface SyncCacheAdapter extends CacheAdapter {
26
- /**
27
- * Gets the items under `name` key from the cache.
28
- */
29
- get<T = any>(name: string): T | undefined;
30
- /**
31
- * Sets the item to the cache. `origin` is used for cache invalidation and should reflect the change in data.
32
- */
33
- set(name: string, data: any, origin: string, expiration?: number): void;
34
- /**
35
- * Removes the item from cache.
36
- */
37
- remove(name: string): void;
38
- /**
39
- * Generates a combined cache from all existing entries.
40
- */
41
- combine?(): string | void;
26
+ /**
27
+ * Gets the items under `name` key from the cache.
28
+ */
29
+ get<T = any>(name: string): T | undefined;
30
+ /**
31
+ * Sets the item to the cache. `origin` is used for cache invalidation and should reflect the change in data.
32
+ */
33
+ set(name: string, data: any, origin: string, expiration?: number): void;
34
+ /**
35
+ * Removes the item from cache.
36
+ */
37
+ remove(name: string): void;
38
+ /**
39
+ * Generates a combined cache from all existing entries.
40
+ */
41
+ combine?(): string | void;
42
42
  }