@mikro-orm/core 7.0.2 → 7.0.3-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 (205) hide show
  1. package/EntityManager.d.ts +583 -883
  2. package/EntityManager.js +1869 -1897
  3. package/MikroORM.d.ts +74 -103
  4. package/MikroORM.js +179 -178
  5. package/cache/CacheAdapter.d.ts +36 -36
  6. package/cache/FileCacheAdapter.d.ts +24 -30
  7. package/cache/FileCacheAdapter.js +78 -80
  8. package/cache/GeneratedCacheAdapter.d.ts +20 -18
  9. package/cache/GeneratedCacheAdapter.js +30 -30
  10. package/cache/MemoryCacheAdapter.d.ts +20 -18
  11. package/cache/MemoryCacheAdapter.js +36 -35
  12. package/cache/NullCacheAdapter.d.ts +16 -16
  13. package/cache/NullCacheAdapter.js +24 -24
  14. package/connections/Connection.d.ts +84 -95
  15. package/connections/Connection.js +168 -165
  16. package/drivers/DatabaseDriver.d.ts +80 -186
  17. package/drivers/DatabaseDriver.js +443 -450
  18. package/drivers/IDatabaseDriver.d.ts +301 -440
  19. package/entity/BaseEntity.d.ts +83 -120
  20. package/entity/BaseEntity.js +43 -43
  21. package/entity/Collection.d.ts +179 -212
  22. package/entity/Collection.js +721 -727
  23. package/entity/EntityAssigner.d.ts +77 -88
  24. package/entity/EntityAssigner.js +230 -231
  25. package/entity/EntityFactory.d.ts +54 -66
  26. package/entity/EntityFactory.js +383 -425
  27. package/entity/EntityHelper.d.ts +22 -34
  28. package/entity/EntityHelper.js +267 -280
  29. package/entity/EntityIdentifier.d.ts +4 -4
  30. package/entity/EntityIdentifier.js +10 -10
  31. package/entity/EntityLoader.d.ts +73 -103
  32. package/entity/EntityLoader.js +723 -753
  33. package/entity/EntityRepository.d.ts +201 -316
  34. package/entity/EntityRepository.js +213 -213
  35. package/entity/PolymorphicRef.d.ts +5 -5
  36. package/entity/PolymorphicRef.js +10 -10
  37. package/entity/Reference.d.ts +82 -126
  38. package/entity/Reference.js +274 -278
  39. package/entity/WrappedEntity.d.ts +72 -115
  40. package/entity/WrappedEntity.js +166 -168
  41. package/entity/defineEntity.d.ts +614 -1280
  42. package/entity/defineEntity.js +511 -520
  43. package/entity/utils.d.ts +3 -13
  44. package/entity/utils.js +73 -71
  45. package/entity/validators.js +43 -43
  46. package/entity/wrap.js +8 -8
  47. package/enums.d.ts +253 -258
  48. package/enums.js +252 -251
  49. package/errors.d.ts +72 -114
  50. package/errors.js +253 -350
  51. package/events/EventManager.d.ts +14 -26
  52. package/events/EventManager.js +77 -79
  53. package/events/EventSubscriber.d.ts +29 -29
  54. package/events/TransactionEventBroadcaster.d.ts +8 -15
  55. package/events/TransactionEventBroadcaster.js +14 -14
  56. package/exceptions.d.ts +40 -23
  57. package/exceptions.js +52 -35
  58. package/hydration/Hydrator.d.ts +17 -42
  59. package/hydration/Hydrator.js +43 -43
  60. package/hydration/ObjectHydrator.d.ts +17 -50
  61. package/hydration/ObjectHydrator.js +416 -479
  62. package/index.d.ts +2 -116
  63. package/index.js +1 -10
  64. package/logging/DefaultLogger.d.ts +32 -34
  65. package/logging/DefaultLogger.js +86 -86
  66. package/logging/Logger.d.ts +41 -41
  67. package/logging/SimpleLogger.d.ts +11 -13
  68. package/logging/SimpleLogger.js +22 -22
  69. package/logging/colors.d.ts +6 -6
  70. package/logging/colors.js +10 -11
  71. package/logging/inspect.js +7 -7
  72. package/metadata/EntitySchema.d.ts +127 -211
  73. package/metadata/EntitySchema.js +398 -397
  74. package/metadata/MetadataDiscovery.d.ts +114 -114
  75. package/metadata/MetadataDiscovery.js +1863 -1947
  76. package/metadata/MetadataProvider.d.ts +21 -24
  77. package/metadata/MetadataProvider.js +84 -82
  78. package/metadata/MetadataStorage.d.ts +32 -38
  79. package/metadata/MetadataStorage.js +118 -118
  80. package/metadata/MetadataValidator.d.ts +39 -39
  81. package/metadata/MetadataValidator.js +338 -381
  82. package/metadata/discover-entities.d.ts +2 -5
  83. package/metadata/discover-entities.js +27 -27
  84. package/metadata/types.d.ts +531 -615
  85. package/naming-strategy/AbstractNamingStrategy.d.ts +39 -54
  86. package/naming-strategy/AbstractNamingStrategy.js +85 -90
  87. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  88. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  89. package/naming-strategy/MongoNamingStrategy.d.ts +6 -6
  90. package/naming-strategy/MongoNamingStrategy.js +18 -18
  91. package/naming-strategy/NamingStrategy.d.ts +99 -109
  92. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  93. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  94. package/not-supported.js +4 -7
  95. package/package.json +1 -1
  96. package/platforms/ExceptionConverter.d.ts +1 -1
  97. package/platforms/ExceptionConverter.js +4 -4
  98. package/platforms/Platform.d.ts +299 -308
  99. package/platforms/Platform.js +636 -659
  100. package/serialization/EntitySerializer.d.ts +26 -48
  101. package/serialization/EntitySerializer.js +218 -224
  102. package/serialization/EntityTransformer.d.ts +6 -10
  103. package/serialization/EntityTransformer.js +217 -219
  104. package/serialization/SerializationContext.d.ts +23 -27
  105. package/serialization/SerializationContext.js +105 -105
  106. package/types/ArrayType.d.ts +8 -8
  107. package/types/ArrayType.js +33 -33
  108. package/types/BigIntType.d.ts +10 -17
  109. package/types/BigIntType.js +37 -37
  110. package/types/BlobType.d.ts +3 -3
  111. package/types/BlobType.js +13 -13
  112. package/types/BooleanType.d.ts +4 -4
  113. package/types/BooleanType.js +12 -12
  114. package/types/CharacterType.d.ts +2 -2
  115. package/types/CharacterType.js +6 -6
  116. package/types/DateTimeType.d.ts +5 -5
  117. package/types/DateTimeType.js +15 -15
  118. package/types/DateType.d.ts +5 -5
  119. package/types/DateType.js +15 -15
  120. package/types/DecimalType.d.ts +7 -7
  121. package/types/DecimalType.js +26 -26
  122. package/types/DoubleType.d.ts +3 -3
  123. package/types/DoubleType.js +12 -12
  124. package/types/EnumArrayType.d.ts +5 -5
  125. package/types/EnumArrayType.js +24 -24
  126. package/types/EnumType.d.ts +3 -3
  127. package/types/EnumType.js +11 -11
  128. package/types/FloatType.d.ts +3 -3
  129. package/types/FloatType.js +9 -9
  130. package/types/IntegerType.d.ts +3 -3
  131. package/types/IntegerType.js +9 -9
  132. package/types/IntervalType.d.ts +4 -4
  133. package/types/IntervalType.js +12 -12
  134. package/types/JsonType.d.ts +8 -8
  135. package/types/JsonType.js +32 -32
  136. package/types/MediumIntType.d.ts +1 -1
  137. package/types/MediumIntType.js +3 -3
  138. package/types/SmallIntType.d.ts +3 -3
  139. package/types/SmallIntType.js +9 -9
  140. package/types/StringType.d.ts +4 -4
  141. package/types/StringType.js +12 -12
  142. package/types/TextType.d.ts +3 -3
  143. package/types/TextType.js +9 -9
  144. package/types/TimeType.d.ts +5 -5
  145. package/types/TimeType.js +17 -17
  146. package/types/TinyIntType.d.ts +3 -3
  147. package/types/TinyIntType.js +10 -10
  148. package/types/Type.d.ts +79 -83
  149. package/types/Type.js +82 -82
  150. package/types/Uint8ArrayType.d.ts +4 -4
  151. package/types/Uint8ArrayType.js +21 -21
  152. package/types/UnknownType.d.ts +4 -4
  153. package/types/UnknownType.js +12 -12
  154. package/types/UuidType.d.ts +5 -5
  155. package/types/UuidType.js +19 -19
  156. package/types/index.d.ts +49 -75
  157. package/types/index.js +26 -52
  158. package/typings.d.ts +729 -1211
  159. package/typings.js +231 -244
  160. package/unit-of-work/ChangeSet.d.ts +26 -26
  161. package/unit-of-work/ChangeSet.js +56 -56
  162. package/unit-of-work/ChangeSetComputer.d.ts +12 -12
  163. package/unit-of-work/ChangeSetComputer.js +170 -178
  164. package/unit-of-work/ChangeSetPersister.d.ts +44 -63
  165. package/unit-of-work/ChangeSetPersister.js +421 -442
  166. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  167. package/unit-of-work/CommitOrderCalculator.js +88 -89
  168. package/unit-of-work/IdentityMap.d.ts +31 -31
  169. package/unit-of-work/IdentityMap.js +105 -105
  170. package/unit-of-work/UnitOfWork.d.ts +141 -181
  171. package/unit-of-work/UnitOfWork.js +1183 -1200
  172. package/utils/AbstractMigrator.d.ts +91 -111
  173. package/utils/AbstractMigrator.js +275 -275
  174. package/utils/AbstractSchemaGenerator.d.ts +34 -43
  175. package/utils/AbstractSchemaGenerator.js +122 -121
  176. package/utils/AsyncContext.d.ts +3 -3
  177. package/utils/AsyncContext.js +35 -34
  178. package/utils/Configuration.d.ts +808 -852
  179. package/utils/Configuration.js +344 -359
  180. package/utils/Cursor.d.ts +22 -40
  181. package/utils/Cursor.js +127 -135
  182. package/utils/DataloaderUtils.d.ts +43 -58
  183. package/utils/DataloaderUtils.js +198 -203
  184. package/utils/EntityComparator.d.ts +81 -98
  185. package/utils/EntityComparator.js +728 -824
  186. package/utils/NullHighlighter.d.ts +1 -1
  187. package/utils/NullHighlighter.js +3 -3
  188. package/utils/QueryHelper.d.ts +51 -79
  189. package/utils/QueryHelper.js +361 -372
  190. package/utils/RawQueryFragment.d.ts +34 -50
  191. package/utils/RawQueryFragment.js +105 -107
  192. package/utils/RequestContext.d.ts +32 -32
  193. package/utils/RequestContext.js +53 -52
  194. package/utils/TransactionContext.d.ts +16 -16
  195. package/utils/TransactionContext.js +27 -27
  196. package/utils/TransactionManager.d.ts +58 -58
  197. package/utils/TransactionManager.js +197 -199
  198. package/utils/Utils.d.ts +145 -204
  199. package/utils/Utils.js +813 -814
  200. package/utils/clone.js +113 -104
  201. package/utils/env-vars.js +88 -90
  202. package/utils/fs-utils.d.ts +15 -15
  203. package/utils/fs-utils.js +181 -180
  204. package/utils/upsert-utils.d.ts +5 -20
  205. package/utils/upsert-utils.js +116 -114
@@ -12,394 +12,379 @@ import { MemoryCacheAdapter } from '../cache/MemoryCacheAdapter.js';
12
12
  import { EntityComparator } from './EntityComparator.js';
13
13
  import { setEnv } from './env-vars.js';
14
14
  const DEFAULTS = {
15
- pool: {},
16
- entities: [],
17
- entitiesTs: [],
18
- extensions: [],
19
- subscribers: [],
20
- filters: {},
21
- discovery: {
22
- warnWhenNoEntities: true,
23
- checkDuplicateTableNames: true,
24
- checkDuplicateFieldNames: true,
25
- checkDuplicateEntities: true,
26
- checkNonPersistentCompositeProps: true,
27
- inferDefaultValues: true,
28
- },
29
- validateRequired: true,
30
- context: name => RequestContext.getEntityManager(name),
31
- contextName: 'default',
32
- allowGlobalContext: false,
33
- // eslint-disable-next-line no-console
34
- logger: console.log.bind(console),
35
- colors: true,
36
- findOneOrFailHandler: (entityName, where) => NotFoundError.findOneFailed(entityName, where),
37
- findExactlyOneOrFailHandler: (entityName, where) => NotFoundError.findExactlyOneFailed(entityName, where),
38
- baseDir: globalThis.process?.cwd?.(),
39
- hydrator: ObjectHydrator,
40
- flushMode: FlushMode.AUTO,
41
- loadStrategy: LoadStrategy.BALANCED,
42
- dataloader: DataloaderType.NONE,
43
- populateWhere: PopulateHint.ALL,
44
- ignoreUndefinedInQuery: false,
45
- onQuery: sql => sql,
46
- autoJoinOneToOneOwner: true,
47
- autoJoinRefsForFilters: true,
48
- filtersOnRelations: true,
49
- propagationOnPrototype: true,
50
- populateAfterFlush: true,
51
- serialization: {
52
- includePrimaryKeys: true,
53
- },
54
- assign: {
55
- updateNestedEntities: true,
56
- updateByPrimaryKey: true,
57
- mergeObjectProperties: false,
58
- mergeEmbeddedProperties: true,
59
- ignoreUndefined: false,
60
- },
61
- persistOnCreate: true,
62
- upsertManaged: true,
63
- forceEntityConstructor: false,
64
- forceUndefined: false,
65
- forceUtcTimezone: true,
66
- processOnCreateHooksEarly: true,
67
- ensureDatabase: true,
68
- ensureIndexes: false,
69
- batchSize: 300,
70
- debug: false,
71
- ignoreDeprecations: false,
72
- verbose: false,
73
- driverOptions: {},
74
- migrations: {
75
- tableName: 'mikro_orm_migrations',
76
- glob: '!(*.d).{js,ts,cjs}',
77
- silent: false,
78
- transactional: true,
79
- allOrNothing: true,
80
- dropTables: true,
81
- safe: false,
82
- snapshot: true,
83
- emit: 'ts',
84
- fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
85
- },
86
- schemaGenerator: {
87
- createForeignKeyConstraints: true,
88
- ignoreSchema: [],
89
- skipTables: [],
90
- skipViews: [],
91
- skipColumns: {},
92
- },
93
- embeddables: {
94
- prefixMode: 'relative',
95
- },
96
- entityGenerator: {
97
- forceUndefined: true,
98
- undefinedDefaults: false,
99
- scalarTypeInDecorator: false,
100
- bidirectionalRelations: true,
101
- identifiedReferences: true,
102
- scalarPropertiesForRelations: 'never',
103
- entityDefinition: 'defineEntity',
104
- decorators: 'legacy',
105
- enumMode: 'dictionary',
106
- /* v8 ignore next */
107
- fileName: className => className,
108
- onlyPurePivotTables: false,
109
- outputPurePivotTables: false,
110
- readOnlyPivotTables: false,
111
- useCoreBaseEntity: false,
112
- },
113
- metadataCache: {},
114
- resultCache: {
115
- adapter: MemoryCacheAdapter,
116
- expiration: 1000, // 1s
117
- options: {},
118
- },
119
- metadataProvider: MetadataProvider,
120
- highlighter: new NullHighlighter(),
121
- seeder: {
122
- defaultSeeder: 'DatabaseSeeder',
123
- glob: '!(*.d).{js,ts}',
124
- emit: 'ts',
125
- fileName: className => className,
126
- },
127
- preferReadReplicas: true,
128
- dynamicImportProvider: /* v8 ignore next */ id => import(id),
15
+ pool: {},
16
+ entities: [],
17
+ entitiesTs: [],
18
+ extensions: [],
19
+ subscribers: [],
20
+ filters: {},
21
+ discovery: {
22
+ warnWhenNoEntities: true,
23
+ checkDuplicateTableNames: true,
24
+ checkDuplicateFieldNames: true,
25
+ checkDuplicateEntities: true,
26
+ checkNonPersistentCompositeProps: true,
27
+ inferDefaultValues: true,
28
+ },
29
+ validateRequired: true,
30
+ context: (name) => RequestContext.getEntityManager(name),
31
+ contextName: 'default',
32
+ allowGlobalContext: false,
33
+ // eslint-disable-next-line no-console
34
+ logger: console.log.bind(console),
35
+ colors: true,
36
+ findOneOrFailHandler: (entityName, where) => NotFoundError.findOneFailed(entityName, where),
37
+ findExactlyOneOrFailHandler: (entityName, where) => NotFoundError.findExactlyOneFailed(entityName, where),
38
+ baseDir: globalThis.process?.cwd?.(),
39
+ hydrator: ObjectHydrator,
40
+ flushMode: FlushMode.AUTO,
41
+ loadStrategy: LoadStrategy.BALANCED,
42
+ dataloader: DataloaderType.NONE,
43
+ populateWhere: PopulateHint.ALL,
44
+ ignoreUndefinedInQuery: false,
45
+ onQuery: (sql) => sql,
46
+ autoJoinOneToOneOwner: true,
47
+ autoJoinRefsForFilters: true,
48
+ filtersOnRelations: true,
49
+ propagationOnPrototype: true,
50
+ populateAfterFlush: true,
51
+ serialization: {
52
+ includePrimaryKeys: true,
53
+ },
54
+ assign: {
55
+ updateNestedEntities: true,
56
+ updateByPrimaryKey: true,
57
+ mergeObjectProperties: false,
58
+ mergeEmbeddedProperties: true,
59
+ ignoreUndefined: false,
60
+ },
61
+ persistOnCreate: true,
62
+ upsertManaged: true,
63
+ forceEntityConstructor: false,
64
+ forceUndefined: false,
65
+ forceUtcTimezone: true,
66
+ processOnCreateHooksEarly: true,
67
+ ensureDatabase: true,
68
+ ensureIndexes: false,
69
+ batchSize: 300,
70
+ debug: false,
71
+ ignoreDeprecations: false,
72
+ verbose: false,
73
+ driverOptions: {},
74
+ migrations: {
75
+ tableName: 'mikro_orm_migrations',
76
+ glob: '!(*.d).{js,ts,cjs}',
77
+ silent: false,
78
+ transactional: true,
79
+ allOrNothing: true,
80
+ dropTables: true,
81
+ safe: false,
82
+ snapshot: true,
83
+ emit: 'ts',
84
+ fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
85
+ },
86
+ schemaGenerator: {
87
+ createForeignKeyConstraints: true,
88
+ ignoreSchema: [],
89
+ skipTables: [],
90
+ skipViews: [],
91
+ skipColumns: {},
92
+ },
93
+ embeddables: {
94
+ prefixMode: 'relative',
95
+ },
96
+ entityGenerator: {
97
+ forceUndefined: true,
98
+ undefinedDefaults: false,
99
+ scalarTypeInDecorator: false,
100
+ bidirectionalRelations: true,
101
+ identifiedReferences: true,
102
+ scalarPropertiesForRelations: 'never',
103
+ entityDefinition: 'defineEntity',
104
+ decorators: 'legacy',
105
+ enumMode: 'dictionary',
106
+ /* v8 ignore next */
107
+ fileName: (className) => className,
108
+ onlyPurePivotTables: false,
109
+ outputPurePivotTables: false,
110
+ readOnlyPivotTables: false,
111
+ useCoreBaseEntity: false,
112
+ },
113
+ metadataCache: {},
114
+ resultCache: {
115
+ adapter: MemoryCacheAdapter,
116
+ expiration: 1000, // 1s
117
+ options: {},
118
+ },
119
+ metadataProvider: MetadataProvider,
120
+ highlighter: new NullHighlighter(),
121
+ seeder: {
122
+ defaultSeeder: 'DatabaseSeeder',
123
+ glob: '!(*.d).{js,ts}',
124
+ emit: 'ts',
125
+ fileName: (className) => className,
126
+ },
127
+ preferReadReplicas: true,
128
+ dynamicImportProvider: /* v8 ignore next */ (id) => import(id),
129
129
  };
130
130
  /** Holds and validates all ORM configuration options, providing access to drivers, loggers, cache adapters, and other services. */
131
131
  export class Configuration {
132
- #options;
133
- #logger;
134
- #slowQueryLogger;
135
- #driver;
136
- #platform;
137
- #cache = new Map();
138
- #extensions = new Map();
139
- constructor(options, validate = true) {
140
- if (options.dynamicImportProvider) {
141
- globalThis.dynamicImportProvider = options.dynamicImportProvider;
132
+ #options;
133
+ #logger;
134
+ #slowQueryLogger;
135
+ #driver;
136
+ #platform;
137
+ #cache = new Map();
138
+ #extensions = new Map();
139
+ constructor(options, validate = true) {
140
+ if (options.dynamicImportProvider) {
141
+ globalThis.dynamicImportProvider = options.dynamicImportProvider;
142
+ }
143
+ this.#options = Utils.mergeConfig({}, DEFAULTS, options);
144
+ if (validate) {
145
+ this.validateOptions();
146
+ }
147
+ this.#options.loggerFactory ??= DefaultLogger.create;
148
+ this.#logger = this.#options.loggerFactory({
149
+ debugMode: this.#options.debug,
150
+ ignoreDeprecations: this.#options.ignoreDeprecations,
151
+ usesReplicas: (this.#options.replicas?.length ?? 0) > 0,
152
+ highlighter: this.#options.highlighter,
153
+ writer: this.#options.logger,
154
+ });
155
+ const cf = this.#options.compiledFunctions;
156
+ if (cf && cf.__version !== Utils.getORMVersion()) {
157
+ this.#logger.warn('discovery', `Compiled functions were generated with MikroORM v${cf.__version ?? 'unknown'}, but the current version is v${Utils.getORMVersion()}. Please regenerate with \`npx mikro-orm compile\`.`);
158
+ }
159
+ if (this.#options.driver) {
160
+ this.#driver = new this.#options.driver(this);
161
+ this.#platform = this.#driver.getPlatform();
162
+ this.#platform.setConfig(this);
163
+ this.init(validate);
164
+ }
142
165
  }
143
- this.#options = Utils.mergeConfig({}, DEFAULTS, options);
144
- if (validate) {
145
- this.validateOptions();
166
+ /** Returns the database platform instance. */
167
+ getPlatform() {
168
+ return this.#platform;
146
169
  }
147
- this.#options.loggerFactory ??= DefaultLogger.create;
148
- this.#logger = this.#options.loggerFactory({
149
- debugMode: this.#options.debug,
150
- ignoreDeprecations: this.#options.ignoreDeprecations,
151
- usesReplicas: (this.#options.replicas?.length ?? 0) > 0,
152
- highlighter: this.#options.highlighter,
153
- writer: this.#options.logger,
154
- });
155
- const cf = this.#options.compiledFunctions;
156
- if (cf && cf.__version !== Utils.getORMVersion()) {
157
- this.#logger.warn(
158
- 'discovery',
159
- `Compiled functions were generated with MikroORM v${cf.__version ?? 'unknown'}, but the current version is v${Utils.getORMVersion()}. Please regenerate with \`npx mikro-orm compile\`.`,
160
- );
170
+ /**
171
+ * Gets specific configuration option. Falls back to specified `defaultValue` if provided.
172
+ */
173
+ get(key, defaultValue) {
174
+ if (typeof this.#options[key] !== 'undefined') {
175
+ return this.#options[key];
176
+ }
177
+ return defaultValue;
161
178
  }
162
- if (this.#options.driver) {
163
- this.#driver = new this.#options.driver(this);
164
- this.#platform = this.#driver.getPlatform();
165
- this.#platform.setConfig(this);
166
- this.init(validate);
179
+ /** Returns all configuration options. */
180
+ getAll() {
181
+ return this.#options;
167
182
  }
168
- }
169
- /** Returns the database platform instance. */
170
- getPlatform() {
171
- return this.#platform;
172
- }
173
- /**
174
- * Gets specific configuration option. Falls back to specified `defaultValue` if provided.
175
- */
176
- get(key, defaultValue) {
177
- if (typeof this.#options[key] !== 'undefined') {
178
- return this.#options[key];
183
+ /**
184
+ * Overrides specified configuration value.
185
+ */
186
+ set(key, value) {
187
+ this.#options[key] = value;
188
+ this.sync();
179
189
  }
180
- return defaultValue;
181
- }
182
- /** Returns all configuration options. */
183
- getAll() {
184
- return this.#options;
185
- }
186
- /**
187
- * Overrides specified configuration value.
188
- */
189
- set(key, value) {
190
- this.#options[key] = value;
191
- this.sync();
192
- }
193
- /**
194
- * Resets the configuration to its default value
195
- */
196
- reset(key) {
197
- this.#options[key] = DEFAULTS[key];
198
- }
199
- /**
200
- * Gets Logger instance.
201
- */
202
- getLogger() {
203
- return this.#logger;
204
- }
205
- /**
206
- * Gets the logger instance for slow queries.
207
- * Falls back to the main logger if no custom slow query logger factory is configured.
208
- */
209
- getSlowQueryLogger() {
210
- this.#slowQueryLogger ??=
211
- this.#options.slowQueryLoggerFactory?.({
212
- debugMode: this.#options.debug,
213
- writer: this.#options.logger,
214
- highlighter: this.#options.highlighter,
215
- usesReplicas: (this.#options.replicas?.length ?? 0) > 0,
216
- }) ?? this.#logger;
217
- return this.#slowQueryLogger;
218
- }
219
- /** Returns the configured dataloader type, normalizing boolean values. */
220
- getDataloaderType() {
221
- if (typeof this.#options.dataloader === 'boolean') {
222
- return this.#options.dataloader ? DataloaderType.ALL : DataloaderType.NONE;
190
+ /**
191
+ * Resets the configuration to its default value
192
+ */
193
+ reset(key) {
194
+ this.#options[key] = DEFAULTS[key];
223
195
  }
224
- return this.#options.dataloader;
225
- }
226
- /** Returns the configured schema name, optionally skipping the platform's default schema. */
227
- getSchema(skipDefaultSchema = false) {
228
- if (skipDefaultSchema && this.#options.schema === this.#platform.getDefaultSchemaName()) {
229
- return undefined;
196
+ /**
197
+ * Gets Logger instance.
198
+ */
199
+ getLogger() {
200
+ return this.#logger;
230
201
  }
231
- return this.#options.schema;
232
- }
233
- /**
234
- * Gets current database driver instance.
235
- */
236
- getDriver() {
237
- return this.#driver;
238
- }
239
- /** Registers a lazily-initialized extension by name. */
240
- registerExtension(name, cb) {
241
- this.#extensions.set(name, cb);
242
- }
243
- /** Returns a previously registered extension by name, initializing it on first access. */
244
- getExtension(name) {
245
- if (this.#cache.has(name)) {
246
- return this.#cache.get(name);
202
+ /**
203
+ * Gets the logger instance for slow queries.
204
+ * Falls back to the main logger if no custom slow query logger factory is configured.
205
+ */
206
+ getSlowQueryLogger() {
207
+ this.#slowQueryLogger ??=
208
+ this.#options.slowQueryLoggerFactory?.({
209
+ debugMode: this.#options.debug,
210
+ writer: this.#options.logger,
211
+ highlighter: this.#options.highlighter,
212
+ usesReplicas: (this.#options.replicas?.length ?? 0) > 0,
213
+ }) ?? this.#logger;
214
+ return this.#slowQueryLogger;
247
215
  }
248
- const ext = this.#extensions.get(name);
249
- /* v8 ignore next */
250
- if (!ext) {
251
- return undefined;
216
+ /** Returns the configured dataloader type, normalizing boolean values. */
217
+ getDataloaderType() {
218
+ if (typeof this.#options.dataloader === 'boolean') {
219
+ return this.#options.dataloader ? DataloaderType.ALL : DataloaderType.NONE;
220
+ }
221
+ return this.#options.dataloader;
252
222
  }
253
- this.#cache.set(name, ext());
254
- return this.#cache.get(name);
255
- }
256
- /**
257
- * Gets instance of NamingStrategy. (cached)
258
- */
259
- getNamingStrategy() {
260
- return this.getCachedService(this.#options.namingStrategy || this.#platform.getNamingStrategy());
261
- }
262
- /**
263
- * Gets instance of Hydrator. (cached)
264
- */
265
- getHydrator(metadata) {
266
- return this.getCachedService(this.#options.hydrator, metadata, this.#platform, this);
267
- }
268
- /**
269
- * Gets instance of Comparator. (cached)
270
- */
271
- getComparator(metadata) {
272
- return this.getCachedService(EntityComparator, metadata, this.#platform, this);
273
- }
274
- /**
275
- * Gets instance of MetadataProvider. (cached)
276
- */
277
- getMetadataProvider() {
278
- return this.getCachedService(this.#options.metadataProvider, this);
279
- }
280
- /**
281
- * Gets instance of metadata CacheAdapter. (cached)
282
- */
283
- getMetadataCacheAdapter() {
284
- return this.getCachedService(
285
- this.#options.metadataCache.adapter,
286
- this.#options.metadataCache.options,
287
- this.#options.baseDir,
288
- this.#options.metadataCache.pretty,
289
- );
290
- }
291
- /**
292
- * Gets instance of CacheAdapter for result cache. (cached)
293
- */
294
- getResultCacheAdapter() {
295
- return this.getCachedService(this.#options.resultCache.adapter, {
296
- expiration: this.#options.resultCache.expiration,
297
- ...this.#options.resultCache.options,
298
- });
299
- }
300
- /**
301
- * Gets EntityRepository class to be instantiated.
302
- */
303
- getRepositoryClass(repository) {
304
- if (repository) {
305
- return repository();
223
+ /** Returns the configured schema name, optionally skipping the platform's default schema. */
224
+ getSchema(skipDefaultSchema = false) {
225
+ if (skipDefaultSchema && this.#options.schema === this.#platform.getDefaultSchemaName()) {
226
+ return undefined;
227
+ }
228
+ return this.#options.schema;
306
229
  }
307
- if (this.#options.entityRepository) {
308
- return this.#options.entityRepository;
230
+ /**
231
+ * Gets current database driver instance.
232
+ */
233
+ getDriver() {
234
+ return this.#driver;
309
235
  }
310
- return this.#platform.getRepositoryClass();
311
- }
312
- /**
313
- * Creates instance of given service and caches it.
314
- */
315
- getCachedService(cls, ...args) {
316
- if (!this.#cache.has(cls.name)) {
317
- this.#cache.set(cls.name, new cls(...args));
236
+ /** Registers a lazily-initialized extension by name. */
237
+ registerExtension(name, cb) {
238
+ this.#extensions.set(name, cb);
318
239
  }
319
- return this.#cache.get(cls.name);
320
- }
321
- /** Clears the cached service instances, forcing re-creation on next access. */
322
- resetServiceCache() {
323
- this.#cache.clear();
324
- }
325
- init(validate) {
326
- const useCache = this.getMetadataProvider().useCache();
327
- const metadataCache = this.#options.metadataCache;
328
- if (!useCache) {
329
- metadataCache.adapter = NullCacheAdapter;
240
+ /** Returns a previously registered extension by name, initializing it on first access. */
241
+ getExtension(name) {
242
+ if (this.#cache.has(name)) {
243
+ return this.#cache.get(name);
244
+ }
245
+ const ext = this.#extensions.get(name);
246
+ /* v8 ignore next */
247
+ if (!ext) {
248
+ return undefined;
249
+ }
250
+ this.#cache.set(name, ext());
251
+ return this.#cache.get(name);
330
252
  }
331
- metadataCache.enabled ??= useCache;
332
- this.#options.clientUrl ??= this.#platform.getDefaultClientUrl();
333
- this.#options.implicitTransactions ??= this.#platform.usesImplicitTransactions();
334
- if (validate && metadataCache.enabled && !metadataCache.adapter) {
335
- throw new Error(
336
- 'No metadata cache adapter specified, please fill in `metadataCache.adapter` option or use the async MikroORM.init() method which can autoload it.',
337
- );
253
+ /**
254
+ * Gets instance of NamingStrategy. (cached)
255
+ */
256
+ getNamingStrategy() {
257
+ return this.getCachedService(this.#options.namingStrategy || this.#platform.getNamingStrategy());
338
258
  }
339
- try {
340
- const url = new URL(this.#options.clientUrl);
341
- if (url.pathname) {
342
- this.#options.dbName = this.get('dbName', decodeURIComponent(url.pathname).substring(1));
343
- }
344
- } catch {
345
- const url = /:\/\/.*\/([^?]+)/.exec(this.#options.clientUrl);
346
- if (url) {
347
- this.#options.dbName = this.get('dbName', decodeURIComponent(url[1]));
348
- }
259
+ /**
260
+ * Gets instance of Hydrator. (cached)
261
+ */
262
+ getHydrator(metadata) {
263
+ return this.getCachedService(this.#options.hydrator, metadata, this.#platform, this);
349
264
  }
350
- if (validate && !this.#options.dbName && this.#options.clientUrl) {
351
- throw new Error("No database specified, `clientUrl` option provided but it's missing the pathname.");
265
+ /**
266
+ * Gets instance of Comparator. (cached)
267
+ */
268
+ getComparator(metadata) {
269
+ return this.getCachedService(EntityComparator, metadata, this.#platform, this);
352
270
  }
353
- this.#options.schema ??= this.#platform.getDefaultSchemaName();
354
- this.#options.charset ??= this.#platform.getDefaultCharset();
355
- Object.keys(this.#options.filters).forEach(key => {
356
- this.#options.filters[key].default ??= true;
357
- });
358
- if (!this.#options.filtersOnRelations) {
359
- this.#options.autoJoinRefsForFilters ??= false;
271
+ /**
272
+ * Gets instance of MetadataProvider. (cached)
273
+ */
274
+ getMetadataProvider() {
275
+ return this.getCachedService(this.#options.metadataProvider, this);
360
276
  }
361
- this.#options.subscribers = [...this.#options.subscribers].map(subscriber => {
362
- return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
363
- });
364
- this.sync();
365
- if (!colors.enabled()) {
366
- this.#options.highlighter = new NullHighlighter();
277
+ /**
278
+ * Gets instance of metadata CacheAdapter. (cached)
279
+ */
280
+ getMetadataCacheAdapter() {
281
+ return this.getCachedService(this.#options.metadataCache.adapter, this.#options.metadataCache.options, this.#options.baseDir, this.#options.metadataCache.pretty);
367
282
  }
368
- }
369
- sync() {
370
- setEnv('MIKRO_ORM_COLORS', this.#options.colors);
371
- this.#logger.setDebugMode(this.#options.debug);
372
- this.#slowQueryLogger = undefined;
373
- }
374
- validateOptions() {
375
- /* v8 ignore next */
376
- if ('type' in this.#options) {
377
- throw new Error(
378
- "The `type` option has been removed in v6, please fill in the `driver` option instead or use `defineConfig` helper (to define your ORM config) or `MikroORM` class (to call the `init` method) exported from the driver package (e.g. `import { defineConfig } from '@mikro-orm/mysql'; export default defineConfig({ ... })`).",
379
- );
283
+ /**
284
+ * Gets instance of CacheAdapter for result cache. (cached)
285
+ */
286
+ getResultCacheAdapter() {
287
+ return this.getCachedService(this.#options.resultCache.adapter, {
288
+ expiration: this.#options.resultCache.expiration,
289
+ ...this.#options.resultCache.options,
290
+ });
380
291
  }
381
- if (!this.#options.driver) {
382
- throw new Error(
383
- "No driver specified, please fill in the `driver` option or use `defineConfig` helper (to define your ORM config) or `MikroORM` class (to call the `init` method) exported from the driver package (e.g. `import { defineConfig } from '@mikro-orm/mysql'; export defineConfig({ ... })`).",
384
- );
292
+ /**
293
+ * Gets EntityRepository class to be instantiated.
294
+ */
295
+ getRepositoryClass(repository) {
296
+ if (repository) {
297
+ return repository();
298
+ }
299
+ if (this.#options.entityRepository) {
300
+ return this.#options.entityRepository;
301
+ }
302
+ return this.#platform.getRepositoryClass();
385
303
  }
386
- if (!this.#options.dbName && !this.#options.clientUrl) {
387
- throw new Error('No database specified, please fill in `dbName` or `clientUrl` option');
304
+ /**
305
+ * Creates instance of given service and caches it.
306
+ */
307
+ getCachedService(cls, ...args) {
308
+ if (!this.#cache.has(cls.name)) {
309
+ this.#cache.set(cls.name, new cls(...args));
310
+ }
311
+ return this.#cache.get(cls.name);
388
312
  }
389
- if (this.#options.entities.length === 0 && this.#options.discovery.warnWhenNoEntities) {
390
- throw new Error('No entities found, please use `entities` option');
313
+ /** Clears the cached service instances, forcing re-creation on next access. */
314
+ resetServiceCache() {
315
+ this.#cache.clear();
391
316
  }
392
- if (
393
- typeof this.#options.driverOptions === 'function' &&
394
- this.#options.driverOptions.constructor.name === 'AsyncFunction'
395
- ) {
396
- throw new Error('`driverOptions` callback cannot be async');
317
+ init(validate) {
318
+ const useCache = this.getMetadataProvider().useCache();
319
+ const metadataCache = this.#options.metadataCache;
320
+ if (!useCache) {
321
+ metadataCache.adapter = NullCacheAdapter;
322
+ }
323
+ metadataCache.enabled ??= useCache;
324
+ this.#options.clientUrl ??= this.#platform.getDefaultClientUrl();
325
+ this.#options.implicitTransactions ??= this.#platform.usesImplicitTransactions();
326
+ if (validate && metadataCache.enabled && !metadataCache.adapter) {
327
+ throw new Error('No metadata cache adapter specified, please fill in `metadataCache.adapter` option or use the async MikroORM.init() method which can autoload it.');
328
+ }
329
+ try {
330
+ const url = new URL(this.#options.clientUrl);
331
+ if (url.pathname) {
332
+ this.#options.dbName = this.get('dbName', decodeURIComponent(url.pathname).substring(1));
333
+ }
334
+ }
335
+ catch {
336
+ const url = /:\/\/.*\/([^?]+)/.exec(this.#options.clientUrl);
337
+ if (url) {
338
+ this.#options.dbName = this.get('dbName', decodeURIComponent(url[1]));
339
+ }
340
+ }
341
+ if (validate && !this.#options.dbName && this.#options.clientUrl) {
342
+ throw new Error("No database specified, `clientUrl` option provided but it's missing the pathname.");
343
+ }
344
+ this.#options.schema ??= this.#platform.getDefaultSchemaName();
345
+ this.#options.charset ??= this.#platform.getDefaultCharset();
346
+ Object.keys(this.#options.filters).forEach(key => {
347
+ this.#options.filters[key].default ??= true;
348
+ });
349
+ if (!this.#options.filtersOnRelations) {
350
+ this.#options.autoJoinRefsForFilters ??= false;
351
+ }
352
+ this.#options.subscribers = [...this.#options.subscribers].map(subscriber => {
353
+ return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
354
+ });
355
+ this.sync();
356
+ if (!colors.enabled()) {
357
+ this.#options.highlighter = new NullHighlighter();
358
+ }
359
+ }
360
+ sync() {
361
+ setEnv('MIKRO_ORM_COLORS', this.#options.colors);
362
+ this.#logger.setDebugMode(this.#options.debug);
363
+ this.#slowQueryLogger = undefined;
364
+ }
365
+ validateOptions() {
366
+ /* v8 ignore next */
367
+ if ('type' in this.#options) {
368
+ throw new Error("The `type` option has been removed in v6, please fill in the `driver` option instead or use `defineConfig` helper (to define your ORM config) or `MikroORM` class (to call the `init` method) exported from the driver package (e.g. `import { defineConfig } from '@mikro-orm/mysql'; export default defineConfig({ ... })`).");
369
+ }
370
+ if (!this.#options.driver) {
371
+ throw new Error("No driver specified, please fill in the `driver` option or use `defineConfig` helper (to define your ORM config) or `MikroORM` class (to call the `init` method) exported from the driver package (e.g. `import { defineConfig } from '@mikro-orm/mysql'; export defineConfig({ ... })`).");
372
+ }
373
+ if (!this.#options.dbName && !this.#options.clientUrl) {
374
+ throw new Error('No database specified, please fill in `dbName` or `clientUrl` option');
375
+ }
376
+ if (this.#options.entities.length === 0 && this.#options.discovery.warnWhenNoEntities) {
377
+ throw new Error('No entities found, please use `entities` option');
378
+ }
379
+ if (typeof this.#options.driverOptions === 'function' &&
380
+ this.#options.driverOptions.constructor.name === 'AsyncFunction') {
381
+ throw new Error('`driverOptions` callback cannot be async');
382
+ }
397
383
  }
398
- }
399
384
  }
400
385
  /**
401
386
  * Type helper to make it easier to use `mikro-orm.config.js`.
402
387
  */
403
388
  export function defineConfig(options) {
404
- return options;
389
+ return options;
405
390
  }