@mikro-orm/core 7.0.0-dev.23 → 7.0.0-dev.231

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 (209) hide show
  1. package/EntityManager.d.ts +91 -59
  2. package/EntityManager.js +303 -251
  3. package/MikroORM.d.ts +44 -35
  4. package/MikroORM.js +109 -143
  5. package/README.md +2 -0
  6. package/cache/FileCacheAdapter.d.ts +1 -1
  7. package/cache/FileCacheAdapter.js +17 -8
  8. package/cache/GeneratedCacheAdapter.d.ts +0 -1
  9. package/cache/GeneratedCacheAdapter.js +0 -2
  10. package/cache/index.d.ts +0 -1
  11. package/cache/index.js +0 -1
  12. package/connections/Connection.d.ts +12 -5
  13. package/connections/Connection.js +21 -12
  14. package/drivers/DatabaseDriver.d.ts +25 -16
  15. package/drivers/DatabaseDriver.js +118 -35
  16. package/drivers/IDatabaseDriver.d.ts +42 -19
  17. package/entity/BaseEntity.d.ts +61 -2
  18. package/entity/BaseEntity.js +0 -3
  19. package/entity/Collection.d.ts +101 -29
  20. package/entity/Collection.js +436 -104
  21. package/entity/EntityAssigner.d.ts +1 -1
  22. package/entity/EntityAssigner.js +26 -18
  23. package/entity/EntityFactory.d.ts +7 -1
  24. package/entity/EntityFactory.js +83 -54
  25. package/entity/EntityHelper.d.ts +2 -2
  26. package/entity/EntityHelper.js +48 -15
  27. package/entity/EntityLoader.d.ts +7 -6
  28. package/entity/EntityLoader.js +221 -93
  29. package/entity/EntityRepository.d.ts +27 -7
  30. package/entity/EntityRepository.js +8 -2
  31. package/entity/PolymorphicRef.d.ts +12 -0
  32. package/entity/PolymorphicRef.js +18 -0
  33. package/entity/Reference.d.ts +1 -5
  34. package/entity/Reference.js +21 -12
  35. package/entity/WrappedEntity.d.ts +0 -5
  36. package/entity/WrappedEntity.js +2 -7
  37. package/entity/defineEntity.d.ts +380 -310
  38. package/entity/defineEntity.js +124 -273
  39. package/entity/index.d.ts +2 -2
  40. package/entity/index.js +2 -2
  41. package/entity/utils.js +1 -1
  42. package/entity/validators.d.ts +11 -0
  43. package/entity/validators.js +65 -0
  44. package/enums.d.ts +8 -6
  45. package/enums.js +2 -1
  46. package/errors.d.ts +20 -10
  47. package/errors.js +55 -23
  48. package/events/EventManager.d.ts +2 -1
  49. package/events/EventManager.js +19 -11
  50. package/hydration/Hydrator.js +1 -2
  51. package/hydration/ObjectHydrator.d.ts +4 -4
  52. package/hydration/ObjectHydrator.js +87 -35
  53. package/index.d.ts +2 -2
  54. package/index.js +1 -2
  55. package/logging/DefaultLogger.d.ts +1 -1
  56. package/logging/DefaultLogger.js +1 -0
  57. package/logging/SimpleLogger.d.ts +1 -1
  58. package/logging/colors.d.ts +1 -1
  59. package/logging/colors.js +7 -6
  60. package/logging/index.d.ts +1 -0
  61. package/logging/index.js +1 -0
  62. package/logging/inspect.d.ts +2 -0
  63. package/logging/inspect.js +11 -0
  64. package/metadata/EntitySchema.d.ts +47 -23
  65. package/metadata/EntitySchema.js +92 -33
  66. package/metadata/MetadataDiscovery.d.ts +64 -9
  67. package/metadata/MetadataDiscovery.js +778 -325
  68. package/metadata/MetadataProvider.d.ts +11 -2
  69. package/metadata/MetadataProvider.js +46 -2
  70. package/metadata/MetadataStorage.d.ts +13 -11
  71. package/metadata/MetadataStorage.js +70 -37
  72. package/metadata/MetadataValidator.d.ts +32 -9
  73. package/metadata/MetadataValidator.js +196 -41
  74. package/metadata/discover-entities.d.ts +5 -0
  75. package/metadata/discover-entities.js +40 -0
  76. package/metadata/index.d.ts +1 -1
  77. package/metadata/index.js +1 -1
  78. package/metadata/types.d.ts +526 -0
  79. package/metadata/types.js +1 -0
  80. package/naming-strategy/AbstractNamingStrategy.d.ts +16 -4
  81. package/naming-strategy/AbstractNamingStrategy.js +20 -2
  82. package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
  83. package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
  84. package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
  85. package/naming-strategy/MongoNamingStrategy.js +6 -6
  86. package/naming-strategy/NamingStrategy.d.ts +28 -4
  87. package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
  88. package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
  89. package/not-supported.d.ts +2 -0
  90. package/not-supported.js +4 -0
  91. package/package.json +19 -11
  92. package/platforms/ExceptionConverter.js +1 -1
  93. package/platforms/Platform.d.ts +7 -14
  94. package/platforms/Platform.js +20 -43
  95. package/serialization/EntitySerializer.d.ts +5 -0
  96. package/serialization/EntitySerializer.js +47 -27
  97. package/serialization/EntityTransformer.js +28 -18
  98. package/serialization/SerializationContext.d.ts +6 -6
  99. package/serialization/SerializationContext.js +3 -3
  100. package/types/ArrayType.d.ts +1 -1
  101. package/types/ArrayType.js +2 -3
  102. package/types/BigIntType.d.ts +8 -6
  103. package/types/BigIntType.js +1 -1
  104. package/types/BlobType.d.ts +0 -1
  105. package/types/BlobType.js +0 -3
  106. package/types/BooleanType.d.ts +1 -0
  107. package/types/BooleanType.js +3 -0
  108. package/types/DecimalType.d.ts +6 -4
  109. package/types/DecimalType.js +2 -2
  110. package/types/DoubleType.js +1 -1
  111. package/types/EnumArrayType.js +1 -2
  112. package/types/JsonType.d.ts +1 -1
  113. package/types/JsonType.js +7 -2
  114. package/types/TinyIntType.js +1 -1
  115. package/types/Type.d.ts +2 -4
  116. package/types/Type.js +3 -3
  117. package/types/Uint8ArrayType.d.ts +0 -1
  118. package/types/Uint8ArrayType.js +1 -4
  119. package/types/index.d.ts +1 -1
  120. package/typings.d.ts +381 -171
  121. package/typings.js +97 -44
  122. package/unit-of-work/ChangeSet.d.ts +4 -6
  123. package/unit-of-work/ChangeSet.js +4 -5
  124. package/unit-of-work/ChangeSetComputer.d.ts +1 -3
  125. package/unit-of-work/ChangeSetComputer.js +35 -14
  126. package/unit-of-work/ChangeSetPersister.d.ts +7 -3
  127. package/unit-of-work/ChangeSetPersister.js +83 -25
  128. package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
  129. package/unit-of-work/CommitOrderCalculator.js +13 -13
  130. package/unit-of-work/IdentityMap.d.ts +12 -0
  131. package/unit-of-work/IdentityMap.js +39 -1
  132. package/unit-of-work/UnitOfWork.d.ts +27 -3
  133. package/unit-of-work/UnitOfWork.js +258 -92
  134. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  135. package/utils/AbstractSchemaGenerator.js +28 -17
  136. package/utils/AsyncContext.d.ts +6 -0
  137. package/utils/AsyncContext.js +42 -0
  138. package/utils/Configuration.d.ts +795 -209
  139. package/utils/Configuration.js +150 -192
  140. package/utils/ConfigurationLoader.d.ts +1 -54
  141. package/utils/ConfigurationLoader.js +1 -352
  142. package/utils/Cursor.d.ts +0 -3
  143. package/utils/Cursor.js +24 -11
  144. package/utils/DataloaderUtils.d.ts +10 -5
  145. package/utils/DataloaderUtils.js +29 -12
  146. package/utils/EntityComparator.d.ts +16 -9
  147. package/utils/EntityComparator.js +158 -58
  148. package/utils/QueryHelper.d.ts +18 -6
  149. package/utils/QueryHelper.js +76 -23
  150. package/utils/RawQueryFragment.d.ts +28 -34
  151. package/utils/RawQueryFragment.js +35 -71
  152. package/utils/RequestContext.js +2 -2
  153. package/utils/TransactionContext.js +2 -2
  154. package/utils/TransactionManager.js +28 -4
  155. package/utils/Utils.d.ts +14 -127
  156. package/utils/Utils.js +85 -397
  157. package/utils/clone.js +8 -23
  158. package/utils/env-vars.d.ts +7 -0
  159. package/utils/env-vars.js +97 -0
  160. package/utils/fs-utils.d.ts +33 -0
  161. package/utils/fs-utils.js +192 -0
  162. package/utils/index.d.ts +1 -1
  163. package/utils/index.js +1 -1
  164. package/utils/upsert-utils.d.ts +9 -4
  165. package/utils/upsert-utils.js +46 -3
  166. package/decorators/Check.d.ts +0 -3
  167. package/decorators/Check.js +0 -13
  168. package/decorators/CreateRequestContext.d.ts +0 -3
  169. package/decorators/CreateRequestContext.js +0 -32
  170. package/decorators/Embeddable.d.ts +0 -8
  171. package/decorators/Embeddable.js +0 -11
  172. package/decorators/Embedded.d.ts +0 -12
  173. package/decorators/Embedded.js +0 -18
  174. package/decorators/Entity.d.ts +0 -33
  175. package/decorators/Entity.js +0 -12
  176. package/decorators/Enum.d.ts +0 -9
  177. package/decorators/Enum.js +0 -16
  178. package/decorators/Filter.d.ts +0 -2
  179. package/decorators/Filter.js +0 -8
  180. package/decorators/Formula.d.ts +0 -4
  181. package/decorators/Formula.js +0 -15
  182. package/decorators/Indexed.d.ts +0 -19
  183. package/decorators/Indexed.js +0 -20
  184. package/decorators/ManyToMany.d.ts +0 -42
  185. package/decorators/ManyToMany.js +0 -14
  186. package/decorators/ManyToOne.d.ts +0 -34
  187. package/decorators/ManyToOne.js +0 -14
  188. package/decorators/OneToMany.d.ts +0 -28
  189. package/decorators/OneToMany.js +0 -17
  190. package/decorators/OneToOne.d.ts +0 -28
  191. package/decorators/OneToOne.js +0 -7
  192. package/decorators/PrimaryKey.d.ts +0 -8
  193. package/decorators/PrimaryKey.js +0 -20
  194. package/decorators/Property.d.ts +0 -250
  195. package/decorators/Property.js +0 -32
  196. package/decorators/Transactional.d.ts +0 -14
  197. package/decorators/Transactional.js +0 -28
  198. package/decorators/hooks.d.ts +0 -16
  199. package/decorators/hooks.js +0 -47
  200. package/decorators/index.d.ts +0 -17
  201. package/decorators/index.js +0 -17
  202. package/entity/ArrayCollection.d.ts +0 -118
  203. package/entity/ArrayCollection.js +0 -407
  204. package/entity/EntityValidator.d.ts +0 -19
  205. package/entity/EntityValidator.js +0 -150
  206. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  207. package/metadata/ReflectMetadataProvider.js +0 -44
  208. package/utils/resolveContextProvider.d.ts +0 -10
  209. package/utils/resolveContextProvider.js +0 -28
