scripts/database-snapshot.ts
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env -S deno run --allow-env --allow-read --allow-write --allow-net --allow-sys --allow-ffi
import { createClient } from "@libsql/client";
import { resolve } from "@std/path";
import {
createDatabaseSnapshot,
parseSnapshotArgs,
readSnapshotRequestFromEnvFile,
SNAPSHOT_USAGE,
} from "#scripts/database-snapshot-lib.ts";
import { createSnapshotProgressOutput } from "#scripts/database-snapshot-output.ts";
import { formatBytes, formatMs } from "#shared/format-units.ts";
const encoder = new TextEncoder();
const options = parseSnapshotArgs(Deno.args);
if (options === null) {
console.log(SNAPSHOT_USAGE);
} else {
const startedAt = performance.now();
const request = await readSnapshotRequestFromEnvFile(options);
console.log(
`Database snapshot\n Source: ${new URL(request.dbUrl).host}\n Output: ${resolve(request.outputPath)}\n`,
);
const progress = createSnapshotProgressOutput({
terminal: Deno.stdout.isTerminal(),
write: (text) => {
Deno.stdout.writeSync(encoder.encode(text));
},
});
let outputPath: string;
try {
outputPath = await createDatabaseSnapshot(
request,
createClient,
progress.report,
);
} finally {
progress.stop();
}
const size = (await Deno.stat(outputPath)).size;
console.log(
`\nSnapshot ready\n File: ${outputPath}\n Size: ${formatBytes(size)}\n Time: ${formatMs(Math.round(performance.now() - startedAt))}`,
);
}