@launchql/migrate
Version:
PostgreSQL Migration Tools
98 lines (90 loc) • 3.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeSqitchPlan = exports.writeSqitchFiles = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const writeSqitchFiles = (rows, opts) => {
rows.forEach((row) => writeVerify(row, opts));
rows.forEach((row) => writeRevert(row, opts));
rows.forEach((row) => writeDeploy(row, opts));
};
exports.writeSqitchFiles = writeSqitchFiles;
const ordered = (arr) => {
if (!arr)
return [];
return arr.sort((a, b) => a.length - b.length || a.localeCompare(b));
};
const writeDeploy = (row, opts) => {
const deploy = opts.replacer(row.deploy);
const dir = path_1.default.dirname(deploy);
const prefix = path_1.default.join(opts.outdir, opts.name, 'deploy');
const actualDir = path_1.default.resolve(prefix, dir);
const actualFile = path_1.default.resolve(prefix, `${deploy}.sql`);
fs_1.default.mkdirSync(actualDir, { recursive: true });
const content = `-- Deploy: ${deploy} to pg
-- made with <3 @ launchql.com
${opts.replacer(ordered(row?.deps)
.map((dep) => `-- requires: ${dep}`)
.join('\n') || '')}
BEGIN;
${opts.replacer(row.content)}
COMMIT;
`;
fs_1.default.writeFileSync(actualFile, content);
};
const writeVerify = (row, opts) => {
const deploy = opts.replacer(row.deploy);
const dir = path_1.default.dirname(deploy);
const prefix = path_1.default.join(opts.outdir, opts.name, 'verify');
const actualDir = path_1.default.resolve(prefix, dir);
const actualFile = path_1.default.resolve(prefix, `${deploy}.sql`);
fs_1.default.mkdirSync(actualDir, { recursive: true });
const content = opts.replacer(`-- Verify: ${deploy} on pg
BEGIN;
${opts.replacer(row.verify)}
COMMIT;
`);
fs_1.default.writeFileSync(actualFile, content);
};
const writeRevert = (row, opts) => {
const deploy = opts.replacer(row.deploy);
const dir = path_1.default.dirname(deploy);
const prefix = path_1.default.join(opts.outdir, opts.name, 'revert');
const actualDir = path_1.default.resolve(prefix, dir);
const actualFile = path_1.default.resolve(prefix, `${deploy}.sql`);
fs_1.default.mkdirSync(actualDir, { recursive: true });
const content = `-- Revert: ${deploy} from pg
BEGIN;
${opts.replacer(row.revert)}
COMMIT;
`;
fs_1.default.writeFileSync(actualFile, content);
};
const writeSqitchPlan = (rows, opts) => {
const dir = path_1.default.resolve(path_1.default.join(opts.outdir, opts.name));
fs_1.default.mkdirSync(dir, { recursive: true });
const date = () => '2017-08-11T08:11:51Z'; // stubbed timestamp
const duplicates = {};
const plan = opts.replacer(`%syntax-version=1.0.0
%project=launchql-extension-name
%uri=launchql-extension-name
${rows
.map((row) => {
if (duplicates[row.deploy]) {
console.log('DUPLICATE ' + row.deploy);
return '';
}
duplicates[row.deploy] = true;
if (row.deps?.length) {
return `${row.deploy} [${row.deps.join(' ')}] ${date()} launchql <launchql@5b0c196eeb62> # add ${row.name}`;
}
return `${row.deploy} ${date()} launchql <launchql@5b0c196eeb62> # add ${row.name}`;
})
.join('\n')}
`);
fs_1.default.writeFileSync(path_1.default.join(dir, 'sqitch.plan'), plan);
};
exports.writeSqitchPlan = writeSqitchPlan;