@mikro-orm/core 7.0.0-dev.32 → 7.0.0-dev.321

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 (216) hide show
  1. package/EntityManager.d.ts +71 -63
  2. package/EntityManager.js +365 -283
  3. package/MikroORM.d.ts +44 -35
  4. package/MikroORM.js +109 -142
  5. package/README.md +7 -4
  6. package/cache/FileCacheAdapter.d.ts +1 -2
  7. package/cache/FileCacheAdapter.js +19 -14
  8. package/cache/GeneratedCacheAdapter.d.ts +0 -1
  9. package/cache/GeneratedCacheAdapter.js +0 -2
  10. package/cache/index.d.ts +1 -2
  11. package/cache/index.js +0 -2
  12. package/connections/Connection.d.ts +12 -5
  13. package/connections/Connection.js +37 -15
  14. package/drivers/DatabaseDriver.d.ts +25 -18
  15. package/drivers/DatabaseDriver.js +144 -45
  16. package/drivers/IDatabaseDriver.d.ts +118 -23
  17. package/entity/BaseEntity.d.ts +63 -4
  18. package/entity/BaseEntity.js +0 -3
  19. package/entity/Collection.d.ts +101 -29
  20. package/entity/Collection.js +473 -115
  21. package/entity/EntityAssigner.js +37 -25
  22. package/entity/EntityFactory.d.ts +7 -1
  23. package/entity/EntityFactory.js +116 -64
  24. package/entity/EntityHelper.d.ts +2 -2
  25. package/entity/EntityHelper.js +69 -27
  26. package/entity/EntityLoader.d.ts +11 -10
  27. package/entity/EntityLoader.js +264 -102
  28. package/entity/EntityRepository.d.ts +28 -8
  29. package/entity/EntityRepository.js +8 -2
  30. package/entity/PolymorphicRef.d.ts +12 -0
  31. package/entity/PolymorphicRef.js +18 -0
  32. package/entity/Reference.d.ts +2 -6
  33. package/entity/Reference.js +52 -19
  34. package/entity/WrappedEntity.d.ts +3 -8
  35. package/entity/WrappedEntity.js +6 -7
  36. package/entity/defineEntity.d.ts +525 -311
  37. package/entity/defineEntity.js +134 -290
  38. package/entity/index.d.ts +2 -2
  39. package/entity/index.js +2 -2
  40. package/entity/utils.d.ts +6 -1
  41. package/entity/utils.js +46 -11
  42. package/entity/validators.d.ts +11 -0
  43. package/entity/validators.js +66 -0
  44. package/enums.d.ts +8 -6
  45. package/enums.js +13 -17
  46. package/errors.d.ts +20 -10
  47. package/errors.js +63 -31
  48. package/events/EventManager.d.ts +2 -1
  49. package/events/EventManager.js +24 -13
  50. package/events/index.d.ts +1 -1
  51. package/events/index.js +0 -1
  52. package/exceptions.js +9 -2
  53. package/hydration/Hydrator.js +1 -2
  54. package/hydration/ObjectHydrator.d.ts +4 -4
  55. package/hydration/ObjectHydrator.js +105 -46
  56. package/index.d.ts +2 -2
  57. package/index.js +1 -2
  58. package/logging/DefaultLogger.d.ts +1 -1
  59. package/logging/DefaultLogger.js +3 -4
  60. package/logging/SimpleLogger.d.ts +1 -1
  61. package/logging/colors.d.ts +1 -1
  62. package/logging/colors.js +5 -7
  63. package/logging/index.d.ts +2 -1
  64. package/logging/index.js +1 -1
  65. package/logging/inspect.d.ts +2 -0
  66. package/logging/inspect.js +11 -0
  67. package/metadata/EntitySchema.d.ts +47 -23
  68. package/metadata/EntitySchema.js +103 -34
  69. package/metadata/MetadataDiscovery.d.ts +64 -9
  70. package/metadata/MetadataDiscovery.js +867 -354
  71. package/metadata/MetadataProvider.d.ts +11 -2
  72. package/metadata/MetadataProvider.js +71 -2
  73. package/metadata/MetadataStorage.d.ts +13 -11
  74. package/metadata/MetadataStorage.js +72 -41
  75. package/metadata/MetadataValidator.d.ts +32 -9
  76. package/metadata/MetadataValidator.js +214 -44
  77. package/metadata/discover-entities.d.ts +5 -0
  78. package/metadata/discover-entities.js +40 -0
  79. package/metadata/index.d.ts +1 -1
  80. package/metadata/index.js +0 -1
  81. package/metadata/types.d.ts +577 -0
  82. package/metadata/types.js +1 -0
  83. package/naming-strategy/AbstractNamingStrategy.d.ts +16 -4
  84. package/naming-strategy/AbstractNamingStrategy.js +26 -5
  85. package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
  86. package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
  87. package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
  88. package/naming-strategy/MongoNamingStrategy.js +6 -6
  89. package/naming-strategy/NamingStrategy.d.ts +28 -4
  90. package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
  91. package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
  92. package/naming-strategy/index.d.ts +1 -1
  93. package/naming-strategy/index.js +0 -1
  94. package/not-supported.d.ts +2 -0
  95. package/not-supported.js +8 -0
  96. package/package.json +47 -36
  97. package/platforms/ExceptionConverter.js +1 -1
  98. package/platforms/Platform.d.ts +33 -15
  99. package/platforms/Platform.js +125 -69
  100. package/serialization/EntitySerializer.d.ts +6 -3
  101. package/serialization/EntitySerializer.js +53 -29
  102. package/serialization/EntityTransformer.js +33 -21
  103. package/serialization/SerializationContext.d.ts +6 -6
  104. package/serialization/SerializationContext.js +4 -4
  105. package/types/ArrayType.d.ts +1 -1
  106. package/types/ArrayType.js +2 -3
  107. package/types/BigIntType.js +1 -1
  108. package/types/BlobType.d.ts +0 -1
  109. package/types/BlobType.js +0 -3
  110. package/types/BooleanType.d.ts +1 -0
  111. package/types/BooleanType.js +3 -0
  112. package/types/DecimalType.js +2 -2
  113. package/types/DoubleType.js +1 -1
  114. package/types/EnumArrayType.js +1 -2
  115. package/types/JsonType.d.ts +1 -1
  116. package/types/JsonType.js +7 -2
  117. package/types/TinyIntType.js +1 -1
  118. package/types/Type.d.ts +2 -4
  119. package/types/Type.js +3 -3
  120. package/types/Uint8ArrayType.d.ts +0 -1
  121. package/types/Uint8ArrayType.js +1 -4
  122. package/types/UuidType.d.ts +2 -0
  123. package/types/UuidType.js +14 -2
  124. package/types/index.d.ts +3 -2
  125. package/typings.d.ts +427 -170
  126. package/typings.js +100 -45
  127. package/unit-of-work/ChangeSet.d.ts +4 -6
  128. package/unit-of-work/ChangeSet.js +8 -9
  129. package/unit-of-work/ChangeSetComputer.d.ts +3 -8
  130. package/unit-of-work/ChangeSetComputer.js +49 -26
  131. package/unit-of-work/ChangeSetPersister.d.ts +13 -12
  132. package/unit-of-work/ChangeSetPersister.js +107 -44
  133. package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
  134. package/unit-of-work/CommitOrderCalculator.js +17 -15
  135. package/unit-of-work/IdentityMap.d.ts +12 -0
  136. package/unit-of-work/IdentityMap.js +39 -1
  137. package/unit-of-work/UnitOfWork.d.ts +34 -4
  138. package/unit-of-work/UnitOfWork.js +294 -107
  139. package/utils/AbstractMigrator.d.ts +101 -0
  140. package/utils/AbstractMigrator.js +303 -0
  141. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  142. package/utils/AbstractSchemaGenerator.js +30 -18
  143. package/utils/AsyncContext.d.ts +6 -0
  144. package/utils/AsyncContext.js +42 -0
  145. package/utils/Configuration.d.ts +796 -211
  146. package/utils/Configuration.js +160 -197
  147. package/utils/ConfigurationLoader.d.ts +1 -52
  148. package/utils/ConfigurationLoader.js +1 -330
  149. package/utils/Cursor.d.ts +0 -3
  150. package/utils/Cursor.js +29 -14
  151. package/utils/DataloaderUtils.d.ts +10 -5
  152. package/utils/DataloaderUtils.js +42 -22
  153. package/utils/EntityComparator.d.ts +16 -9
  154. package/utils/EntityComparator.js +202 -96
  155. package/utils/QueryHelper.d.ts +34 -7
  156. package/utils/QueryHelper.js +183 -72
  157. package/utils/RawQueryFragment.d.ts +28 -34
  158. package/utils/RawQueryFragment.js +37 -72
  159. package/utils/RequestContext.js +2 -2
  160. package/utils/TransactionContext.js +2 -2
  161. package/utils/TransactionManager.js +11 -7
  162. package/utils/Utils.d.ts +16 -127
  163. package/utils/Utils.js +106 -401
  164. package/utils/clone.js +13 -23
  165. package/utils/env-vars.d.ts +7 -0
  166. package/utils/env-vars.js +98 -0
  167. package/utils/fs-utils.d.ts +34 -0
  168. package/utils/fs-utils.js +193 -0
  169. package/utils/index.d.ts +1 -3
  170. package/utils/index.js +1 -3
  171. package/utils/upsert-utils.d.ts +9 -4
  172. package/utils/upsert-utils.js +51 -5
  173. package/decorators/Check.d.ts +0 -3
  174. package/decorators/Check.js +0 -13
  175. package/decorators/CreateRequestContext.d.ts +0 -3
  176. package/decorators/CreateRequestContext.js +0 -32
  177. package/decorators/Embeddable.d.ts +0 -8
  178. package/decorators/Embeddable.js +0 -11
  179. package/decorators/Embedded.d.ts +0 -12
  180. package/decorators/Embedded.js +0 -18
  181. package/decorators/Entity.d.ts +0 -33
  182. package/decorators/Entity.js +0 -12
  183. package/decorators/Enum.d.ts +0 -9
  184. package/decorators/Enum.js +0 -16
  185. package/decorators/Filter.d.ts +0 -2
  186. package/decorators/Filter.js +0 -8
  187. package/decorators/Formula.d.ts +0 -4
  188. package/decorators/Formula.js +0 -15
  189. package/decorators/Indexed.d.ts +0 -19
  190. package/decorators/Indexed.js +0 -20
  191. package/decorators/ManyToMany.d.ts +0 -42
  192. package/decorators/ManyToMany.js +0 -14
  193. package/decorators/ManyToOne.d.ts +0 -34
  194. package/decorators/ManyToOne.js +0 -14
  195. package/decorators/OneToMany.d.ts +0 -28
  196. package/decorators/OneToMany.js +0 -17
  197. package/decorators/OneToOne.d.ts +0 -28
  198. package/decorators/OneToOne.js +0 -7
  199. package/decorators/PrimaryKey.d.ts +0 -8
  200. package/decorators/PrimaryKey.js +0 -20
  201. package/decorators/Property.d.ts +0 -250
  202. package/decorators/Property.js +0 -32
  203. package/decorators/Transactional.d.ts +0 -14
  204. package/decorators/Transactional.js +0 -28
  205. package/decorators/hooks.d.ts +0 -16
  206. package/decorators/hooks.js +0 -47
  207. package/decorators/index.d.ts +0 -17
  208. package/decorators/index.js +0 -17
  209. package/entity/ArrayCollection.d.ts +0 -118
  210. package/entity/ArrayCollection.js +0 -407
  211. package/entity/EntityValidator.d.ts +0 -19
  212. package/entity/EntityValidator.js +0 -150
  213. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  214. package/metadata/ReflectMetadataProvider.js +0 -44
  215. package/utils/resolveContextProvider.d.ts +0 -10
  216. package/utils/resolveContextProvider.js +0 -28
