import assert from "node:assert"; import { describe, test } from "node:test"; import "@nivinjoseph/n-ext"; import { Templator } from "../src/index.js"; await describe("Templator", async () => { await test("renderText substitutes tokens", () => { const template = "Hello Mr. {{ firstName }} {{lastName}}. Address: {{address.street}} {{address.city}} {{address.street}}"; const data = { firstName: "Nivin", lastName: "joseph", address: { street: "711 Kennedy" } }; const templator = new Templator(template); assert.deepStrictEqual(templator.tokens, ["firstName", "lastName", "address.street", "address.city", "address.street"]); const output = templator.renderText(data); assert.strictEqual(output, `Hello Mr. ${data.firstName} ${data.lastName}. Address: ${data.address.street} ${(data.address as any).city || ""} ${data.address.street}`); }); await test("renderText leaves HTML-significant characters raw", () => { const template = "{{data.title}}"; const descriptionData = {}; descriptionData.setValue("data.title", "CME engine optimization: Take the user's age into consideration"); const templator = new Templator(template); const output = templator.renderText(descriptionData); assert.strictEqual(output, "CME engine optimization: Take the user's age into consideration"); }); await test("renderHtml escapes HTML-significant characters in substitutions", () => { const templator = new Templator("
Welcome {{name}}
"); const output = templator.renderHtml({ name: "" }); assert.ok(!output.includes("