import { forceArgs } from "../cli/forceArgs.ts"; import { cliAlert } from "../cli/prompts.ts"; import { TerminalBlock } from "../cli/TerminalLayout.ts"; import { loadPdfForm } from "util/saveLoadPdf.ts"; import type { ITool } from "../types.ts"; export class ListFormFields implements ITool { name = "listformfields"; description = "Lists fields in a PDF form"; block?: TerminalBlock; async run(pdfPath: string = "") { if (!this.block) { this.block = new TerminalBlock(); } this.block.setPreserveHistory(true); [pdfPath] = await forceArgs([pdfPath], [[ "Please provide path to PDF:", (p) => !!p && p.endsWith(".pdf"), ]], this.block); const form = await loadPdfForm(pdfPath); const fields = form.getFields(); const fieldNames = fields.map((f) => f.getName()); const lines = []; for (const fieldName of fieldNames) { lines.push(fieldName); } this.block.setLines(lines, [0, 1]); await cliAlert("", this.block); } setBlock(terminalBlock: TerminalBlock) { this.block = terminalBlock; } } export default new ListFormFields();