braces
Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.
Install
Install with npm:
$ npm install braces --save
Features
Example usage
var braces = require('braces');
braces('a/{x,y}/c{d}e')
braces('a/b/c/{x,y}')
braces('a/{x,{1..5},y}/c{d}e')
Use case: fixtures
Use braces to generate test fixtures!
Example
var braces = require('./');
var path = require('path');
var fs = require('fs');
braces('blah/{a..z}.js').forEach(function(fp) {
if (!fs.existsSync(path.dirname(fp))) {
fs.mkdirSync(path.dirname(fp));
}
fs.writeFileSync(fp, '');
});
See the tests for more examples and use cases (also see the bash spec tests);
Range expansion
Uses expand-range for range expansion.
braces('a{1..3}b')
braces('a{5..8}b')
braces('a{00..05}b')
braces('a{01..03}b')
braces('a{000..005}b')
braces('a{a..e}b')
braces('a{A..E}b')
Pass a function as the last argument to customize range expansions:
var range = braces('x{a..e}y', function (str, i) {
return String.fromCharCode(str) + i;
});
console.log(range);
See expand-range for benchmarks, tests and the full list of range expansion features.
Options
options.makeRe
Type: Boolean
Deafault: false
Return a regex-optimal string. If you're using braces to generate regex, this will result in dramatically faster performance.
Examples
With the default settings ({makeRe: false}
):
braces('{1..5}');
With {makeRe: true}
:
braces('{1..5}', {makeRe: true});
braces('{3..9..3}', {makeRe: true});
options.bash
Type: Boolean
Default: false
Enables complete support for the Bash specification. The downside is a 20-25% speed decrease.
Example
Using the default setting ({bash: false}
):
braces('a{b}c');
In bash (and minimatch), braces with one item are not expanded. To get the same result with braces, set {bash: true}
:
braces('a{b}c', {bash: true});
options.nodupes
Type: Boolean
Deafault: true
Duplicates are removed by default. To keep duplicates, pass {nodupes: false}
on the options
Bash 4.3 Support
Better support for Bash 4.3 than minimatch
This project has comprehensive unit tests, including tests coverted from Bash 4.3. Currently only 8 of 102 unit tests fail, and
Run benchmarks
Install dev dependencies:
npm i -d && npm benchmark
Latest results
brace-expansion.js x 114,934 ops/sec ±1.24% (93 runs sampled)
braces.js x 342,254 ops/sec ±0.84% (90 runs sampled)
brace-expansion.js x 12,359 ops/sec ±0.86% (96 runs sampled)
braces.js x 20,389 ops/sec ±0.71% (97 runs sampled)
brace-expansion.js x 114,469 ops/sec ±1.44% (94 runs sampled)
braces.js x 401,621 ops/sec ±0.87% (91 runs sampled)
brace-expansion.js x 102,769 ops/sec ±1.55% (92 runs sampled)
braces.js x 314,088 ops/sec ±0.71% (98 runs sampled)
brace-expansion.js x 157,577 ops/sec ±1.65% (91 runs sampled)
braces.js x 1,115,950 ops/sec ±0.74% (94 runs sampled)
brace-expansion.js x 138,822 ops/sec ±1.71% (91 runs sampled)
braces.js x 1,108,353 ops/sec ±0.85% (94 runs sampled)
Related projects
You might also be interested in these projects:
- expand-range: Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… more | homepage
- fill-range: Fill in a range of numbers or letters, optionally passing an increment or multiplier to… more | homepage
- micromatch: Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | homepage
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Building docs
Generate readme and API documentation with verb:
$ npm install verb && npm run docs
Or, if verb is installed globally:
$ verb
Running tests
Install dev dependencies:
$ npm install -d && npm test
Author
Jon Schlinkert
License
Copyright © 2016, Jon Schlinkert.
Released under the MIT license.
This file was generated by verb, v0.9.0, on May 21, 2016.