CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-dot

Fast JavaScript templating engine with custom delimiters, runtime evaluation, and auto-compilation support

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

template-compilation.mddocs/

Template Compilation

Core template compilation functionality for converting template strings into optimized JavaScript functions with configurable delimiters and compilation settings.

Capabilities

Template Function

Compiles template strings into executable functions with full configuration control.

/**
 * Compile template string into executable function
 * @param {string} tmpl - Template string with doT syntax
 * @param {object} c - Optional template settings (defaults to doT.templateSettings)
 * @param {object} def - Optional predefined template definitions/partials
 * @returns {function} Compiled template function that accepts data object
 * @throws {Error} If template compilation fails
 */
function template(tmpl, c, def);

Usage Examples:

const doT = require("dot");

// Basic template compilation
const basicTemplate = doT.template("Hello {{=it.name}}!");
const result = basicTemplate({ name: "World" });
console.log(result); // "Hello World!"

// Template with custom settings
const customTemplate = doT.template(
  "Hi <<name>>!",
  {
    interpolate: /<<([\s\S]+?)>>/g,
    varname: "data"
  }
);
const customResult = customTemplate({ name: "Alice" });
console.log(customResult); // "Hi Alice!"

// Template with predefined partials
const templateWithDefs = doT.template(
  "{{#def.greeting}} {{=it.name}}",
  null,
  { greeting: "Welcome" }
);
const defResult = templateWithDefs({ name: "Bob" });
console.log(defResult); // "Welcome Bob"

Compile Function

Simplified template compilation interface for legacy compatibility.

/**
 * Simplified template compilation for legacy compatibility
 * @param {string} tmpl - Template string
 * @param {object} def - Optional template definitions
 * @returns {function} Compiled template function
 */
function compile(tmpl, def);

Usage Examples:

const doT = require("dot");

// Simple compilation
const template = doT.compile("Result: {{=it.value}}");
const output = template({ value: 42 });
console.log(output); // "Result: 42"

// Compilation with definitions
const templateWithDef = doT.compile(
  "{{#def.header}}: {{=it.content}}",
  { header: "Title" }
);
const result = templateWithDef({ content: "Page content" });
console.log(result); // "Title: Page content"

Template Settings Configuration

Configure compilation behavior through the global templateSettings object or per-template settings.

const templateSettings = {
  evaluate: RegExp,     // Pattern for JavaScript code blocks {{code}}
  interpolate: RegExp,  // Pattern for variable interpolation {{=var}}
  encode: RegExp,       // Pattern for HTML-encoded output {{!var}}
  use: RegExp,          // Pattern for partials/includes {{#def.name}}
  useParams: RegExp,    // Pattern for parameterized partials
  define: RegExp,       // Pattern for template definitions {{##def.name:...#}}
  defineParams: RegExp, // Pattern for definition parameters
  conditional: RegExp,  // Pattern for conditionals {{?condition}}...{{?}}
  iterate: RegExp,      // Pattern for iteration {{~array:item:index}}...{{~}}
  varname: string,      // Template data variable name (default: "it")
  strip: boolean,       // Strip whitespace (default: true)
  append: boolean,      // Use append vs split mode (default: true)
  selfcontained: boolean, // Self-contained template mode (default: false)
  doNotSkipEncoded: boolean // Encode already encoded entities (default: false)
};

Usage Examples:

const doT = require("dot");

// Modify global settings
doT.templateSettings.varname = "data";
doT.templateSettings.strip = false;

// Use custom delimiters
const customSettings = {
  interpolate: /\[%=([\s\S]+?)%\]/g,
  evaluate: /\[%([\s\S]+?)%\]/g,
  varname: "model"
};

const template = doT.template(
  "[% if(model.show) { %]Value: [%=model.value%][% } %]",
  customSettings
);

const result = template({ show: true, value: "test" });
console.log(result); // "Value: test"

Error Handling

Template compilation errors provide detailed information about syntax issues.

const doT = require("dot");

try {
  // Invalid JavaScript syntax in template
  const template = doT.template("{{= invalid + }}");
} catch (error) {
  console.error("Template compilation failed:", error.message);
  // Error includes the generated function string for debugging
}

Performance Considerations

  • Templates are compiled to optimized JavaScript functions
  • Compilation is expensive; cache compiled templates when possible
  • Use selfcontained: true for templates that don't access global scope
  • strip: true removes unnecessary whitespace from output
  • append: true mode is generally faster than split: false

Install with Tessl CLI

npx tessl i tessl/npm-dot

docs

auto-processing.md

cli-tools.md

html-encoding.md

index.md

template-compilation.md

template-syntax.md

tile.json