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

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 +884 -583
  2. package/EntityManager.js +1922 -1895
  3. package/MikroORM.d.ts +103 -74
  4. package/MikroORM.js +178 -179
  5. package/README.md +1 -1
  6. package/cache/CacheAdapter.d.ts +36 -36
  7. package/cache/FileCacheAdapter.d.ts +30 -24
  8. package/cache/FileCacheAdapter.js +80 -78
  9. package/cache/GeneratedCacheAdapter.d.ts +18 -20
  10. package/cache/GeneratedCacheAdapter.js +30 -30
  11. package/cache/MemoryCacheAdapter.d.ts +18 -20
  12. package/cache/MemoryCacheAdapter.js +35 -36
  13. package/cache/NullCacheAdapter.d.ts +16 -16
  14. package/cache/NullCacheAdapter.js +24 -24
  15. package/connections/Connection.d.ts +95 -84
  16. package/connections/Connection.js +165 -168
  17. package/drivers/DatabaseDriver.d.ts +186 -80
  18. package/drivers/DatabaseDriver.js +450 -443
  19. package/drivers/IDatabaseDriver.d.ts +440 -301
  20. package/entity/BaseEntity.d.ts +120 -83
  21. package/entity/BaseEntity.js +43 -43
  22. package/entity/Collection.d.ts +212 -179
  23. package/entity/Collection.js +727 -721
  24. package/entity/EntityAssigner.d.ts +88 -77
  25. package/entity/EntityAssigner.js +231 -230
  26. package/entity/EntityFactory.d.ts +66 -54
  27. package/entity/EntityFactory.js +425 -383
  28. package/entity/EntityHelper.d.ts +34 -22
  29. package/entity/EntityHelper.js +280 -267
  30. package/entity/EntityIdentifier.d.ts +4 -4
  31. package/entity/EntityIdentifier.js +10 -10
  32. package/entity/EntityLoader.d.ts +98 -72
  33. package/entity/EntityLoader.js +753 -723
  34. package/entity/EntityRepository.d.ts +316 -201
  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 +126 -82
  39. package/entity/Reference.js +278 -274
  40. package/entity/WrappedEntity.d.ts +115 -72
  41. package/entity/WrappedEntity.js +168 -166
  42. package/entity/defineEntity.d.ts +1315 -636
  43. package/entity/defineEntity.js +527 -518
  44. package/entity/utils.d.ts +13 -3
  45. package/entity/utils.js +71 -73
  46. package/entity/validators.js +43 -43
  47. package/entity/wrap.js +8 -8
  48. package/enums.d.ts +258 -253
  49. package/enums.js +251 -252
  50. package/errors.d.ts +114 -72
  51. package/errors.js +350 -253
  52. package/events/EventManager.d.ts +26 -14
  53. package/events/EventManager.js +79 -77
  54. package/events/EventSubscriber.d.ts +29 -29
  55. package/events/TransactionEventBroadcaster.d.ts +15 -8
  56. package/events/TransactionEventBroadcaster.js +14 -14
  57. package/exceptions.d.ts +23 -40
  58. package/exceptions.js +35 -52
  59. package/hydration/Hydrator.d.ts +42 -17
  60. package/hydration/Hydrator.js +43 -43
  61. package/hydration/ObjectHydrator.d.ts +50 -17
  62. package/hydration/ObjectHydrator.js +481 -416
  63. package/index.d.ts +116 -2
  64. package/index.js +10 -1
  65. package/logging/DefaultLogger.d.ts +34 -32
  66. package/logging/DefaultLogger.js +86 -86
  67. package/logging/Logger.d.ts +41 -41
  68. package/logging/SimpleLogger.d.ts +13 -11
  69. package/logging/SimpleLogger.js +22 -22
  70. package/logging/colors.d.ts +6 -6
  71. package/logging/colors.js +11 -10
  72. package/logging/inspect.js +7 -7
  73. package/metadata/EntitySchema.d.ts +211 -127
  74. package/metadata/EntitySchema.js +397 -398
  75. package/metadata/MetadataDiscovery.d.ts +114 -114
  76. package/metadata/MetadataDiscovery.js +1951 -1863
  77. package/metadata/MetadataProvider.d.ts +24 -21
  78. package/metadata/MetadataProvider.js +82 -84
  79. package/metadata/MetadataStorage.d.ts +38 -32
  80. package/metadata/MetadataStorage.js +118 -118
  81. package/metadata/MetadataValidator.d.ts +39 -39
  82. package/metadata/MetadataValidator.js +381 -338
  83. package/metadata/discover-entities.d.ts +5 -2
  84. package/metadata/discover-entities.js +35 -27
  85. package/metadata/types.d.ts +615 -531
  86. package/naming-strategy/AbstractNamingStrategy.d.ts +54 -39
  87. package/naming-strategy/AbstractNamingStrategy.js +90 -85
  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 +109 -99
  93. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  94. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  95. package/not-supported.js +7 -4
  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 +310 -299
  100. package/platforms/Platform.js +663 -636
  101. package/serialization/EntitySerializer.d.ts +49 -26
  102. package/serialization/EntitySerializer.js +224 -218
  103. package/serialization/EntityTransformer.d.ts +10 -6
  104. package/serialization/EntityTransformer.js +219 -217
  105. package/serialization/SerializationContext.d.ts +27 -23
  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 +17 -10
  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 +83 -79
  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 +75 -49
  158. package/types/index.js +52 -26
  159. package/typings.d.ts +1250 -737
  160. package/typings.js +244 -231
  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 +178 -170
  165. package/unit-of-work/ChangeSetPersister.d.ts +63 -44
  166. package/unit-of-work/ChangeSetPersister.js +442 -421
  167. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  168. package/unit-of-work/CommitOrderCalculator.js +89 -88
  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 +181 -141
  172. package/unit-of-work/UnitOfWork.js +1200 -1183
  173. package/utils/AbstractMigrator.d.ts +111 -91
  174. package/utils/AbstractMigrator.js +275 -275
  175. package/utils/AbstractSchemaGenerator.d.ts +43 -34
  176. package/utils/AbstractSchemaGenerator.js +121 -122
  177. package/utils/AsyncContext.d.ts +3 -3
  178. package/utils/AsyncContext.js +34 -35
  179. package/utils/Configuration.d.ts +852 -808
  180. package/utils/Configuration.js +359 -344
  181. package/utils/Cursor.d.ts +40 -22
  182. package/utils/Cursor.js +135 -127
  183. package/utils/DataloaderUtils.d.ts +58 -43
  184. package/utils/DataloaderUtils.js +203 -198
  185. package/utils/EntityComparator.d.ts +98 -81
  186. package/utils/EntityComparator.js +828 -728
  187. package/utils/NullHighlighter.d.ts +1 -1
  188. package/utils/NullHighlighter.js +3 -3
  189. package/utils/QueryHelper.d.ts +79 -51
  190. package/utils/QueryHelper.js +372 -361
  191. package/utils/RawQueryFragment.d.ts +50 -34
  192. package/utils/RawQueryFragment.js +107 -105
  193. package/utils/RequestContext.d.ts +32 -32
  194. package/utils/RequestContext.js +52 -53
  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 +199 -197
  199. package/utils/Utils.d.ts +204 -145
  200. package/utils/Utils.js +812 -810
  201. package/utils/clone.js +104 -113
  202. package/utils/env-vars.js +90 -88
  203. package/utils/fs-utils.d.ts +15 -15
  204. package/utils/fs-utils.js +180 -181
  205. package/utils/upsert-utils.d.ts +20 -5
  206. package/utils/upsert-utils.js +114 -116
