@mikro-orm/core 7.0.2-dev.8 → 7.0.2

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 (207) hide show
  1. package/EntityManager.d.ts +883 -579
  2. package/EntityManager.js +1897 -1865
  3. package/MikroORM.d.ts +103 -72
  4. package/MikroORM.js +178 -177
  5. package/README.md +128 -294
  6. package/cache/CacheAdapter.d.ts +38 -36
  7. package/cache/FileCacheAdapter.d.ts +30 -24
  8. package/cache/FileCacheAdapter.js +80 -78
  9. package/cache/GeneratedCacheAdapter.d.ts +19 -20
  10. package/cache/GeneratedCacheAdapter.js +31 -30
  11. package/cache/MemoryCacheAdapter.d.ts +19 -20
  12. package/cache/MemoryCacheAdapter.js +36 -36
  13. package/cache/NullCacheAdapter.d.ts +17 -16
  14. package/cache/NullCacheAdapter.js +25 -24
  15. package/connections/Connection.d.ts +99 -75
  16. package/connections/Connection.js +166 -160
  17. package/drivers/DatabaseDriver.d.ts +187 -69
  18. package/drivers/DatabaseDriver.js +451 -432
  19. package/drivers/IDatabaseDriver.d.ts +464 -281
  20. package/drivers/IDatabaseDriver.js +1 -0
  21. package/entity/BaseEntity.d.ts +121 -73
  22. package/entity/BaseEntity.js +44 -33
  23. package/entity/Collection.d.ts +216 -157
  24. package/entity/Collection.js +728 -707
  25. package/entity/EntityAssigner.d.ts +90 -76
  26. package/entity/EntityAssigner.js +232 -229
  27. package/entity/EntityFactory.d.ts +68 -40
  28. package/entity/EntityFactory.js +427 -366
  29. package/entity/EntityHelper.d.ts +34 -22
  30. package/entity/EntityHelper.js +280 -267
  31. package/entity/EntityIdentifier.d.ts +4 -4
  32. package/entity/EntityIdentifier.js +10 -10
  33. package/entity/EntityLoader.d.ts +105 -56
  34. package/entity/EntityLoader.js +754 -722
  35. package/entity/EntityRepository.d.ts +317 -200
  36. package/entity/EntityRepository.js +214 -212
  37. package/entity/PolymorphicRef.d.ts +5 -5
  38. package/entity/PolymorphicRef.js +10 -10
  39. package/entity/Reference.d.ts +130 -66
  40. package/entity/Reference.js +280 -260
  41. package/entity/WrappedEntity.d.ts +116 -53
  42. package/entity/WrappedEntity.js +169 -147
  43. package/entity/defineEntity.d.ts +1290 -614
  44. package/entity/defineEntity.js +521 -511
  45. package/entity/utils.d.ts +13 -3
  46. package/entity/utils.js +71 -73
  47. package/entity/validators.js +43 -43
  48. package/entity/wrap.js +8 -8
  49. package/enums.d.ts +275 -138
  50. package/enums.js +268 -137
  51. package/errors.d.ts +120 -72
  52. package/errors.js +356 -253
  53. package/events/EventManager.d.ts +27 -10
  54. package/events/EventManager.js +80 -73
  55. package/events/EventSubscriber.d.ts +33 -29
  56. package/events/TransactionEventBroadcaster.d.ts +16 -7
  57. package/events/TransactionEventBroadcaster.js +15 -13
  58. package/exceptions.d.ts +23 -40
  59. package/exceptions.js +35 -52
  60. package/hydration/Hydrator.d.ts +43 -16
  61. package/hydration/Hydrator.js +44 -42
  62. package/hydration/ObjectHydrator.d.ts +51 -17
  63. package/hydration/ObjectHydrator.js +480 -416
  64. package/index.d.ts +116 -2
  65. package/index.js +10 -1
  66. package/logging/DefaultLogger.d.ts +35 -30
  67. package/logging/DefaultLogger.js +87 -84
  68. package/logging/Logger.d.ts +45 -40
  69. package/logging/SimpleLogger.d.ts +13 -11
  70. package/logging/SimpleLogger.js +22 -22
  71. package/logging/colors.d.ts +6 -6
  72. package/logging/colors.js +11 -10
  73. package/logging/inspect.js +7 -7
  74. package/metadata/EntitySchema.d.ts +214 -108
  75. package/metadata/EntitySchema.js +398 -379
  76. package/metadata/MetadataDiscovery.d.ts +115 -111
  77. package/metadata/MetadataDiscovery.js +1948 -1857
  78. package/metadata/MetadataProvider.d.ts +25 -14
  79. package/metadata/MetadataProvider.js +83 -77
  80. package/metadata/MetadataStorage.d.ts +39 -19
  81. package/metadata/MetadataStorage.js +119 -106
  82. package/metadata/MetadataValidator.d.ts +39 -39
  83. package/metadata/MetadataValidator.js +381 -338
  84. package/metadata/discover-entities.d.ts +5 -2
  85. package/metadata/discover-entities.js +27 -27
  86. package/metadata/types.d.ts +615 -531
  87. package/naming-strategy/AbstractNamingStrategy.d.ts +55 -39
  88. package/naming-strategy/AbstractNamingStrategy.js +91 -85
  89. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  90. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  91. package/naming-strategy/MongoNamingStrategy.d.ts +7 -6
  92. package/naming-strategy/MongoNamingStrategy.js +19 -18
  93. package/naming-strategy/NamingStrategy.d.ts +109 -99
  94. package/naming-strategy/UnderscoreNamingStrategy.d.ts +8 -7
  95. package/naming-strategy/UnderscoreNamingStrategy.js +22 -21
  96. package/not-supported.js +7 -4
  97. package/package.json +1 -1
  98. package/platforms/ExceptionConverter.d.ts +2 -1
  99. package/platforms/ExceptionConverter.js +5 -4
  100. package/platforms/Platform.d.ts +310 -236
  101. package/platforms/Platform.js +661 -573
  102. package/serialization/EntitySerializer.d.ts +49 -25
  103. package/serialization/EntitySerializer.js +224 -216
  104. package/serialization/EntityTransformer.d.ts +11 -5
  105. package/serialization/EntityTransformer.js +220 -216
  106. package/serialization/SerializationContext.d.ts +27 -18
  107. package/serialization/SerializationContext.js +105 -100
  108. package/types/ArrayType.d.ts +9 -8
  109. package/types/ArrayType.js +34 -33
  110. package/types/BigIntType.d.ts +17 -10
  111. package/types/BigIntType.js +37 -37
  112. package/types/BlobType.d.ts +4 -3
  113. package/types/BlobType.js +14 -13
  114. package/types/BooleanType.d.ts +5 -4
  115. package/types/BooleanType.js +13 -12
  116. package/types/CharacterType.d.ts +3 -2
  117. package/types/CharacterType.js +7 -6
  118. package/types/DateTimeType.d.ts +6 -5
  119. package/types/DateTimeType.js +16 -15
  120. package/types/DateType.d.ts +6 -5
  121. package/types/DateType.js +16 -15
  122. package/types/DecimalType.d.ts +7 -7
  123. package/types/DecimalType.js +26 -26
  124. package/types/DoubleType.d.ts +3 -3
  125. package/types/DoubleType.js +12 -12
  126. package/types/EnumArrayType.d.ts +6 -5
  127. package/types/EnumArrayType.js +25 -24
  128. package/types/EnumType.d.ts +4 -3
  129. package/types/EnumType.js +12 -11
  130. package/types/FloatType.d.ts +4 -3
  131. package/types/FloatType.js +10 -9
  132. package/types/IntegerType.d.ts +4 -3
  133. package/types/IntegerType.js +10 -9
  134. package/types/IntervalType.d.ts +5 -4
  135. package/types/IntervalType.js +13 -12
  136. package/types/JsonType.d.ts +9 -8
  137. package/types/JsonType.js +33 -32
  138. package/types/MediumIntType.d.ts +2 -1
  139. package/types/MediumIntType.js +4 -3
  140. package/types/SmallIntType.d.ts +4 -3
  141. package/types/SmallIntType.js +10 -9
  142. package/types/StringType.d.ts +5 -4
  143. package/types/StringType.js +13 -12
  144. package/types/TextType.d.ts +4 -3
  145. package/types/TextType.js +10 -9
  146. package/types/TimeType.d.ts +6 -5
  147. package/types/TimeType.js +18 -17
  148. package/types/TinyIntType.d.ts +4 -3
  149. package/types/TinyIntType.js +11 -10
  150. package/types/Type.d.ts +88 -73
  151. package/types/Type.js +85 -74
  152. package/types/Uint8ArrayType.d.ts +5 -4
  153. package/types/Uint8ArrayType.js +22 -21
  154. package/types/UnknownType.d.ts +5 -4
  155. package/types/UnknownType.js +13 -12
  156. package/types/UuidType.d.ts +6 -5
  157. package/types/UuidType.js +20 -19
  158. package/types/index.d.ts +77 -49
  159. package/types/index.js +64 -26
  160. package/typings.d.ts +1388 -729
  161. package/typings.js +255 -231
  162. package/unit-of-work/ChangeSet.d.ts +28 -24
  163. package/unit-of-work/ChangeSet.js +58 -54
  164. package/unit-of-work/ChangeSetComputer.d.ts +13 -11
  165. package/unit-of-work/ChangeSetComputer.js +180 -159
  166. package/unit-of-work/ChangeSetPersister.d.ts +64 -41
  167. package/unit-of-work/ChangeSetPersister.js +443 -418
  168. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  169. package/unit-of-work/CommitOrderCalculator.js +89 -88
  170. package/unit-of-work/IdentityMap.d.ts +32 -25
  171. package/unit-of-work/IdentityMap.js +106 -99
  172. package/unit-of-work/UnitOfWork.d.ts +182 -127
  173. package/unit-of-work/UnitOfWork.js +1201 -1169
  174. package/utils/AbstractMigrator.d.ts +111 -91
  175. package/utils/AbstractMigrator.js +275 -275
  176. package/utils/AbstractSchemaGenerator.d.ts +43 -34
  177. package/utils/AbstractSchemaGenerator.js +121 -122
  178. package/utils/AsyncContext.d.ts +3 -3
  179. package/utils/AsyncContext.js +34 -35
  180. package/utils/Configuration.d.ts +853 -801
  181. package/utils/Configuration.js +360 -337
  182. package/utils/Cursor.d.ts +40 -22
  183. package/utils/Cursor.js +135 -127
  184. package/utils/DataloaderUtils.d.ts +58 -43
  185. package/utils/DataloaderUtils.js +203 -198
  186. package/utils/EntityComparator.d.ts +99 -80
  187. package/utils/EntityComparator.js +825 -727
  188. package/utils/NullHighlighter.d.ts +2 -1
  189. package/utils/NullHighlighter.js +4 -3
  190. package/utils/QueryHelper.d.ts +79 -51
  191. package/utils/QueryHelper.js +372 -361
  192. package/utils/RawQueryFragment.d.ts +54 -28
  193. package/utils/RawQueryFragment.js +110 -99
  194. package/utils/RequestContext.d.ts +33 -32
  195. package/utils/RequestContext.js +52 -53
  196. package/utils/TransactionContext.d.ts +17 -16
  197. package/utils/TransactionContext.js +28 -27
  198. package/utils/TransactionManager.d.ts +58 -58
  199. package/utils/TransactionManager.js +199 -197
  200. package/utils/Utils.d.ts +210 -145
  201. package/utils/Utils.js +820 -813
  202. package/utils/clone.js +104 -113
  203. package/utils/env-vars.js +90 -88
  204. package/utils/fs-utils.d.ts +15 -15
  205. package/utils/fs-utils.js +180 -181
  206. package/utils/upsert-utils.d.ts +20 -5
  207. package/utils/upsert-utils.js +114 -116
