UNPKG

@smallprod/models

Version:
75 lines (74 loc) 3.81 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dbmanager_1 = __importDefault(require("../dbs/dbmanager")); const entitymanager_1 = __importDefault(require("../entities/entitymanager")); const migration_1 = __importDefault(require("./migration")); const migration_entity_1 = __importDefault(require("../entities/migration.entity")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); class MigrationManager { constructor() { this.migrate = async (targetMigration, dbName, silent) => { await entitymanager_1.default.initialize(); if (!silent) console.log('\x1b[33mStarting migrations\x1b[0m'); const model = dbmanager_1.default.getInstance().get(dbName); if (!model) { throw new Error('Database not found'); } const migrations = (await migration_entity_1.default.getAll(model)).map((m) => m.name); const res = fs_1.default.readdirSync(this.config.migrationPath); res.sort(); await res.reduce(async (prev, migrationFile) => { await prev; const migrationPath = path_1.default.resolve(this.config.migrationPath, migrationFile); const migrationRequired = require(migrationPath); if (!migrations.includes(migrationRequired.name) && (!targetMigration || targetMigration === migrationRequired.name)) { const migration = new migration_1.default(migrationRequired.name, 'up'); if (!silent) console.log(`\x1b[35m## Migrating ${migrationRequired.name}\x1b[0m`); migrationRequired.up(migration); await migration.execute(model, silent); } }, Promise.resolve()); }; this.reset = async (targetMigration, dbName, silent) => { await entitymanager_1.default.initialize(); if (!silent) console.log('\x1b[33mStarting migrations\x1b[0m'); const model = dbmanager_1.default.getInstance().get(dbName); if (!model) { throw new Error('Database not found'); } const migrations = (await migration_entity_1.default.getAll(model)).map((m) => m.name); const res = fs_1.default.readdirSync(this.config.migrationPath); res.sort(); await migrations.reduce(async (prev, migrationName) => { await prev; let migrationRequired = null; res.forEach((migrationFile) => { const migrationPath = path_1.default.resolve(this.config.migrationPath, migrationFile); const req = require(migrationPath); if (req.name === migrationName && (!targetMigration || targetMigration === req.name)) { migrationRequired = req; } }); if (migrationRequired) { if (!silent) console.log(`\x1b[35m## Migrating ${migrationRequired.name}\x1b[0m`); const migration = new migration_1.default(migrationRequired.name, 'down'); migrationRequired.down(migration); await migration.execute(model, silent); } }, Promise.resolve()); }; this.config = dbmanager_1.default.getInstance().getConfig(); migration_entity_1.default.reset(); } } exports.default = MigrationManager;