Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jonschlinkert/template-helpers
Generic JavaScript helpers that can be used with any template engine. Handlebars, Lo-Dash, Underscore, or any engine that supports helper functions.
https://github.com/jonschlinkert/template-helpers
engine handlebare handlebars-helpers helper helpers html javascript jonschlinkert lodash node nodejs render template template-engine
Last synced: 3 days ago
JSON representation
Generic JavaScript helpers that can be used with any template engine. Handlebars, Lo-Dash, Underscore, or any engine that supports helper functions.
- Host: GitHub
- URL: https://github.com/jonschlinkert/template-helpers
- Owner: jonschlinkert
- License: mit
- Created: 2015-03-01T19:03:28.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2018-11-25T01:11:14.000Z (almost 6 years ago)
- Last Synced: 2024-10-23T11:49:20.217Z (11 days ago)
- Topics: engine, handlebare, handlebars-helpers, helper, helpers, html, javascript, jonschlinkert, lodash, node, nodejs, render, template, template-engine
- Language: JavaScript
- Homepage: http://jonschlinkert.github.io/template-helpers
- Size: 208 KB
- Stars: 77
- Watchers: 7
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# template-helpers [![NPM version](https://img.shields.io/npm/v/template-helpers.svg?style=flat)](https://www.npmjs.com/package/template-helpers) [![NPM monthly downloads](https://img.shields.io/npm/dm/template-helpers.svg?style=flat)](https://npmjs.org/package/template-helpers) [![NPM total downloads](https://img.shields.io/npm/dt/template-helpers.svg?style=flat)](https://npmjs.org/package/template-helpers) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/template-helpers.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/template-helpers)
> Generic JavaScript helpers that can be used with any template engine. Handlebars, Lo-Dash, Underscore, or any engine that supports helper functions.
Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
- [Install](#install)
- [Usage](#usage)
* [Template-engine agnostic](#template-engine-agnostic)
* [Namespacing](#namespacing)
- [Helpers](#helpers)
* [array](#array)
* [code](#code)
* [collection](#collection)
* [conditional](#conditional)
* [fs](#fs)
* [html](#html)
* [index](#index)
* [math](#math)
* [object](#object)
* [path](#path)
* [string](#string)
- [Coverage](#coverage)
- [About](#about)## Install
Install with [npm](https://www.npmjs.com/):
```sh
$ npm install --save template-helpers
```## Usage
To get all helpers:
```js
const helpers = require('template-helpers')();
console.log(helpers);
```**Get a specific helper category**
```js
// get only the math helpers
const helpers = require('template-helpers')('math');
```**Get multiple helper categories**
```js
// get only the math helpers
const helpers = require('template-helpers')(['math', 'string']);
```### Template-engine agnostic
**Lo-Dash Example**
```js
const helpers = require('template-helpers')('array');// pass helpers on `imports`
const imports = { imports: helpers };// compile a template
const fn = _.template('<%= first(foo) %>', imports);// render
fn({ foo: ['a', 'b', 'c'] });
//=> 'a'
```### Namespacing
Handlebars and Lo-Dash both allow **dot notation** to be used for referencing helpers. I'd be happy to add examples for other engines if someone wants to do a PR.
**Example**
```js
<%= path.dirname("a/b/c/d.js") %>
```This can be used as a way of working around potential naming conflicts.
## Helpers
_(The following **API Table of Contents** is generated by [verb](https://github.com/verbose/verb). See the [verbfile.js](verbfile.js) for more details.)_
## Categories
Currently **101 helpers** in **10 categories**:
* **[array](#array)** ([code](lib/helpers/array.js) | [unit tests](test/array.js))
* **[code](#code)** ([code](lib/helpers/code.js) | [unit tests](test/code.js))
* **[collection](#collection)** ([code](lib/helpers/collection.js) | [unit tests](test/collection.js))
* **[conditional](#conditional)** ([code](lib/helpers/conditional.js) | [unit tests](test/conditional.js))
* **[fs](#fs)** ([code](lib/helpers/fs.js) | [unit tests](test/fs.js))
* **[html](#html)** ([code](lib/helpers/html.js) | [unit tests](test/html.js))
* **[math](#math)** ([code](lib/helpers/math.js) | [unit tests](test/math.js))
* **[object](#object)** ([code](lib/helpers/object.js) | [unit tests](test/object.js))
* **[path](#path)** ([code](lib/helpers/path.js) | [unit tests](test/path.js))
* **[string](#string)** ([code](lib/helpers/string.js) | [unit tests](test/string.js))## All helpers
### [array helpers](#array)
Visit the: [code](lib/helpers/array.js) | [unit tests](test/array.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+array+helpers))
* **[isArray](#isArray)** ([code](lib/helpers/array.js#L21) | [unit tests](test/array.js#L18))
* **[arrayify](#arrayify)** ([code](lib/helpers/array.js#L42) | [unit tests](test/array.js#L25))
* **[first](#first)** ([code](lib/helpers/array.js#L58) | [unit tests](test/array.js#L32))
* **[last](#last)** ([code](lib/helpers/array.js#L79) | [unit tests](test/array.js#L48))
* **[before](#before)** ([code](lib/helpers/array.js#L102) | [unit tests](test/array.js#L61))
* **[after](#after)** ([code](lib/helpers/array.js#L121) | [unit tests](test/array.js#L71))
* **[each](#each)** ([code](lib/helpers/array.js#L147) | [unit tests](test/array.js#L98))
* **[map](#map)** ([code](lib/helpers/array.js#L188) | [unit tests](test/array.js#L122))
* **[join](#join)** ([code](lib/helpers/array.js#L218) | [unit tests](test/array.js#L82))
* **[sort](#sort)** ([code](lib/helpers/array.js#L241) | [unit tests](test/array.js#L137))
* **[length](#length)** ([code](lib/helpers/array.js#L272) | [unit tests](test/array.js#L162))
* **[compact](#compact)** ([code](lib/helpers/array.js#L289) | [unit tests](test/array.js#L178))
* **[difference](#difference)** ([code](lib/helpers/array.js#L307) | [unit tests](test/array.js#L189))
* **[unique](#unique)** ([code](lib/helpers/array.js#L344) | [unit tests](test/array.js#L205))
* **[union](#union)** ([code](lib/helpers/array.js#L373) | [unit tests](test/array.js#L215))
* **[shuffle](#shuffle)** ([code](lib/helpers/array.js#L389) | [no tests])### [code helpers](#code)
Visit the: [code](lib/helpers/code.js) | [unit tests](test/code.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+code+helpers))
* **[embed](#embed)** ([code](lib/helpers/code.js#L23) | [unit tests](test/code.js#L33))
* **[jsfiddle](#jsfiddle)** ([code](lib/helpers/code.js#L45) | [unit tests](test/code.js#L24))### [collection helpers](#collection)
Visit the: [code](lib/helpers/collection.js) | [unit tests](test/collection.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+collection+helpers))
* **[any](#any)** ([code](lib/helpers/collection.js#L17) | [unit tests](test/collection.js#L17))
* **[filter](#filter)** ([code](lib/helpers/collection.js#L32) | [unit tests](test/collection.js#L34))### [conditional helpers](#conditional)
Visit the: [code](lib/helpers/conditional.js) | [unit tests](test/conditional.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+conditional+helpers))
* **[and](#and)** ([code](lib/helpers/conditional.js#L13) | [no tests])
* **[compare](#compare)** ([code](lib/helpers/conditional.js#L30) | [unit tests](test/conditional.js#L35))
* **[find](#find)** ([code](lib/helpers/conditional.js#L72) | [no tests])
* **[every](#every)** ([code](lib/helpers/conditional.js#L83) | [no tests])
* **[gt](#gt)** ([code](lib/helpers/conditional.js#L98) | [no tests])
* **[gte](#gte)** ([code](lib/helpers/conditional.js#L110) | [no tests])
* **[_if](#_if)** ([code](lib/helpers/conditional.js#L122) | [no tests])
* **[is](#is)** ([code](lib/helpers/conditional.js#L142) | [unit tests](test/conditional.js#L47))
* **[eq](#eq)** ([code](lib/helpers/conditional.js#L157) | [no tests])
* **[isnt](#isnt)** ([code](lib/helpers/conditional.js#L169) | [unit tests](test/conditional.js#L59))
* **[notEq](#notEq)** ([code](lib/helpers/conditional.js#L183) | [no tests])
* **[lt](#lt)** ([code](lib/helpers/conditional.js#L195) | [no tests])
* **[lte](#lte)** ([code](lib/helpers/conditional.js#L207) | [no tests])
* **[or](#or)** ([code](lib/helpers/conditional.js#L219) | [no tests])
* **[some](#some)** ([code](lib/helpers/conditional.js#L230) | [no tests])### [fs helpers](#fs)
Visit the: [code](lib/helpers/fs.js) | [unit tests](test/fs.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+fs+helpers))
* **[exists](#exists)** ([code](lib/helpers/fs.js#L16) | [unit tests](test/fs.js#L17))
* **[read](#read)** ([code](lib/helpers/fs.js#L29) | [unit tests](test/fs.js#L23))### [html helpers](#html)
Visit the: [code](lib/helpers/html.js) | [unit tests](test/html.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+html+helpers))
* **[escapeHtml](#escapeHtml)** ([code](lib/helpers/html.js#L18) | [unit tests](test/html.js#L17))
* **[sanitize](#sanitize)** ([code](lib/helpers/html.js#L46) | [unit tests](test/html.js#L27))### [math helpers](#math)
Visit the: [code](lib/helpers/math.js) | [unit tests](test/math.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+math+helpers))
* **[add](#add)** ([code](lib/helpers/math.js#L17) | [unit tests](test/math.js#L17))
* **[subtract](#subtract)** ([code](lib/helpers/math.js#L31) | [unit tests](test/math.js#L23))
* **[divide](#divide)** ([code](lib/helpers/math.js#L46) | [unit tests](test/math.js#L29))
* **[multiply](#multiply)** ([code](lib/helpers/math.js#L61) | [unit tests](test/math.js#L35))
* **[floor](#floor)** ([code](lib/helpers/math.js#L76) | [unit tests](test/math.js#L41))
* **[ceil](#ceil)** ([code](lib/helpers/math.js#L91) | [unit tests](test/math.js#L47))
* **[round](#round)** ([code](lib/helpers/math.js#L109) | [unit tests](test/math.js#L53))
* **[sum](#sum)** ([code](lib/helpers/math.js#L123) | [unit tests](test/math.js#L60))### [object helpers](#object)
Visit the: [code](lib/helpers/object.js) | [unit tests](test/object.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+object+helpers))
* **[fallback](#fallback)** ([code](lib/helpers/object.js#L22) | [unit tests](test/object.js#L18))
* **[stringify](#stringify)** ([code](lib/helpers/object.js#L36) | [unit tests](test/object.js#L26))
* **[parse](#parse)** ([code](lib/helpers/object.js#L50) | [unit tests](test/object.js#L33))
* **[get](#get)** ([code](lib/helpers/object.js#L65) | [no tests])
* **[keys](#keys)** ([code](lib/helpers/object.js#L79) | [unit tests](test/object.js#L64))
* **[isObject](#isObject)** ([code](lib/helpers/object.js#L97) | [unit tests](test/object.js#L40))
* **[isPlainObject](#isPlainObject)** ([code](lib/helpers/object.js#L117) | [unit tests](test/object.js#L48))
* **[hasOwn](#hasOwn)** ([code](lib/helpers/object.js#L129) | [unit tests](test/object.js#L57))
* **[omit](#omit)** ([code](lib/helpers/object.js#L144) | [unit tests](test/object.js#L98))
* **[forIn](#forIn)** ([code](lib/helpers/object.js#L163) | [unit tests](test/object.js#L70))
* **[forOwn](#forOwn)** ([code](lib/helpers/object.js#L188) | [unit tests](test/object.js#L84))
* **[extend](#extend)** ([code](lib/helpers/object.js#L205) | [unit tests](test/object.js#L105))
* **[merge](#merge)** ([code](lib/helpers/object.js#L241) | [unit tests](test/object.js#L132))### [path helpers](#path)
Visit the: [code](lib/helpers/path.js) | [unit tests](test/path.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+path+helpers))
* **[dirname](#dirname)** ([code](lib/helpers/path.js#L19) | [unit tests](test/path.js#L17))
* **[basename](#basename)** ([code](lib/helpers/path.js#L34) | [unit tests](test/path.js#L23))
* **[filename](#filename)** ([code](lib/helpers/path.js#L49) | [unit tests](test/path.js#L29))
* **[stem](#stem)** ([code](lib/helpers/path.js#L65) | [no tests])
* **[extname](#extname)** ([code](lib/helpers/path.js#L80) | [unit tests](test/path.js#L35))
* **[ext](#ext)** ([code](lib/helpers/path.js#L80) | [unit tests](test/path.js#L35))
* **[resolve](#resolve)** ([code](lib/helpers/path.js#L110) | [unit tests](test/path.js#L47))
* **[relative](#relative)** ([code](lib/helpers/path.js#L126) | [unit tests](test/path.js#L53))
* **[segments](#segments)** ([code](lib/helpers/path.js#L162) | [unit tests](test/path.js#L107))
* **[join](#join)** ([code](lib/helpers/path.js#L183) | [unit tests](test/path.js#L100))
* **[isAbsolute](#isAbsolute)** ([code](lib/helpers/path.js#L215) | [unit tests](test/path.js#L81))
* **[isRelative](#isRelative)** ([code](lib/helpers/path.js#L247) | [unit tests](test/path.js#L62))### [string helpers](#string)
Visit the: [code](lib/helpers/string.js) | [unit tests](test/string.js) | [issues](https://github.com/jonschlinkert/template-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+string+helpers))
* **[camelcase](#camelcase)** ([code](lib/helpers/string.js#L24) | [unit tests](test/string.js#L98))
* **[centerAlign](#centerAlign)** ([code](lib/helpers/string.js#L46) | [no tests])
* **[chop](#chop)** ([code](lib/helpers/string.js#L69) | [unit tests](test/string.js#L50))
* **[count](#count)** ([code](lib/helpers/string.js#L88) | [unit tests](test/string.js#L277))
* **[dotcase](#dotcase)** ([code](lib/helpers/string.js#L107) | [unit tests](test/string.js#L162))
* **[ellipsis](#ellipsis)** ([code](lib/helpers/string.js#L128) | [unit tests](test/string.js#L368))
* **[isString](#isString)** ([code](lib/helpers/string.js#L147) | [no tests])
* **[lower](#lower)** ([code](lib/helpers/string.js#L161) | [unit tests](test/string.js#L16))
* **[lowercase](#lowercase)** ([code](lib/helpers/string.js#L161) | [unit tests](test/string.js#L16))
* **[pascalcase](#pascalcase)** ([code](lib/helpers/string.js#L177) | [unit tests](test/string.js#L119))
* **[snakecase](#snakecase)** ([code](lib/helpers/string.js#L196) | [unit tests](test/string.js#L141))
* **[split](#split)** ([code](lib/helpers/string.js#L214) | [no tests])
* **[strip](#strip)** ([code](lib/helpers/string.js#L230) | [unit tests](test/string.js#L72))
* **[stripIndent](#stripIndent)** ([code](lib/helpers/string.js#L248) | [unit tests](test/string.js#L86))
* **[trim](#trim)** ([code](lib/helpers/string.js#L275) | [unit tests](test/string.js#L36))
* **[dashcase](#dashcase)** ([code](lib/helpers/string.js#L291) | [unit tests](test/string.js#L183))
* **[pathcase](#pathcase)** ([code](lib/helpers/string.js#L309) | [unit tests](test/string.js#L204))
* **[sentencecase](#sentencecase)** ([code](lib/helpers/string.js#L327) | [unit tests](test/string.js#L225))
* **[hyphenate](#hyphenate)** ([code](lib/helpers/string.js#L345) | [unit tests](test/string.js#L239))
* **[slugify](#slugify)** ([code](lib/helpers/string.js#L363) | [unit tests](test/string.js#L257))
* **[reverse](#reverse)** ([code](lib/helpers/string.js#L377) | [unit tests](test/string.js#L291))
* **[rightAlign](#rightAlign)** ([code](lib/helpers/string.js#L394) | [no tests])
* **[replace](#replace)** ([code](lib/helpers/string.js#L412) | [unit tests](test/string.js#L330))
* **[titleize](#titleize)** ([code](lib/helpers/string.js#Lundefined) | [no tests])
* **[titlecase](#titlecase)** ([code](lib/helpers/string.js#L433) | [unit tests](test/string.js#L348))
* **[truncate](#truncate)** ([code](lib/helpers/string.js#L451) | [unit tests](test/string.js#L358))
* **[upper](#upper)** ([code](lib/helpers/string.js#L467) | [unit tests](test/string.js#L26))
* **[uppercase](#uppercase)** ([code](lib/helpers/string.js#L467) | [unit tests](test/string.js#L26))
* **[wordwrap](#wordwrap)** ([code](lib/helpers/string.js#L484) | [unit tests](test/string.js#L300))### array
#### [isArray](lib/helpers/array.js#L21)
Returns true if `value` is an array.
**Params**
* `value` **{any}**: The value to test.
* `returns` **{Boolean}****Example**
```js
<%= isArray('a, b, c') %>
//=> 'false'<%= isArray(['a, b, c']) %>
//=> 'true'
```#### [arrayify](lib/helpers/array.js#L42)
Cast `val` to an array.
**Params**
* `val` **{any}**: The value to arrayify.
* `returns` **{Array}**: An array.
* `returns` **{Array}****Example**
```js
<%= arrayify('a') %>
//=> '["a"]'<%= arrayify({a: 'b'}) %>
//=> '[{a: "b"}]'<%= arrayify(['a']) %>
//=> '["a"]'
```#### [first](lib/helpers/array.js#L58)
Returns the first item, or first `n` items of an array.
**Params**
* `array` **{Array}**
* `n` **{Number}**: Number of items to return, starting at `0`.
* `returns` **{Array}****Example**
```js
<%= first(['a', 'b', 'c', 'd', 'e'], 2) %>
//=> '["a", "b"]'
```#### [last](lib/helpers/array.js#L79)
Returns the last item, or last `n` items of an array.
**Params**
* `array` **{Array}**
* `n` **{Number}**: Number of items to return, starting with the last item.
* `returns` **{Array}****Example**
```js
<%= last(['a', 'b', 'c', 'd', 'e'], 2) %>
//=> '["d", "e"]'
```#### [before](lib/helpers/array.js#L102)
Returns all of the items in an array up to the specified number Opposite of `<%= after() %`.
**Params**
* `array` **{Array}**
* `n` **{Number}**
* `returns` **{Array}**: Array excluding items after the given number.**Example**
```js
<%= before(['a', 'b', 'c'], 2) %>
//=> '["a", "b"]'
```#### [after](lib/helpers/array.js#L121)
Returns all of the items in an arry after the specified index. Opposite of `<%= before() %`.
**Params**
* `array` **{Array}**: Collection
* `n` **{Number}**: Starting index (number of items to exclude)
* `returns` **{Array}**: Array exluding `n` items.**Example**
```js
<%= after(['a', 'b', 'c'], 1) %>
//=> '["c"]'
```#### [each](lib/helpers/array.js#L147)
Calling `fn` on each element of the given `array` with the given `context`.
Assuming that `double` has been registered as a helper:
**Params**
* `array` **{Array}**
* `fn` **{String}**: The function to call on each element in the given array.
* `returns` **{String}****Examples**
```js
function double(str) {
return str + str;
}
``````js
<%= each(['a', 'b', 'c'], double, ctx) %>
//=> '["aa", "bb", "cc"]'
```#### [map](lib/helpers/array.js#L188)
Returns a new array, created by calling `function` on each element of the given `array`.
Assuming that `double` has been registered as a helper:
**Params**
* `array` **{Array}**
* `fn` **{String}**: The function to call on each element in the given array.
* `returns` **{String}****Examples**
```js
function double(str) {
return str + str;
}
``````js
<%= map(['a', 'b', 'c'], double) %>
//=> '["aa", "bb", "cc"]'
```#### [join](lib/helpers/array.js#L218)
Join all elements of array into a string, optionally using a given separator.
**Params**
* `array` **{Array}**
* `sep` **{String}**: The separator to use.
* `returns` **{String}****Example**
```js
<%= join(['a', 'b', 'c']) %>
//=> 'a, b, c'<%= join(['a', 'b', 'c'], '-') %>
//=> 'a-b-c'
```#### [sort](lib/helpers/array.js#L241)
Sort the given `array`. If an array of objects is passed, you may optionally pass a `key` to sort on as the second argument. You may alternatively pass a sorting function as the second argument.
**Params**
* `array` **{Array}**: the array to sort.
* `key` **{String|Function}**: The object key to sort by, or sorting function.**Example**
```js
<%= sort(["b", "a", "c"]) %>
//=> 'a,b,c'<%= sort([{a: "zzz"}, {a: "aaa"}], "a") %>
//=> '[{"a":"aaa"},{"a":"zzz"}]'
```#### [length](lib/helpers/array.js#L272)
Returns the length of the given array.
**Params**
* `array` **{Array}**
* `returns` **{Number}**: The length of the array.**Example**
```js
<%= length(['a', 'b', 'c']) %>
//=> 3
```#### [compact](lib/helpers/array.js#L289)
Returns an array with all falsey values removed.
**Params**
* `arr` **{Array}**
* `returns` **{Array}****Example**
```js
<%= compact([null, a, undefined, 0, false, b, c, '']) %>
//=> '["a", "b", "c"]'
```#### [difference](lib/helpers/array.js#L307)
Return the difference between the first array and additional arrays.
**Params**
* `array` **{Array}**: The array to compare againts.
* `arrays` **{Array}**: One or more additional arrays.
* `returns` **{Array}****Example**
```js
<%= difference(["a", "c"], ["a", "b"]) %>
//=> '["c"]'
```#### [unique](lib/helpers/array.js#L344)
Return an array, free of duplicate values.
**Params**
* `array` **{Array}**: The array to uniquify
* `returns` **{Array}**: Duplicate-free array**Example**
```js
<%= unique(['a', 'b', 'c', 'c']) %
=> '["a", "b", "c"]'
```#### [union](lib/helpers/array.js#L373)
Returns an array of unique values using strict equality for comparisons.
**Params**
* `arr` **{Array}**
* `returns` **{Array}****Example**
```js
<%= union(["a"], ["b"], ["c"]) %>
//=> '["a", "b", "c"]'
```#### [shuffle](lib/helpers/array.js#L389)
Shuffle the items in an array.
**Params**
* `arr` **{Array}**
* `returns` **{Array}****Example**
```js
<%= shuffle(["a", "b", "c"]) %>
//=> ["c", "a", "b"]
```### code
#### [embed](lib/helpers/code.js#L23)
Embed code from an external file as preformatted text.
**Params**
* `fp` **{String}**: filepath to the file to embed.
* `language` **{String}**: Optionally specify the language to use for syntax highlighting.
* `returns` **{String}****Example**
```js
<%= embed('path/to/file.js') %>// specify the language to use
<%= embed('path/to/file.hbs', 'html') %>
```#### [jsfiddle](lib/helpers/code.js#L45)
Generate the HTML for a jsFiddle link with the given `params`
**Params**
* `params` **{Object}**
* `returns` **{String}****Example**
```js
<%= jsfiddle({id: '0dfk10ks', {tabs: true}}) %>
```### collection
#### [any](lib/helpers/collection.js#L17)
Returns `true` if `value` exists in the given string, array
or object. See [any](https://github.com/jonschlinkert/any) for documentation.**Params**
* `value` **{any}**
* `target` **{any}**
* `options` **{Object}**#### [filter](lib/helpers/collection.js#L32)
Filter the given array or object to contain only the matching values.
**Params**
* `arr` **{Array}**
* `returns` **{Array}****Example**
```js
<%= filter(['foo', 'bar', 'baz']) %>
//=> '["a", "b", "c"]'
```### conditional
#### [and](lib/helpers/conditional.js#L13)
Returns true when both `valueA` and `valueB` are truthy.
**Params**
* `valueA` **{any}**
* `valueB` **{any}**
* `returns` **{Boolean}**#### [compare](lib/helpers/conditional.js#L30)
Render a block when a comparison of the first and third arguments returns true.
**Params**
* `valueA` **{String}**
* `operator` **{String}**: The operator to use for the comparison (must be a quoted string).
* `valueB` **{String}**
* `returns` **{Boolean}****Example**
```js
<%= compare("foo", "!==", "bar") %>
```#### [find](lib/helpers/conditional.js#L72)
Returns the first truthy value.
**Params**
* `...values` **{...args}**
* `returns` **{any}**#### [every](lib/helpers/conditional.js#L83)
Returns true when all provided values are truthy.
**Params**
* `...values` **{...any}**
* `returns` **{Boolean}**#### [gt](lib/helpers/conditional.js#L98)
Returns true when `valueA` is greater than `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [gte](lib/helpers/conditional.js#L110)
Returns true when `valueA` is greater than or equal to `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [_if](lib/helpers/conditional.js#L122)
Return true if `key` is an own, enumerable property
of the given `obj`.**Params**
* `object` **{Object}**
* `key` **{String}**
* `returns` **{Boolean}**#### [is](lib/helpers/conditional.js#L142)
Returns true when `valueA` equals `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `strict` **{String}**
* `returns` **{Boolean}**#### [eq](lib/helpers/conditional.js#L157)
Alias for [is](#is).
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `strict` **{String}**
* `returns` **{Boolean}**#### [isnt](lib/helpers/conditional.js#L169)
Returns true when `valueA` does not equal `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [notEq](lib/helpers/conditional.js#L183)
Alias for [isnt](#isnt).
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [lt](lib/helpers/conditional.js#L195)
Returns true when `valueA` is less than `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [lte](lib/helpers/conditional.js#L207)
Returns true when `valueA` is less than or equal to `valueB`.
**Params**
* `valueA` **{String}**
* `valueB` **{String}**
* `returns` **{Boolean}**#### [or](lib/helpers/conditional.js#L219)
Returns `valueA` if thruthy, otherwise `valueB`.
**Params**
* `valueA` **{any}**
* `valueB` **{any}**
* `returns` **{any}**#### [some](lib/helpers/conditional.js#L230)
Returns true when at least one value is truthy.
**Params**
* `...values` **{...any}**
* `returns` **{Boolean}**### fs
#### [exists](lib/helpers/fs.js#L16)
Return true if a file exists
**Params**
* `filepath` **{String}**: Path of the file to check.
* `returns` **{Boolean}**: True if the file exists**Example**
```js
<%= exists("foo.js") %>
```#### [read](lib/helpers/fs.js#L29)
Read a file from the file system and inject its content
**Params**
* `filepath` **{String}**: Path of the file to read.
* `returns` **{String}**: Contents of the given file.**Example**
```js
<%= read("foo.js") %>
```### html
#### [escapeHtml](lib/helpers/html.js#L18)
Escape HTML characters in a string.
**Params**
* `str` **{String}**: String of HTML with characters to escape.
* `returns` **{String}****Example**
```js
<%= escapeHtml("foo") %>
//=> <span>foo</span>
```#### [sanitize](lib/helpers/html.js#L46)
Strip HTML tags from a string, so that only the text nodes are preserved.
**Params**
* `str` **{String}**: The string of HTML to sanitize.
* `returns` **{String}****Example**
```js
<%= sanitize("foo") %>
//=> 'foo'
```### math
#### [add](lib/helpers/math.js#L17)
Return the product of `a` plus `b`.
**Params**
* `a` **{Number}**
* `b` **{Number}****Example**
```js
<%= add(1, 2) %>
//=> '3'
```#### [subtract](lib/helpers/math.js#L31)
Subtract `b` from `a`.
**Params**
* `a` **{Number}**
* `b` **{Number}****Example**
```js
<%= subtract(5, 2) %>
//=> '3'
```#### [divide](lib/helpers/math.js#L46)
Divide `a` (the numerator) by `b` (the divisor).
**Params**
* `a` **{Number}**: the numerator.
* `b` **{Number}**: the divisor.
* `returns` **{Number}**: The quotient of `a` divided by `b`.**Example**
```js
<%= divide(10, 2) %>
//=> '5'
```#### [multiply](lib/helpers/math.js#L61)
Multiply `a` by `b`.
**Params**
* `a` **{Number}**
* `b` **{Number}**
* `returns` **{Number}**: The product of `a` times `b`.**Example**
```js
<%= divide(10, 2) %>
//=> '5'
```#### [floor](lib/helpers/math.js#L76)
Returns the largest integer less than or equal to the given `number`.
**Params**
* `number` **{Number}**
* `returns` **{Number}****Example**
```js
<%= floor(10.6) %>
//=> '10'
```#### [ceil](lib/helpers/math.js#L91)
Returns the smallest integer greater than or equal to the given `number`.
**Params**
* `number` **{Number}**
* `returns` **{Number}****Example**
```js
<%= ceil(10.1) %>
//=> '11'
```#### [round](lib/helpers/math.js#L109)
Returns the value of the given `number` rounded to the nearest integer.
**Params**
* `number` **{Number}**
* `returns` **{Number}****Example**
```js
<%= round(10.1) %>
//=> '10'<%= round(10.5) %>
//=> '11'
```#### [sum](lib/helpers/math.js#L123)
Returns the sum of all numbers in the given array.
**Params**
* `number` **{Number}**
* `returns` **{Number}****Example**
```js
<%= sum([1, 2, 3, 4, 5]) %>
//=> '15'
```### object
#### [fallback](lib/helpers/object.js#L22)
Specify a fallback value to use when the desired value is undefined. Note that undefined variables that are _not object properties_ with throw an error.
**Params**
* `a` **{any}**: The desired value.
* `b` **{any}**: The fallback ("default") value
* `returns` **{any}**: Either `a` or `b`**Example**
```js
// when `title` is undefined, use the generic `site.title`
<%= fallback(page.title, site.title) %>
```#### [stringify](lib/helpers/object.js#L36)
Stringify an object using `JSON.stringify()`.
**Params**
* `object` **{Object}**
* `returns` **{String}****Example**
```js
<%= stringify({a: "a"}) %>
//=> '{"a":"a"}'
```#### [parse](lib/helpers/object.js#L50)
Parse a string into an object using `JSON.parse()`.
**Params**
* `str` **{String}**: The string to parse.
* `returns` **{Object}**: The parsed object.**Example**
```js
<%= parse('{"foo":"bar"}')["foo"] %>
//=> 'bar'
```#### [get](lib/helpers/object.js#L65)
Use property paths (`a.b.c`) get a nested value from an object.
**Params**
* `object` **{Object}**
* `path` **{String}**: Dot notation for the property to get.
* `returns` **{String}****Example**
```js
<%= get({a: {b: 'c'}}, 'a.b') %>
//=> 'c'
```#### [keys](lib/helpers/object.js#L79)
Returns an array of keys from the given `object`.
**Params**
* `object` **{Object}**
* `returns` **{Array}**: Keys from `object`**Example**
```js
<%= keys({a: 'b', c: 'd'}) %>
//=> '["a", "c"]'
```#### [isObject](lib/helpers/object.js#L97)
Return true if the given `value` is an object, and not `null` or an array.
**Params**
* `value` **{Object}**: The value to check.
* `returns` **{Boolean}****Example**
```js
<%= isObject(['a', 'b', 'c']) %>
//=> 'false'<%= isObject({a: 'b'}) %>
//=> 'true'
```#### [isPlainObject](lib/helpers/object.js#L117)
Return true if the given `value` is a plain object.
**Params**
* `value` **{Object}**: The value to check.
* `returns` **{Boolean}****Example**
```js
<%= isPlainObject(['a', 'b', 'c']) %>
//=> 'false'<%= isPlainObject({a: 'b'}) %>
//=> 'true'<%= isPlainObject(/foo/g) %>
//=> 'false'
```#### [hasOwn](lib/helpers/object.js#L129)
Return true if `key` is an own, enumerable property
of the given `obj`.**Params**
* `object` **{Object}**
* `key` **{String}**
* `returns` **{Boolean}**#### [omit](lib/helpers/object.js#L144)
Return a copy of `object` exclusing the given `keys`.
**Params**
* `object` **{Object}**: Object with keys to omit.
* `keys` **{String}**: Keys to omit.
* `returns` **{Boolean}****Example**
```js
<%= omit({a: 'a', b: 'b', c: 'c'}, ['a', 'c']) %>
//=> '{b: "b"}'
```#### [forIn](lib/helpers/object.js#L163)
Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`.
**Params**
* `object` **{Object}**: Object with keys to omit.
* `keys` **{String}**: Keys to omit.
* `returns` **{Boolean}****Example**
```js
const context = { values: { a: 'b', c: 'd' } };
const str = '<% forIn(values, function(val, key) { %><%= val %><% }) %>';
const fn = _.template(str, { imports: helpers });
assert.equal(fn(context), 'bd');
```#### [forOwn](lib/helpers/object.js#L188)
Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`
**Params**
* `object` **{Object}**: Object with keys to omit.
* `keys` **{String}**: Keys to omit.
* `returns` **{Boolean}****Example**
```js
const context = { values: { a: 'b', c: 'd' } };
const str = '<% forOwn(values, function(val, key) { %><%= key %><% }) %>';
const fn = _.template(str, { imports: helpers });
console.log(fn(context)) //=> 'ac'
```#### [extend](lib/helpers/object.js#L205)
Extend `o` with properties of other `objects`.
**Params**
* `o` **{Object}**: The target object. Pass an empty object to shallow clone.
* `objects` **{Object}**
* `returns` **{Object}**#### [merge](lib/helpers/object.js#L241)
Recursively combine the properties of `o` with the
properties of other `objects`.**Params**
* `o` **{Object}**: The target object. Pass an empty object to shallow clone.
* `objects` **{Object}**
* `returns` **{Object}**### path
#### [dirname](lib/helpers/path.js#L19)
Return the dirname for the given `filepath`. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns the directory part of the file path.**Example**
```js
<%= dirname("a/b/c/d") %>
//=> 'a/b/c'
```#### [basename](lib/helpers/path.js#L34)
Return the basename for the given `filepath`. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns the basename part of the file path.**Example**
```js
<%= basename("a/b/c/d.js") %>
//=> 'd.js'
```#### [filename](lib/helpers/path.js#L49)
Returns the filename for the given `filepath`, excluding extension. Aliased as `stem`.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns the file name part of the file path.**Example**
```js
<%= filename("a/b/c/d.js") %>
//=> 'd'
```#### [stem](lib/helpers/path.js#L65)
Alias for [filename](#filename).
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns the file name part of the file path.**Example**
```js
<%= stem("a/b/c/d.js") %>
//=> 'd'
```#### [extname](lib/helpers/path.js#L80)
Return the file extension for the given `filepath`. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns a file extension**Example**
```js
<%= extname("foo.js") %>
//=> '.js'
```#### [ext](lib/helpers/path.js#L95)
Return the file extension for the given `filepath`, excluding the `.`.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns a file extension without dot.**Example**
```js
<%= ext("foo.js") %>
//=> 'js'
```#### [resolve](lib/helpers/path.js#L110)
Resolves the given paths to an absolute path. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns a resolve**Example**
```js
<%= resolve('/foo/bar', './baz') %>
//=> '/foo/bar/baz'
```#### [relative](lib/helpers/path.js#L126)
Get the relative path from file `a` to file `b`. Typically `a` and `b` would be variables passed on the context. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `a` **{String}**: The "from" file path.
* `b` **{String}**: The "to" file path.
* `returns` **{String}**: Returns a relative path.**Example**
```js
<%= relative(a, b) %>
```#### [segments](lib/helpers/path.js#L162)
Get specific (joined) segments of a file path by passing a range of array indices.
**Params**
* `filepath` **{String}**: The file path to split into segments.
* `returns` **{String}**: Returns a single, joined file path.**Example**
```js
<%= segments("a/b/c/d", "2", "3") %>
//=> 'c/d'<%= segments("a/b/c/d", "1", "3") %>
//=> 'b/c/d'<%= segments("a/b/c/d", "1", "2") %>
//=> 'b/c'
```#### [join](lib/helpers/path.js#L183)
Join all arguments together and normalize the resulting `filepath`. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Note**: there is also a `join()` array helper, dot notation
can be used with helpers to differentiate. Example: `<%= path.join() %>`.**Params**
* `filepaths` **{String}**: List of file paths.
* `returns` **{String}**: Returns a single, joined file path.**Example**
```js
<%= join("a", "b") %>
//=> 'a/b'
```#### [isAbsolute](lib/helpers/path.js#L215)
Returns true if a file path is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns a resolve**Example**
```js
// posix
<%= isAbsolute('/foo/bar') %>
//=> 'true'
<%= isAbsolute('qux/') %>
//=> 'false'
<%= isAbsolute('.') %>
//=> 'false'// Windows
<%= isAbsolute('//server') %>
//=> 'true'
<%= isAbsolute('C:/foo/..') %>
//=> 'true'
<%= isAbsolute('bar\\baz') %>
//=> 'false'
<%= isAbsolute('.') %>
//=> 'false'
```#### [isRelative](lib/helpers/path.js#L247)
Returns true if a file path is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. Uses the node.js [path](https://nodejs.org/api/path.html) module.
**Params**
* `filepath` **{String}**
* `returns` **{String}**: Returns a resolve**Example**
```js
// posix
<%= isRelative('/foo/bar') %>
//=> 'false'
<%= isRelative('qux/') %>
//=> 'true'
<%= isRelative('.') %>
//=> 'true'// Windows
<%= isRelative('//server') %>
//=> 'false'
<%= isRelative('C:/foo/..') %>
//=> 'false'
<%= isRelative('bar\\baz') %>
//=> 'true'
<%= isRelative('.') %>
//=> 'true'
```### string
#### [camelcase](lib/helpers/string.js#L24)
camelCase the characters in `string`.
**Params**
* `string` **{String}**: The string to camelcase.
* `returns` **{String}****Example**
```js
<%= camelcase("foo bar baz") %>
//=> 'fooBarBaz'
```#### [centerAlign](lib/helpers/string.js#L46)
Center align the characters in a string using non-breaking spaces.
**Params**
* `str` **{String}**: The string to reverse.
* `returns` **{String}**: Centered string.**Example**
```js
<%= centerAlign("abc") %>
```#### [chop](lib/helpers/string.js#L69)
Like trim, but removes both extraneous whitespace and non-word characters from the beginning and end of a string.
**Params**
* `string` **{String}**: The string to chop.
* `returns` **{String}****Example**
```js
<%= chop("_ABC_") %>
//=> 'ABC'<%= chop("-ABC-") %>
//=> 'ABC'<%= chop(" ABC ") %>
//=> 'ABC'
```#### [count](lib/helpers/string.js#L88)
Count the number of occurrances of a substring within a string.
**Params**
* `string` **{String}**
* `substring` **{String}**
* `returns` **{Number}**: The occurances of `substring` in `string`**Example**
```js
<%= count("abcabcabc", "a") %>
//=> '3'
```#### [dotcase](lib/helpers/string.js#L107)
dot.case the characters in `string`.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= dotcase("a-b-c d_e") %>
//=> 'a.b.c.d.e'
```#### [ellipsis](lib/helpers/string.js#L128)
Truncate a string to the specified `length`, and append it with an elipsis, `…`.
**Params**
* `str` **{String}**
* `length` **{Number}**: The desired length of the returned string.
* `ch` **{String}**: Optionally pass custom characters to append. Default is `…`.
* `returns` **{String}**: The truncated string.**Example**
```js
<%= ellipsis("foo bar baz", 7) %>
//=> 'foo bar…'
```#### [isString](lib/helpers/string.js#L147)
Returns true if the value is a string.
**Params**
* `val` **{String}**
* `returns` **{Boolean}**: True if the value is a string.**Example**
```js
<%= isString('abc') %>
//=> 'true'<%= isString(null) %>
//=> 'false'
```#### [lowercase](lib/helpers/string.js#L161)
Lowercase the characters in the given `string`.
**Params**
* `string` **{String}**: The string to lowercase.
* `returns` **{String}****Example**
```js
<%= lowercase("ABC") %>
//=> 'abc'
```#### [pascalcase](lib/helpers/string.js#L177)
PascalCase the characters in `string`.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= pascalcase("foo bar baz") %>
//=> 'FooBarBaz'
```#### [snakecase](lib/helpers/string.js#L196)
snake_case the characters in `string`.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= snakecase("a-b-c d_e") %>
//=> 'a_b_c_d_e'
```#### [split](lib/helpers/string.js#L214)
Split `string` by the given `character`.
**Params**
* `string` **{String}**: The string to split.
* `returns` **{String}** `character`: Default is `,`**Example**
```js
<%= split("a,b,c", ",") %>
//=> ['a', 'b', 'c']
```#### [strip](lib/helpers/string.js#L230)
Strip `substring` from the given `string`.
**Params**
* `substring` **{String|RegExp}**: The string or regex pattern of the substring to remove.
* `string` **{String}**: The target string.**Example**
```js
<%= strip("foo-bar", "foo-") %>
//=> 'bar'
```#### [stripIndent](lib/helpers/string.js#L248)
Strip the indentation from a `string`.
**Params**
* `string` **{String}**: The string to strip indentation from.
* `returns` **{String}****Example**
```js
<%= stripIndent(" _ABC_") %>
//=> 'ABC'
```#### [trim](lib/helpers/string.js#L275)
Trim extraneous whitespace from the beginning and end of a string.
**Params**
* `string` **{String}**: The string to trim.
* `returns` **{String}****Example**
```js
<%= trim(" ABC ") %>
//=> 'ABC'
```#### [dashcase](lib/helpers/string.js#L291)
dash-case the characters in `string`. This is similar to [slugify](https://github.com/simov/slugify), but [slugify](https://github.com/simov/slugify) makes the string compatible to be used as a URL slug.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= dashcase("a b.c d_e") %>
//=> 'a-b-c-d-e'
```#### [pathcase](lib/helpers/string.js#L309)
path/case the characters in `string`.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= pathcase("a-b-c d_e") %>
//=> 'a/b/c/d/e'
```#### [sentencecase](lib/helpers/string.js#L327)
Sentence-case the characters in `string`.
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= sentencecase("foo bar baz.") %>
//=> 'Foo bar baz.'
```#### [hyphenate](lib/helpers/string.js#L345)
Replace spaces in a string with hyphens. This
**Params**
* `string` **{String}**
* `returns` **{String}****Example**
```js
<%= hyphenate("a b c") %>
//=> 'a-b-c'
```#### [reverse](lib/helpers/string.js#L377)
Reverse the characters in a string.
**Params**
* `str` **{String}**: The string to reverse.
* `returns` **{String}****Example**
```js
<%= reverse("abc") %>
//=> 'cba'
```#### [rightAlign](lib/helpers/string.js#L394)
Right align the characters in a string using non-breaking spaces.
**Params**
* `str` **{String}**: The string to reverse.
* `returns` **{String}**: Right-aligned string.**Example**
```js
<%= rightAlign(str) %>
```#### [replace](lib/helpers/string.js#L412)
Replace occurrences of `a` with `b`.
**Params**
* `str` **{String}**
* `a` **{String|RegExp}**: Can be a string or regexp.
* `b` **{String}**
* `returns` **{String}****Example**
```js
<%= replace("abcabc", /a/, "z") %>
//=> 'zbczbc'
```#### [titlecase](lib/helpers/string.js#L433)
Truncate a string by removing all HTML tags and limiting the result to the specified `length`.
**Params**
* `str` **{String}**
* `length` **{Number}**: The desired length of the returned string.
* `returns` **{String}**: The truncated string.**Example**
```js
<%= titlecase("big deal") %>
//=> 'foo bar'
```#### [truncate](lib/helpers/string.js#L451)
Truncate a string by removing all HTML tags and limiting the result to the specified `length`.
**Params**
* `str` **{String}**
* `length` **{Number}**: The desired length of the returned string.
* `returns` **{String}**: The truncated string.**Example**
```js
<%= truncate("foo bar baz", 7) %>
//=> 'foo bar'
```#### [uppercase](lib/helpers/string.js#L467)
Uppercase the characters in a string.
**Params**
* `string` **{String}**: The string to uppercase.
* `returns` **{String}****Example**
```js
<%= uppercase("abc") %>
//=> 'ABC'
```#### [wordwrap](lib/helpers/string.js#L484)
Wrap words to a specified width using [word-wrap](https://github.com/jonschlinkert/word-wrap).
**Params**
* `string` **{String}**: The string with words to wrap.
* `object` **{Options}**: Options to pass to [word-wrap](https://github.com/jonschlinkert/word-wrap)
* `returns` **{String}**: Formatted string.**Example**
```js
<%= wordwrap("a b c d e f", {width: 5, newline: '
'}) %>
//=> ' a b c
d e f'
```## Coverage
```
Statements : 94.61% ( 439/464 )
Branches : 88.37% ( 190/215 )
Functions : 96.94% ( 95/98 )
Lines : 94.42% ( 389/412 )
```## About
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
```sh
$ npm install && npm test
```Building docs
_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
To generate the readme, run the following command:
```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```### Related projects
You might also be interested in the following projects (also visit the [github.com/helpers](https://github.com/helpers), where you can find 60+ additional standalone helpers!):
* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit")
* [handlebars-helpers](https://www.npmjs.com/package/handlebars-helpers): More than 130 Handlebars helpers in ~20 categories. Helpers can be used with Assemble, Generate… [more](https://github.com/helpers/handlebars-helpers) | [homepage](https://github.com/helpers/handlebars-helpers "More than 130 Handlebars helpers in ~20 categories. Helpers can be used with Assemble, Generate, Verb, Ghost, gulp-handlebars, grunt-handlebars, consolidate, or any node.js/Handlebars project.")
* [templates](https://www.npmjs.com/package/templates): System for creating and managing template collections, and rendering templates with any node.js template engine… [more](https://github.com/jonschlinkert/templates) | [homepage](https://github.com/jonschlinkert/templates "System for creating and managing template collections, and rendering templates with any node.js template engine. Can be used as the basis for creating a static site generator or blog framework.")### Contributors
### Author
**Jon Schlinkert**
* [GitHub Profile](https://github.com/jonschlinkert)
* [Twitter Profile](https://twitter.com/jonschlinkert)
* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)### License
Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE).***
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on November 24, 2018._