package/MikroORM.d.ts CHANGED
@@ -3,7 +3,16 @@ 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 { AnyEntity, Constructor, EntityClass, EntityMetadata, EntityName, IEntityGenerator, IMigrator, ISeedManager } from './typings.js';
6
+ import type {
7
+ AnyEntity,
8
+ Constructor,
9
+ EntityClass,
10
+ EntityMetadata,
11
+ EntityName,
12
+ IEntityGenerator,
13
+ IMigrator,
14
+ ISeedManager,
15
+ } from './typings.js';
7
16
  /** @internal */
8
17
  export declare function loadOptionalDependencies(options: Partial<Options>): Promise<void>;
9
18
  /**
@@ -34,79 +43,101 @@ export declare function loadOptionalDependencies(options: Partial<Options>): Pro
34
43
  * await em.flush();
35
44
  * ```
36
45
  */
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
- readonly driver: Driver;
44
- readonly config: Configuration<Driver>;
45
- /**
46
- * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
47
- * If you omit the `options` parameter, your CLI config will be used.
48
- */
49
- 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>>;
50
- /**
51
- * Synchronous variant of the `init` method with some limitations:
52
- * - folder-based discovery not supported
53
- * - ORM extensions are not autoloaded
54
- * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
55
- */
56
- constructor(options: Partial<Options<Driver, EM, Entities>>);
57
- /**
58
- * Connects to the database.
59
- */
60
- connect(): Promise<Driver>;
61
- /**
62
- * Reconnects, possibly to a different database.
63
- */
64
- reconnect(options?: Partial<Options<Driver, EM, Entities>>): Promise<void>;
65
- /**
66
- * Checks whether the database connection is active.
67
- */
68
- isConnected(): Promise<boolean>;
69
- /**
70
- * Checks whether the database connection is active, returns the reason if not.
71
- */
72
- checkConnection(): Promise<{
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
+ | {
73
102
  ok: true;
74
- } | {
103
+ }
104
+ | {
75
105
  ok: false;
76
106
  reason: string;
77
107
  error?: Error;
78
- }>;
79
- /**
80
- * Closes the database connection.
81
- */
82
- close(force?: boolean): Promise<void>;
83
- /**
84
- * Gets the `MetadataStorage`.
85
- */
86
- getMetadata(): MetadataStorage;
87
- /**
88
- * Gets the `EntityMetadata` instance when provided with the `entityName` parameter.
89
- */
90
- getMetadata<Entity extends object>(entityName: EntityName<Entity>): EntityMetadata<Entity>;
91
- private createEntityManager;
92
- /**
93
- * Allows dynamically discovering new entity by reference, handy for testing schema diffing.
94
- */
95
- discoverEntity<T extends Constructor | EntitySchema>(entities: T | T[], reset?: EntityName | EntityName[]): void;
96
- /**
97
- * Gets the SchemaGenerator.
98
- */
99
- get schema(): ReturnType<ReturnType<Driver['getPlatform']>['getSchemaGenerator']>;
100
- /**
101
- * Gets the SeedManager
102
- */
103
- get seeder(): ISeedManager;
104
- /**
105
- * Gets the Migrator.
106
- */
107
- get migrator(): IMigrator;
108
- /**
109
- * Gets the EntityGenerator.
110
- */
111
- get entityGenerator(): IEntityGenerator;
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;
112
143
  }
