prisma-data-migrations
Version:
Enhances Prisma ORM with support for post-migration data scripts.
91 lines (90 loc) • 3.72 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ConfigLoader_1 = require("./config/ConfigLoader");
const CLI_1 = require("./services/CLI");
const Logger_1 = require("./services/Logger");
const DB_1 = require("./services/DB");
const ScriptRunner_1 = require("./services/ScriptRunner");
const TargetedPrismaMigrator_1 = require("./services/TargetedPrismaMigrator");
const Validator_1 = require("./services/Validator");
const commander_1 = require("commander");
const package_json_1 = __importDefault(require("../package.json"));
const dotenv_1 = __importDefault(require("dotenv"));
dotenv_1.default.config();
const program = new commander_1.Command();
function createCLI() {
const { config } = new ConfigLoader_1.ConfigLoader();
const logger = new Logger_1.Logger(config);
const prisma = new DB_1.DB();
const validator = new Validator_1.Validator(config);
const scriptRunner = new ScriptRunner_1.ScriptRunner(config);
const migrator = new TargetedPrismaMigrator_1.TargetedPrismaMigrator(logger, config);
const cli = new CLI_1.CLI(migrator, scriptRunner, prisma, validator, logger, config);
return cli;
}
program
.name("prisma-dm")
.description("CLI for Prisma data migrations")
.version(package_json_1.default.version);
program
.command("init")
.description("Generate configuration file")
.action(() => {
CLI_1.CLI.init();
});
program
.command("merge:schema")
.description("Merge prisma schema folder to single schema file")
.option("--schema <value>", "Path to schema folder", "prisma/schema")
.option("--output <value>", "Path to output schema file", "prisma/schema.prisma")
.action((options) => {
const output = options.output;
const schema = options.schema;
createCLI().mergeSchema(schema !== null && schema !== void 0 ? schema : "prisma/schema", output !== null && output !== void 0 ? output : "prisma/schema.prisma");
});
program
.command("generate")
.description("Generate types for data migrations by prisma schemas")
.action(() => {
createCLI().generate();
});
program
.command("migrate")
.description("Migrate to target migration with post scripts execution")
.option("--to <value>", "Target migration")
.option("--upto <value>", "Target migration = Run all migrations up to (and including) this one")
.action(async (options) => {
var _a;
if (options.to && options.upto) {
throw new Error('options "to" and "upto" can not be used together');
}
const toOption = (_a = options.to) !== null && _a !== void 0 ? _a : options.upto;
const targetMigration = toOption === "latest" ? undefined : toOption;
await createCLI().migrate({
targetMigration,
includeTargetMigration: !options.to,
});
});
program
.command("run:postscript")
.description("Run a specific data migration post script manually (particularly useful when a post script fails during migration, allowing you to reapply it after fixing the issue)")
.option("-m, --migration <value>", "Name of the migration")
.action((options) => {
if (!options.migration) {
throw new Error('Option "--migration" is required to specify the migration name');
}
const migrationName = options.migration;
createCLI().runPostScript(migrationName);
});
program.on("command:*", () => {
console.error("Unknown command: %s", program.args.join(" "));
program.help();
});
program.parse(process.argv);
if (!process.argv.slice(2).length) {
program.help();
}
;