Reverse templating library for mustache, generating variables from a template's output
This was created to explore the untapped reverse templating domain. It was initially inspired by @laktek's extract-values
library.
reverseMustache({
template: 'hello {{#place}}world{{/place}}',
content: 'hello world'
});
// {world: true}
Install the module with: npm install reverse-mustache
var reverseMustache = require('reverse-mustache');
reverseMustache({
template: 'hello {{#place}}world{{/place}}',
content: 'hello world'
});
/*
{
place: true
}
*/
Foreword: The current implementation is quick and dirty to see if the project was possible.
reverse-mustache
exposes the reverseMustache
function as its module.exports
.
reverseMustache(params)
Reverse template output into its original variables
Object
, container for function parameters
String
, template used to generate outputString
, output to reverse/extract variables fromObject|Function
, container or function that returns partial templates
String[]
, 2 item array containing opening and closing tags
Returns:
If reverseMustache
cannot resolve variables that match the output, then it will return null
.
If the match is successful, it will return an object context
.
Object
, container for state of template
Object
, key-value pairs representing original data[x] Reverse text nodes
[x] Reverse boolean conditionals
[x] Reverse escaped variables
[x] Reverse unescaped variables
[x] Reverse for loops
[x] Re-use variables / prevent contradictions
[x] Reverse nested objects/nested paths
[x] Reverse inverted conditionals
[x] Handle comments
[x] Handle partials
[x] Handle alternative open/close tags
Below are some examples of using reverseMustache
This is an example where we have a variable in our template
reverseMustache({
template: 'hello {{place}}',
content: 'hello moon'
});
// {place: 'moon'}
This is an example using an object containing partials
reverseMustache({
template: 'hello {{> place}}',
content: 'hello moon'
partials: {
place: '{{name}}'
}
});
// {place: {name: 'moon'}}
This is an example using an alternative open/close tags
reverseMustache({
template: 'hello <%=place%>',
content: 'hello moon'
});
// {place: 'moon'}
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via grunt and test via npm test
.
Support this project and others by twolfson via gittip.
As of Mar 23 2014, Todd Wolfson has released this repository and its contents to the public domain.
It has been released under the UNLICENSE.