import { createReadStream } from "node:fs"; import { inspectExportStream } from "../db/export/inspect.js"; import { isExportKind } from "../db/export/filter.js"; import type { ExportKind } from "../db/types/ExportImport.js"; const args = process.argv.slice(2); function printUsage(err: boolean | string = false): never { const log = (err ? console.error : console.log).bind(console); if (typeof err === "string") { log(`Error: ${err}`); log(""); } log("Usage:"); log("\tabode-inspect --help"); log("\tabode-inspect [--stop-after=note,...]"); process.exit(err ? 1 : 0); } if (["-h", "--help", "help"].some((x) => args.includes(x))) printUsage(); let input: string | undefined; const flags = new Map(); for (const arg of args) { if (arg.startsWith("--")) { const eq = arg.indexOf("="); if (eq === -1) printUsage(`invalid flag: ${arg}`); flags.set(arg.slice(2, eq), arg.slice(eq + 1)); } else if (input === undefined) { input = arg; } else { printUsage("too many arguments"); } } if (!input) printUsage("missing "); for (const key of flags.keys()) { if (key !== "stop-after") printUsage(`unknown flag: --${key}`); } let stopAfterKinds: ExportKind[] | undefined; const rawStop = flags.get("stop-after"); if (rawStop !== undefined) { const list = rawStop.split(",").filter(Boolean); const bad = list.filter((k) => !isExportKind(k)); if (bad.length) printUsage(`invalid kind(s): ${bad.join(", ")}`); stopAfterKinds = list.filter(isExportKind); } const source = input === "-" ? process.stdin : createReadStream(input); const { counts, meta } = await inspectExportStream(source, { stopAfterKinds }); if (meta) { console.log("Meta:"); console.log(`- format version: ${meta.v ?? "?"}`); console.log(`- exported at: ${meta.exportedAt ?? "?"}`); console.log(`- source backend: ${meta.source ?? "?"}`); if (meta.filter && Object.keys(meta.filter).length) { console.log(`- effective filter: ${JSON.stringify(meta.filter)}`); } } console.log("Counts:"); const entries = Object.entries(counts); if (!entries.length) console.log("(none)"); for (const [kind, count] of entries) console.log(`- ${kind}: ${count}`); process.exit(0);