@@ -1,138 +1,133 @@
1
- import { FileCacheAdapter } from '../cache/FileCacheAdapter.js';
2
1
  import { NullCacheAdapter } from '../cache/NullCacheAdapter.js';
3
2
  import { ObjectHydrator } from '../hydration/ObjectHydrator.js';
4
3
  import { NullHighlighter } from '../utils/NullHighlighter.js';
5
4
  import { DefaultLogger } from '../logging/DefaultLogger.js';
6
5
  import { colors } from '../logging/colors.js';
7
6
  import { Utils } from '../utils/Utils.js';
8
- import { ReflectMetadataProvider } from '../metadata/ReflectMetadataProvider.js';
7
+ import { MetadataProvider } from '../metadata/MetadataProvider.js';
9
8
  import { NotFoundError } from '../errors.js';
10
9
  import { RequestContext } from './RequestContext.js';
11
10
  import { DataloaderType, FlushMode, LoadStrategy, PopulateHint } from '../enums.js';
12
11
  import { MemoryCacheAdapter } from '../cache/MemoryCacheAdapter.js';
13
12
  import { EntityComparator } from './EntityComparator.js';
13
+ import { setEnv } from './env-vars.js';
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),
129
+ };
14
130
  export class Configuration {
15
- static DEFAULTS = {
16
- pool: {},
17
- entities: [],
18
- entitiesTs: [],
19
- extensions: [],
20
- subscribers: [],
21
- filters: {},
22
- discovery: {
23
- warnWhenNoEntities: true,
24
- requireEntitiesArray: false,
25
- checkDuplicateTableNames: true,
26
- checkDuplicateFieldNames: true,
27
- checkDuplicateEntities: true,
28
- checkNonPersistentCompositeProps: true,
29
- alwaysAnalyseProperties: true,
30
- disableDynamicFileAccess: false,
31
- inferDefaultValues: true,
32
- },
33
- strict: false,
34
- validate: false,
35
- validateRequired: true,
36
- context: (name) => RequestContext.getEntityManager(name),
37
- contextName: 'default',
38
- allowGlobalContext: false,
39
- // eslint-disable-next-line no-console
40
- logger: console.log.bind(console),
41
- colors: true,
42
- findOneOrFailHandler: (entityName, where) => NotFoundError.findOneFailed(entityName, where),
43
- findExactlyOneOrFailHandler: (entityName, where) => NotFoundError.findExactlyOneFailed(entityName, where),
44
- baseDir: process.cwd(),
45
- hydrator: ObjectHydrator,
46
- flushMode: FlushMode.AUTO,
47
- loadStrategy: LoadStrategy.JOINED,
48
- dataloader: DataloaderType.NONE,
49
- populateWhere: PopulateHint.ALL,
50
- connect: true,
51
- ignoreUndefinedInQuery: false,
52
- onQuery: sql => sql,
53
- autoJoinOneToOneOwner: true,
54
- autoJoinRefsForFilters: true,
55
- propagationOnPrototype: true,
56
- populateAfterFlush: true,
57
- serialization: {
58
- includePrimaryKeys: true,
59
- },
60
- assign: {
61
- updateNestedEntities: true,
62
- updateByPrimaryKey: true,
63
- mergeObjectProperties: false,
64
- mergeEmbeddedProperties: true,
65
- ignoreUndefined: false,
66
- },
67
- persistOnCreate: true,
68
- upsertManaged: true,
69
- forceEntityConstructor: false,
70
- forceUndefined: false,
71
- processOnCreateHooksEarly: false,
72
- ensureDatabase: true,
73
- ensureIndexes: false,
74
- batchSize: 300,
75
- debug: false,
76
- ignoreDeprecations: false,
77
- verbose: false,
78
- driverOptions: {},
79
- migrations: {
80
- tableName: 'mikro_orm_migrations',
81
- path: './migrations',
82
- glob: '!(*.d).{js,ts,cjs}',
83
- silent: false,
84
- transactional: true,
85
- disableForeignKeys: false,
86
- allOrNothing: true,
87
- dropTables: true,
88
- safe: false,
89
- snapshot: true,
90
- emit: 'ts',
91
- fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
92
- },
93
- schemaGenerator: {
94
- disableForeignKeys: false,
95
- createForeignKeyConstraints: true,
96
- ignoreSchema: [],
97
- },
98
- embeddables: {
99
- prefixMode: 'relative',
100
- },
101
- entityGenerator: {
102
- forceUndefined: true,
103
- undefinedDefaults: false,
104
- bidirectionalRelations: false,
105
- identifiedReferences: false,
106
- scalarTypeInDecorator: false,
107
- scalarPropertiesForRelations: 'never',
108
- fileName: (className) => className,
109
- onlyPurePivotTables: false,
110
- outputPurePivotTables: false,
111
- readOnlyPivotTables: false,
112
- useCoreBaseEntity: false,
113
- },
114
- metadataCache: {
115
- pretty: false,
116
- adapter: FileCacheAdapter,
117
- options: { cacheDir: process.cwd() + '/temp' },
118
- },
119
- resultCache: {
120
- adapter: MemoryCacheAdapter,
121
- expiration: 1000, // 1s
122
- options: {},
123
- },
124
- metadataProvider: ReflectMetadataProvider,
125
- highlighter: new NullHighlighter(),
126
- seeder: {
127
- path: './seeders',
128
- defaultSeeder: 'DatabaseSeeder',
129
- glob: '!(*.d).{js,ts}',
130
- emit: 'ts',
131
- fileName: (className) => className,
132
- },
133
- preferReadReplicas: true,
134
- dynamicImportProvider: /* v8 ignore next */ (id) => import(id),
135
- };
136
131
  options;
137
132
  logger;
138
133
  driver;
@@ -141,11 +136,9 @@ export class Configuration {
141
136
  extensions = new Map();
142
137
  constructor(options, validate = true) {
143
138
  if (options.dynamicImportProvider) {
144
- Utils.setDynamicImportProvider(options.dynamicImportProvider);
139
+ globalThis.dynamicImportProvider = options.dynamicImportProvider;
145
140
  }
146
- this.options = Utils.mergeConfig({}, Configuration.DEFAULTS, options);
147
- this.options.baseDir = Utils.absolutePath(this.options.baseDir);
148
- this.options.preferTs ??= options.preferTs;
141
+ this.options = Utils.mergeConfig({}, DEFAULTS, options);
149
142
  if (validate) {
150
143
  this.validateOptions();
151
144
  }
@@ -157,11 +150,14 @@ export class Configuration {
157
150
  highlighter: this.options.highlighter,
158
151
  writer: this.options.logger,
159
152
  });
153
+ const cf = this.options.compiledFunctions;
154
+ if (cf && cf.__version !== Utils.getORMVersion()) {
155
+ 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\`.`);
156
+ }
160
157
  if (this.options.driver) {
161
158
  this.driver = new this.options.driver(this);
162
159
  this.platform = this.driver.getPlatform();
163
160
  this.platform.setConfig(this);
164
- this.detectSourceFolder(options);
165
161
  this.init(validate);
166
162
  }
167
163
  }
