Skip to content

Commit a697437

Browse files
Merge pull request #1766 from Junikorn/feature/manual-initialization-option
feat(): add support for manual init
2 parents 36ccf21 + 016881b commit a697437

File tree

2 files changed

+23
-20
lines changed

2 files changed

+23
-20
lines changed

lib/interfaces/typeorm-options.interface.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ export type TypeOrmModuleOptions = {
3333
* If `true`, will show verbose error messages on each connection retry.
3434
*/
3535
verboseRetryLog?: boolean;
36+
/**
37+
* If `true` database initialization will not be performed during module initialization.
38+
* This means that database connection will not be established and migrations will not run.
39+
* Database initialization will have to be performed manually using `DataSource.initialize`
40+
* and it will have to implement own retry mechanism (if necessary).
41+
*/
42+
manualInitialization?: boolean;
3643
} & Partial<DataSourceOptions>;
3744

3845
export interface TypeOrmOptionsFactory {

lib/typeorm-core.module.ts

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -213,32 +213,28 @@ export class TypeOrmCoreModule implements OnApplicationShutdown {
213213
});
214214
return await lastValueFrom(
215215
defer(async () => {
216+
let dataSource: DataSource;
216217
if (!options.autoLoadEntities) {
217-
const dataSource = await createTypeormDataSource(
218+
dataSource = await createTypeormDataSource(
218219
options as DataSourceOptions,
219220
);
220-
// TODO: remove "dataSource.initialize" condition (left for backward compatibility)
221-
return (dataSource as any).initialize && !dataSource.isInitialized
222-
? dataSource.initialize()
223-
: dataSource;
224-
}
225-
226-
let entities = options.entities;
227-
if (Array.isArray(entities)) {
228-
entities = entities.concat(
229-
EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken),
230-
);
231221
} else {
232-
entities =
233-
EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken);
222+
let entities = options.entities;
223+
if (Array.isArray(entities)) {
224+
entities = entities.concat(
225+
EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken),
226+
);
227+
} else {
228+
entities =
229+
EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken);
230+
}
231+
dataSource = await createTypeormDataSource({
232+
...options,
233+
entities,
234+
} as DataSourceOptions);
234235
}
235-
const dataSource = await createTypeormDataSource({
236-
...options,
237-
entities,
238-
} as DataSourceOptions);
239-
240236
// TODO: remove "dataSource.initialize" condition (left for backward compatibility)
241-
return (dataSource as any).initialize && !dataSource.isInitialized
237+
return (dataSource as any).initialize && !dataSource.isInitialized && !options.manualInitialization
242238
? dataSource.initialize()
243239
: dataSource;
244240
}).pipe(

0 commit comments

Comments
 (0)