@smallprod/models
Version:
75 lines (74 loc) • 3.81 kB
JavaScript
;
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;