## Usage ```js const renderLayouts = require('{%= name %}'); renderLayouts(file, layoutCollection, options); ``` - `file` - a file object (or [vinyl] file) with a `file.contents` property that must be a buffer - `layoutCollection` - an object of file objects to use as layouts - `options` - see [available options](#options) ## Heads up! This library does not clone the file object. If you want to prevent `file.contents` from being mutated (after rendering layouts), clone the file first before passing it to this library. ## Example ```js const renderLayouts = require('{%= name %}'); const file = { contents: Buffer.from('
Wrap me with a layout!!!
'), layout: 'one' }; const layoutCollection = { one: { contents: Buffer.from('one before\n{%% body %}\none after'), layout: 'two' }, two: { contents: Buffer.from('two before\n{%% body %}\ntwo after') } }; const res = renderLayouts(file, layoutCollection); console.log(res.contents.toString()); // two before // one before //
Wrap me with a layout!!!
// one after // two after ``` ## Options ### options.disableHistory **Type**: `boolean` **Default**: `undefined` By default, layouts are prevented from being applied multiple times to the same string. Disable this by setting `disableHistory` to true. **Example** ```js layouts(file, layoutCollection, { disableHistory: true }); ``` ### options.layoutDelims Custom delimiters to use for injecting contents into layouts. **Type**: `regex` **Default**: `/{%% (body) %}/g` ### options.preserveWhitespace Preserve leading whitespace when injecting a string into a layout. **Type**: `boolean` **Default**: `undefined` ## API {%= apidocs("index.js") %} ## History ### 1.0.0 **Breaking changes** - renames `layoutHistory` to `layoutStack` - layouts in `layoutStack` are now the actual layout object, instead of the layout name **Added** - Adds support for a function as the last argument. If passed, the function is called on the file and each layout with this signature: `fn(file, layout)`. ### 0.13.0 **Breaking changes** - The main `layouts()` function now expects a `file` object as the first argument. This can be an object with `path`, `layout` and `contents` properties, or a valid [vinyl][] file. See the [API docs](#api) for more details. ### 0.12.0 **Breaking changes** - change `options.tag` to `options.contentTag` **Housekeeping** - update tests to use `assert` instead of `should` ### 0.11.0 - All view objects must now have a `path` property, following [vinyl][] conventions.