Skip to content

Commit 952613f

Browse files
committed
feat: allow passing an array of options into forRoot
Since MikroORM v6.4, you can also define [multiple configurations](https://mikro-orm.io/docs/quick-start#configuration-file-structure) as part of a single ORM config. If you want to use such a combined config file, you need to destructure the result, since it will be also an array: ```typescript @module({ imports: [ // `config` exports an array of configs ...MikroOrmModule.forRoot(config), MikroOrmModule.forMiddleware() ], controllers: [AppController], providers: [AppService], }) export class AppModule {} ``` Closes #202
1 parent 98171c4 commit 952613f

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,21 @@ You can define multiple database connections by registering multiple `MikroOrmMo
365365
export class AppModule {}
366366
```
367367

368+
Since MikroORM v6.4, you can also define [multiple configurations](https://mikro-orm.io/docs/quick-start#configuration-file-structure) as part of a single ORM config. If you want to use such a combined config file, you need to destructure the result, since it will be also an array:
369+
370+
```typescript
371+
@Module({
372+
imports: [
373+
// `config` exports an array of configs
374+
...MikroOrmModule.forRoot(config),
375+
MikroOrmModule.forMiddleware()
376+
],
377+
controllers: [AppController],
378+
providers: [AppService],
379+
})
380+
export class AppModule {}
381+
```
382+
368383
To access different `MikroORM`/`EntityManager` connections you have to use the new injection tokens `@InjectMikroORM()`/`@InjectEntityManager()` where you are required to pass the `contextName` in:
369384

370385
```ts

src/mikro-orm.module.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
MikroOrmModuleFeatureOptions,
1111
MikroOrmModuleSyncOptions,
1212
MikroOrmMiddlewareModuleOptions,
13+
MaybePromise,
1314
} from './typings';
1415

1516
@Module({})
@@ -23,11 +24,23 @@ export class MikroOrmModule {
2324
MikroOrmEntitiesStorage.clear(contextName);
2425
}
2526

26-
static forRoot(options?: MikroOrmModuleSyncOptions): DynamicModule | Promise<DynamicModule> {
27+
static forRoot(options?: MikroOrmModuleSyncOptions): MaybePromise<DynamicModule>;
28+
static forRoot(options?: MikroOrmModuleSyncOptions[]): MaybePromise<DynamicModule>[];
29+
static forRoot(options?: MikroOrmModuleSyncOptions | MikroOrmModuleSyncOptions[]): MaybePromise<DynamicModule> | MaybePromise<DynamicModule>[] {
30+
if (Array.isArray(options)) {
31+
return options.map(o => MikroOrmCoreModule.forRoot(o));
32+
}
33+
2734
return MikroOrmCoreModule.forRoot(options);
2835
}
2936

30-
static forRootAsync(options: MikroOrmModuleAsyncOptions): DynamicModule | Promise<DynamicModule> {
37+
static forRootAsync(options: MikroOrmModuleAsyncOptions): MaybePromise<DynamicModule>;
38+
static forRootAsync(options: MikroOrmModuleAsyncOptions[]): MaybePromise<DynamicModule>[];
39+
static forRootAsync(options: MikroOrmModuleAsyncOptions | MikroOrmModuleAsyncOptions[]): MaybePromise<DynamicModule> | MaybePromise<DynamicModule>[] {
40+
if (Array.isArray(options)) {
41+
return options.map(o => MikroOrmCoreModule.forRoot(o));
42+
}
43+
3144
return MikroOrmCoreModule.forRootAsync(options);
3245
}
3346

src/typings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import type { AnyEntity, EntityName as CoreEntityName, EntitySchema, ForkOptions
22
import type { MiddlewareConsumer, ModuleMetadata, Scope, Type } from '@nestjs/common';
33
import type { AbstractHttpAdapter } from '@nestjs/core';
44

5+
export type MaybePromise<T> = T | Promise<T>;
6+
57
export interface NestMiddlewareConsumer extends MiddlewareConsumer {
68
httpAdapter: AbstractHttpAdapter;
79
}

tests/mikro-orm.module.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ describe('MikroORM Module', () => {
214214
it('forFeature should return repository', async () => {
215215
const module = await Test.createTestingModule({
216216
imports: [
217-
MikroOrmModule.forRoot(testOptions),
217+
...MikroOrmModule.forRoot([testOptions]),
218218
MikroOrmModule.forFeature([Foo]),
219219
],
220220
}).compile();

0 commit comments

Comments
 (0)