refactor: migrate new-data-fix script from bash to TypeScript
This commit is contained in:
74
scripts/new-data-fix.ts
Normal file
74
scripts/new-data-fix.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { existsSync } from "node:fs";
|
||||
import { mkdir, writeFile } from "node:fs/promises";
|
||||
import { join } from "node:path";
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
const toSlug = (raw: string): string =>
|
||||
raw
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, "_")
|
||||
.replace(/^_+|_+$/g, "");
|
||||
|
||||
const formatYyyymmdd = (date = new Date()): string => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, "0");
|
||||
const day = String(date.getDate()).padStart(2, "0");
|
||||
return `${year}${month}${day}`;
|
||||
};
|
||||
|
||||
const sourceFor = (id: string): string => `package fixes
|
||||
|
||||
import (
|
||||
\t"context"
|
||||
\t"database/sql"
|
||||
\t"fmt"
|
||||
)
|
||||
|
||||
func init() {
|
||||
\tRegister(Fix{
|
||||
\t\tID: "${id}",
|
||||
\t\tApply: func(ctx context.Context, sqlDB *sql.DB) error {
|
||||
\t\t\t// TODO: implement fix
|
||||
\t\t\t// _, err := sqlDB.ExecContext(ctx, \`UPDATE ...\`)
|
||||
\t\t\t// if err != nil { return fmt.Errorf("...: %w", err) }
|
||||
\t\t\treturn fmt.Errorf("unimplemented data fix: ${id}")
|
||||
\t\t},
|
||||
\t})
|
||||
}
|
||||
`;
|
||||
|
||||
const main = async (): Promise<void> => {
|
||||
const rawName = process.argv[2] ?? "";
|
||||
|
||||
if (rawName === "--help" || rawName === "-h") {
|
||||
console.log("usage: bun run ./scripts/new-data-fix.ts <name>");
|
||||
return;
|
||||
}
|
||||
|
||||
const slug = toSlug(rawName);
|
||||
|
||||
if (!slug) {
|
||||
console.error("usage: bun run ./scripts/new-data-fix.ts <name>");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const id = `${formatYyyymmdd()}_${slug}`;
|
||||
const dir = join(process.cwd(), "internal", "database", "fixes");
|
||||
const filePath = join(dir, `${id}.go`);
|
||||
|
||||
if (existsSync(filePath)) {
|
||||
console.error(`data fix already exists: ${filePath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
await mkdir(dir, { recursive: true });
|
||||
await writeFile(filePath, sourceFor(id));
|
||||
spawnSync("gofmt", ["-w", filePath], { stdio: "ignore" });
|
||||
|
||||
console.log(filePath);
|
||||
};
|
||||
|
||||
main().catch((error: unknown) => {
|
||||
console.error(error instanceof Error ? error.message : String(error));
|
||||
process.exitCode = 1;
|
||||
});
|
||||
Reference in New Issue
Block a user