import path from 'path'; import { Connection, createConnection as ormCreateConnection } from 'typeorm'; import { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions'; import { appPath } from '../../main'; export enum Databases { LIBRARY = 'library', } type MyConnectionOptions = { [key in Databases]?: SqliteConnectionOptions }; const databasePath = path.resolve(appPath, 'database'); const connectionOptions: MyConnectionOptions = Object.values(Databases).reduce( (prev: MyConnectionOptions, database: Databases) => { prev[database] = { type: 'sqlite', database: path.resolve(databasePath, `${database}.db`), entities: [`./src/main/entities/${database}/*.js`], migrations: [`./src/main/migrations/${database}/*.js`], cli: { migrationsDir: `./src/main/migrations/${database}`, }, }; return prev; }, {} ); const connections: { [key in Databases]?: Connection; } = {}; function createConnection(database: Databases): Promise { return ormCreateConnection(connectionOptions[database]) .then((connection: Connection) => { connections[database] = connection; return connection.runMigrations(); }) .then(() => connections[database]); } export function getConnection(database: Databases): Promise { if (connections[database] === undefined) { return createConnection(database); } return Promise.resolve(connections[database]); }