import fs from "node:fs"; import type { CallTemplateFunctionArgs, Context, PluginDefinition } from "@yaakapp/api"; const UTF8 = "utf8"; const options = [ { label: "ASCII", value: "ascii" }, { label: "UTF-8", value: UTF8 }, { label: "UTF-16 LE", value: "utf16le" }, { label: "Base64", value: "base64" }, { label: "Base64 URL-safe", value: "base64url" }, { label: "Latin-1", value: "latin1" }, { label: "Hexadecimal", value: "hex" }, ]; export const plugin: PluginDefinition = { templateFunctions: [ { name: "fs.readFile", description: "Read the contents of a file as utf-8", previewArgs: ["encoding"], args: [ { title: "Select File", type: "file", name: "path", label: "File" }, { type: "select", name: "encoding", label: "Encoding", defaultValue: UTF8, description: "Specifies how the file's bytes are decoded into text when read", options, }, { type: "checkbox", name: "trim", label: "Trim Whitespace", description: "Remove leading and trailing whitespace from the file contents", }, ], async onRender(_ctx: Context, args: CallTemplateFunctionArgs): Promise { if (!args.values.path || !args.values.encoding) return null; try { const v = await fs.promises.readFile(String(args.values.path ?? ""), { encoding: String(args.values.encoding ?? "utf-8") as BufferEncoding, }); return args.values.trim ? v.trim() : v; } catch { return null; } }, }, ], };