diff --git a/src/index.ts b/src/index.ts index 5cfcfbd..cf0f756 100644 --- a/src/index.ts +++ b/src/index.ts @@ -65,11 +65,17 @@ function getArgs() { description: "Nombre de la tabla donde se almacenan las versiones de la BDD, por defecto 'db_versions'", default: "db_versions" }) + .option("baseVersion", { + alias: "b", + type: "string", + description: "Versión a partir de la cual se aplican las migraciones independientemente de la almacenada en BDD" + }) .parse() as { target: string, env: string, migrations: string, - versionTable: "db_versions" | string + versionTable: "db_versions" | string, + baseVersion: string } //console.log("args", argv) @@ -77,7 +83,8 @@ function getArgs() { target: argv.target, env: argv.env, migrations: argv.migrations, - versionTable: argv.versionTable + versionTable: argv.versionTable, + baseVersion: argv.baseVersion }; } @@ -202,7 +209,7 @@ async function writeAppliedVersion(db: Pool, versionTable: string, version: Migr */ async function runMigrations(args: { targetVersion: string, - currentVersion?: string, + baseVersion?: string, migrationDir: string, versionTable: string }) { @@ -233,8 +240,8 @@ async function runMigrations(args: { if (versionBdd == undefined) { console.log("[x] Error buscando la ultima version de la base de datos") } - const currentVersion = args.currentVersion ?? versionBdd ?? "0.0.0" - console.log("[i] Migrando desde la version " + currentVersion + " a la version " + args.targetVersion) + const baseVersion = args.baseVersion ?? versionBdd ?? "0.0.0" + console.log("[i] Migrando desde la version " + baseVersion + " a la version " + args.targetVersion) const files = await fs.readdir(args.migrationDir); const pendingMigrations: MigrationFile[] = files .map(f => ({ @@ -242,10 +249,12 @@ async function runMigrations(args: { fileName: f, fullPath: path.join(args.migrationDir, f) })) - // 1. Filtrar las migraciones > que la actual - .filter(v => compareVersions(v.version, currentVersion) >= 0) + // 1. Filtrar las migraciones > que la actual para volver a aplicar la actual + // file > base + .filter(file => compareVersions(file.version, baseVersion) == 1) // 2. Filtra las migraciones <= que la objetivo - .filter(v => compareVersions(v.version, args.targetVersion) == -1) + // file <= objetivo + .filter(file => compareVersions(file.version, args.targetVersion) <= 0) .sort((a, b) => compareVersions(a.version, b.version)); if (pendingMigrations.length === 0) { @@ -294,7 +303,8 @@ async function main() { await runMigrations({ targetVersion: args.target, migrationDir: args.migrations, - versionTable: args.versionTable + versionTable: args.versionTable, + baseVersion: args.baseVersion }) return 0 }