
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
Recursively resolve templates in an object, string or array.
Install with npm:
$ npm install --save expand
Install with npm:
$ npm install --save expand
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
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.
expand({a: '<%= b %>', b: '<%= c %>', c: 'It worked!'});
//=> {a: 'It worked!', b: 'It worked!', c: 'It worked!'}
expand({a: {c: '<%= d %>'}, d: {f: 'g'}});
//=> {a: {c: {f: 'g'}}, d: {f: 'g'}};
expand(['<%= a %>'], {a: 'b'});
//=> ['b']
expand('<%= a %>', {a: 'b'});
//=> 'b'
expand(['<%= a %>', '<%= b %>'], {a: 'b', b: 'c'});
//=> ['b', 'c']
var data = {a: {b: {c: 'd'}}};
expand({foo: '<%= a.b.c %>'}, data);
//=> {foo: 'd'}
var data = {a: '<%= b %>', b: '<%= c %>', c: 'the end!'};
expand('<%= a %>', data);
//=> 'the end!'
var str = '<%= a %>/<%= b %>';
expand(str, {a: 'foo', b: 'bar'});
//=> 'foo/bar'
var data = {
a: {
c: '<%= d %>/<%= e %>'
},
d: 'ddd',
e: 'eee'
};
expand(data).a.c;
//=> 'ddd/eee'
var data = {
a: '<%= b %>/<%= c %>',
b: 'xxx',
c: '<%= y %>',
y: 'zzz'
};
expand('<%= a %>', data);
//=> 'xxx/zzz'
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.
var data = {a: 'bbb', c: 'ddd', e: 'fff'};
expand({foo: ':c/:e'}, data, {regex: /:([(\w ),]+)/});
//=> {foo: 'ddd/fff'}
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:
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.
var expand = require('expand');
var resolve = expand({regex: /:(\w+)/});
resolve(':a/:b', {a: 'foo', b: 'bar'});
//=> 'foo/bar'
a.b.c) to get a nested value from an object. | homepage'a.b.c') paths. | homepagePull 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:
$ 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:
$ npm install && npm test
Jon Schlinkert
Copyright © 2017, Jon Schlinkert. MIT
This file was generated by verb-generate-readme, v0.4.2, on February 09, 2017.
FAQs
Recursively resolve templates in an object, string or array.
The npm package expand receives a total of 2,064 weekly downloads. As such, expand popularity was classified as popular.
We found that expand demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.