Fast JavaScript templating engine with custom delimiters, runtime evaluation, and auto-compilation support
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Core template compilation functionality for converting template strings into optimized JavaScript functions with configurable delimiters and compilation settings.
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"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"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"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
}selfcontained: true for templates that don't access global scopestrip: true removes unnecessary whitespace from outputappend: true mode is generally faster than split: falseInstall with Tessl CLI
npx tessl i tessl/npm-dot