@@ -12,379 +12,394 @@ 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;
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
- }
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;
165
142
  }
166
- /** Returns the database platform instance. */
167
- getPlatform() {
168
- return this.#platform;
143
+ this.#options = Utils.mergeConfig({}, DEFAULTS, options);
144
+ if (validate) {
145
+ this.validateOptions();
169
146
  }
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;
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
+ );
178
161
  }
179
- /** Returns all configuration options. */
180
- getAll() {
181
- return this.#options;
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);
182
167
  }
183
- /**
184
- * Overrides specified configuration value.
185
- */
186
- set(key, value) {
187
- this.#options[key] = value;
188
- this.sync();
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];
189
179
  }
190
- /**
191
- * Resets the configuration to its default value
192
- */
193
- reset(key) {
194
- this.#options[key] = DEFAULTS[key];
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;
195
223
  }
196
- /**
197
- * Gets Logger instance.
198
- */
199
- getLogger() {
200
- return this.#logger;
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;
201
230
  }
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;
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);
215
247
  }
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;
248
+ const ext = this.#extensions.get(name);
249
+ /* v8 ignore next */
250
+ if (!ext) {
251
+ return undefined;
222
252
  }
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;
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();
229
306
  }
230
- /**
231
- * Gets current database driver instance.
232
- */
233
- getDriver() {
234
- return this.#driver;
307
+ if (this.#options.entityRepository) {
308
+ return this.#options.entityRepository;
235
309
  }
236
- /** Registers a lazily-initialized extension by name. */
237
- registerExtension(name, cb) {
238
- this.#extensions.set(name, cb);
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));
239
318
  }
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);
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;
252
330
  }
253
- /**
254
- * Gets instance of NamingStrategy. (cached)
255
- */
256
- getNamingStrategy() {
257
- return this.getCachedService(this.#options.namingStrategy || this.#platform.getNamingStrategy());
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
+ );
258
338
  }
259
- /**
260
- * Gets instance of Hydrator. (cached)
261
- */
262
- getHydrator(metadata) {
263
- return this.getCachedService(this.#options.hydrator, metadata, this.#platform, this);
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
+ }
264
349
  }
265
- /**
266
- * Gets instance of Comparator. (cached)
267
- */
268
- getComparator(metadata) {
269
- return this.getCachedService(EntityComparator, metadata, this.#platform, this);
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.");
270
352
  }
271
- /**
272
- * Gets instance of MetadataProvider. (cached)
273
- */
274
- getMetadataProvider() {
275
- return this.getCachedService(this.#options.metadataProvider, this);
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;
276
360
  }
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);
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();
282
367
  }
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
- });
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
+ );
291
380
  }
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();
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
+ );
303
385
  }
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);
386
+ if (!this.#options.dbName && !this.#options.clientUrl) {
387
+ throw new Error('No database specified, please fill in `dbName` or `clientUrl` option');
312
388
  }
313
- /** Clears the cached service instances, forcing re-creation on next access. */
314
- resetServiceCache() {
315
- this.#cache.clear();
389
+ if (this.#options.entities.length === 0 && this.#options.discovery.warnWhenNoEntities) {
390
+ throw new Error('No entities found, please use `entities` option');
316
391
  }
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
- }
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');
383
397
  }
398
+ }
384
399
  }
385
400
  /**
386
401
  * Type helper to make it easier to use `mikro-orm.config.js`.
387
402
  */
388
403
  export function defineConfig(options) {
389
- return options;
404
+ return options;
390
405
  }