package/MikroORM.js CHANGED
@@ -5,41 +5,40 @@ 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
- }
15
- catch {
16
- // not installed
17
- }
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
+ }
18
17
  }
19
18
  /** @internal */
20
19
  export async function loadOptionalDependencies(options) {
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
- }
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
+ }
43
42
  }
44
43
  /**
45
44
  * The main class used to configure and bootstrap the ORM.
@@ -70,149 +69,151 @@ export async function loadOptionalDependencies(options) {
70
69
  * ```
71
70
  */
72
71
  export class MikroORM {
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
- driver;
76
- config;
77
- #metadata;
78
- #logger;
79
- #discovery;
80
- /**
81
- * Initialize the ORM, load entity metadata, create EntityManager and connect to the database.
82
- * If you omit the `options` parameter, your CLI config will be used.
83
- */
84
- static async init(options) {
85
- /* v8 ignore next */
86
- if (!options) {
87
- throw new Error(`options parameter is required`);
88
- }
89
- options = { ...options };
90
- options.discovery ??= {};
91
- options.discovery.skipSyncDiscovery ??= true;
92
- await loadOptionalDependencies(options);
93
- const orm = new this(options);
94
- const preferTs = orm.config.get('preferTs', Utils.detectTypeScriptSupport());
95
- orm.#metadata = await orm.#discovery.discover(preferTs);
96
- orm.createEntityManager();
97
- return orm;
98
- }
99
- /**
100
- * Synchronous variant of the `init` method with some limitations:
101
- * - folder-based discovery not supported
102
- * - ORM extensions are not autoloaded
103
- * - when metadata cache is enabled, `FileCacheAdapter` needs to be explicitly set in the config
104
- */
105
- constructor(options) {
106
- const env = loadEnvironmentVars();
107
- options = options.preferEnvVars ? Utils.merge(options, env) : Utils.merge(env, options);
108
- this.config = new Configuration(options);
109
- const discovery = this.config.get('discovery');
110
- this.driver = this.config.getDriver();
111
- this.#logger = this.config.getLogger();
112
- this.#logger.log('info', `MikroORM version: ${colors.green(Utils.getORMVersion())}`);
113
- this.#discovery = new MetadataDiscovery(new MetadataStorage(), this.driver.getPlatform(), this.config);
114
- this.driver.getPlatform().init(this);
115
- for (const extension of this.config.get('extensions')) {
116
- extension.register(this);
117
- }
118
- if (!discovery.skipSyncDiscovery) {
119
- this.#metadata = this.#discovery.discoverSync();
120
- this.createEntityManager();
121
- }
122
- }
123
- /**
124
- * Connects to the database.
125
- */
126
- async connect() {
127
- await this.driver.connect();
128
- return this.driver;
129
- }
130
- /**
131
- * Reconnects, possibly to a different database.
132
- */
133
- async reconnect(options = {}) {
134
- /* v8 ignore next */
135
- for (const key of Utils.keys(options)) {
136
- this.config.set(key, options[key]);
137
- }
138
- await this.driver.reconnect();
139
- }
140
- /**
141
- * Checks whether the database connection is active.
142
- */
143
- async isConnected() {
144
- return this.driver.getConnection().isConnected();
145
- }
146
- /**
147
- * Checks whether the database connection is active, returns the reason if not.
148
- */
149
- async checkConnection() {
150
- return this.driver.getConnection().checkConnection();
151
- }
152
- /**
153
- * Closes the database connection.
154
- */
155
- async close(force = false) {
156
- await this.driver.close(force);
157
- await this.config.getMetadataCacheAdapter()?.close?.();
158
- await this.config.getResultCacheAdapter()?.close?.();
159
- }
160
- /**
161
- * Gets the `MetadataStorage` (without parameters) or `EntityMetadata` instance when provided with the `entityName` parameter.
162
- */
163
- getMetadata(entityName) {
164
- if (entityName) {
165
- return this.#metadata.get(entityName);
166
- }
167
- return this.#metadata;
168
- }
169
- createEntityManager() {
170
- this.driver.setMetadata(this.#metadata);
171
- this.em = this.driver.createEntityManager();
172
- this.em.global = true;
173
- this.#metadata.decorate(this.em);
174
- this.driver.setMetadata(this.#metadata);
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
- }
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
+ this.driver.setMetadata(this.#metadata);
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
  }