diff options
Diffstat (limited to 'node_modules/brace-expansion')
| -rw-r--r-- | node_modules/brace-expansion/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/brace-expansion/README.md | 129 | ||||
| -rw-r--r-- | node_modules/brace-expansion/index.js | 201 | ||||
| -rw-r--r-- | node_modules/brace-expansion/package.json | 47 | 
4 files changed, 398 insertions, 0 deletions
diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 0000000..de32266 --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..6b4e0e1 --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,129 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),  +as known from sh/bash, in JavaScript. + +[](http://travis-ci.org/juliangruber/brace-expansion) +[](https://www.npmjs.org/package/brace-expansion) +[](https://greenkeeper.io/) + +[](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..0478be8 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,201 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { +  return parseInt(str, 10) == str +    ? parseInt(str, 10) +    : str.charCodeAt(0); +} + +function escapeBraces(str) { +  return str.split('\\\\').join(escSlash) +            .split('\\{').join(escOpen) +            .split('\\}').join(escClose) +            .split('\\,').join(escComma) +            .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { +  return str.split(escSlash).join('\\') +            .split(escOpen).join('{') +            .split(escClose).join('}') +            .split(escComma).join(',') +            .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { +  if (!str) +    return ['']; + +  var parts = []; +  var m = balanced('{', '}', str); + +  if (!m) +    return str.split(','); + +  var pre = m.pre; +  var body = m.body; +  var post = m.post; +  var p = pre.split(','); + +  p[p.length-1] += '{' + body + '}'; +  var postParts = parseCommaParts(post); +  if (post.length) { +    p[p.length-1] += postParts.shift(); +    p.push.apply(p, postParts); +  } + +  parts.push.apply(parts, p); + +  return parts; +} + +function expandTop(str) { +  if (!str) +    return []; + +  // I don't know why Bash 4.3 does this, but it does. +  // Anything starting with {} will have the first two bytes preserved +  // but *only* at the top level, so {},a}b will not expand to anything, +  // but a{},b}c will be expanded to [a}c,abc]. +  // One could argue that this is a bug in Bash, but since the goal of +  // this module is to match Bash's rules, we escape a leading {} +  if (str.substr(0, 2) === '{}') { +    str = '\\{\\}' + str.substr(2); +  } + +  return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { +  return e; +} + +function embrace(str) { +  return '{' + str + '}'; +} +function isPadded(el) { +  return /^-?0\d/.test(el); +} + +function lte(i, y) { +  return i <= y; +} +function gte(i, y) { +  return i >= y; +} + +function expand(str, isTop) { +  var expansions = []; + +  var m = balanced('{', '}', str); +  if (!m || /\$$/.test(m.pre)) return [str]; + +  var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); +  var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); +  var isSequence = isNumericSequence || isAlphaSequence; +  var isOptions = m.body.indexOf(',') >= 0; +  if (!isSequence && !isOptions) { +    // {a},b} +    if (m.post.match(/,.*\}/)) { +      str = m.pre + '{' + m.body + escClose + m.post; +      return expand(str); +    } +    return [str]; +  } + +  var n; +  if (isSequence) { +    n = m.body.split(/\.\./); +  } else { +    n = parseCommaParts(m.body); +    if (n.length === 1) { +      // x{{a,b}}y ==> x{a}y x{b}y +      n = expand(n[0], false).map(embrace); +      if (n.length === 1) { +        var post = m.post.length +          ? expand(m.post, false) +          : ['']; +        return post.map(function(p) { +          return m.pre + n[0] + p; +        }); +      } +    } +  } + +  // at this point, n is the parts, and we know it's not a comma set +  // with a single entry. + +  // no need to expand pre, since it is guaranteed to be free of brace-sets +  var pre = m.pre; +  var post = m.post.length +    ? expand(m.post, false) +    : ['']; + +  var N; + +  if (isSequence) { +    var x = numeric(n[0]); +    var y = numeric(n[1]); +    var width = Math.max(n[0].length, n[1].length) +    var incr = n.length == 3 +      ? Math.abs(numeric(n[2])) +      : 1; +    var test = lte; +    var reverse = y < x; +    if (reverse) { +      incr *= -1; +      test = gte; +    } +    var pad = n.some(isPadded); + +    N = []; + +    for (var i = x; test(i, y); i += incr) { +      var c; +      if (isAlphaSequence) { +        c = String.fromCharCode(i); +        if (c === '\\') +          c = ''; +      } else { +        c = String(i); +        if (pad) { +          var need = width - c.length; +          if (need > 0) { +            var z = new Array(need + 1).join('0'); +            if (i < 0) +              c = '-' + z + c.slice(1); +            else +              c = z + c; +          } +        } +      } +      N.push(c); +    } +  } else { +    N = concatMap(n, function(el) { return expand(el, false) }); +  } + +  for (var j = 0; j < N.length; j++) { +    for (var k = 0; k < post.length; k++) { +      var expansion = pre + N[j] + post[k]; +      if (!isTop || isSequence || expansion) +        expansions.push(expansion); +    } +  } + +  return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..a18faa8 --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,47 @@ +{ +  "name": "brace-expansion", +  "description": "Brace expansion as known from sh/bash", +  "version": "1.1.11", +  "repository": { +    "type": "git", +    "url": "git://github.com/juliangruber/brace-expansion.git" +  }, +  "homepage": "https://github.com/juliangruber/brace-expansion", +  "main": "index.js", +  "scripts": { +    "test": "tape test/*.js", +    "gentest": "bash test/generate.sh", +    "bench": "matcha test/perf/bench.js" +  }, +  "dependencies": { +    "balanced-match": "^1.0.0", +    "concat-map": "0.0.1" +  }, +  "devDependencies": { +    "matcha": "^0.7.0", +    "tape": "^4.6.0" +  }, +  "keywords": [], +  "author": { +    "name": "Julian Gruber", +    "email": "mail@juliangruber.com", +    "url": "http://juliangruber.com" +  }, +  "license": "MIT", +  "testling": { +    "files": "test/*.js", +    "browsers": [ +      "ie/8..latest", +      "firefox/20..latest", +      "firefox/nightly", +      "chrome/25..latest", +      "chrome/canary", +      "opera/12..latest", +      "opera/next", +      "safari/5.1..latest", +      "ipad/6.0..latest", +      "iphone/6.0..latest", +      "android-browser/4.2..latest" +    ] +  } +}  | 
