From 145274ad60df8e1a7210505508d1af6d9179b204 Mon Sep 17 00:00:00 2001 From: Bastien Gatellier Date: Wed, 5 Jul 2023 01:48:05 +0200 Subject: [PATCH] fix: deep merge of MikroORM options --- .../listener/ModuleListenerDatabaseConfig.ts | 18 ++++++++---------- modules/mysql/src/client/Client.ts | 8 ++++---- modules/mysql/src/config/mikro-orm.config.ts | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/modules/common/src/module/listener/ModuleListenerDatabaseConfig.ts b/modules/common/src/module/listener/ModuleListenerDatabaseConfig.ts index 98167c81..9d2a14b0 100644 --- a/modules/common/src/module/listener/ModuleListenerDatabaseConfig.ts +++ b/modules/common/src/module/listener/ModuleListenerDatabaseConfig.ts @@ -6,15 +6,13 @@ import { ServiceEntity } from "../../entities/ServiceEntity.js" const DB_NAME = "heart" export function createDatabaseConfig(options: Options): Options { - return { - ...options, - ...{ - dbName: DB_NAME, - entities: [ReportEntity, ServiceEntity], - metadataProvider: TsMorphMetadataProvider, - migrations: { - snapshot: false, - }, - }, + options.dbName = DB_NAME + options.entities = [ReportEntity, ServiceEntity] + options.metadataProvider = TsMorphMetadataProvider + + if (options.migrations) { + options.migrations.snapshot = false } + + return options } diff --git a/modules/mysql/src/client/Client.ts b/modules/mysql/src/client/Client.ts index cc623890..6c022170 100644 --- a/modules/mysql/src/client/Client.ts +++ b/modules/mysql/src/client/Client.ts @@ -8,7 +8,7 @@ export class MySQLClient { #orm: MikroORM | undefined public async getMigrator(): Promise { - const orm = await this.getOrCreateDatabaseClient() + const orm = await this.getOrCreateOrm() return orm.getMigrator() } @@ -20,7 +20,7 @@ export class MySQLClient { const reportEntity = await this.createReportEntity(report) const em = await this.getOrCreateEntityManager() - const orm = await this.getOrCreateDatabaseClient() + const orm = await this.getOrCreateOrm() await em.persistAndFlush(reportEntity) @@ -40,7 +40,7 @@ export class MySQLClient { * Get or create the ORM: avoid the opening of several DB connection at the same or in a very short interval of time. * As Heart is a CLI tool, having the DB connection opened during a single analysis that longs a couple of minutes is acceptable. */ - private async getOrCreateDatabaseClient(): Promise> { + private async getOrCreateOrm(): Promise> { if (this.#orm === undefined) { this.#orm = await MikroORM.init(databaseConfig) } @@ -53,7 +53,7 @@ export class MySQLClient { * @link https://mikro-orm.io/docs/identity-map */ private async getOrCreateEntityManager(): Promise { - const orm = await this.getOrCreateDatabaseClient() + const orm = await this.getOrCreateOrm() if (this.#em === undefined) { this.#em = orm.em.fork() diff --git a/modules/mysql/src/config/mikro-orm.config.ts b/modules/mysql/src/config/mikro-orm.config.ts index c7083929..af60850b 100644 --- a/modules/mysql/src/config/mikro-orm.config.ts +++ b/modules/mysql/src/config/mikro-orm.config.ts @@ -1,10 +1,10 @@ import { createDatabaseConfig } from "@fabernovel/heart-common" -import { defineConfig } from "@mikro-orm/mysql" +import { MySqlDriver, defineConfig } from "@mikro-orm/mysql" import { env } from "node:process" import { Migration20230702150637 } from "../migrations/Migration20230702150637.js" export default defineConfig( - createDatabaseConfig({ + createDatabaseConfig({ clientUrl: env.HEART_MYSQL_DATABASE_URL as string, migrations: { migrationsList: [