# @momsfriendlydevco/template

> ES6 template renderer with support for dotted notation and handlebars

Latest version **1.2.1** (published 2023-02-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install @momsfriendlydevco/template
pnpm add @momsfriendlydevco/template
yarn add @momsfriendlydevco/template
bun add @momsfriendlydevco/template
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.1 |
| Published | 2023-02-16 |
| First published | 2019-06-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 7.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Matt Carter |
| Maintainers | hash-bang, 1watt, eekthecat, melromero, mr-yellow |
| Keywords | es6, template, render |

## Links

- npm: https://www.npmjs.com/package/@momsfriendlydevco/template
- Repository: https://github.com/MomsFriendlyDevCo/template
- Homepage: https://github.com/MomsFriendlyDevCo/template#readme
- Issues: https://github.com/MomsFriendlyDevCo/template/issues
- npm.io page: https://npm.io/package/@momsfriendlydevco/template

## Recent versions

- 1.2.1 (latest) — 2023-02-16
- 1.2.0 — 2023-02-16
- 1.1.2 — 2019-09-04
- 1.1.1 — 2019-06-11
- 1.1.0 — 2019-06-11
- 1.0.0 — 2019-06-10

## README

@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



```javascript
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:

```javascript
// 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!"
```

```javascript
// 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.

```javascript
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 |

---
_Source: https://npm.io/package/@momsfriendlydevco/template · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
