import path from 'path'; import { Connection, createConnection as ormCreateConnection } from 'typeorm'; import { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions'; import { appPath } from './app-path'; export enum Database { LIBRARY = 'library', STORE = 'store', } type MyConnectionOptions = { [key in Database]: SqliteConnectionOptions }; const databaseDir = path.resolve(appPath, 'database'); function getConnectionOptionsFor(database: Database): SqliteConnectionOptions { return { name: database, type: 'sqlite', database: path.resolve(databaseDir, `${database}.db`), cache: true, entities: [`./src/main/entities/${database}/*.js`], migrations: [`./src/main/migrations/${database}/*.js`], cli: { migrationsDir: `./src/main/migrations/${database}`, }, }; } const connectionOptions: MyConnectionOptions = { [Database.LIBRARY]: getConnectionOptionsFor(Database.LIBRARY), [Database.STORE]: getConnectionOptionsFor(Database.STORE), }; function createConnection(database: Database): Promise { let connection: Connection; return ormCreateConnection(connectionOptions[database]) .then((c) => { connection = c; return c.runMigrations(); }) .then(() => connection); } const connections = { [Database.LIBRARY]: createConnection(Database.LIBRARY), [Database.STORE]: createConnection(Database.STORE), }; export function getConnection(database: Database): Promise { return Promise.resolve(connections[database]); }