Ctrl K
ComunidadGuías…

scripts/database-snapshot.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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))}`,
  );
}