@momsfriendlydevco/template

1.2.1 • Public • Published

@MomsFriendlyDevCo/Template

Simple ES6 template renderer.

Features:

  • Optional compile step
  • Supports {{handlebars}} style formatting as well as ${es6Templates}}
  • Supports dotted style adressing - even with arrays e.g. {{foo.0.bar.1.baz}}
  • Tiny with no-dependencies
var template = require('@momsfriendlydevco/template');

template('Hello ${name}`, {name: 'Matt'}) //= "Hello Matt"
template('Hello {{name}}`, {name: 'Matt'}) //= "Hello Matt" (same with handlebars syntax)
template('Random chance: ${Math.floor(100 * Math.random())}%') //= "Random Chance: XX%"

Safe undefined

By default this module enables "safe undefined" variables, which means accessing any variable from the global scope which is not defined will simply return undefined rather than raise an error.

The objective here is that template expressions should be forgiving and at least compile if a variable is not defined.

For example:

// With the default {safeUndefined: true}
var template = require('@momsfriendlydevco/template');
template('${foo}', {}); //= "undefined"
template('${foo || 'Nope'}', {}); //= "Nope"
template('${foo ? 'Yes' : 'No'}', {}); //= "No"
template('${foo || bar || baz || 'Nothing'}', {baz: 'Baz!'}); //= "Baz!"
// With {safeUndefined: false}
var template = require('@momsfriendlydevco/template');
template('${foo}', {}); //= Raises an error "foo is undefined"
// All of the above examples also raise as accessing "foo" is not available in the global scope

API

This module exposes two main functions, the global will immediately execute a template and return its value, whereas .compile() will return a reusable function which can be called multiple times.

template(template, locals, options)

Compile and run the template using the provided locals. If options are not provided they are imported from template.defaults.

template.compile(template, options)

Compile and return a function which can take different sets of locals.

var template = require('@momsfriendlydevco/template');

var compiled = template.compile('Hello ${name}');
compiled({name: 'Matt'}); //=> 'Hello Matt'
compiled({name: 'Joe'})); //=> 'Hello Joe'

template.defaults

Default options to use.

Option Type Default Description
globals Object {Date, Math} Global level objects to use when evaluating templates
dotted boolean true Enable dotted notation
handlebars boolean true Support simple handlebars syntax (e.g. {{variable}})
script Object {} Additional settings to pass to vm.Script() when compiling the script
safeUndefined boolean true Wrap the context in a proxy so accessing top level undefined aliases doesn't throw

Readme

Keywords

Package Sidebar

Install

npm i @momsfriendlydevco/template

Weekly Downloads

19

Version

1.2.1

License

MIT

Unpacked Size

7.51 kB

Total Files

6

Last publish

Collaborators

  • hash-bang
  • 1watt
  • eekthecat
  • melromero
  • mr-yellow