mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-02 08:06:00 +00:00
317b2b50ad
- proper cli exists required for cloudflare proxy to dispose - updated cloudflare proxy to allow proxy options (e.g. remote) - updated config command to include proper required structure for the export on code mode
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import type { CliCommand } from "../types";
|
|
import { makeAppFromEnv } from "cli/commands/run";
|
|
import { writeFile } from "node:fs/promises";
|
|
import c from "picocolors";
|
|
import { withConfigOptions } from "cli/utils/options";
|
|
|
|
export const sync: CliCommand = (program) => {
|
|
withConfigOptions(program.command("sync"))
|
|
.description("sync database")
|
|
.option("--force", "perform database syncing operations")
|
|
.option("--drop", "include destructive DDL operations")
|
|
.option("--out <file>", "output file")
|
|
.option("--sql", "use sql output")
|
|
.action(async (options) => {
|
|
const app = await makeAppFromEnv(options);
|
|
const schema = app.em.schema();
|
|
console.info(c.dim("Checking database state..."));
|
|
const stmts = await schema.sync({ drop: options.drop });
|
|
|
|
console.info("");
|
|
if (stmts.length === 0) {
|
|
console.info(c.yellow("No changes to sync"));
|
|
process.exit(0);
|
|
}
|
|
// @todo: currently assuming parameters aren't used
|
|
const sql = stmts.map((d) => d.sql).join(";\n") + ";";
|
|
|
|
if (options.force) {
|
|
console.info(c.dim("Executing:") + "\n" + c.cyan(sql));
|
|
await schema.sync({ force: true, drop: options.drop });
|
|
|
|
console.info(`\n${c.gray(`Executed ${c.cyan(stmts.length)} statement(s)`)}`);
|
|
console.info(`${c.green("Database synced")}`);
|
|
} else {
|
|
if (options.out) {
|
|
const output = options.sql ? sql : JSON.stringify(stmts, null, 2);
|
|
await writeFile(options.out, output);
|
|
console.info(`SQL written to ${c.cyan(options.out)}`);
|
|
} else {
|
|
console.info(c.dim("DDL to execute:") + "\n" + c.cyan(sql));
|
|
|
|
console.info(
|
|
c.yellow(
|
|
"\nNo statements have been executed. Use --force to perform database syncing operations",
|
|
),
|
|
);
|
|
}
|
|
}
|
|
process.exit(0);
|
|
});
|
|
};
|