@@ -1,140 +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.BALANCED,
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
- hashAlgorithm: 'md5',
76
- debug: false,
77
- ignoreDeprecations: false,
78
- verbose: false,
79
- driverOptions: {},
80
- migrations: {
81
- tableName: 'mikro_orm_migrations',
82
- path: './migrations',
83
- glob: '!(*.d).{js,ts,cjs}',
84
- silent: false,
85
- transactional: true,
86
- disableForeignKeys: false,
87
- allOrNothing: true,
88
- dropTables: true,
89
- safe: false,
90
- snapshot: true,
91
- emit: 'ts',
92
- fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
93
- },
94
- schemaGenerator: {
95
- disableForeignKeys: false,
96
- createForeignKeyConstraints: true,
97
- ignoreSchema: [],
98
- skipTables: [],
99
- skipColumns: {},
100
- },
101
- embeddables: {
102
- prefixMode: 'relative',
103
- },
104
- entityGenerator: {
105
- forceUndefined: true,
106
- undefinedDefaults: false,
107
- bidirectionalRelations: false,
108
- identifiedReferences: false,
109
- scalarTypeInDecorator: false,
110
- scalarPropertiesForRelations: 'never',
111
- fileName: (className) => className,
112
- onlyPurePivotTables: false,
113
- outputPurePivotTables: false,
114
- readOnlyPivotTables: false,
115
- useCoreBaseEntity: false,
116
- },
117
- metadataCache: {
118
- pretty: false,
119
- adapter: FileCacheAdapter,
120
- options: { cacheDir: process.cwd() + '/temp' },
121
- },
122
- resultCache: {
123
- adapter: MemoryCacheAdapter,
124
- expiration: 1000, // 1s
125
- options: {},
126
- },
127
- metadataProvider: ReflectMetadataProvider,
128
- highlighter: new NullHighlighter(),
129
- seeder: {
130
- path: './seeders',
131
- defaultSeeder: 'DatabaseSeeder',
132
- glob: '!(*.d).{js,ts}',
133
- emit: 'ts',
134
- fileName: (className) => className,
135
- },
136
- preferReadReplicas: true,
137
- };
138
131
  options;
