diff --git a/src/index.ts b/src/index.ts index dabe1a4..538930a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ export * from './mikro-orm.module'; export * from './mikro-orm.common'; +export * from './mikro-orm.middleware'; export * from './typings'; diff --git a/src/mikro-orm-core.module.ts b/src/mikro-orm-core.module.ts index 30f7da9..2bb10b6 100644 --- a/src/mikro-orm-core.module.ts +++ b/src/mikro-orm-core.module.ts @@ -1,9 +1,9 @@ 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'; @@ -11,13 +11,15 @@ import { MikroOrmMiddleware } from './mikro-orm.middleware'; @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'), @@ -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 }); diff --git a/src/mikro-orm.providers.ts b/src/mikro-orm.providers.ts index 96e7764..658dade 100644 --- a/src/mikro-orm.providers.ts +++ b/src/mikro-orm.providers.ts @@ -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], }); diff --git a/src/typings.ts b/src/typings.ts index 2ec2977..221db56 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -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; + createMikroOrmOptions(): Promise | MikroOrmModuleOptions; } export interface MikroOrmModuleAsyncOptions extends Pick { useExisting?: Type; useClass?: Type; - useFactory?: (...args: any[]) => Promise | Options; + useFactory?: (...args: any[]) => Promise | MikroOrmModuleOptions; inject?: any[]; }