Skip to content

Commit

Permalink
Merge pull request #1766 from Junikorn/feature/manual-initialization-…
Browse files Browse the repository at this point in the history
…option

feat(): add support for manual init
  • Loading branch information
kamilmysliwiec committed Oct 26, 2023
2 parents 36ccf21 + 016881b commit a697437
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 20 deletions.
7 changes: 7 additions & 0 deletions lib/interfaces/typeorm-options.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<DataSourceOptions>;

export interface TypeOrmOptionsFactory {
Expand Down
36 changes: 16 additions & 20 deletions lib/typeorm-core.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit a697437

Please sign in to comment.