139
132
  logger;
140
133
  driver;
@@ -142,9 +135,10 @@ export class Configuration {
142
135
  cache = new Map();
143
136
  extensions = new Map();
144
137
  constructor(options, validate = true) {
145
- this.options = Utils.mergeConfig({}, Configuration.DEFAULTS, options);
146
- this.options.baseDir = Utils.absolutePath(this.options.baseDir);
147
- this.options.preferTs ??= options.preferTs;
138
+ if (options.dynamicImportProvider) {
139
+ globalThis.dynamicImportProvider = options.dynamicImportProvider;
140
+ }
141
+ this.options = Utils.mergeConfig({}, DEFAULTS, options);
148
142
  if (validate) {
149
143
  this.validateOptions();
150
144
  }
@@ -156,11 +150,14 @@ export class Configuration {
156
150
  highlighter: this.options.highlighter,
157
151
  writer: this.options.logger,
158
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
+ }
159
157
  if (this.options.driver) {
160
158
  this.driver = new this.options.driver(this);
161
159
  this.platform = this.driver.getPlatform();
162
160
  this.platform.setConfig(this);
163
- this.detectSourceFolder(options);
164
161
  this.init(validate);
165
162
  }
166
163
  }
@@ -190,7 +187,7 @@ export class Configuration {
190
187
  * Resets the configuration to its default value
191
188
  */
192
189
  reset(key) {
193
- this.options[key] = Configuration.DEFAULTS[key];
190
+ this.options[key] = DEFAULTS[key];
194
191
  }
195
192
  /**
196
193
  * Gets Logger instance.
@@ -204,15 +201,6 @@ export class Configuration {
204
201
  }
205
202
  return this.options.dataloader;
206
203
  }
207
- /**
208
- * Gets current client URL (connection string).
209
- */
210
- getClientUrl(hidePassword = false) {
211
- if (hidePassword) {
212
- return this.options.clientUrl.replace(/\/\/([^:]+):(.+)@/, '//$1:*****@');
213
- }
214
- return this.options.clientUrl;
215
- }
216
204
  getSchema(skipDefaultSchema = false) {
217
205
  if (skipDefaultSchema && this.options.schema === this.platform.getDefaultSchemaName()) {
218
206
  return undefined;
@@ -233,7 +221,7 @@ export class Configuration {
233
221
  return this.cache.get(name);
234
222
  }
235
223
  const ext = this.extensions.get(name);
236
- /* v8 ignore next 3 */
224
+ /* v8 ignore next */
237
225
  if (!ext) {
238
226
  return undefined;
239
227
  }
@@ -256,7 +244,7 @@ export class Configuration {
256
244
  * Gets instance of Comparator. (cached)
257
245
  */
258
246
  getComparator(metadata) {
259
- return this.getCachedService(EntityComparator, metadata, this.platform);
247
+ return this.getCachedService(EntityComparator, metadata, this.platform, this);
260
248
  }
261
249
  /**
262
250
  * Gets instance of MetadataProvider. (cached)
@@ -268,13 +256,16 @@ export class Configuration {
268
256
  * Gets instance of metadata CacheAdapter. (cached)
269
257
  */
270
258
  getMetadataCacheAdapter() {
271
- return this.getCachedService(this.options.metadataCache.adapter, this.options.metadataCache.options, this.options.baseDir, this.options.metadataCache.pretty, this.options.hashAlgorithm);
259
+ return this.getCachedService(this.options.metadataCache.adapter, this.options.metadataCache.options, this.options.baseDir, this.options.metadataCache.pretty);
272
260
  }
273
261
  /**
274
262
  * Gets instance of CacheAdapter for result cache. (cached)
275
263
  */
276
264
  getResultCacheAdapter() {
277
- return this.getCachedService(this.options.resultCache.adapter, { expiration: this.options.resultCache.expiration, ...this.options.resultCache.options });
265
+ return this.getCachedService(this.options.resultCache.adapter, {
266
+ expiration: this.options.resultCache.expiration,
267
+ ...this.options.resultCache.options,
268
+ });
278
269
  }
279
270
  /**
280
271
  * Gets EntityRepository class to be instantiated.
@@ -293,8 +284,7 @@ export class Configuration {
293
284
  */
294
285
  getCachedService(cls, ...args) {
295
286
  if (!this.cache.has(cls.name)) {
296
- const Class = cls;
297
- this.cache.set(cls.name, new Class(...args));
287
+ this.cache.set(cls.name, new cls(...args));
298
288
  }
299
289
  return this.cache.get(cls.name);
300
290
  }
@@ -302,26 +292,25 @@ export class Configuration {
302
292
  this.cache.clear();
303
293
  }
304
294
  init(validate) {
305
- if (!this.getMetadataProvider().useCache()) {
306
- this.options.metadataCache.adapter = NullCacheAdapter;
307
- }
308
- if (!('enabled' in this.options.metadataCache)) {
309
- this.options.metadataCache.enabled = this.getMetadataProvider().useCache();
295
+ const useCache = this.getMetadataProvider().useCache();
296
+ const metadataCache = this.options.metadataCache;
297
+ if (!useCache) {
298
+ metadataCache.adapter = NullCacheAdapter;
310
299
  }
311
- if (!this.options.clientUrl) {
312
- this.options.clientUrl = this.platform.getDefaultClientUrl();
313
- }
314
- if (!('implicitTransactions' in this.options)) {
315
- this.options.implicitTransactions = this.platform.usesImplicitTransactions();
300
+ metadataCache.enabled ??= useCache;
301
+ this.options.clientUrl ??= this.platform.getDefaultClientUrl();
302
+ this.options.implicitTransactions ??= this.platform.usesImplicitTransactions();
303
+ if (validate && metadataCache.enabled && !metadataCache.adapter) {
304
+ 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.');
316
305
  }
317
306
  try {
318
- const url = new URL(this.getClientUrl());
307
+ const url = new URL(this.options.clientUrl);
319
308
  if (url.pathname) {
320
309
  this.options.dbName = this.get('dbName', decodeURIComponent(url.pathname).substring(1));
321
310
  }
322
311
  }
323
312
  catch {
324
- const url = this.getClientUrl().match(/:\/\/.*\/([^?]+)/);
313
+ const url = /:\/\/.*\/([^?]+)/.exec(this.options.clientUrl);
325
314
  if (url) {
326
315
  this.options.dbName = this.get('dbName', decodeURIComponent(url[1]));
327
316
  }
@@ -329,16 +318,15 @@ export class Configuration {
329
318
  if (validate && !this.options.dbName && this.options.clientUrl) {
330
319
  throw new Error("No database specified, `clientUrl` option provided but it's missing the pathname.");
331
320
  }
332
- if (!this.options.schema) {
333
- this.options.schema = this.platform.getDefaultSchemaName();
334
- }
335
- if (!this.options.charset) {
336
- this.options.charset = this.platform.getDefaultCharset();
337
- }
321
+ this.options.schema ??= this.platform.getDefaultSchemaName();
322
+ this.options.charset ??= this.platform.getDefaultCharset();
338
323
  Object.keys(this.options.filters).forEach(key => {
339
324
  this.options.filters[key].default ??= true;
340
325
  });
341
- this.options.subscribers = Utils.unique(this.options.subscribers).map(subscriber => {
326
+ if (!this.options.filtersOnRelations) {
327
+ this.options.autoJoinRefsForFilters ??= false;
328
+ }
329
+ this.options.subscribers = [...this.options.subscribers].map(subscriber => {
342
330
  return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
343
331
  });
344
332
  this.sync();
@@ -347,45 +335,16 @@ export class Configuration {
347
335
  }
348
336
  }
349
337
  sync() {
350
- process.env.MIKRO_ORM_COLORS = '' + this.options.colors;
338
+ setEnv('MIKRO_ORM_COLORS', this.options.colors);
351
339
  this.logger.setDebugMode(this.options.debug);
352
340
  }
353
- /**
354
- * Checks if `src` folder exists, it so, tries to adjust the migrations and seeders paths automatically to use it.
355
- * If there is a `dist` or `build` folder, it will be used for the JS variant (`path` option), while the `src` folder will be
356
- * used for the TS variant (`pathTs` option).
357
- *
358
- * If the default folder exists (e.g. `/migrations`), the config will respect that, so this auto-detection should not
359
- * break existing projects, only help with the new ones.
360
- */
361
- detectSourceFolder(options) {
362
- if (!Utils.pathExistsSync(this.options.baseDir + '/src')) {
363
- return;
364
- }
365
- const migrationsPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.migrations.path);
366
- const seedersPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.seeder.path);
367
- const distDir = Utils.pathExistsSync(this.options.baseDir + '/dist');
368
- const buildDir = Utils.pathExistsSync(this.options.baseDir + '/build');
369
- // if neither `dist` nor `build` exist, we use the `src` folder as it might be a JS project without building, but with `src` folder
370
- const path = distDir ? './dist' : (buildDir ? './build' : './src');
371
- // only if the user did not provide any values and if the default path does not exist
372
- if (!options.migrations?.path && !options.migrations?.pathTs && !migrationsPathExists) {
373
- this.options.migrations.path = `${path}/migrations`;
374
- this.options.migrations.pathTs = './src/migrations';
375
- }
376
- // only if the user did not provide any values and if the default path does not exist
377
- if (!options.seeder?.path && !options.seeder?.pathTs && !seedersPathExists) {
378
- this.options.seeder.path = `${path}/seeders`;
379
- this.options.seeder.pathTs = './src/seeders';
380
- }
381
- }
382
341
  validateOptions() {
383
- /* v8 ignore next 3 */
342
+ /* v8 ignore next */
384
343
  if ('type' in this.options) {
385
- 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({ ... })`).');
344
+ 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({ ... })`).");
386
345
  }
387
346
  if (!this.options.driver) {
388
- 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({ ... })`).');
347
+ 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({ ... })`).");
389
348
  }
390
349
  if (!this.options.dbName && !this.options.clientUrl) {
391
350
  throw new Error('No database specified, please fill in `dbName` or `clientUrl` option');
@@ -393,6 +352,10 @@ export class Configuration {
393
352
  if (this.options.entities.length === 0 && this.options.discovery.warnWhenNoEntities) {
394
353
  throw new Error('No entities found, please use `entities` option');
395
354
  }
355
+ if (typeof this.options.driverOptions === 'function' &&
356
+ this.options.driverOptions.constructor.name === 'AsyncFunction') {
357
+ throw new Error('`driverOptions` callback cannot be async');
358
+ }
396
359
  }
397
360
  }
398
361
  /**
@@ -1,52 +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
- static getORMPackageVersion(name: string): string | undefined;
44
- static checkPackageVersion(): string;
45
- }
46
- export interface Settings {
47
- alwaysAllowTs?: boolean;
48
- verbose?: boolean;
49
- preferTs?: boolean;
50
- tsConfigPath?: string;
51
- configPaths?: string[];
52
- }
1
+ export {};