From 016881bf3795cacc8932fcb8d453f8e8e4e11d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Wola=C5=84czyk?= Date: Fri, 1 Sep 2023 11:30:14 +0200 Subject: [PATCH] feat(): add support for manual init --- lib/interfaces/typeorm-options.interface.ts | 7 ++++ lib/typeorm-core.module.ts | 36 +++++++++------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/lib/interfaces/typeorm-options.interface.ts b/lib/interfaces/typeorm-options.interface.ts index dbd64b050..173816c12 100644 --- a/lib/interfaces/typeorm-options.interface.ts +++ b/lib/interfaces/typeorm-options.interface.ts @@ -33,6 +33,13 @@ export type TypeOrmModuleOptions = { * If `true`, will show verbose error messages on each connection retry. */ verboseRetryLog?: boolean; + /** + * If `true` database initialization will not be performed during module initialization. + * This means that database connection will not be established and migrations will not run. + * Database initialization will have to be performed manually using `DataSource.initialize` + * and it will have to implement own retry mechanism (if necessary). + */ + manualInitialization?: boolean; } & Partial; export interface TypeOrmOptionsFactory { diff --git a/lib/typeorm-core.module.ts b/lib/typeorm-core.module.ts index e59d1966f..bed1c66f4 100644 --- a/lib/typeorm-core.module.ts +++ b/lib/typeorm-core.module.ts @@ -213,32 +213,28 @@ export class TypeOrmCoreModule implements OnApplicationShutdown { }); return await lastValueFrom( defer(async () => { + let dataSource: DataSource; if (!options.autoLoadEntities) { - const dataSource = await createTypeormDataSource( + dataSource = await createTypeormDataSource( options as DataSourceOptions, ); - // TODO: remove "dataSource.initialize" condition (left for backward compatibility) - return (dataSource as any).initialize && !dataSource.isInitialized - ? dataSource.initialize() - : dataSource; - } - - let entities = options.entities; - if (Array.isArray(entities)) { - entities = entities.concat( - EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken), - ); } else { - entities = - EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken); + let entities = options.entities; + if (Array.isArray(entities)) { + entities = entities.concat( + EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken), + ); + } else { + entities = + EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken); + } + dataSource = await createTypeormDataSource({ + ...options, + entities, + } as DataSourceOptions); } - const dataSource = await createTypeormDataSource({ - ...options, - entities, - } as DataSourceOptions); - // TODO: remove "dataSource.initialize" condition (left for backward compatibility) - return (dataSource as any).initialize && !dataSource.isInitialized + return (dataSource as any).initialize && !dataSource.isInitialized && !options.manualInitialization ? dataSource.initialize() : dataSource; }).pipe(