@@ -191,7 +187,7 @@ export class Configuration {
191
187
  * Resets the configuration to its default value
192
188
  */
193
189
  reset(key) {
194
- this.options[key] = Configuration.DEFAULTS[key];
190
+ this.options[key] = DEFAULTS[key];
195
191
  }
196
192
  /**
197
193
  * Gets Logger instance.
@@ -205,15 +201,6 @@ export class Configuration {
205
201
  }
206
202
  return this.options.dataloader;
207
203
  }
208
- /**
209
- * Gets current client URL (connection string).
210
- */
211
- getClientUrl(hidePassword = false) {
212
- if (hidePassword) {
213
- return this.options.clientUrl.replace(/\/\/([^:]+):(.+)@/, '//$1:*****@');
214
- }
215
- return this.options.clientUrl;
216
- }
217
204
  getSchema(skipDefaultSchema = false) {
218
205
  if (skipDefaultSchema && this.options.schema === this.platform.getDefaultSchemaName()) {
219
206
  return undefined;
@@ -234,7 +221,7 @@ export class Configuration {
234
221
  return this.cache.get(name);
235
222
  }
236
223
  const ext = this.extensions.get(name);
237
- /* v8 ignore next 3 */
224
+ /* v8 ignore next */
238
225
  if (!ext) {
239
226
  return undefined;
240
227
  }
@@ -257,7 +244,7 @@ export class Configuration {
257
244
  * Gets instance of Comparator. (cached)
258
245
  */
259
246
  getComparator(metadata) {
260
- return this.getCachedService(EntityComparator, metadata, this.platform);
247
+ return this.getCachedService(EntityComparator, metadata, this.platform, this);
261
248
  }
262
249
  /**
263
250
  * Gets instance of MetadataProvider. (cached)
@@ -294,8 +281,7 @@ export class Configuration {
294
281
  */
295
282
  getCachedService(cls, ...args) {
296
283
  if (!this.cache.has(cls.name)) {
297
- const Class = cls;
298
- this.cache.set(cls.name, new Class(...args));
284
+ this.cache.set(cls.name, new cls(...args));
299
285
  }
300
286
  return this.cache.get(cls.name);
301
287
  }
@@ -303,26 +289,25 @@ export class Configuration {
303
289
  this.cache.clear();
304
290
  }
305
291
  init(validate) {
306
- if (!this.getMetadataProvider().useCache()) {
307
- this.options.metadataCache.adapter = NullCacheAdapter;
292
+ const useCache = this.getMetadataProvider().useCache();
293
+ const metadataCache = this.options.metadataCache;
294
+ if (!useCache) {
295
+ metadataCache.adapter = NullCacheAdapter;
308
296
  }
309
- if (!('enabled' in this.options.metadataCache)) {
310
- this.options.metadataCache.enabled = this.getMetadataProvider().useCache();
311
- }
312
- if (!this.options.clientUrl) {
313
- this.options.clientUrl = this.platform.getDefaultClientUrl();
314
- }
315
- if (!('implicitTransactions' in this.options)) {
316
- this.options.implicitTransactions = this.platform.usesImplicitTransactions();
297
+ metadataCache.enabled ??= useCache;
298
+ this.options.clientUrl ??= this.platform.getDefaultClientUrl();
299
+ this.options.implicitTransactions ??= this.platform.usesImplicitTransactions();
300
+ if (validate && metadataCache.enabled && !metadataCache.adapter) {
301
+ 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.');
317
302
  }
318
303
  try {
319
- const url = new URL(this.getClientUrl());
304
+ const url = new URL(this.options.clientUrl);
320
305
  if (url.pathname) {
321
306
  this.options.dbName = this.get('dbName', decodeURIComponent(url.pathname).substring(1));
322
307
  }
323
308
  }
324
309
  catch {
325
- const url = this.getClientUrl().match(/:\/\/.*\/([^?]+)/);
310
+ const url = this.options.clientUrl.match(/:\/\/.*\/([^?]+)/);
326
311
  if (url) {
327
312
  this.options.dbName = this.get('dbName', decodeURIComponent(url[1]));
328
313
  }
@@ -330,16 +315,15 @@ export class Configuration {
330
315
  if (validate && !this.options.dbName && this.options.clientUrl) {
331
316
  throw new Error("No database specified, `clientUrl` option provided but it's missing the pathname.");
332
317
  }
333
- if (!this.options.schema) {
334
- this.options.schema = this.platform.getDefaultSchemaName();
335
- }
336
- if (!this.options.charset) {
337
- this.options.charset = this.platform.getDefaultCharset();
338
- }
318
+ this.options.schema ??= this.platform.getDefaultSchemaName();
319
+ this.options.charset ??= this.platform.getDefaultCharset();
339
320
  Object.keys(this.options.filters).forEach(key => {
340
321
  this.options.filters[key].default ??= true;
341
322
  });
342
- this.options.subscribers = Utils.unique(this.options.subscribers).map(subscriber => {
323
+ if (!this.options.filtersOnRelations) {
324
+ this.options.autoJoinRefsForFilters ??= false;
325
+ }
326
+ this.options.subscribers = [...this.options.subscribers].map(subscriber => {
343
327
  return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
344
328
  });
345
329
  this.sync();
@@ -348,40 +332,11 @@ export class Configuration {
348
332
  }
349
333
  }
350
334
  sync() {
351
- process.env.MIKRO_ORM_COLORS = '' + this.options.colors;
335
+ setEnv('MIKRO_ORM_COLORS', this.options.colors);
352
336
  this.logger.setDebugMode(this.options.debug);
353
337
  }
354
- /**
355
- * Checks if `src` folder exists, it so, tries to adjust the migrations and seeders paths automatically to use it.
356
- * If there is a `dist` or `build` folder, it will be used for the JS variant (`path` option), while the `src` folder will be
357
- * used for the TS variant (`pathTs` option).
358
- *
359
- * If the default folder exists (e.g. `/migrations`), the config will respect that, so this auto-detection should not
360
- * break existing projects, only help with the new ones.
361
- */
362
- detectSourceFolder(options) {
363
- if (!Utils.pathExistsSync(this.options.baseDir + '/src')) {
364
- return;
365
- }
366
- const migrationsPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.migrations.path);
367
- const seedersPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.seeder.path);
368
- const distDir = Utils.pathExistsSync(this.options.baseDir + '/dist');
369
- const buildDir = Utils.pathExistsSync(this.options.baseDir + '/build');
370
- // if neither `dist` nor `build` exist, we use the `src` folder as it might be a JS project without building, but with `src` folder
371
- const path = distDir ? './dist' : (buildDir ? './build' : './src');
372
- // only if the user did not provide any values and if the default path does not exist
373
- if (!options.migrations?.path && !options.migrations?.pathTs && !migrationsPathExists) {
374
- this.options.migrations.path = `${path}/migrations`;
375
- this.options.migrations.pathTs = './src/migrations';
376
- }
377
- // only if the user did not provide any values and if the default path does not exist
378
- if (!options.seeder?.path && !options.seeder?.pathTs && !seedersPathExists) {
379
- this.options.seeder.path = `${path}/seeders`;
380
- this.options.seeder.pathTs = './src/seeders';
381
- }
382
- }
383
338
  validateOptions() {
384
- /* v8 ignore next 3 */
339
+ /* v8 ignore next */
385
340
  if ('type' in this.options) {
386
341
  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({ ... })`).');
387
342
  }
@@ -394,6 +349,9 @@ export class Configuration {
394
349
  if (this.options.entities.length === 0 && this.options.discovery.warnWhenNoEntities) {
395
350
  throw new Error('No entities found, please use `entities` option');
396
351
  }
352
+ if (typeof this.options.driverOptions === 'function' && this.options.driverOptions.constructor.name === 'AsyncFunction') {
353
+ throw new Error('`driverOptions` callback cannot be async');
354
+ }
397
355
  }
398
356
  }
399
357
  /**
@@ -1,54 +1 @@
1
- import type { EntityManager } from '../EntityManager.js';
2
- import type { EntityManagerType, IDatabaseDriver } from '../drivers/IDatabaseDriver.js';
3
- import type { Dictionary } from '../typings.js';
4
- import { Configuration, type Options } from './Configuration.js';
5
- /**
6
- * @internal
7
- */
8
- export declare class ConfigurationLoader {
9
- /**
10
- * Gets a named configuration
11
- *
12
- * @param contextName Load a config with the given `contextName` value. Used when config file exports array or factory function. Setting it to "default" matches also config objects without `contextName` set.
13
- * @param paths Array of possible paths for a configuration file. Files will be checked in order, and the first existing one will be used. Defaults to the output of {@link ConfigurationLoader.getConfigPaths}.
14
- * @param options Additional options to augment the final configuration with.
15
- */
16
- static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(contextName: string, paths?: string[], options?: Partial<Options>): Promise<Configuration<D, EM>>;
17
- /**
18
- * Gets the default config from the default paths
19
- *
20
- * @deprecated Prefer to explicitly set the `contextName` at the first argument. This signature is available for backwards compatibility, and may be removed in v7.
21
- */
22
- static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(): Promise<Configuration<D, EM>>;
23
- /**
24
- * Gets default configuration out of the default paths, and possibly from `process.argv`
25
- *
26
- * @param validate Whether to validate the final configuration.
27
- * @param options Additional options to augment the final configuration with (just before validation).
28
- *
29
- * @deprecated Use the other overloads of this method. This signature will be removed in v7.
30
- */
31
- static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(validate: boolean, options?: Partial<Options>): Promise<Configuration<D, EM>>;
32
- static getConfigFile(paths: string[]): Promise<[string, unknown] | []>;
33
- static getPackageConfig(basePath?: string): Dictionary;
34
- static getSettings(): Settings;
35
- static configPathsFromArg(): string[] | undefined;
36
- static getConfigPaths(): string[];
37
- static isESM(): boolean;
38
- static registerTypeScriptSupport(configPath?: string): Promise<boolean>;
39
- static registerDotenv<D extends IDatabaseDriver>(options?: Options<D>): void;
40
- static loadEnvironmentVars<D extends IDatabaseDriver>(): Promise<Partial<Options<D>>>;
41
- static loadEnvironmentVarsSync<D extends IDatabaseDriver>(): Partial<Options<D>>;
42
- static getORMPackages(): Set<string>;
43
- /** @internal */
44
- static commonJSCompat(options: Partial<Options>): void;
45
- static getORMPackageVersion(name: string): string | undefined;
46
- static checkPackageVersion(): string;
47
- }
48
- export interface Settings {
49
- alwaysAllowTs?: boolean;
50
- verbose?: boolean;
51
- preferTs?: boolean;
52
- tsConfigPath?: string;
53
- configPaths?: string[];
54
- }
1
+ export {};