UNPKG

prisma-data-migrations

Version:

Enhances Prisma ORM with support for post-migration data scripts.

91 lines (90 loc) 3.72 kB
#!/usr/bin/env node "use strict"; 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(); }