Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

template

JSR Version

Template engine for Deno

Interface

export interface ConstructorOptions {
  open?: string;       // Open tag, default: {{
  close?: string;      // Closing tag, default: }}
  isEscape?: boolean;  // Whether to escape the value of parameter data, default: true
}

class Template {
  constructor(options?: ConstructorOptions)
  
  render(str: string, data: object): string;
  compile(str: string): string;
  renderCompiled(compiled: Function, data: object): string;
  renderFile(path: string, data: object): string;
}

Usage

render

import Template from "jsr:@deno-library/template";
// import Template from "https://deno.land/x/template@v0.1.0/mod.ts";
const tpl = new Template();
const str = tpl.render("abc{{name}}{{name2}}def\n{{fn}}s{{p.arr}}ww", {
  name: "def",
  fn: () => 1,
  p: { arr: [{ M: "w" }, 2, 3] },
  age: 30,
});
assert(
  str ===
    "abcdef{{name2}}def\n() => 1s[{"M":"w"},2,3]ww",
);

compile

Reuse compiled function

import Template from "https://deno.land/x/template@v0.1.0/mod.ts";
const tpl = new Template();
const compiled = tpl.compile("abc{{name}}");
const str1 = tpl.renderCompiled(compiled, { name: "def" });
const str2 = tpl.renderCompiled(compiled, { name: "xyz" });
assert(str1 === "abcdef");
assert(str2 === "abcxyz");

not escape

import Template from "https://deno.land/x/template@v0.1.0/mod.ts";
const tpl = new Template({
  isEscape: false,
});
const str = "abc{{name}}{{name2}}def\n{{fn}}s{{p.arr}}ww";
const result = 'abcdef{{name2}}def\n() => 1s[{"M":"w"},2,3]ww';
const data = {
  name: "def",
  fn: () => 1,
  p: { arr: [{ M: "w" }, 2, 3] },
  age: 30,
};
// render
assertEquals(tpl.render(str, data), result);

// renderCompiled
const compiled = tpl.compile(str);
assertEquals(tpl.renderCompiled(compiled, data), result);

open and close

import Template from "https://deno.land/x/template@v0.1.0/mod.ts";
const tpl = new Template({
  open: "<%",
  close: "%>",
});

// render
assertEquals(tpl.render("abc<%name%>", { name: "def" }), "abcdef");

// renderCompiled
const compiled = tpl.compile("abc<%name%>");
const str = tpl.renderCompiled(compiled, { name: "def" });
assertEquals(str, "abcdef");

renderFile

Compiled functions are cached

import Template from "https://deno.land/x/template@v0.1.0/mod.ts";
const tpl = new Template();
const data = { name: "def" };
const result = tpl.renderFile("./index.html", data);

Test

deno test --allow-read

About

Template engine for Deno

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages