diff options
Diffstat (limited to 'node_modules/parse-glob')
| -rw-r--r-- | node_modules/parse-glob/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/parse-glob/README.md | 115 | ||||
| -rw-r--r-- | node_modules/parse-glob/index.js | 156 | ||||
| -rw-r--r-- | node_modules/parse-glob/package.json | 62 | 
4 files changed, 354 insertions, 0 deletions
diff --git a/node_modules/parse-glob/LICENSE b/node_modules/parse-glob/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/parse-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +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/parse-glob/README.md b/node_modules/parse-glob/README.md new file mode 100644 index 000000000..000ccd99c --- /dev/null +++ b/node_modules/parse-glob/README.md @@ -0,0 +1,115 @@ +# parse-glob [](http://badge.fury.io/js/parse-glob)  [](https://travis-ci.org/jonschlinkert/parse-glob) + +> Parse a glob pattern into an object of tokens. + +**Changes from v1.0.0 to v3.0.4** + +* all path-related properties are now on the `path` object +* all boolean properties are now on the `is` object +* adds `base` property + +See the [properties](#properties) section for details. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i parse-glob --save +``` + +* parses 1,000+ glob patterns in 29ms (2.3 GHz Intel Core i7) +* Extensive [unit tests](./test.js) (more than 1,000 lines), covering wildcards, globstars, character classes, brace patterns, extglobs, dotfiles and other complex patterns. + +See the tests for [hundreds of examples](./test.js). + +## Usage + +```js +var parseGlob = require('parse-glob'); +``` + +**Example** + +```js +parseGlob('a/b/c/**/*.{yml,json}'); +``` + +**Returns:** + +```js +{ orig: 'a/b/c/**/*.{yml,json}', +  is: +   { glob: true, +     negated: false, +     extglob: false, +     braces: true, +     brackets: false, +     globstar: true, +     dotfile: false, +     dotdir: false }, +  glob: '**/*.{yml,json}', +  base: 'a/b/c', +  path: +   { dirname: 'a/b/c/**/', +     basename: '*.{yml,json}', +     filename: '*', +     extname: '.{yml,json}', +     ext: '{yml,json}' } } +``` + +## Properties + +The object returned by parseGlob has the following properties: + +* `orig`: a copy of the original, unmodified glob pattern +* `is`: an object with boolean information about the glob: +  - `glob`: true if the pattern actually a glob pattern +  - `negated`: true if it's a negation pattern (`!**/foo.js`) +  - `extglob`: true if it has extglobs (`@(foo|bar)`) +  - `braces`: true if it has braces (`{1..2}` or `.{txt,md}`) +  - `brackets`: true if it has POSIX brackets (`[[:alpha:]]`) +  - `globstar`: true if the pattern has a globstar (double star, `**`) +  - `dotfile`: true if the pattern should match dotfiles +  - `dotdir`: true if the pattern should match dot-directories (like `.git`) +* `glob`: the glob pattern part of the string, if any +* `base`: the non-glob part of the string, if any +* `path`: file path segments +  - `dirname`: directory +  - `basename`: file name with extension +  - `filename`: file name without extension +  - `extname`: file extension with dot +  - `ext`: file extension without dot + +## Related +* [glob-base](https://www.npmjs.com/package/glob-base): Returns an object with the (non-glob) base path and the actual pattern. | [homepage](https://github.com/jonschlinkert/glob-base) +* [glob-parent](https://www.npmjs.com/package/glob-parent): Strips glob magic from a string to provide the parent path | [homepage](https://github.com/es128/glob-parent) +* [glob-path-regex](https://www.npmjs.com/package/glob-path-regex): Regular expression for matching the parts of glob pattern. | [homepage](https://github.com/regexps/glob-path-regex) +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern. | [homepage](https://github.com/jonschlinkert/is-glob) +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/parse-glob/issues/new). + +## Tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2014-2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 22, 2015._
\ No newline at end of file diff --git a/node_modules/parse-glob/index.js b/node_modules/parse-glob/index.js new file mode 100644 index 000000000..4ab691afc --- /dev/null +++ b/node_modules/parse-glob/index.js @@ -0,0 +1,156 @@ +/*! + * parse-glob <https://github.com/jonschlinkert/parse-glob> + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isGlob = require('is-glob'); +var findBase = require('glob-base'); +var extglob = require('is-extglob'); +var dotfile = require('is-dotfile'); + +/** + * Expose `cache` + */ + +var cache = module.exports.cache = {}; + +/** + * Parse a glob pattern into tokens. + * + * When no paths or '**' are in the glob, we use a + * different strategy for parsing the filename, since + * file names can contain braces and other difficult + * patterns. such as: + * + *  - `*.{a,b}` + *  - `(**|*.js)` + */ + +module.exports = function parseGlob(glob) { +  if (cache.hasOwnProperty(glob)) { +    return cache[glob]; +  } + +  var tok = {}; +  tok.orig = glob; +  tok.is = {}; + +  // unescape dots and slashes in braces/brackets +  glob = escape(glob); + +  var parsed = findBase(glob); +  tok.is.glob = parsed.isGlob; + +  tok.glob = parsed.glob; +  tok.base = parsed.base; +  var segs = /([^\/]*)$/.exec(glob); + +  tok.path = {}; +  tok.path.dirname = ''; +  tok.path.basename = segs[1] || ''; +  tok.path.dirname = glob.split(tok.path.basename).join('') || ''; +  var basename = (tok.path.basename || '').split('.') || ''; +  tok.path.filename = basename[0] || ''; +  tok.path.extname = basename.slice(1).join('.') || ''; +  tok.path.ext = ''; + +  if (isGlob(tok.path.dirname) && !tok.path.basename) { +    if (!/\/$/.test(tok.glob)) { +      tok.path.basename = tok.glob; +    } +    tok.path.dirname = tok.base; +  } + +  if (glob.indexOf('/') === -1 && !tok.is.globstar) { +    tok.path.dirname = ''; +    tok.path.basename = tok.orig; +  } + +  var dot = tok.path.basename.indexOf('.'); +  if (dot !== -1) { +    tok.path.filename = tok.path.basename.slice(0, dot); +    tok.path.extname = tok.path.basename.slice(dot); +  } + +  if (tok.path.extname.charAt(0) === '.') { +    var exts = tok.path.extname.split('.'); +    tok.path.ext = exts[exts.length - 1]; +  } + +  // unescape dots and slashes in braces/brackets +  tok.glob = unescape(tok.glob); +  tok.path.dirname = unescape(tok.path.dirname); +  tok.path.basename = unescape(tok.path.basename); +  tok.path.filename = unescape(tok.path.filename); +  tok.path.extname = unescape(tok.path.extname); + +  // Booleans +  var is = (glob && tok.is.glob); +  tok.is.negated  = glob && glob.charAt(0) === '!'; +  tok.is.extglob  = glob && extglob(glob); +  tok.is.braces   = has(is, glob, '{'); +  tok.is.brackets = has(is, glob, '[:'); +  tok.is.globstar = has(is, glob, '**'); +  tok.is.dotfile  = dotfile(tok.path.basename) || dotfile(tok.path.filename); +  tok.is.dotdir   = dotdir(tok.path.dirname); +  return (cache[glob] = tok); +} + +/** + * Returns true if the glob matches dot-directories. + * + * @param  {Object} `tok` The tokens object + * @param  {Object} `path` The path object + * @return {Object} + */ + +function dotdir(base) { +  if (base.indexOf('/.') !== -1) { +    return true; +  } +  if (base.charAt(0) === '.' && base.charAt(1) !== '/') { +    return true; +  } +  return false; +} + +/** + * Returns true if the pattern has the given `ch`aracter(s) + * + * @param  {Object} `glob` The glob pattern. + * @param  {Object} `ch` The character to test for + * @return {Object} + */ + +function has(is, glob, ch) { +  return is && glob.indexOf(ch) !== -1; +} + +/** + * Escape/unescape utils + */ + +function escape(str) { +  var re = /\{([^{}]*?)}|\(([^()]*?)\)|\[([^\[\]]*?)\]/g; +  return str.replace(re, function (outter, braces, parens, brackets) { +    var inner = braces || parens || brackets; +    if (!inner) { return outter; } +    return outter.split(inner).join(esc(inner)); +  }); +} + +function esc(str) { +  str = str.split('/').join('__SLASH__'); +  str = str.split('.').join('__DOT__'); +  return str; +} + +function unescape(str) { +  str = str.split('__SLASH__').join('/'); +  str = str.split('__DOT__').join('.'); +  return str; +} diff --git a/node_modules/parse-glob/package.json b/node_modules/parse-glob/package.json new file mode 100644 index 000000000..a4acb5236 --- /dev/null +++ b/node_modules/parse-glob/package.json @@ -0,0 +1,62 @@ +{ +  "name": "parse-glob", +  "description": "Parse a glob pattern into an object of tokens.", +  "version": "3.0.4", +  "homepage": "https://github.com/jonschlinkert/parse-glob", +  "author": "Jon Schlinkert (https://github.com/jonschlinkert)", +  "repository": "jonschlinkert/parse-glob", +  "bugs": { +    "url": "https://github.com/jonschlinkert/parse-glob/issues" +  }, +  "license": "MIT", +  "files": [ +    "index.js" +  ], +  "main": "index.js", +  "engines": { +    "node": ">=0.10.0" +  }, +  "scripts": { +    "test": "mocha", +    "prepublish": "browserify -o browser.js -e index.js" +  }, +  "dependencies": { +    "glob-base": "^0.3.0", +    "is-dotfile": "^1.0.0", +    "is-extglob": "^1.0.0", +    "is-glob": "^2.0.0" +  }, +  "devDependencies": { +    "browserify": "^9.0.3", +    "lodash": "^3.3.1", +    "mocha": "*" +  }, +  "keywords": [ +    "glob", +    "match", +    "bash", +    "expand", +    "expansion", +    "expression", +    "file", +    "files", +    "filter", +    "find", +    "glob", +    "globbing", +    "globs", +    "globstar", +    "match", +    "matcher", +    "matches", +    "matching", +    "path", +    "pattern", +    "patterns", +    "regex", +    "regexp", +    "regular", +    "shell", +    "wildcard" +  ] +}  | 
