expand-path
Version:
Super light-weight brace expansion for node
77 lines (53 loc) • 2.84 kB
Markdown
[](https://travis-ci.org/tandrewnichols/expand-path) [](https://npmjs.org/package/expand-path) [](https://npmjs.org/package/expand-path) [](https://codeclimate.com/github/tandrewnichols/expand-path) [](https://codeclimate.com/github/tandrewnichols/expand-path) [](https://david-dm.org/tandrewnichols/expand-path) 
Super light-weight brace expansion for node
`npm install --save expand-path`
Pass in a path with brackets, braces, or angled brackets and get an array of matching paths back.
You can use `expand-path` to get a list of object paths (e.g. for use with lodash `_.get`) or with file paths. `expand-path` doesn't care about the separator (or even check what it is). It just expands a "path" with brackets into multiple paths (essentially a cartesian product of the possible paths).
### Node
```js
var expand = require('expand-path');
```
Use whatever serving mechanism you prefer and serve `dist/expand-path.js` or `dist/expand-path.min.js`, then access it globally with `expandPath`.
```html
<script src="/dist/expand-path.js"></script>
<script>
var paths = expandPath('foo.ba[r,z]');
</script>
```
This script is a measly 1.1kb minified.
```js
var expand = require('expand-path');
var list = expand('foo.bar.[baz,quux].[hello,goodbye].world');
/*
* "list" equals:
* [
* 'foo.bar.baz.hello.world',
* 'foo.bar.quux.hello.world',
* 'foo.bar.baz.goodbye.world',
* 'foo.bar.quux.goodbye.world'
* ]
*/
```
```js
var expand = require('expand-path');
var list = expand('foo/bar/[baz,quux]/hello/world[.js,-spec.coffee]');
/*
* "list" equals:
* [
* 'foo/bar/baz/hello/world.js',
* 'foo/bar/quux/hello/world.js',
* 'foo/bar/baz/hello/world-spec.coffee',
* 'foo/bar/quux/hello/world-spec.coffee'
* ]
*/
```
Note that `expand-path` does not do any disk I/O. It does not read in these file paths or check that they exist. All it does is expand brackets into a list of paths. There are plenty of other modules that can make use of a list of paths (`async`, in combination with `fs` is enough).
## Contributing
I'll be happy to merge any pull request that adds value and has passing tests. Be sure to add a test both for node and for the browser. Tests are run with `grunt`.