sequelize-typescript-migration-rafaeltab
Version:
migration tool for sequelize & typescript users
81 lines • 3.85 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SequelizeTypescriptMigration = void 0;
const beautify = require("js-beautify");
const fs = require("fs");
const getTablesFromModels_1 = require("./utils/getTablesFromModels");
const getDiffActionsFromTables_1 = require("./utils/getDiffActionsFromTables");
const getMigration_1 = require("./utils/getMigration");
const createMigrationTable_1 = require("./utils/createMigrationTable");
const getLastMigrationState_1 = require("./utils/getLastMigrationState");
const writeMigration_1 = require("./utils/writeMigration");
class SequelizeTypescriptMigration {
}
exports.SequelizeTypescriptMigration = SequelizeTypescriptMigration;
_a = SequelizeTypescriptMigration;
SequelizeTypescriptMigration.makeMigration = async (sequelize, options) => {
options.preview = options.preview || false;
if (fs.existsSync(options.outDir) === false) {
return Promise.reject({
msg: `${options.outDir} not exists. check path and if you did 'npx sequelize init' you must use path used in sequelize migration path`,
});
}
await sequelize.authenticate();
const models = sequelize.models;
const queryInterface = sequelize.getQueryInterface();
await (0, createMigrationTable_1.default)(sequelize);
const lastMigrationState = await (0, getLastMigrationState_1.default)(sequelize);
const previousState = {
revision: lastMigrationState !== undefined ? lastMigrationState["revision"] : 0,
version: lastMigrationState !== undefined ? lastMigrationState["version"] : 1,
tables: lastMigrationState !== undefined ? lastMigrationState["tables"] : {},
};
const currentState = {
revision: previousState.revision + 1,
tables: (0, getTablesFromModels_1.default)(sequelize, models),
};
const upActions = (0, getDiffActionsFromTables_1.default)(previousState.tables, currentState.tables);
const downActions = (0, getDiffActionsFromTables_1.default)(currentState.tables, previousState.tables);
const migration = (0, getMigration_1.default)(upActions);
const tmp = (0, getMigration_1.default)(downActions);
migration.commandsDown = tmp.commandsUp;
if (migration.commandsUp.length === 0) {
console.log("No changes found");
process.exit(0);
}
migration.consoleOut.forEach(v => {
console.log(`[Actions] ${v}`);
});
if (options.preview) {
console.log("Migration result:");
console.log(beautify(`[ \n${migration.commandsUp.join(", \n")} \n];\n`));
console.log("Undo commands:");
console.log(beautify(`[ \n${migration.commandsDown.join(", \n")} \n];\n`));
return Promise.resolve({ msg: "success without save" });
}
const info = await (0, writeMigration_1.default)(currentState.revision, migration, options);
console.log(`New migration to revision ${currentState.revision} has been saved to file '${info.filename}'`);
const rows = [
{
revision: currentState.revision,
name: info.info.name,
state: JSON.stringify(currentState),
},
];
try {
await queryInterface.bulkDelete("SequelizeMetaMigrations", {
revision: currentState.revision,
});
await queryInterface.bulkInsert("SequelizeMetaMigrations", rows);
console.log(`Use sequelize CLI:
npx sequelize db:migrate --to ${info.revisionNumber}-${info.info.name}.js ${`--migrations-path=${options.outDir}`} `);
return Promise.resolve({ msg: "success" });
}
catch (err) {
if (options.debug)
console.error(err);
}
return Promise.resolve({ msg: "success anyway.." });
};
//# sourceMappingURL=index.js.map