import { PDFDocument } from "pdf-lib"; import { loadPdfForm } from "../util/saveLoadPdf.ts"; import { callWithArgPrompt } from "util/call.ts"; export async function checkFile(pdfPath: string, csPath: string) { while (!pdfPath || !pdfPath.endsWith(".pdf")) { pdfPath = prompt("Please provide path to PDF file:") || ""; } while (!csPath || !csPath.endsWith(".cs")) { csPath = prompt("Please provide path to CS class file:") || ""; } const form = await loadPdfForm(pdfPath); const fields = form.getFields(); const csFiles = await Promise.all( csPath.split(",").map((c) => Deno.readTextFile(c.trim())), ); const fieldNames: string[] = fields.map((f) => f.getName()) .filter((f) => { const rx = new RegExp( `(? rx.test(c)); }) .filter((f) => !f.toLowerCase().includes("signature")); if (fieldNames.length) { console.log( "%cThe following field names are not present in the CS code", "color: red", ); console.log(fieldNames); alert("Your princess is in another castle..."); } else { console.log("%cAll form fields present", "color: lime"); alert("Ok!"); } } class CheckCode implements ITool { name = "checkcode"; description = "Checks if form fields are present in CS code"; help() { console.log("Usage: checkcode "); } async run(...args: string[]) { await callWithArgPrompt(checkFile, [ ["Please provide path to PDF file:", (p) => !!p && p.endsWith(".pdf")], [ "Please provide path to CS file (comma separated for multiple):", (p) => !!p && p.endsWith(".cs"), ], ], args); } } export default new CheckCode();