Recursively resolve templates in an object, string or array.
npm install expand> Recursively resolve templates in an object, string or array.
Install with npm:
``sh`
$ npm install --save expand
Install with npm:
`sh`
$ npm install --save expand
`js
var expand = require('expand')();
expand({a: '<%= b %>', b: 'c'});
//=> {a: 'c', b: 'c'}
expand({a: '<%= b.c.d %>', b: {c: {d: 'eee'}}});
//=> {a: 'eee', b: {c: {d: 'eee' }}}
`
Params
`js`
expand(valueToExpand, dataToUse, options);
* value {String|Array|Object}: The value with templates to resolve.data
* {Object}: Pass the data to use for resolving templates. If the first argument is an object, this is optional.options
* {Object}: Pass the regex to use for matching templates.returns
* {any}: Returns a string, object or array based on what was passed.
Example
If an object is passed, only the first argument is strictly _necessary_.
`js`
expand({a: '<%= b %>', b: '<%= c %>', c: 'It worked!'});
//=> {a: 'It worked!', b: 'It worked!', c: 'It worked!'}
`js`
expand({a: {c: '<%= d %>'}, d: {f: 'g'}});
//=> {a: {c: {f: 'g'}}, d: {f: 'g'}};
`js`
expand(['<%= a %>'], {a: 'b'});
//=> ['b']
`js`
expand('<%= a %>', {a: 'b'});
//=> 'b'
`js`
expand(['<%= a %>', '<%= b %>'], {a: 'b', b: 'c'});
//=> ['b', 'c']
`js`
var data = {a: {b: {c: 'd'}}};
expand({foo: '<%= a.b.c %>'}, data);
//=> {foo: 'd'}
`js`
var data = {a: '<%= b %>', b: '<%= c %>', c: 'the end!'};
expand('<%= a %>', data);
//=> 'the end!'
`js`
var str = '<%= a %>/<%= b %>';
expand(str, {a: 'foo', b: 'bar'});
//=> 'foo/bar'
`js`
var data = {
a: {
c: '<%= d %>/<%= e %>'
},
d: 'ddd',
e: 'eee'
};
expand(data).a.c;
//=> 'ddd/eee'
`js`
var data = {
a: '<%= b %>/<%= c %>',
b: 'xxx',
c: '<%= y %>',
y: 'zzz'
};
expand('<%= a %>', data);
//=> 'xxx/zzz'
`js`
var ctx = {
foo: 'bar',
c: {
d: {
e: function (str) {
return str.toUpperCase();
}
}
}
};
expand('abc <%= c.d.e(foo) %> xyz', ctx);
//=> 'abc BAR xyz'
Options may be passed as the third argument. Currently options.regex is the only option.
`js`
var data = {a: 'bbb', c: 'ddd', e: 'fff'};
expand({foo: ':c/:e'}, data, {regex: /:([(\w ),]+)/});
//=> {foo: 'ddd/fff'}
`js
var data = {
a: {c: ':d/:e/:upper(f)'},
d: 'ddd',
e: 'eee',
f: 'foo',
upper: function (str) {
return str.toUpperCase();
}
};
var result = expand(data, data, {regex: /:([(\w ),]+)/});
console.log(result.a.c);
//=> 'ddd/eee/FOO'
`
Here are some great libs by other authors. My needs for expand differed enough to create a new library, but these are definitely worth a look:
* expander: Expand template strings in declarative configurations. | homepage
v0.2.0 - Breaking changes
The top-level export now returns a function that takes an options object, which then returns the function to use.
`js
var expand = require('expand');
var resolve = expand({regex: /:(\w+)/});
resolve(':a/:b', {a: 'foo', b: 'bar'});
//=> 'foo/bar'
`
* engine: Template engine based on Lo-Dash template, but adds features like the ability to register helpers… more | homepage
* expand-object: Expand a string into a JavaScript object using a simple notation. Use the CLI or… more | homepage
* get-value: Use property paths (a.b.c) to get a nested value from an object. | a.b.c'a.b.c'" class="text-primary hover:underline" target="_blank" rel="noopener noreferrer">homepage to get a nested value from an object.")
* glob-object: Filter an object using glob patterns and dot notation. | homepage
* set-value: Create nested values and any intermediaries using dot notation () paths. | 'a.b.c'" class="text-primary hover:underline" target="_blank" rel="noopener noreferrer">homepage paths.")
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
| Commits | Contributor |
| --- | --- |
| 64 | jonschlinkert |
| 9 | doowb |
_(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)_
To generate the readme, run the following command:
`sh`
$ npm install -g verbose/verb#dev verb-generate-readme && verb
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
Jon Schlinkert
* github/jonschlinkert
* twitter/jonschlinkert
Copyright © 2017, Jon Schlinkert.
MIT
*
_This file was generated by verb-generate-readme, v0.4.2, on February 09, 2017._