Skip to content

Commit

Permalink
fix: support forRoot() without options
Browse files Browse the repository at this point in the history
  • Loading branch information
B4nan committed Aug 8, 2020
1 parent d7d5d2b commit dfbfbcf
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './mikro-orm.module';
export * from './mikro-orm.common';
export * from './mikro-orm.middleware';
export * from './typings';
14 changes: 10 additions & 4 deletions src/mikro-orm-core.module.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
import { EntityManager, MikroORM, Options } from '@mikro-orm/core';
import { DynamicModule, Global, MiddlewareConsumer, Module, OnApplicationShutdown, RequestMethod } from '@nestjs/common';
import { DynamicModule, Global, Inject, MiddlewareConsumer, Module, OnApplicationShutdown, RequestMethod } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';

import { MIKRO_ORM_MODULE_OPTIONS } from './mikro-orm.common';
import { MikroOrmModuleAsyncOptions } from './typings';
import { MikroOrmModuleAsyncOptions, MikroOrmModuleOptions } from './typings';
import { createAsyncProviders, createMikroOrmEntityManagerProvider, createMikroOrmProvider } from './mikro-orm.providers';
import { MikroOrmMiddleware } from './mikro-orm.middleware';

@Global()
@Module({})
export class MikroOrmCoreModule implements OnApplicationShutdown {

constructor(private readonly moduleRef: ModuleRef) { }
constructor(@Inject(MIKRO_ORM_MODULE_OPTIONS)
private readonly options: MikroOrmModuleOptions,
private readonly moduleRef: ModuleRef) { }

static forRoot(options?: Options): DynamicModule {
return {
module: MikroOrmCoreModule,
providers: [
{ provide: MIKRO_ORM_MODULE_OPTIONS, useValue: options },
{ provide: MIKRO_ORM_MODULE_OPTIONS, useValue: options || {} },
createMikroOrmProvider(),
createMikroOrmEntityManagerProvider(),
createMikroOrmEntityManagerProvider('SqlEntityManager'),
Expand Down Expand Up @@ -52,6 +54,10 @@ export class MikroOrmCoreModule implements OnApplicationShutdown {
}

configure(consumer: MiddlewareConsumer): void {
if (this.options.registerRequestContext === false) {
return;
}

consumer
.apply(MikroOrmMiddleware) // register request context automatically
.forRoutes({ path: '*', method: RequestMethod.ALL });
Expand Down
14 changes: 9 additions & 5 deletions src/mikro-orm.providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@ import { Provider } from '@nestjs/common';
export const createMikroOrmProvider = (): Provider => ({
provide: MikroORM,
useFactory: async (options?: Options | Configuration) => {
if (!options) {
if (!options || Object.keys(options).length === 0) {
const settings = await ConfigurationLoader.getSettings();

if (settings.useTsNode) {
await ConfigurationLoader.registerTsNode(settings.tsConfigPath);
}

options = await ConfigurationLoader.getConfiguration();
options.set('logger', logger.log.bind(logger));
}

return MikroORM.init({
logger: logger.log.bind(logger),
...options,
});
return MikroORM.init(options);
},
inject: [MIKRO_ORM_MODULE_OPTIONS],
});
Expand Down
10 changes: 7 additions & 3 deletions src/typings.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import { Options } from '@mikro-orm/core';
import { ModuleMetadata, Type } from '@nestjs/common/interfaces';
import { ModuleMetadata, Type } from '@nestjs/common';

export type MikroOrmModuleOptions = {
registerRequestContext?: boolean;
} & Options;

export interface MikroOrmOptionsFactory {
createMikroOrmOptions(): Promise<Options> | Options;
createMikroOrmOptions(): Promise<MikroOrmModuleOptions> | MikroOrmModuleOptions;
}

export interface MikroOrmModuleAsyncOptions extends Pick<ModuleMetadata, 'imports' | 'providers'> {
useExisting?: Type<MikroOrmOptionsFactory>;
useClass?: Type<MikroOrmOptionsFactory>;
useFactory?: (...args: any[]) => Promise<Options> | Options;
useFactory?: (...args: any[]) => Promise<MikroOrmModuleOptions> | MikroOrmModuleOptions;
inject?: any[];
}

0 comments on commit dfbfbcf

Please sign in to comment.