Update node modules
This commit is contained in:
parent
5d90c176a4
commit
5f1ec50e0b
1
node_modules/.bin/grunt
generated
vendored
Symbolic link
1
node_modules/.bin/grunt
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../grunt-cli/bin/grunt
|
5
node_modules/dblite/package.json
generated
vendored
5
node_modules/dblite/package.json
generated
vendored
@ -39,7 +39,7 @@
|
|||||||
},
|
},
|
||||||
"_id": "dblite@0.6.1",
|
"_id": "dblite@0.6.1",
|
||||||
"_shasum": "18e6d3811f4031ff0119e8a7b13ef1558215376a",
|
"_shasum": "18e6d3811f4031ff0119e8a7b13ef1558215376a",
|
||||||
"_from": "dblite@",
|
"_from": "dblite@^0.6.1",
|
||||||
"_npmVersion": "1.4.9",
|
"_npmVersion": "1.4.9",
|
||||||
"_npmUser": {
|
"_npmUser": {
|
||||||
"name": "webreflection",
|
"name": "webreflection",
|
||||||
@ -56,5 +56,6 @@
|
|||||||
"tarball": "http://registry.npmjs.org/dblite/-/dblite-0.6.1.tgz"
|
"tarball": "http://registry.npmjs.org/dblite/-/dblite-0.6.1.tgz"
|
||||||
},
|
},
|
||||||
"directories": {},
|
"directories": {},
|
||||||
"_resolved": "https://registry.npmjs.org/dblite/-/dblite-0.6.1.tgz"
|
"_resolved": "https://registry.npmjs.org/dblite/-/dblite-0.6.1.tgz",
|
||||||
|
"readme": "ERROR: No README data found!"
|
||||||
}
|
}
|
||||||
|
3
node_modules/grunt-cli/.npmignore
generated
vendored
Normal file
3
node_modules/grunt-cli/.npmignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
tmp
|
4
node_modules/grunt-cli/.travis.yml
generated
vendored
Normal file
4
node_modules/grunt-cli/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "0.8"
|
||||||
|
- "0.10"
|
4
node_modules/grunt-cli/AUTHORS
generated
vendored
Normal file
4
node_modules/grunt-cli/AUTHORS
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Tyler Kellen (http://goingslowly.com)
|
||||||
|
Ben Alman (http://gruntjs.com)
|
||||||
|
Scott González (http://nemikor.com)
|
||||||
|
Forbes Lindesay (https://github.com/)
|
49
node_modules/grunt-cli/Gruntfile.js
generated
vendored
Normal file
49
node_modules/grunt-cli/Gruntfile.js
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* grunt-cli
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-init/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
// Project configuration.
|
||||||
|
grunt.initConfig({
|
||||||
|
jshint: {
|
||||||
|
all: [
|
||||||
|
'Gruntfile.js',
|
||||||
|
'lib/**/*.js',
|
||||||
|
'bin/*',
|
||||||
|
],
|
||||||
|
options: {
|
||||||
|
curly: true,
|
||||||
|
eqeqeq: true,
|
||||||
|
immed: true,
|
||||||
|
latedef: true,
|
||||||
|
newcap: true,
|
||||||
|
noarg: true,
|
||||||
|
sub: true,
|
||||||
|
undef: true,
|
||||||
|
unused: true,
|
||||||
|
boss: true,
|
||||||
|
eqnull: true,
|
||||||
|
node: true,
|
||||||
|
es5: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// These plugins provide necessary tasks.
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||||
|
|
||||||
|
// "npm test" runs these tasks
|
||||||
|
grunt.registerTask('test', ['jshint']);
|
||||||
|
|
||||||
|
// Default task.
|
||||||
|
grunt.registerTask('default', ['test']);
|
||||||
|
|
||||||
|
};
|
22
node_modules/grunt-cli/LICENSE-MIT
generated
vendored
Normal file
22
node_modules/grunt-cli/LICENSE-MIT
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
|
||||||
|
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.
|
30
node_modules/grunt-cli/README.md
generated
vendored
Normal file
30
node_modules/grunt-cli/README.md
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# grunt-cli [![Build Status](https://secure.travis-ci.org/gruntjs/grunt-cli.png?branch=master)](http://travis-ci.org/gruntjs/grunt-cli)
|
||||||
|
> The Grunt command line interface.
|
||||||
|
|
||||||
|
Install this globally and you'll have access to the `grunt` command anywhere on your system.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm install -g grunt-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** The job of the `grunt` command is to load and run the version of Grunt you have installed locally to your project, irrespective of its version. Starting with Grunt v0.4, you should never install Grunt itself globally. For more information about why, [please read this](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation).
|
||||||
|
|
||||||
|
See the [Getting Started](http://gruntjs.com/getting-started) guide for more information.
|
||||||
|
|
||||||
|
## Shell tab auto-completion
|
||||||
|
To enable tab auto-completion for Grunt, add one of the following lines to your `~/.bashrc` or `~/.zshrc` file.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Bash, ~/.bashrc
|
||||||
|
eval "$(grunt --completion=bash)"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Zsh, ~/.zshrc
|
||||||
|
eval "$(grunt --completion=zsh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installing grunt-cli locally
|
||||||
|
If you prefer the idiomatic Node.js method to get started with a project (`npm install && npm test`) then install grunt-cli locally with `npm install grunt-cli --save-dev`. Then add a script to your `package.json` to run the associated grunt command: `"scripts": { "test": "grunt test" } `. Now `npm test` will use the locally installed `./node_modules/.bin/grunt` executable to run your Grunt commands.
|
||||||
|
|
||||||
|
To read more about npm scripts, please visit the npm docs: [https://npmjs.org/doc/misc/npm-scripts.html](https://npmjs.org/doc/misc/npm-scripts.html).
|
45
node_modules/grunt-cli/bin/grunt
generated
vendored
Executable file
45
node_modules/grunt-cli/bin/grunt
generated
vendored
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
process.title = 'grunt';
|
||||||
|
|
||||||
|
// Especially badass external libs.
|
||||||
|
var findup = require('findup-sync');
|
||||||
|
var resolve = require('resolve').sync;
|
||||||
|
|
||||||
|
// Internal libs.
|
||||||
|
var options = require('../lib/cli').options;
|
||||||
|
var completion = require('../lib/completion');
|
||||||
|
var info = require('../lib/info');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
|
||||||
|
var basedir = process.cwd();
|
||||||
|
var gruntpath;
|
||||||
|
|
||||||
|
// Do stuff based on CLI options.
|
||||||
|
if ('completion' in options) {
|
||||||
|
completion.print(options.completion);
|
||||||
|
} else if (options.version) {
|
||||||
|
info.version();
|
||||||
|
} else if (options.base && !options.gruntfile) {
|
||||||
|
basedir = path.resolve(options.base);
|
||||||
|
} else if (options.gruntfile) {
|
||||||
|
basedir = path.resolve(path.dirname(options.gruntfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
gruntpath = resolve('grunt', {basedir: basedir});
|
||||||
|
} catch (ex) {
|
||||||
|
gruntpath = findup('lib/grunt.js');
|
||||||
|
// No grunt install found!
|
||||||
|
if (!gruntpath) {
|
||||||
|
if (options.version) { process.exit(); }
|
||||||
|
if (options.help) { info.help(); }
|
||||||
|
info.fatal('Unable to find local grunt.', 99);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Everything looks good. Require local grunt and run it.
|
||||||
|
require(gruntpath).cli();
|
49
node_modules/grunt-cli/completion/bash
generated
vendored
Executable file
49
node_modules/grunt-cli/completion/bash
generated
vendored
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# grunt-cli
|
||||||
|
# http://gruntjs.com/
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
# Licensed under the MIT license.
|
||||||
|
# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# To enable bash <tab> completion for grunt, add the following line (minus the
|
||||||
|
# leading #, which is the bash comment character) to your ~/.bashrc file:
|
||||||
|
#
|
||||||
|
# eval "$(grunt --completion=bash)"
|
||||||
|
|
||||||
|
# Search the current directory and all parent directories for a gruntfile.
|
||||||
|
function _grunt_gruntfile() {
|
||||||
|
local curpath="$PWD"
|
||||||
|
while [[ "$curpath" ]]; do
|
||||||
|
for gruntfile in "$curpath/"{G,g}runtfile.{js,coffee}; do
|
||||||
|
if [[ -e "$gruntfile" ]]; then
|
||||||
|
echo "$gruntfile"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
curpath="${curpath%/*}"
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable bash autocompletion.
|
||||||
|
function _grunt_completions() {
|
||||||
|
# The currently-being-completed word.
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
# The current gruntfile, if it exists.
|
||||||
|
local gruntfile="$(_grunt_gruntfile)"
|
||||||
|
# The current grunt version, available tasks, options, etc.
|
||||||
|
local gruntinfo="$(grunt --version --verbose 2>/dev/null)"
|
||||||
|
# Options and tasks.
|
||||||
|
local opts="$(echo "$gruntinfo" | awk '/Available options: / {$1=$2=""; print $0}')"
|
||||||
|
local compls="$(echo "$gruntinfo" | awk '/Available tasks: / {$1=$2=""; print $0}')"
|
||||||
|
# Only add -- or - options if the user has started typing -
|
||||||
|
[[ "$cur" == -* ]] && compls="$compls $opts"
|
||||||
|
# Tell complete what stuff to show.
|
||||||
|
COMPREPLY=($(compgen -W "$compls" -- "$cur"))
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -o default -F _grunt_completions grunt
|
37
node_modules/grunt-cli/completion/zsh
generated
vendored
Executable file
37
node_modules/grunt-cli/completion/zsh
generated
vendored
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
# grunt-cli
|
||||||
|
# http://gruntjs.com/
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
# Licensed under the MIT license.
|
||||||
|
# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# To enable zsh <tab> completion for grunt, add the following line (minus the
|
||||||
|
# leading #, which is the zsh comment character) to your ~/.zshrc file:
|
||||||
|
#
|
||||||
|
# eval "$(grunt --completion=zsh)"
|
||||||
|
|
||||||
|
# Enable zsh autocompletion.
|
||||||
|
function _grunt_completion() {
|
||||||
|
local completions
|
||||||
|
# The currently-being-completed word.
|
||||||
|
local cur="${words[@]}"
|
||||||
|
# The current grunt version, available tasks, options, etc.
|
||||||
|
local gruntinfo="$(grunt --version --verbose 2>/dev/null)"
|
||||||
|
# Options and tasks.
|
||||||
|
local opts="$(echo "$gruntinfo" | awk '/Available options: / {$1=$2=""; print $0}')"
|
||||||
|
local compls="$(echo "$gruntinfo" | awk '/Available tasks: / {$1=$2=""; print $0}')"
|
||||||
|
# Only add -- or - options if the user has started typing -
|
||||||
|
[[ "$cur" == -* ]] && compls="$compls $opts"
|
||||||
|
# Trim whitespace.
|
||||||
|
compls=$(echo "$compls" | sed -e 's/^ *//g' -e 's/ *$//g')
|
||||||
|
# Turn compls into an array to of completions.
|
||||||
|
completions=(${=compls})
|
||||||
|
# Tell complete what stuff to show.
|
||||||
|
compadd -- $completions
|
||||||
|
}
|
||||||
|
|
||||||
|
compdef _grunt_completion grunt
|
24
node_modules/grunt-cli/lib/cli.js
generated
vendored
Normal file
24
node_modules/grunt-cli/lib/cli.js
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* grunt-cli
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-init/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// External lib.
|
||||||
|
var nopt = require('nopt');
|
||||||
|
|
||||||
|
// CLI options we care about.
|
||||||
|
exports.known = {help: Boolean, version: Boolean, completion: String};
|
||||||
|
exports.aliases = {h: '--help', V: '--version', v: '--verbose'};
|
||||||
|
|
||||||
|
// Parse them and return an options object.
|
||||||
|
Object.defineProperty(exports, 'options', {
|
||||||
|
get: function() {
|
||||||
|
return nopt(exports.known, exports.aliases, process.argv, 2);
|
||||||
|
}
|
||||||
|
});
|
34
node_modules/grunt-cli/lib/completion.js
generated
vendored
Normal file
34
node_modules/grunt-cli/lib/completion.js
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* grunt-cli
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-init/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Nodejs libs.
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
exports.print = function(name) {
|
||||||
|
var code = 0;
|
||||||
|
var filepath = path.join(__dirname, '../completion', name);
|
||||||
|
var output;
|
||||||
|
try {
|
||||||
|
// Attempt to read shell completion file.
|
||||||
|
output = String(fs.readFileSync(filepath));
|
||||||
|
} catch (err) {
|
||||||
|
code = 5;
|
||||||
|
output = 'echo "Specified grunt shell auto-completion rules ';
|
||||||
|
if (name && name !== 'true') {
|
||||||
|
output += 'for \'' + name + '\' ';
|
||||||
|
}
|
||||||
|
output += 'not found."';
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(output);
|
||||||
|
process.exit(code);
|
||||||
|
};
|
51
node_modules/grunt-cli/lib/info.js
generated
vendored
Normal file
51
node_modules/grunt-cli/lib/info.js
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* grunt-cli
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tyler Kellen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-init/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Project metadata.
|
||||||
|
var pkg = require('../package.json');
|
||||||
|
|
||||||
|
// Display grunt-cli version.
|
||||||
|
exports.version = function() {
|
||||||
|
console.log('grunt-cli v' + pkg.version);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Show help, then exit with a message and error code.
|
||||||
|
exports.fatal = function(msg, code) {
|
||||||
|
exports.helpHeader();
|
||||||
|
console.log('Fatal error: ' + msg);
|
||||||
|
console.log('');
|
||||||
|
exports.helpFooter();
|
||||||
|
process.exit(code);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Show help and exit.
|
||||||
|
exports.help = function() {
|
||||||
|
exports.helpHeader();
|
||||||
|
exports.helpFooter();
|
||||||
|
process.exit();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Help header.
|
||||||
|
exports.helpHeader = function() {
|
||||||
|
console.log('grunt-cli: ' + pkg.description + ' (v' + pkg.version + ')');
|
||||||
|
console.log('');
|
||||||
|
};
|
||||||
|
|
||||||
|
// Help footer.
|
||||||
|
exports.helpFooter = function() {
|
||||||
|
[
|
||||||
|
'If you\'re seeing this message, either a Gruntfile wasn\'t found or grunt',
|
||||||
|
'hasn\'t been installed locally to your project. For more information about',
|
||||||
|
'installing and configuring grunt, please see the Getting Started guide:',
|
||||||
|
'',
|
||||||
|
'http://gruntjs.com/getting-started',
|
||||||
|
].forEach(function(str) { console.log(str); });
|
||||||
|
};
|
1
node_modules/grunt-cli/node_modules/.bin/nopt
generated
vendored
Symbolic link
1
node_modules/grunt-cli/node_modules/.bin/nopt
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../nopt/bin/nopt.js
|
15
node_modules/grunt-cli/node_modules/findup-sync/.jshintrc
generated
vendored
Normal file
15
node_modules/grunt-cli/node_modules/findup-sync/.jshintrc
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"loopfunc": true,
|
||||||
|
"curly": true,
|
||||||
|
"eqeqeq": true,
|
||||||
|
"immed": true,
|
||||||
|
"latedef": true,
|
||||||
|
"newcap": true,
|
||||||
|
"noarg": true,
|
||||||
|
"sub": true,
|
||||||
|
"undef": true,
|
||||||
|
"unused": true,
|
||||||
|
"boss": true,
|
||||||
|
"eqnull": true,
|
||||||
|
"node": true
|
||||||
|
}
|
0
node_modules/grunt-cli/node_modules/findup-sync/.npmignore
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/.npmignore
generated
vendored
Normal file
5
node_modules/grunt-cli/node_modules/findup-sync/.travis.yml
generated
vendored
Normal file
5
node_modules/grunt-cli/node_modules/findup-sync/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- 0.8
|
||||||
|
before_script:
|
||||||
|
- npm install -g grunt-cli
|
25
node_modules/grunt-cli/node_modules/findup-sync/Gruntfile.js
generated
vendored
Normal file
25
node_modules/grunt-cli/node_modules/findup-sync/Gruntfile.js
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
// Project configuration.
|
||||||
|
grunt.initConfig({
|
||||||
|
nodeunit: {
|
||||||
|
files: ['test/**/*_test.js'],
|
||||||
|
},
|
||||||
|
jshint: {
|
||||||
|
options: {
|
||||||
|
jshintrc: '.jshintrc'
|
||||||
|
},
|
||||||
|
all: ['Gruntfile.js', 'lib/**/*.js', 'test/**/*.js']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load plugins.
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-nodeunit');
|
||||||
|
|
||||||
|
// Default task.
|
||||||
|
grunt.registerTask('default', ['jshint', 'nodeunit']);
|
||||||
|
|
||||||
|
};
|
22
node_modules/grunt-cli/node_modules/findup-sync/LICENSE-MIT
generated
vendored
Normal file
22
node_modules/grunt-cli/node_modules/findup-sync/LICENSE-MIT
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2013 "Cowboy" Ben Alman
|
||||||
|
|
||||||
|
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.
|
45
node_modules/grunt-cli/node_modules/findup-sync/README.md
generated
vendored
Normal file
45
node_modules/grunt-cli/node_modules/findup-sync/README.md
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# findup-sync [![Build Status](https://secure.travis-ci.org/cowboy/node-findup-sync.png?branch=master)](http://travis-ci.org/cowboy/node-findup-sync)
|
||||||
|
|
||||||
|
Find the first file matching a given pattern in the current directory or the nearest ancestor directory.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
Install the module with: `npm install findup-sync`
|
||||||
|
|
||||||
|
```js
|
||||||
|
var findup = require('findup-sync');
|
||||||
|
|
||||||
|
// Start looking in the CWD.
|
||||||
|
var filepath1 = findup('{a,b}*.txt');
|
||||||
|
|
||||||
|
// Start looking somewhere else, and ignore case (probably a good idea).
|
||||||
|
var filepath2 = findup('{a,b}*.txt', {cwd: '/some/path', nocase: true});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
findup(patternOrPatterns [, minimatchOptions])
|
||||||
|
```
|
||||||
|
|
||||||
|
### patternOrPatterns
|
||||||
|
Type: `String` or `Array`
|
||||||
|
Default: none
|
||||||
|
|
||||||
|
One or more wildcard glob patterns. Or just filenames.
|
||||||
|
|
||||||
|
### minimatchOptions
|
||||||
|
Type: `Object`
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Options to be passed to [minimatch](https://github.com/isaacs/minimatch).
|
||||||
|
|
||||||
|
Note that if you want to start in a different directory than the current working directory, specify a `cwd` property here.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).
|
||||||
|
|
||||||
|
## Release History
|
||||||
|
2014-03-14 - v0.1.3 - Updated dependencies.
|
||||||
|
2013-03-08 - v0.1.2 - Updated dependencies. Fixed a Node 0.9.x bug. Updated unit tests to work cross-platform.
|
||||||
|
2012-11-15 - v0.1.1 - Now works without an options object.
|
||||||
|
2012-11-01 - v0.1.0 - Initial release.
|
46
node_modules/grunt-cli/node_modules/findup-sync/lib/findup-sync.js
generated
vendored
Normal file
46
node_modules/grunt-cli/node_modules/findup-sync/lib/findup-sync.js
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* findup-sync
|
||||||
|
* https://github.com/cowboy/node-findup-sync
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 "Cowboy" Ben Alman
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Nodejs libs.
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
// External libs.
|
||||||
|
var glob = require('glob');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
|
// Search for a filename in the given directory or all parent directories.
|
||||||
|
module.exports = function(patterns, options) {
|
||||||
|
// Normalize patterns to an array.
|
||||||
|
if (!Array.isArray(patterns)) { patterns = [patterns]; }
|
||||||
|
// Create globOptions so that it can be modified without mutating the
|
||||||
|
// original object.
|
||||||
|
var globOptions = Object.create(options || {});
|
||||||
|
globOptions.maxDepth = 1;
|
||||||
|
globOptions.cwd = path.resolve(globOptions.cwd || '.');
|
||||||
|
|
||||||
|
var files, lastpath;
|
||||||
|
do {
|
||||||
|
// Search for files matching patterns.
|
||||||
|
files = _(patterns).map(function(pattern) {
|
||||||
|
return glob.sync(pattern, globOptions);
|
||||||
|
}).flatten().uniq().value();
|
||||||
|
// Return file if found.
|
||||||
|
if (files.length > 0) {
|
||||||
|
return path.resolve(path.join(globOptions.cwd, files[0]));
|
||||||
|
}
|
||||||
|
// Go up a directory.
|
||||||
|
lastpath = globOptions.cwd;
|
||||||
|
globOptions.cwd = path.resolve(globOptions.cwd, '..');
|
||||||
|
// If parentpath is the same as basedir, we can't go any higher.
|
||||||
|
} while (globOptions.cwd !== lastpath);
|
||||||
|
|
||||||
|
// No files were found!
|
||||||
|
return null;
|
||||||
|
};
|
2
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/.npmignore
generated
vendored
Normal file
2
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/.npmignore
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.*.swp
|
||||||
|
test/a/
|
3
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/.travis.yml
generated
vendored
Normal file
3
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- 0.8
|
27
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/LICENSE
generated
vendored
Normal file
27
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/LICENSE
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) Isaac Z. Schlueter ("Author")
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
The BSD License
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
250
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/README.md
generated
vendored
Normal file
250
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/README.md
generated
vendored
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
# Glob
|
||||||
|
|
||||||
|
Match files using the patterns the shell uses, like stars and stuff.
|
||||||
|
|
||||||
|
This is a glob implementation in JavaScript. It uses the `minimatch`
|
||||||
|
library to do its matching.
|
||||||
|
|
||||||
|
## Attention: node-glob users!
|
||||||
|
|
||||||
|
The API has changed dramatically between 2.x and 3.x. This library is
|
||||||
|
now 100% JavaScript, and the integer flags have been replaced with an
|
||||||
|
options object.
|
||||||
|
|
||||||
|
Also, there's an event emitter class, proper tests, and all the other
|
||||||
|
things you've come to expect from node modules.
|
||||||
|
|
||||||
|
And best of all, no compilation!
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var glob = require("glob")
|
||||||
|
|
||||||
|
// options is optional
|
||||||
|
glob("**/*.js", options, function (er, files) {
|
||||||
|
// files is an array of filenames.
|
||||||
|
// If the `nonull` option is set, and nothing
|
||||||
|
// was found, then files is ["**/*.js"]
|
||||||
|
// er is an error object or null.
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Please see the [minimatch
|
||||||
|
documentation](https://github.com/isaacs/minimatch) for more details.
|
||||||
|
|
||||||
|
Supports these glob features:
|
||||||
|
|
||||||
|
* Brace Expansion
|
||||||
|
* Extended glob matching
|
||||||
|
* "Globstar" `**` matching
|
||||||
|
|
||||||
|
See:
|
||||||
|
|
||||||
|
* `man sh`
|
||||||
|
* `man bash`
|
||||||
|
* `man 3 fnmatch`
|
||||||
|
* `man 5 gitignore`
|
||||||
|
* [minimatch documentation](https://github.com/isaacs/minimatch)
|
||||||
|
|
||||||
|
## glob(pattern, [options], cb)
|
||||||
|
|
||||||
|
* `pattern` {String} Pattern to be matched
|
||||||
|
* `options` {Object}
|
||||||
|
* `cb` {Function}
|
||||||
|
* `err` {Error | null}
|
||||||
|
* `matches` {Array<String>} filenames found matching the pattern
|
||||||
|
|
||||||
|
Perform an asynchronous glob search.
|
||||||
|
|
||||||
|
## glob.sync(pattern, [options])
|
||||||
|
|
||||||
|
* `pattern` {String} Pattern to be matched
|
||||||
|
* `options` {Object}
|
||||||
|
* return: {Array<String>} filenames found matching the pattern
|
||||||
|
|
||||||
|
Perform a synchronous glob search.
|
||||||
|
|
||||||
|
## Class: glob.Glob
|
||||||
|
|
||||||
|
Create a Glob object by instanting the `glob.Glob` class.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Glob = require("glob").Glob
|
||||||
|
var mg = new Glob(pattern, options, cb)
|
||||||
|
```
|
||||||
|
|
||||||
|
It's an EventEmitter, and starts walking the filesystem to find matches
|
||||||
|
immediately.
|
||||||
|
|
||||||
|
### new glob.Glob(pattern, [options], [cb])
|
||||||
|
|
||||||
|
* `pattern` {String} pattern to search for
|
||||||
|
* `options` {Object}
|
||||||
|
* `cb` {Function} Called when an error occurs, or matches are found
|
||||||
|
* `err` {Error | null}
|
||||||
|
* `matches` {Array<String>} filenames found matching the pattern
|
||||||
|
|
||||||
|
Note that if the `sync` flag is set in the options, then matches will
|
||||||
|
be immediately available on the `g.found` member.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
|
||||||
|
* `minimatch` The minimatch object that the glob uses.
|
||||||
|
* `options` The options object passed in.
|
||||||
|
* `error` The error encountered. When an error is encountered, the
|
||||||
|
glob object is in an undefined state, and should be discarded.
|
||||||
|
* `aborted` Boolean which is set to true when calling `abort()`. There
|
||||||
|
is no way at this time to continue a glob search after aborting, but
|
||||||
|
you can re-use the statCache to avoid having to duplicate syscalls.
|
||||||
|
* `statCache` Collection of all the stat results the glob search
|
||||||
|
performed.
|
||||||
|
* `cache` Convenience object. Each field has the following possible
|
||||||
|
values:
|
||||||
|
* `false` - Path does not exist
|
||||||
|
* `true` - Path exists
|
||||||
|
* `1` - Path exists, and is not a directory
|
||||||
|
* `2` - Path exists, and is a directory
|
||||||
|
* `[file, entries, ...]` - Path exists, is a directory, and the
|
||||||
|
array value is the results of `fs.readdir`
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
* `end` When the matching is finished, this is emitted with all the
|
||||||
|
matches found. If the `nonull` option is set, and no match was found,
|
||||||
|
then the `matches` list contains the original pattern. The matches
|
||||||
|
are sorted, unless the `nosort` flag is set.
|
||||||
|
* `match` Every time a match is found, this is emitted with the matched.
|
||||||
|
* `error` Emitted when an unexpected error is encountered, or whenever
|
||||||
|
any fs error occurs if `options.strict` is set.
|
||||||
|
* `abort` When `abort()` is called, this event is raised.
|
||||||
|
|
||||||
|
### Methods
|
||||||
|
|
||||||
|
* `abort` Stop the search.
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
All the options that can be passed to Minimatch can also be passed to
|
||||||
|
Glob to change pattern matching behavior. Also, some have been added,
|
||||||
|
or have glob-specific ramifications.
|
||||||
|
|
||||||
|
All options are false by default, unless otherwise noted.
|
||||||
|
|
||||||
|
All options are added to the glob object, as well.
|
||||||
|
|
||||||
|
* `cwd` The current working directory in which to search. Defaults
|
||||||
|
to `process.cwd()`.
|
||||||
|
* `root` The place where patterns starting with `/` will be mounted
|
||||||
|
onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
|
||||||
|
systems, and `C:\` or some such on Windows.)
|
||||||
|
* `dot` Include `.dot` files in normal matches and `globstar` matches.
|
||||||
|
Note that an explicit dot in a portion of the pattern will always
|
||||||
|
match dot files.
|
||||||
|
* `nomount` By default, a pattern starting with a forward-slash will be
|
||||||
|
"mounted" onto the root setting, so that a valid filesystem path is
|
||||||
|
returned. Set this flag to disable that behavior.
|
||||||
|
* `mark` Add a `/` character to directory matches. Note that this
|
||||||
|
requires additional stat calls.
|
||||||
|
* `nosort` Don't sort the results.
|
||||||
|
* `stat` Set to true to stat *all* results. This reduces performance
|
||||||
|
somewhat, and is completely unnecessary, unless `readdir` is presumed
|
||||||
|
to be an untrustworthy indicator of file existence. It will cause
|
||||||
|
ELOOP to be triggered one level sooner in the case of cyclical
|
||||||
|
symbolic links.
|
||||||
|
* `silent` When an unusual error is encountered
|
||||||
|
when attempting to read a directory, a warning will be printed to
|
||||||
|
stderr. Set the `silent` option to true to suppress these warnings.
|
||||||
|
* `strict` When an unusual error is encountered
|
||||||
|
when attempting to read a directory, the process will just continue on
|
||||||
|
in search of other matches. Set the `strict` option to raise an error
|
||||||
|
in these cases.
|
||||||
|
* `cache` See `cache` property above. Pass in a previously generated
|
||||||
|
cache object to save some fs calls.
|
||||||
|
* `statCache` A cache of results of filesystem information, to prevent
|
||||||
|
unnecessary stat calls. While it should not normally be necessary to
|
||||||
|
set this, you may pass the statCache from one glob() call to the
|
||||||
|
options object of another, if you know that the filesystem will not
|
||||||
|
change between calls. (See "Race Conditions" below.)
|
||||||
|
* `sync` Perform a synchronous glob search.
|
||||||
|
* `nounique` In some cases, brace-expanded patterns can result in the
|
||||||
|
same file showing up multiple times in the result set. By default,
|
||||||
|
this implementation prevents duplicates in the result set.
|
||||||
|
Set this flag to disable that behavior.
|
||||||
|
* `nonull` Set to never return an empty set, instead returning a set
|
||||||
|
containing the pattern itself. This is the default in glob(3).
|
||||||
|
* `nocase` Perform a case-insensitive match. Note that case-insensitive
|
||||||
|
filesystems will sometimes result in glob returning results that are
|
||||||
|
case-insensitively matched anyway, since readdir and stat will not
|
||||||
|
raise an error.
|
||||||
|
* `debug` Set to enable debug logging in minimatch and glob.
|
||||||
|
* `globDebug` Set to enable debug logging in glob, but not minimatch.
|
||||||
|
|
||||||
|
## Comparisons to other fnmatch/glob implementations
|
||||||
|
|
||||||
|
While strict compliance with the existing standards is a worthwhile
|
||||||
|
goal, some discrepancies exist between node-glob and other
|
||||||
|
implementations, and are intentional.
|
||||||
|
|
||||||
|
If the pattern starts with a `!` character, then it is negated. Set the
|
||||||
|
`nonegate` flag to suppress this behavior, and treat leading `!`
|
||||||
|
characters normally. This is perhaps relevant if you wish to start the
|
||||||
|
pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
|
||||||
|
characters at the start of a pattern will negate the pattern multiple
|
||||||
|
times.
|
||||||
|
|
||||||
|
If a pattern starts with `#`, then it is treated as a comment, and
|
||||||
|
will not match anything. Use `\#` to match a literal `#` at the
|
||||||
|
start of a line, or set the `nocomment` flag to suppress this behavior.
|
||||||
|
|
||||||
|
The double-star character `**` is supported by default, unless the
|
||||||
|
`noglobstar` flag is set. This is supported in the manner of bsdglob
|
||||||
|
and bash 4.1, where `**` only has special significance if it is the only
|
||||||
|
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
|
||||||
|
`a/**b` will not.
|
||||||
|
|
||||||
|
If an escaped pattern has no matches, and the `nonull` flag is set,
|
||||||
|
then glob returns the pattern as-provided, rather than
|
||||||
|
interpreting the character escapes. For example,
|
||||||
|
`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
|
||||||
|
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
|
||||||
|
that it does not resolve escaped pattern characters.
|
||||||
|
|
||||||
|
If brace expansion is not disabled, then it is performed before any
|
||||||
|
other interpretation of the glob pattern. Thus, a pattern like
|
||||||
|
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
|
||||||
|
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
|
||||||
|
checked for validity. Since those two are valid, matching proceeds.
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
**Please only use forward-slashes in glob expressions.**
|
||||||
|
|
||||||
|
Though windows uses either `/` or `\` as its path separator, only `/`
|
||||||
|
characters are used by this glob implementation. You must use
|
||||||
|
forward-slashes **only** in glob expressions. Back-slashes will always
|
||||||
|
be interpreted as escape characters, not path separators.
|
||||||
|
|
||||||
|
Results from absolute patterns such as `/foo/*` are mounted onto the
|
||||||
|
root setting using `path.join`. On windows, this will by default result
|
||||||
|
in `/foo/*` matching `C:\foo\bar.txt`.
|
||||||
|
|
||||||
|
## Race Conditions
|
||||||
|
|
||||||
|
Glob searching, by its very nature, is susceptible to race conditions,
|
||||||
|
since it relies on directory walking and such.
|
||||||
|
|
||||||
|
As a result, it is possible that a file that exists when glob looks for
|
||||||
|
it may have been deleted or modified by the time it returns the result.
|
||||||
|
|
||||||
|
As part of its internal implementation, this program caches all stat
|
||||||
|
and readdir calls that it makes, in order to cut down on system
|
||||||
|
overhead. However, this also makes it even more susceptible to races,
|
||||||
|
especially if the cache or statCache objects are reused between glob
|
||||||
|
calls.
|
||||||
|
|
||||||
|
Users are thus advised not to use a glob result as a guarantee of
|
||||||
|
filesystem state in the face of rapid changes. For the vast majority
|
||||||
|
of operations, this is never a problem.
|
9
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/examples/g.js
generated
vendored
Normal file
9
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/examples/g.js
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
var Glob = require("../").Glob
|
||||||
|
|
||||||
|
var pattern = "test/a/**/[cg]/../[cg]"
|
||||||
|
console.log(pattern)
|
||||||
|
|
||||||
|
var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) {
|
||||||
|
console.log("matches", matches)
|
||||||
|
})
|
||||||
|
console.log("after")
|
9
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/examples/usr-local.js
generated
vendored
Normal file
9
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/examples/usr-local.js
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
var Glob = require("../").Glob
|
||||||
|
|
||||||
|
var pattern = "{./*/*,/*,/usr/local/*}"
|
||||||
|
console.log(pattern)
|
||||||
|
|
||||||
|
var mg = new Glob(pattern, {mark: true}, function (er, matches) {
|
||||||
|
console.log("matches", matches)
|
||||||
|
})
|
||||||
|
console.log("after")
|
728
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/glob.js
generated
vendored
Normal file
728
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/glob.js
generated
vendored
Normal file
@ -0,0 +1,728 @@
|
|||||||
|
// Approach:
|
||||||
|
//
|
||||||
|
// 1. Get the minimatch set
|
||||||
|
// 2. For each pattern in the set, PROCESS(pattern)
|
||||||
|
// 3. Store matches per-set, then uniq them
|
||||||
|
//
|
||||||
|
// PROCESS(pattern)
|
||||||
|
// Get the first [n] items from pattern that are all strings
|
||||||
|
// Join these together. This is PREFIX.
|
||||||
|
// If there is no more remaining, then stat(PREFIX) and
|
||||||
|
// add to matches if it succeeds. END.
|
||||||
|
// readdir(PREFIX) as ENTRIES
|
||||||
|
// If fails, END
|
||||||
|
// If pattern[n] is GLOBSTAR
|
||||||
|
// // handle the case where the globstar match is empty
|
||||||
|
// // by pruning it out, and testing the resulting pattern
|
||||||
|
// PROCESS(pattern[0..n] + pattern[n+1 .. $])
|
||||||
|
// // handle other cases.
|
||||||
|
// for ENTRY in ENTRIES (not dotfiles)
|
||||||
|
// // attach globstar + tail onto the entry
|
||||||
|
// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $])
|
||||||
|
//
|
||||||
|
// else // not globstar
|
||||||
|
// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
|
||||||
|
// Test ENTRY against pattern[n]
|
||||||
|
// If fails, continue
|
||||||
|
// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
|
||||||
|
//
|
||||||
|
// Caveat:
|
||||||
|
// Cache all stats and readdirs results to minimize syscall. Since all
|
||||||
|
// we ever care about is existence and directory-ness, we can just keep
|
||||||
|
// `true` for files, and [children,...] for directories, or `false` for
|
||||||
|
// things that don't exist.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = glob
|
||||||
|
|
||||||
|
var fs = require("fs")
|
||||||
|
, minimatch = require("minimatch")
|
||||||
|
, Minimatch = minimatch.Minimatch
|
||||||
|
, inherits = require("inherits")
|
||||||
|
, EE = require("events").EventEmitter
|
||||||
|
, path = require("path")
|
||||||
|
, isDir = {}
|
||||||
|
, assert = require("assert").ok
|
||||||
|
|
||||||
|
function glob (pattern, options, cb) {
|
||||||
|
if (typeof options === "function") cb = options, options = {}
|
||||||
|
if (!options) options = {}
|
||||||
|
|
||||||
|
if (typeof options === "number") {
|
||||||
|
deprecated()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var g = new Glob(pattern, options, cb)
|
||||||
|
return g.sync ? g.found : g
|
||||||
|
}
|
||||||
|
|
||||||
|
glob.fnmatch = deprecated
|
||||||
|
|
||||||
|
function deprecated () {
|
||||||
|
throw new Error("glob's interface has changed. Please see the docs.")
|
||||||
|
}
|
||||||
|
|
||||||
|
glob.sync = globSync
|
||||||
|
function globSync (pattern, options) {
|
||||||
|
if (typeof options === "number") {
|
||||||
|
deprecated()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
options = options || {}
|
||||||
|
options.sync = true
|
||||||
|
return glob(pattern, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
this._processingEmitQueue = false
|
||||||
|
|
||||||
|
glob.Glob = Glob
|
||||||
|
inherits(Glob, EE)
|
||||||
|
function Glob (pattern, options, cb) {
|
||||||
|
if (!(this instanceof Glob)) {
|
||||||
|
return new Glob(pattern, options, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof options === "function") {
|
||||||
|
cb = options
|
||||||
|
options = null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof cb === "function") {
|
||||||
|
this.on("error", cb)
|
||||||
|
this.on("end", function (matches) {
|
||||||
|
cb(null, matches)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
options = options || {}
|
||||||
|
|
||||||
|
this._endEmitted = false
|
||||||
|
this.EOF = {}
|
||||||
|
this._emitQueue = []
|
||||||
|
|
||||||
|
this.paused = false
|
||||||
|
this._processingEmitQueue = false
|
||||||
|
|
||||||
|
this.maxDepth = options.maxDepth || 1000
|
||||||
|
this.maxLength = options.maxLength || Infinity
|
||||||
|
this.cache = options.cache || {}
|
||||||
|
this.statCache = options.statCache || {}
|
||||||
|
|
||||||
|
this.changedCwd = false
|
||||||
|
var cwd = process.cwd()
|
||||||
|
if (!options.hasOwnProperty("cwd")) this.cwd = cwd
|
||||||
|
else {
|
||||||
|
this.cwd = options.cwd
|
||||||
|
this.changedCwd = path.resolve(options.cwd) !== cwd
|
||||||
|
}
|
||||||
|
|
||||||
|
this.root = options.root || path.resolve(this.cwd, "/")
|
||||||
|
this.root = path.resolve(this.root)
|
||||||
|
if (process.platform === "win32")
|
||||||
|
this.root = this.root.replace(/\\/g, "/")
|
||||||
|
|
||||||
|
this.nomount = !!options.nomount
|
||||||
|
|
||||||
|
if (!pattern) {
|
||||||
|
throw new Error("must provide pattern")
|
||||||
|
}
|
||||||
|
|
||||||
|
// base-matching: just use globstar for that.
|
||||||
|
if (options.matchBase && -1 === pattern.indexOf("/")) {
|
||||||
|
if (options.noglobstar) {
|
||||||
|
throw new Error("base matching requires globstar")
|
||||||
|
}
|
||||||
|
pattern = "**/" + pattern
|
||||||
|
}
|
||||||
|
|
||||||
|
this.strict = options.strict !== false
|
||||||
|
this.dot = !!options.dot
|
||||||
|
this.mark = !!options.mark
|
||||||
|
this.sync = !!options.sync
|
||||||
|
this.nounique = !!options.nounique
|
||||||
|
this.nonull = !!options.nonull
|
||||||
|
this.nosort = !!options.nosort
|
||||||
|
this.nocase = !!options.nocase
|
||||||
|
this.stat = !!options.stat
|
||||||
|
|
||||||
|
this.debug = !!options.debug || !!options.globDebug
|
||||||
|
if (this.debug)
|
||||||
|
this.log = console.error
|
||||||
|
|
||||||
|
this.silent = !!options.silent
|
||||||
|
|
||||||
|
var mm = this.minimatch = new Minimatch(pattern, options)
|
||||||
|
this.options = mm.options
|
||||||
|
pattern = this.pattern = mm.pattern
|
||||||
|
|
||||||
|
this.error = null
|
||||||
|
this.aborted = false
|
||||||
|
|
||||||
|
// list of all the patterns that ** has resolved do, so
|
||||||
|
// we can avoid visiting multiple times.
|
||||||
|
this._globstars = {}
|
||||||
|
|
||||||
|
EE.call(this)
|
||||||
|
|
||||||
|
// process each pattern in the minimatch set
|
||||||
|
var n = this.minimatch.set.length
|
||||||
|
|
||||||
|
// The matches are stored as {<filename>: true,...} so that
|
||||||
|
// duplicates are automagically pruned.
|
||||||
|
// Later, we do an Object.keys() on these.
|
||||||
|
// Keep them as a list so we can fill in when nonull is set.
|
||||||
|
this.matches = new Array(n)
|
||||||
|
|
||||||
|
this.minimatch.set.forEach(iterator.bind(this))
|
||||||
|
function iterator (pattern, i, set) {
|
||||||
|
this._process(pattern, 0, i, function (er) {
|
||||||
|
if (er) this.emit("error", er)
|
||||||
|
if (-- n <= 0) this._finish()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.log = function () {}
|
||||||
|
|
||||||
|
Glob.prototype._finish = function () {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
|
||||||
|
var nou = this.nounique
|
||||||
|
, all = nou ? [] : {}
|
||||||
|
|
||||||
|
for (var i = 0, l = this.matches.length; i < l; i ++) {
|
||||||
|
var matches = this.matches[i]
|
||||||
|
this.log("matches[%d] =", i, matches)
|
||||||
|
// do like the shell, and spit out the literal glob
|
||||||
|
if (!matches) {
|
||||||
|
if (this.nonull) {
|
||||||
|
var literal = this.minimatch.globSet[i]
|
||||||
|
if (nou) all.push(literal)
|
||||||
|
else all[literal] = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// had matches
|
||||||
|
var m = Object.keys(matches)
|
||||||
|
if (nou) all.push.apply(all, m)
|
||||||
|
else m.forEach(function (m) {
|
||||||
|
all[m] = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nou) all = Object.keys(all)
|
||||||
|
|
||||||
|
if (!this.nosort) {
|
||||||
|
all = all.sort(this.nocase ? alphasorti : alphasort)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mark) {
|
||||||
|
// at *some* point we statted all of these
|
||||||
|
all = all.map(this._mark, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log("emitting end", all)
|
||||||
|
|
||||||
|
this.EOF = this.found = all
|
||||||
|
this.emitMatch(this.EOF)
|
||||||
|
}
|
||||||
|
|
||||||
|
function alphasorti (a, b) {
|
||||||
|
a = a.toLowerCase()
|
||||||
|
b = b.toLowerCase()
|
||||||
|
return alphasort(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
function alphasort (a, b) {
|
||||||
|
return a > b ? 1 : a < b ? -1 : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._mark = function (p) {
|
||||||
|
var c = this.cache[p]
|
||||||
|
var m = p
|
||||||
|
if (c) {
|
||||||
|
var isDir = c === 2 || Array.isArray(c)
|
||||||
|
var slash = p.slice(-1) === '/'
|
||||||
|
|
||||||
|
if (isDir && !slash)
|
||||||
|
m += '/'
|
||||||
|
else if (!isDir && slash)
|
||||||
|
m = m.slice(0, -1)
|
||||||
|
|
||||||
|
if (m !== p) {
|
||||||
|
this.statCache[m] = this.statCache[p]
|
||||||
|
this.cache[m] = this.cache[p]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.abort = function () {
|
||||||
|
this.aborted = true
|
||||||
|
this.emit("abort")
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.pause = function () {
|
||||||
|
if (this.paused) return
|
||||||
|
if (this.sync)
|
||||||
|
this.emit("error", new Error("Can't pause/resume sync glob"))
|
||||||
|
this.paused = true
|
||||||
|
this.emit("pause")
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.resume = function () {
|
||||||
|
if (!this.paused) return
|
||||||
|
if (this.sync)
|
||||||
|
this.emit("error", new Error("Can't pause/resume sync glob"))
|
||||||
|
this.paused = false
|
||||||
|
this.emit("resume")
|
||||||
|
this._processEmitQueue()
|
||||||
|
//process.nextTick(this.emit.bind(this, "resume"))
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.emitMatch = function (m) {
|
||||||
|
this.log('emitMatch', m)
|
||||||
|
this._emitQueue.push(m)
|
||||||
|
this._processEmitQueue()
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._processEmitQueue = function (m) {
|
||||||
|
this.log("pEQ paused=%j processing=%j m=%j", this.paused,
|
||||||
|
this._processingEmitQueue, m)
|
||||||
|
var done = false
|
||||||
|
while (!this._processingEmitQueue &&
|
||||||
|
!this.paused) {
|
||||||
|
this._processingEmitQueue = true
|
||||||
|
var m = this._emitQueue.shift()
|
||||||
|
this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
|
||||||
|
if (!m) {
|
||||||
|
this.log(">processEmitQueue, falsey m")
|
||||||
|
this._processingEmitQueue = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m === this.EOF || !(this.mark && !this.stat)) {
|
||||||
|
this.log("peq: unmarked, or eof")
|
||||||
|
next.call(this, 0, false)
|
||||||
|
} else if (this.statCache[m]) {
|
||||||
|
var sc = this.statCache[m]
|
||||||
|
var exists
|
||||||
|
if (sc)
|
||||||
|
exists = sc.isDirectory() ? 2 : 1
|
||||||
|
this.log("peq: stat cached")
|
||||||
|
next.call(this, exists, exists === 2)
|
||||||
|
} else {
|
||||||
|
this.log("peq: _stat, then next")
|
||||||
|
this._stat(m, next)
|
||||||
|
}
|
||||||
|
|
||||||
|
function next(exists, isDir) {
|
||||||
|
this.log("next", m, exists, isDir)
|
||||||
|
var ev = m === this.EOF ? "end" : "match"
|
||||||
|
|
||||||
|
// "end" can only happen once.
|
||||||
|
assert(!this._endEmitted)
|
||||||
|
if (ev === "end")
|
||||||
|
this._endEmitted = true
|
||||||
|
|
||||||
|
if (exists) {
|
||||||
|
// Doesn't mean it necessarily doesn't exist, it's possible
|
||||||
|
// we just didn't check because we don't care that much, or
|
||||||
|
// this is EOF anyway.
|
||||||
|
if (isDir && !m.match(/\/$/)) {
|
||||||
|
m = m + "/"
|
||||||
|
} else if (!isDir && m.match(/\/$/)) {
|
||||||
|
m = m.replace(/\/+$/, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.log("emit", ev, m)
|
||||||
|
this.emit(ev, m)
|
||||||
|
this._processingEmitQueue = false
|
||||||
|
if (done && m !== this.EOF && !this.paused)
|
||||||
|
this._processEmitQueue()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
done = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._process = function (pattern, depth, index, cb_) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
|
||||||
|
var cb = function cb (er, res) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
if (this.paused) {
|
||||||
|
if (!this._processQueue) {
|
||||||
|
this._processQueue = []
|
||||||
|
this.once("resume", function () {
|
||||||
|
var q = this._processQueue
|
||||||
|
this._processQueue = null
|
||||||
|
q.forEach(function (cb) { cb() })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this._processQueue.push(cb_.bind(this, er, res))
|
||||||
|
} else {
|
||||||
|
cb_.call(this, er, res)
|
||||||
|
}
|
||||||
|
}.bind(this)
|
||||||
|
|
||||||
|
if (this.aborted) return cb()
|
||||||
|
|
||||||
|
if (depth > this.maxDepth) return cb()
|
||||||
|
|
||||||
|
// Get the first [n] parts of pattern that are all strings.
|
||||||
|
var n = 0
|
||||||
|
while (typeof pattern[n] === "string") {
|
||||||
|
n ++
|
||||||
|
}
|
||||||
|
// now n is the index of the first one that is *not* a string.
|
||||||
|
|
||||||
|
// see if there's anything else
|
||||||
|
var prefix
|
||||||
|
switch (n) {
|
||||||
|
// if not, then this is rather simple
|
||||||
|
case pattern.length:
|
||||||
|
prefix = pattern.join("/")
|
||||||
|
this._stat(prefix, function (exists, isDir) {
|
||||||
|
// either it's there, or it isn't.
|
||||||
|
// nothing more to do, either way.
|
||||||
|
if (exists) {
|
||||||
|
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
||||||
|
if (prefix.charAt(0) === "/") {
|
||||||
|
prefix = path.join(this.root, prefix)
|
||||||
|
} else {
|
||||||
|
prefix = path.resolve(this.root, prefix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === "win32")
|
||||||
|
prefix = prefix.replace(/\\/g, "/")
|
||||||
|
|
||||||
|
this.matches[index] = this.matches[index] || {}
|
||||||
|
this.matches[index][prefix] = true
|
||||||
|
this.emitMatch(prefix)
|
||||||
|
}
|
||||||
|
return cb()
|
||||||
|
})
|
||||||
|
return
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
// pattern *starts* with some non-trivial item.
|
||||||
|
// going to readdir(cwd), but not include the prefix in matches.
|
||||||
|
prefix = null
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
// pattern has some string bits in the front.
|
||||||
|
// whatever it starts with, whether that's "absolute" like /foo/bar,
|
||||||
|
// or "relative" like "../baz"
|
||||||
|
prefix = pattern.slice(0, n)
|
||||||
|
prefix = prefix.join("/")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the list of entries.
|
||||||
|
var read
|
||||||
|
if (prefix === null) read = "."
|
||||||
|
else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) {
|
||||||
|
if (!prefix || !isAbsolute(prefix)) {
|
||||||
|
prefix = path.join("/", prefix)
|
||||||
|
}
|
||||||
|
read = prefix = path.resolve(prefix)
|
||||||
|
|
||||||
|
// if (process.platform === "win32")
|
||||||
|
// read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
|
||||||
|
|
||||||
|
this.log('absolute: ', prefix, this.root, pattern, read)
|
||||||
|
} else {
|
||||||
|
read = prefix
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log('readdir(%j)', read, this.cwd, this.root)
|
||||||
|
|
||||||
|
return this._readdir(read, function (er, entries) {
|
||||||
|
if (er) {
|
||||||
|
// not a directory!
|
||||||
|
// this means that, whatever else comes after this, it can never match
|
||||||
|
return cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
// globstar is special
|
||||||
|
if (pattern[n] === minimatch.GLOBSTAR) {
|
||||||
|
// test without the globstar, and with every child both below
|
||||||
|
// and replacing the globstar.
|
||||||
|
var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ]
|
||||||
|
entries.forEach(function (e) {
|
||||||
|
if (e.charAt(0) === "." && !this.dot) return
|
||||||
|
// instead of the globstar
|
||||||
|
s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)))
|
||||||
|
// below the globstar
|
||||||
|
s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n)))
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
s = s.filter(function (pattern) {
|
||||||
|
var key = gsKey(pattern)
|
||||||
|
var seen = !this._globstars[key]
|
||||||
|
this._globstars[key] = true
|
||||||
|
return seen
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
if (!s.length)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
// now asyncForEach over this
|
||||||
|
var l = s.length
|
||||||
|
, errState = null
|
||||||
|
s.forEach(function (gsPattern) {
|
||||||
|
this._process(gsPattern, depth + 1, index, function (er) {
|
||||||
|
if (errState) return
|
||||||
|
if (er) return cb(errState = er)
|
||||||
|
if (--l <= 0) return cb()
|
||||||
|
})
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// not a globstar
|
||||||
|
// It will only match dot entries if it starts with a dot, or if
|
||||||
|
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
||||||
|
var pn = pattern[n]
|
||||||
|
var rawGlob = pattern[n]._glob
|
||||||
|
, dotOk = this.dot || rawGlob.charAt(0) === "."
|
||||||
|
|
||||||
|
entries = entries.filter(function (e) {
|
||||||
|
return (e.charAt(0) !== "." || dotOk) &&
|
||||||
|
e.match(pattern[n])
|
||||||
|
})
|
||||||
|
|
||||||
|
// If n === pattern.length - 1, then there's no need for the extra stat
|
||||||
|
// *unless* the user has specified "mark" or "stat" explicitly.
|
||||||
|
// We know that they exist, since the readdir returned them.
|
||||||
|
if (n === pattern.length - 1 &&
|
||||||
|
!this.mark &&
|
||||||
|
!this.stat) {
|
||||||
|
entries.forEach(function (e) {
|
||||||
|
if (prefix) {
|
||||||
|
if (prefix !== "/") e = prefix + "/" + e
|
||||||
|
else e = prefix + e
|
||||||
|
}
|
||||||
|
if (e.charAt(0) === "/" && !this.nomount) {
|
||||||
|
e = path.join(this.root, e)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === "win32")
|
||||||
|
e = e.replace(/\\/g, "/")
|
||||||
|
|
||||||
|
this.matches[index] = this.matches[index] || {}
|
||||||
|
this.matches[index][e] = true
|
||||||
|
this.emitMatch(e)
|
||||||
|
}, this)
|
||||||
|
return cb.call(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// now test all the remaining entries as stand-ins for that part
|
||||||
|
// of the pattern.
|
||||||
|
var l = entries.length
|
||||||
|
, errState = null
|
||||||
|
if (l === 0) return cb() // no matches possible
|
||||||
|
entries.forEach(function (e) {
|
||||||
|
var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))
|
||||||
|
this._process(p, depth + 1, index, function (er) {
|
||||||
|
if (errState) return
|
||||||
|
if (er) return cb(errState = er)
|
||||||
|
if (--l === 0) return cb.call(this)
|
||||||
|
})
|
||||||
|
}, this)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function gsKey (pattern) {
|
||||||
|
return '**' + pattern.map(function (p) {
|
||||||
|
return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
|
||||||
|
}).join('/')
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._stat = function (f, cb) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
var abs = f
|
||||||
|
if (f.charAt(0) === "/") {
|
||||||
|
abs = path.join(this.root, f)
|
||||||
|
} else if (this.changedCwd) {
|
||||||
|
abs = path.resolve(this.cwd, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f.length > this.maxLength) {
|
||||||
|
var er = new Error("Path name too long")
|
||||||
|
er.code = "ENAMETOOLONG"
|
||||||
|
er.path = f
|
||||||
|
return this._afterStat(f, abs, cb, er)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log('stat', [this.cwd, f, '=', abs])
|
||||||
|
|
||||||
|
if (!this.stat && this.cache.hasOwnProperty(f)) {
|
||||||
|
var exists = this.cache[f]
|
||||||
|
, isDir = exists && (Array.isArray(exists) || exists === 2)
|
||||||
|
if (this.sync) return cb.call(this, !!exists, isDir)
|
||||||
|
return process.nextTick(cb.bind(this, !!exists, isDir))
|
||||||
|
}
|
||||||
|
|
||||||
|
var stat = this.statCache[abs]
|
||||||
|
if (this.sync || stat) {
|
||||||
|
var er
|
||||||
|
try {
|
||||||
|
stat = fs.statSync(abs)
|
||||||
|
} catch (e) {
|
||||||
|
er = e
|
||||||
|
}
|
||||||
|
this._afterStat(f, abs, cb, er, stat)
|
||||||
|
} else {
|
||||||
|
fs.stat(abs, this._afterStat.bind(this, f, abs, cb))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._afterStat = function (f, abs, cb, er, stat) {
|
||||||
|
var exists
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
|
||||||
|
if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
|
||||||
|
this.log("should be ENOTDIR, fake it")
|
||||||
|
|
||||||
|
er = new Error("ENOTDIR, not a directory '" + abs + "'")
|
||||||
|
er.path = abs
|
||||||
|
er.code = "ENOTDIR"
|
||||||
|
stat = null
|
||||||
|
}
|
||||||
|
|
||||||
|
var emit = !this.statCache[abs]
|
||||||
|
this.statCache[abs] = stat
|
||||||
|
|
||||||
|
if (er || !stat) {
|
||||||
|
exists = false
|
||||||
|
} else {
|
||||||
|
exists = stat.isDirectory() ? 2 : 1
|
||||||
|
if (emit)
|
||||||
|
this.emit('stat', f, stat)
|
||||||
|
}
|
||||||
|
this.cache[f] = this.cache[f] || exists
|
||||||
|
cb.call(this, !!exists, exists === 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._readdir = function (f, cb) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
var abs = f
|
||||||
|
if (f.charAt(0) === "/") {
|
||||||
|
abs = path.join(this.root, f)
|
||||||
|
} else if (isAbsolute(f)) {
|
||||||
|
abs = f
|
||||||
|
} else if (this.changedCwd) {
|
||||||
|
abs = path.resolve(this.cwd, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f.length > this.maxLength) {
|
||||||
|
var er = new Error("Path name too long")
|
||||||
|
er.code = "ENAMETOOLONG"
|
||||||
|
er.path = f
|
||||||
|
return this._afterReaddir(f, abs, cb, er)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log('readdir', [this.cwd, f, abs])
|
||||||
|
if (this.cache.hasOwnProperty(f)) {
|
||||||
|
var c = this.cache[f]
|
||||||
|
if (Array.isArray(c)) {
|
||||||
|
if (this.sync) return cb.call(this, null, c)
|
||||||
|
return process.nextTick(cb.bind(this, null, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!c || c === 1) {
|
||||||
|
// either ENOENT or ENOTDIR
|
||||||
|
var code = c ? "ENOTDIR" : "ENOENT"
|
||||||
|
, er = new Error((c ? "Not a directory" : "Not found") + ": " + f)
|
||||||
|
er.path = f
|
||||||
|
er.code = code
|
||||||
|
this.log(f, er)
|
||||||
|
if (this.sync) return cb.call(this, er)
|
||||||
|
return process.nextTick(cb.bind(this, er))
|
||||||
|
}
|
||||||
|
|
||||||
|
// at this point, c === 2, meaning it's a dir, but we haven't
|
||||||
|
// had to read it yet, or c === true, meaning it's *something*
|
||||||
|
// but we don't have any idea what. Need to read it, either way.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.sync) {
|
||||||
|
var er, entries
|
||||||
|
try {
|
||||||
|
entries = fs.readdirSync(abs)
|
||||||
|
} catch (e) {
|
||||||
|
er = e
|
||||||
|
}
|
||||||
|
return this._afterReaddir(f, abs, cb, er, entries)
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb))
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
if (entries && !er) {
|
||||||
|
this.cache[f] = entries
|
||||||
|
// if we haven't asked to stat everything for suresies, then just
|
||||||
|
// assume that everything in there exists, so we can avoid
|
||||||
|
// having to stat it a second time. This also gets us one step
|
||||||
|
// further into ELOOP territory.
|
||||||
|
if (!this.mark && !this.stat) {
|
||||||
|
entries.forEach(function (e) {
|
||||||
|
if (f === "/") e = f + e
|
||||||
|
else e = f + "/" + e
|
||||||
|
this.cache[e] = true
|
||||||
|
}, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cb.call(this, er, entries)
|
||||||
|
}
|
||||||
|
|
||||||
|
// now handle errors, and cache the information
|
||||||
|
if (er) switch (er.code) {
|
||||||
|
case "ENOTDIR": // totally normal. means it *does* exist.
|
||||||
|
this.cache[f] = 1
|
||||||
|
return cb.call(this, er)
|
||||||
|
case "ENOENT": // not terribly unusual
|
||||||
|
case "ELOOP":
|
||||||
|
case "ENAMETOOLONG":
|
||||||
|
case "UNKNOWN":
|
||||||
|
this.cache[f] = false
|
||||||
|
return cb.call(this, er)
|
||||||
|
default: // some unusual error. Treat as failure.
|
||||||
|
this.cache[f] = false
|
||||||
|
if (this.strict) this.emit("error", er)
|
||||||
|
if (!this.silent) console.error("glob error", er)
|
||||||
|
return cb.call(this, er)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var isAbsolute = process.platform === "win32" ? absWin : absUnix
|
||||||
|
|
||||||
|
function absWin (p) {
|
||||||
|
if (absUnix(p)) return true
|
||||||
|
// pull off the device/UNC bit from a windows path.
|
||||||
|
// from node's lib/path.js
|
||||||
|
var splitDeviceRe =
|
||||||
|
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
|
||||||
|
, result = splitDeviceRe.exec(p)
|
||||||
|
, device = result[1] || ''
|
||||||
|
, isUnc = device && device.charAt(1) !== ':'
|
||||||
|
, isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
|
||||||
|
|
||||||
|
return isAbsolute
|
||||||
|
}
|
||||||
|
|
||||||
|
function absUnix (p) {
|
||||||
|
return p.charAt(0) === "/" || p === ""
|
||||||
|
}
|
16
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/LICENSE
generated
vendored
Normal file
16
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/LICENSE
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
The ISC License
|
||||||
|
|
||||||
|
Copyright (c) Isaac Z. Schlueter
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
42
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/README.md
generated
vendored
Normal file
42
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/README.md
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Browser-friendly inheritance fully compatible with standard node.js
|
||||||
|
[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
|
||||||
|
|
||||||
|
This package exports standard `inherits` from node.js `util` module in
|
||||||
|
node environment, but also provides alternative browser-friendly
|
||||||
|
implementation through [browser
|
||||||
|
field](https://gist.github.com/shtylman/4339901). Alternative
|
||||||
|
implementation is a literal copy of standard one located in standalone
|
||||||
|
module to avoid requiring of `util`. It also has a shim for old
|
||||||
|
browsers with no `Object.create` support.
|
||||||
|
|
||||||
|
While keeping you sure you are using standard `inherits`
|
||||||
|
implementation in node.js environment, it allows bundlers such as
|
||||||
|
[browserify](https://github.com/substack/node-browserify) to not
|
||||||
|
include full `util` package to your client code if all you need is
|
||||||
|
just `inherits` function. It worth, because browser shim for `util`
|
||||||
|
package is large and `inherits` is often the single function you need
|
||||||
|
from it.
|
||||||
|
|
||||||
|
It's recommended to use this package instead of
|
||||||
|
`require('util').inherits` for any code that has chances to be used
|
||||||
|
not only in node.js but in browser too.
|
||||||
|
|
||||||
|
## usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
var inherits = require('inherits');
|
||||||
|
// then use exactly as the standard one
|
||||||
|
```
|
||||||
|
|
||||||
|
## note on version ~1.0
|
||||||
|
|
||||||
|
Version ~1.0 had completely different motivation and is not compatible
|
||||||
|
neither with 2.0 nor with standard node.js `inherits`.
|
||||||
|
|
||||||
|
If you are using version ~1.0 and planning to switch to ~2.0, be
|
||||||
|
careful:
|
||||||
|
|
||||||
|
* new version uses `super_` instead of `super` for referencing
|
||||||
|
superclass
|
||||||
|
* new version overwrites current prototype while old one preserves any
|
||||||
|
existing fields on it
|
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/inherits.js
generated
vendored
Normal file
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/inherits.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require('util').inherits
|
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/inherits_browser.js
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/inherits_browser.js
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
if (typeof Object.create === 'function') {
|
||||||
|
// implementation from standard node.js 'util' module
|
||||||
|
module.exports = function inherits(ctor, superCtor) {
|
||||||
|
ctor.super_ = superCtor
|
||||||
|
ctor.prototype = Object.create(superCtor.prototype, {
|
||||||
|
constructor: {
|
||||||
|
value: ctor,
|
||||||
|
enumerable: false,
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// old school shim for old browsers
|
||||||
|
module.exports = function inherits(ctor, superCtor) {
|
||||||
|
ctor.super_ = superCtor
|
||||||
|
var TempCtor = function () {}
|
||||||
|
TempCtor.prototype = superCtor.prototype
|
||||||
|
ctor.prototype = new TempCtor()
|
||||||
|
ctor.prototype.constructor = ctor
|
||||||
|
}
|
||||||
|
}
|
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json
generated
vendored
Normal file
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "inherits",
|
||||||
|
"description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
|
||||||
|
"version": "2.0.1",
|
||||||
|
"keywords": [
|
||||||
|
"inheritance",
|
||||||
|
"class",
|
||||||
|
"klass",
|
||||||
|
"oop",
|
||||||
|
"object-oriented",
|
||||||
|
"inherits",
|
||||||
|
"browser",
|
||||||
|
"browserify"
|
||||||
|
],
|
||||||
|
"main": "./inherits.js",
|
||||||
|
"browser": "./inherits_browser.js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/inherits"
|
||||||
|
},
|
||||||
|
"license": "ISC",
|
||||||
|
"scripts": {
|
||||||
|
"test": "node test"
|
||||||
|
},
|
||||||
|
"readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/inherits/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/isaacs/inherits",
|
||||||
|
"_id": "inherits@2.0.1",
|
||||||
|
"_from": "inherits@2"
|
||||||
|
}
|
25
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/test.js
generated
vendored
Normal file
25
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/test.js
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
var inherits = require('./inherits.js')
|
||||||
|
var assert = require('assert')
|
||||||
|
|
||||||
|
function test(c) {
|
||||||
|
assert(c.constructor === Child)
|
||||||
|
assert(c.constructor.super_ === Parent)
|
||||||
|
assert(Object.getPrototypeOf(c) === Child.prototype)
|
||||||
|
assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
|
||||||
|
assert(c instanceof Child)
|
||||||
|
assert(c instanceof Parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Child() {
|
||||||
|
Parent.call(this)
|
||||||
|
test(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Parent() {}
|
||||||
|
|
||||||
|
inherits(Child, Parent)
|
||||||
|
|
||||||
|
var c = new Child
|
||||||
|
test(c)
|
||||||
|
|
||||||
|
console.log('ok')
|
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/.npmignore
generated
vendored
Normal file
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/.npmignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/LICENSE
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
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.
|
218
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/README.md
generated
vendored
Normal file
218
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/README.md
generated
vendored
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
# minimatch
|
||||||
|
|
||||||
|
A minimal matching utility.
|
||||||
|
|
||||||
|
[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)
|
||||||
|
|
||||||
|
|
||||||
|
This is the matching library used internally by npm.
|
||||||
|
|
||||||
|
Eventually, it will replace the C binding in node-glob.
|
||||||
|
|
||||||
|
It works by converting glob expressions into JavaScript `RegExp`
|
||||||
|
objects.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var minimatch = require("minimatch")
|
||||||
|
|
||||||
|
minimatch("bar.foo", "*.foo") // true!
|
||||||
|
minimatch("bar.foo", "*.bar") // false!
|
||||||
|
minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Supports these glob features:
|
||||||
|
|
||||||
|
* Brace Expansion
|
||||||
|
* Extended glob matching
|
||||||
|
* "Globstar" `**` matching
|
||||||
|
|
||||||
|
See:
|
||||||
|
|
||||||
|
* `man sh`
|
||||||
|
* `man bash`
|
||||||
|
* `man 3 fnmatch`
|
||||||
|
* `man 5 gitignore`
|
||||||
|
|
||||||
|
## Minimatch Class
|
||||||
|
|
||||||
|
Create a minimatch object by instanting the `minimatch.Minimatch` class.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Minimatch = require("minimatch").Minimatch
|
||||||
|
var mm = new Minimatch(pattern, options)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
|
||||||
|
* `pattern` The original pattern the minimatch object represents.
|
||||||
|
* `options` The options supplied to the constructor.
|
||||||
|
* `set` A 2-dimensional array of regexp or string expressions.
|
||||||
|
Each row in the
|
||||||
|
array corresponds to a brace-expanded pattern. Each item in the row
|
||||||
|
corresponds to a single path-part. For example, the pattern
|
||||||
|
`{a,b/c}/d` would expand to a set of patterns like:
|
||||||
|
|
||||||
|
[ [ a, d ]
|
||||||
|
, [ b, c, d ] ]
|
||||||
|
|
||||||
|
If a portion of the pattern doesn't have any "magic" in it
|
||||||
|
(that is, it's something like `"foo"` rather than `fo*o?`), then it
|
||||||
|
will be left as a string rather than converted to a regular
|
||||||
|
expression.
|
||||||
|
|
||||||
|
* `regexp` Created by the `makeRe` method. A single regular expression
|
||||||
|
expressing the entire pattern. This is useful in cases where you wish
|
||||||
|
to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
|
||||||
|
* `negate` True if the pattern is negated.
|
||||||
|
* `comment` True if the pattern is a comment.
|
||||||
|
* `empty` True if the pattern is `""`.
|
||||||
|
|
||||||
|
### Methods
|
||||||
|
|
||||||
|
* `makeRe` Generate the `regexp` member if necessary, and return it.
|
||||||
|
Will return `false` if the pattern is invalid.
|
||||||
|
* `match(fname)` Return true if the filename matches the pattern, or
|
||||||
|
false otherwise.
|
||||||
|
* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
|
||||||
|
filename, and match it against a single row in the `regExpSet`. This
|
||||||
|
method is mainly for internal use, but is exposed so that it can be
|
||||||
|
used by a glob-walker that needs to avoid excessive filesystem calls.
|
||||||
|
|
||||||
|
All other methods are internal, and will be called as necessary.
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
The top-level exported function has a `cache` property, which is an LRU
|
||||||
|
cache set to store 100 items. So, calling these methods repeatedly
|
||||||
|
with the same pattern and options will use the same Minimatch object,
|
||||||
|
saving the cost of parsing it multiple times.
|
||||||
|
|
||||||
|
### minimatch(path, pattern, options)
|
||||||
|
|
||||||
|
Main export. Tests a path against the pattern using the options.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var isJS = minimatch(file, "*.js", { matchBase: true })
|
||||||
|
```
|
||||||
|
|
||||||
|
### minimatch.filter(pattern, options)
|
||||||
|
|
||||||
|
Returns a function that tests its
|
||||||
|
supplied argument, suitable for use with `Array.filter`. Example:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
|
||||||
|
```
|
||||||
|
|
||||||
|
### minimatch.match(list, pattern, options)
|
||||||
|
|
||||||
|
Match against the list of
|
||||||
|
files, in the style of fnmatch or glob. If nothing is matched, and
|
||||||
|
options.nonull is set, then return a list containing the pattern itself.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
|
||||||
|
```
|
||||||
|
|
||||||
|
### minimatch.makeRe(pattern, options)
|
||||||
|
|
||||||
|
Make a regular expression object from the pattern.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
All options are `false` by default.
|
||||||
|
|
||||||
|
### debug
|
||||||
|
|
||||||
|
Dump a ton of stuff to stderr.
|
||||||
|
|
||||||
|
### nobrace
|
||||||
|
|
||||||
|
Do not expand `{a,b}` and `{1..3}` brace sets.
|
||||||
|
|
||||||
|
### noglobstar
|
||||||
|
|
||||||
|
Disable `**` matching against multiple folder names.
|
||||||
|
|
||||||
|
### dot
|
||||||
|
|
||||||
|
Allow patterns to match filenames starting with a period, even if
|
||||||
|
the pattern does not explicitly have a period in that spot.
|
||||||
|
|
||||||
|
Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
|
||||||
|
is set.
|
||||||
|
|
||||||
|
### noext
|
||||||
|
|
||||||
|
Disable "extglob" style patterns like `+(a|b)`.
|
||||||
|
|
||||||
|
### nocase
|
||||||
|
|
||||||
|
Perform a case-insensitive match.
|
||||||
|
|
||||||
|
### nonull
|
||||||
|
|
||||||
|
When a match is not found by `minimatch.match`, return a list containing
|
||||||
|
the pattern itself if this option is set. When not set, an empty list
|
||||||
|
is returned if there are no matches.
|
||||||
|
|
||||||
|
### matchBase
|
||||||
|
|
||||||
|
If set, then patterns without slashes will be matched
|
||||||
|
against the basename of the path if it contains slashes. For example,
|
||||||
|
`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
|
||||||
|
|
||||||
|
### nocomment
|
||||||
|
|
||||||
|
Suppress the behavior of treating `#` at the start of a pattern as a
|
||||||
|
comment.
|
||||||
|
|
||||||
|
### nonegate
|
||||||
|
|
||||||
|
Suppress the behavior of treating a leading `!` character as negation.
|
||||||
|
|
||||||
|
### flipNegate
|
||||||
|
|
||||||
|
Returns from negate expressions the same as if they were not negated.
|
||||||
|
(Ie, true on a hit, false on a miss.)
|
||||||
|
|
||||||
|
|
||||||
|
## Comparisons to other fnmatch/glob implementations
|
||||||
|
|
||||||
|
While strict compliance with the existing standards is a worthwhile
|
||||||
|
goal, some discrepancies exist between minimatch and other
|
||||||
|
implementations, and are intentional.
|
||||||
|
|
||||||
|
If the pattern starts with a `!` character, then it is negated. Set the
|
||||||
|
`nonegate` flag to suppress this behavior, and treat leading `!`
|
||||||
|
characters normally. This is perhaps relevant if you wish to start the
|
||||||
|
pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
|
||||||
|
characters at the start of a pattern will negate the pattern multiple
|
||||||
|
times.
|
||||||
|
|
||||||
|
If a pattern starts with `#`, then it is treated as a comment, and
|
||||||
|
will not match anything. Use `\#` to match a literal `#` at the
|
||||||
|
start of a line, or set the `nocomment` flag to suppress this behavior.
|
||||||
|
|
||||||
|
The double-star character `**` is supported by default, unless the
|
||||||
|
`noglobstar` flag is set. This is supported in the manner of bsdglob
|
||||||
|
and bash 4.1, where `**` only has special significance if it is the only
|
||||||
|
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
|
||||||
|
`a/**b` will not.
|
||||||
|
|
||||||
|
If an escaped pattern has no matches, and the `nonull` flag is set,
|
||||||
|
then minimatch.match returns the pattern as-provided, rather than
|
||||||
|
interpreting the character escapes. For example,
|
||||||
|
`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
|
||||||
|
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
|
||||||
|
that it does not resolve escaped pattern characters.
|
||||||
|
|
||||||
|
If brace expansion is not disabled, then it is performed before any
|
||||||
|
other interpretation of the glob pattern. Thus, a pattern like
|
||||||
|
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
|
||||||
|
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
|
||||||
|
checked for validity. Since those two are valid, matching proceeds.
|
1061
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/minimatch.js
generated
vendored
Normal file
1061
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/minimatch.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore
generated
vendored
Normal file
1
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/node_modules
|
14
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS
generated
vendored
Normal file
14
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Authors, sorted by whether or not they are me
|
||||||
|
Isaac Z. Schlueter <i@izs.me>
|
||||||
|
Brian Cottingham <spiffytech@gmail.com>
|
||||||
|
Carlos Brito Lage <carlos@carloslage.net>
|
||||||
|
Jesse Dailey <jesse.dailey@gmail.com>
|
||||||
|
Kevin O'Hara <kevinohara80@gmail.com>
|
||||||
|
Marco Rogers <marco.rogers@gmail.com>
|
||||||
|
Mark Cavage <mcavage@gmail.com>
|
||||||
|
Marko Mikulicic <marko.mikulicic@isti.cnr.it>
|
||||||
|
Nathan Rajlich <nathan@tootallnate.net>
|
||||||
|
Satheesh Natesan <snateshan@myspace-inc.com>
|
||||||
|
Trent Mick <trentm@gmail.com>
|
||||||
|
ashleybrener <ashley@starlogik.com>
|
||||||
|
n4kz <n4kz@n4kz.com>
|
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
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.
|
97
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md
generated
vendored
Normal file
97
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# lru cache
|
||||||
|
|
||||||
|
A cache object that deletes the least-recently-used items.
|
||||||
|
|
||||||
|
## Usage:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var LRU = require("lru-cache")
|
||||||
|
, options = { max: 500
|
||||||
|
, length: function (n) { return n * 2 }
|
||||||
|
, dispose: function (key, n) { n.close() }
|
||||||
|
, maxAge: 1000 * 60 * 60 }
|
||||||
|
, cache = LRU(options)
|
||||||
|
, otherCache = LRU(50) // sets just the max size
|
||||||
|
|
||||||
|
cache.set("key", "value")
|
||||||
|
cache.get("key") // "value"
|
||||||
|
|
||||||
|
cache.reset() // empty the cache
|
||||||
|
```
|
||||||
|
|
||||||
|
If you put more stuff in it, then items will fall out.
|
||||||
|
|
||||||
|
If you try to put an oversized thing in it, then it'll fall out right
|
||||||
|
away.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
* `max` The maximum size of the cache, checked by applying the length
|
||||||
|
function to all values in the cache. Not setting this is kind of
|
||||||
|
silly, since that's the whole purpose of this lib, but it defaults
|
||||||
|
to `Infinity`.
|
||||||
|
* `maxAge` Maximum age in ms. Items are not pro-actively pruned out
|
||||||
|
as they age, but if you try to get an item that is too old, it'll
|
||||||
|
drop it and return undefined instead of giving it to you.
|
||||||
|
* `length` Function that is used to calculate the length of stored
|
||||||
|
items. If you're storing strings or buffers, then you probably want
|
||||||
|
to do something like `function(n){return n.length}`. The default is
|
||||||
|
`function(n){return 1}`, which is fine if you want to store `n`
|
||||||
|
like-sized things.
|
||||||
|
* `dispose` Function that is called on items when they are dropped
|
||||||
|
from the cache. This can be handy if you want to close file
|
||||||
|
descriptors or do other cleanup tasks when items are no longer
|
||||||
|
accessible. Called with `key, value`. It's called *before*
|
||||||
|
actually removing the item from the internal cache, so if you want
|
||||||
|
to immediately put it back in, you'll have to do that in a
|
||||||
|
`nextTick` or `setTimeout` callback or it won't do anything.
|
||||||
|
* `stale` By default, if you set a `maxAge`, it'll only actually pull
|
||||||
|
stale items out of the cache when you `get(key)`. (That is, it's
|
||||||
|
not pre-emptively doing a `setTimeout` or anything.) If you set
|
||||||
|
`stale:true`, it'll return the stale value before deleting it. If
|
||||||
|
you don't set this, then it'll return `undefined` when you try to
|
||||||
|
get a stale entry, as if it had already been deleted.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
* `set(key, value)`
|
||||||
|
* `get(key) => value`
|
||||||
|
|
||||||
|
Both of these will update the "recently used"-ness of the key.
|
||||||
|
They do what you think.
|
||||||
|
|
||||||
|
* `peek(key)`
|
||||||
|
|
||||||
|
Returns the key value (or `undefined` if not found) without
|
||||||
|
updating the "recently used"-ness of the key.
|
||||||
|
|
||||||
|
(If you find yourself using this a lot, you *might* be using the
|
||||||
|
wrong sort of data structure, but there are some use cases where
|
||||||
|
it's handy.)
|
||||||
|
|
||||||
|
* `del(key)`
|
||||||
|
|
||||||
|
Deletes a key out of the cache.
|
||||||
|
|
||||||
|
* `reset()`
|
||||||
|
|
||||||
|
Clear the cache entirely, throwing away all values.
|
||||||
|
|
||||||
|
* `has(key)`
|
||||||
|
|
||||||
|
Check if a key is in the cache, without updating the recent-ness
|
||||||
|
or deleting it for being stale.
|
||||||
|
|
||||||
|
* `forEach(function(value,key,cache), [thisp])`
|
||||||
|
|
||||||
|
Just like `Array.prototype.forEach`. Iterates over all the keys
|
||||||
|
in the cache, in order of recent-ness. (Ie, more recently used
|
||||||
|
items are iterated over first.)
|
||||||
|
|
||||||
|
* `keys()`
|
||||||
|
|
||||||
|
Return an array of the keys in the cache.
|
||||||
|
|
||||||
|
* `values()`
|
||||||
|
|
||||||
|
Return an array of the values in the cache.
|
252
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
generated
vendored
Normal file
252
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
generated
vendored
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
;(function () { // closure for web browsers
|
||||||
|
|
||||||
|
if (typeof module === 'object' && module.exports) {
|
||||||
|
module.exports = LRUCache
|
||||||
|
} else {
|
||||||
|
// just set the global for non-node platforms.
|
||||||
|
this.LRUCache = LRUCache
|
||||||
|
}
|
||||||
|
|
||||||
|
function hOP (obj, key) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(obj, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
function naiveLength () { return 1 }
|
||||||
|
|
||||||
|
function LRUCache (options) {
|
||||||
|
if (!(this instanceof LRUCache))
|
||||||
|
return new LRUCache(options)
|
||||||
|
|
||||||
|
if (typeof options === 'number')
|
||||||
|
options = { max: options }
|
||||||
|
|
||||||
|
if (!options)
|
||||||
|
options = {}
|
||||||
|
|
||||||
|
this._max = options.max
|
||||||
|
// Kind of weird to have a default max of Infinity, but oh well.
|
||||||
|
if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
|
||||||
|
this._max = Infinity
|
||||||
|
|
||||||
|
this._lengthCalculator = options.length || naiveLength
|
||||||
|
if (typeof this._lengthCalculator !== "function")
|
||||||
|
this._lengthCalculator = naiveLength
|
||||||
|
|
||||||
|
this._allowStale = options.stale || false
|
||||||
|
this._maxAge = options.maxAge || null
|
||||||
|
this._dispose = options.dispose
|
||||||
|
this.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// resize the cache when the max changes.
|
||||||
|
Object.defineProperty(LRUCache.prototype, "max",
|
||||||
|
{ set : function (mL) {
|
||||||
|
if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
|
||||||
|
this._max = mL
|
||||||
|
if (this._length > this._max) trim(this)
|
||||||
|
}
|
||||||
|
, get : function () { return this._max }
|
||||||
|
, enumerable : true
|
||||||
|
})
|
||||||
|
|
||||||
|
// resize the cache when the lengthCalculator changes.
|
||||||
|
Object.defineProperty(LRUCache.prototype, "lengthCalculator",
|
||||||
|
{ set : function (lC) {
|
||||||
|
if (typeof lC !== "function") {
|
||||||
|
this._lengthCalculator = naiveLength
|
||||||
|
this._length = this._itemCount
|
||||||
|
for (var key in this._cache) {
|
||||||
|
this._cache[key].length = 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this._lengthCalculator = lC
|
||||||
|
this._length = 0
|
||||||
|
for (var key in this._cache) {
|
||||||
|
this._cache[key].length = this._lengthCalculator(this._cache[key].value)
|
||||||
|
this._length += this._cache[key].length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._length > this._max) trim(this)
|
||||||
|
}
|
||||||
|
, get : function () { return this._lengthCalculator }
|
||||||
|
, enumerable : true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(LRUCache.prototype, "length",
|
||||||
|
{ get : function () { return this._length }
|
||||||
|
, enumerable : true
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
Object.defineProperty(LRUCache.prototype, "itemCount",
|
||||||
|
{ get : function () { return this._itemCount }
|
||||||
|
, enumerable : true
|
||||||
|
})
|
||||||
|
|
||||||
|
LRUCache.prototype.forEach = function (fn, thisp) {
|
||||||
|
thisp = thisp || this
|
||||||
|
var i = 0;
|
||||||
|
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||||
|
i++
|
||||||
|
var hit = this._lruList[k]
|
||||||
|
if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
|
||||||
|
del(this, hit)
|
||||||
|
if (!this._allowStale) hit = undefined
|
||||||
|
}
|
||||||
|
if (hit) {
|
||||||
|
fn.call(thisp, hit.value, hit.key, this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.keys = function () {
|
||||||
|
var keys = new Array(this._itemCount)
|
||||||
|
var i = 0
|
||||||
|
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||||
|
var hit = this._lruList[k]
|
||||||
|
keys[i++] = hit.key
|
||||||
|
}
|
||||||
|
return keys
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.values = function () {
|
||||||
|
var values = new Array(this._itemCount)
|
||||||
|
var i = 0
|
||||||
|
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||||
|
var hit = this._lruList[k]
|
||||||
|
values[i++] = hit.value
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.reset = function () {
|
||||||
|
if (this._dispose && this._cache) {
|
||||||
|
for (var k in this._cache) {
|
||||||
|
this._dispose(k, this._cache[k].value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache = Object.create(null) // hash of items by key
|
||||||
|
this._lruList = Object.create(null) // list of items in order of use recency
|
||||||
|
this._mru = 0 // most recently used
|
||||||
|
this._lru = 0 // least recently used
|
||||||
|
this._length = 0 // number of items in the list
|
||||||
|
this._itemCount = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Provided for debugging/dev purposes only. No promises whatsoever that
|
||||||
|
// this API stays stable.
|
||||||
|
LRUCache.prototype.dump = function () {
|
||||||
|
return this._cache
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.dumpLru = function () {
|
||||||
|
return this._lruList
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.set = function (key, value) {
|
||||||
|
if (hOP(this._cache, key)) {
|
||||||
|
// dispose of the old one before overwriting
|
||||||
|
if (this._dispose) this._dispose(key, this._cache[key].value)
|
||||||
|
if (this._maxAge) this._cache[key].now = Date.now()
|
||||||
|
this._cache[key].value = value
|
||||||
|
this.get(key)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var len = this._lengthCalculator(value)
|
||||||
|
var age = this._maxAge ? Date.now() : 0
|
||||||
|
var hit = new Entry(key, value, this._mru++, len, age)
|
||||||
|
|
||||||
|
// oversized objects fall out of cache automatically.
|
||||||
|
if (hit.length > this._max) {
|
||||||
|
if (this._dispose) this._dispose(key, value)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
this._length += hit.length
|
||||||
|
this._lruList[hit.lu] = this._cache[key] = hit
|
||||||
|
this._itemCount ++
|
||||||
|
|
||||||
|
if (this._length > this._max) trim(this)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.has = function (key) {
|
||||||
|
if (!hOP(this._cache, key)) return false
|
||||||
|
var hit = this._cache[key]
|
||||||
|
if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.get = function (key) {
|
||||||
|
return get(this, key, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.peek = function (key) {
|
||||||
|
return get(this, key, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.pop = function () {
|
||||||
|
var hit = this._lruList[this._lru]
|
||||||
|
del(this, hit)
|
||||||
|
return hit || null
|
||||||
|
}
|
||||||
|
|
||||||
|
LRUCache.prototype.del = function (key) {
|
||||||
|
del(this, this._cache[key])
|
||||||
|
}
|
||||||
|
|
||||||
|
function get (self, key, doUse) {
|
||||||
|
var hit = self._cache[key]
|
||||||
|
if (hit) {
|
||||||
|
if (self._maxAge && (Date.now() - hit.now > self._maxAge)) {
|
||||||
|
del(self, hit)
|
||||||
|
if (!self._allowStale) hit = undefined
|
||||||
|
} else {
|
||||||
|
if (doUse) use(self, hit)
|
||||||
|
}
|
||||||
|
if (hit) hit = hit.value
|
||||||
|
}
|
||||||
|
return hit
|
||||||
|
}
|
||||||
|
|
||||||
|
function use (self, hit) {
|
||||||
|
shiftLU(self, hit)
|
||||||
|
hit.lu = self._mru ++
|
||||||
|
self._lruList[hit.lu] = hit
|
||||||
|
}
|
||||||
|
|
||||||
|
function trim (self) {
|
||||||
|
while (self._lru < self._mru && self._length > self._max)
|
||||||
|
del(self, self._lruList[self._lru])
|
||||||
|
}
|
||||||
|
|
||||||
|
function shiftLU (self, hit) {
|
||||||
|
delete self._lruList[ hit.lu ]
|
||||||
|
while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
|
||||||
|
}
|
||||||
|
|
||||||
|
function del (self, hit) {
|
||||||
|
if (hit) {
|
||||||
|
if (self._dispose) self._dispose(hit.key, hit.value)
|
||||||
|
self._length -= hit.length
|
||||||
|
self._itemCount --
|
||||||
|
delete self._cache[ hit.key ]
|
||||||
|
shiftLU(self, hit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// classy, since V8 prefers predictable objects.
|
||||||
|
function Entry (key, value, lu, length, now) {
|
||||||
|
this.key = key
|
||||||
|
this.value = value
|
||||||
|
this.lu = lu
|
||||||
|
this.length = length
|
||||||
|
this.now = now
|
||||||
|
}
|
||||||
|
|
||||||
|
})()
|
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json
generated
vendored
Normal file
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "lru-cache",
|
||||||
|
"description": "A cache object that deletes the least-recently-used items.",
|
||||||
|
"version": "2.5.0",
|
||||||
|
"author": {
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"email": "i@izs.me"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test --gc"
|
||||||
|
},
|
||||||
|
"main": "lib/lru-cache.js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/node-lru-cache.git"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tap": "",
|
||||||
|
"weak": ""
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"type": "MIT",
|
||||||
|
"url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
|
||||||
|
},
|
||||||
|
"readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `n`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/node-lru-cache/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/isaacs/node-lru-cache",
|
||||||
|
"_id": "lru-cache@2.5.0",
|
||||||
|
"_from": "lru-cache@2"
|
||||||
|
}
|
369
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js
generated
vendored
Normal file
369
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js
generated
vendored
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
var test = require("tap").test
|
||||||
|
, LRU = require("../")
|
||||||
|
|
||||||
|
test("basic", function (t) {
|
||||||
|
var cache = new LRU({max: 10})
|
||||||
|
cache.set("key", "value")
|
||||||
|
t.equal(cache.get("key"), "value")
|
||||||
|
t.equal(cache.get("nada"), undefined)
|
||||||
|
t.equal(cache.length, 1)
|
||||||
|
t.equal(cache.max, 10)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("least recently set", function (t) {
|
||||||
|
var cache = new LRU(2)
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "B")
|
||||||
|
cache.set("c", "C")
|
||||||
|
t.equal(cache.get("c"), "C")
|
||||||
|
t.equal(cache.get("b"), "B")
|
||||||
|
t.equal(cache.get("a"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("lru recently gotten", function (t) {
|
||||||
|
var cache = new LRU(2)
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "B")
|
||||||
|
cache.get("a")
|
||||||
|
cache.set("c", "C")
|
||||||
|
t.equal(cache.get("c"), "C")
|
||||||
|
t.equal(cache.get("b"), undefined)
|
||||||
|
t.equal(cache.get("a"), "A")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("del", function (t) {
|
||||||
|
var cache = new LRU(2)
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.del("a")
|
||||||
|
t.equal(cache.get("a"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("max", function (t) {
|
||||||
|
var cache = new LRU(3)
|
||||||
|
|
||||||
|
// test changing the max, verify that the LRU items get dropped.
|
||||||
|
cache.max = 100
|
||||||
|
for (var i = 0; i < 100; i ++) cache.set(i, i)
|
||||||
|
t.equal(cache.length, 100)
|
||||||
|
for (var i = 0; i < 100; i ++) {
|
||||||
|
t.equal(cache.get(i), i)
|
||||||
|
}
|
||||||
|
cache.max = 3
|
||||||
|
t.equal(cache.length, 3)
|
||||||
|
for (var i = 0; i < 97; i ++) {
|
||||||
|
t.equal(cache.get(i), undefined)
|
||||||
|
}
|
||||||
|
for (var i = 98; i < 100; i ++) {
|
||||||
|
t.equal(cache.get(i), i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// now remove the max restriction, and try again.
|
||||||
|
cache.max = "hello"
|
||||||
|
for (var i = 0; i < 100; i ++) cache.set(i, i)
|
||||||
|
t.equal(cache.length, 100)
|
||||||
|
for (var i = 0; i < 100; i ++) {
|
||||||
|
t.equal(cache.get(i), i)
|
||||||
|
}
|
||||||
|
// should trigger an immediate resize
|
||||||
|
cache.max = 3
|
||||||
|
t.equal(cache.length, 3)
|
||||||
|
for (var i = 0; i < 97; i ++) {
|
||||||
|
t.equal(cache.get(i), undefined)
|
||||||
|
}
|
||||||
|
for (var i = 98; i < 100; i ++) {
|
||||||
|
t.equal(cache.get(i), i)
|
||||||
|
}
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("reset", function (t) {
|
||||||
|
var cache = new LRU(10)
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "B")
|
||||||
|
cache.reset()
|
||||||
|
t.equal(cache.length, 0)
|
||||||
|
t.equal(cache.max, 10)
|
||||||
|
t.equal(cache.get("a"), undefined)
|
||||||
|
t.equal(cache.get("b"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Note: `<cache>.dump()` is a debugging tool only. No guarantees are made
|
||||||
|
// about the format/layout of the response.
|
||||||
|
test("dump", function (t) {
|
||||||
|
var cache = new LRU(10)
|
||||||
|
var d = cache.dump();
|
||||||
|
t.equal(Object.keys(d).length, 0, "nothing in dump for empty cache")
|
||||||
|
cache.set("a", "A")
|
||||||
|
var d = cache.dump() // { a: { key: "a", value: "A", lu: 0 } }
|
||||||
|
t.ok(d.a)
|
||||||
|
t.equal(d.a.key, "a")
|
||||||
|
t.equal(d.a.value, "A")
|
||||||
|
t.equal(d.a.lu, 0)
|
||||||
|
|
||||||
|
cache.set("b", "B")
|
||||||
|
cache.get("b")
|
||||||
|
d = cache.dump()
|
||||||
|
t.ok(d.b)
|
||||||
|
t.equal(d.b.key, "b")
|
||||||
|
t.equal(d.b.value, "B")
|
||||||
|
t.equal(d.b.lu, 2)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test("basic with weighed length", function (t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 100,
|
||||||
|
length: function (item) { return item.size }
|
||||||
|
})
|
||||||
|
cache.set("key", {val: "value", size: 50})
|
||||||
|
t.equal(cache.get("key").val, "value")
|
||||||
|
t.equal(cache.get("nada"), undefined)
|
||||||
|
t.equal(cache.lengthCalculator(cache.get("key")), 50)
|
||||||
|
t.equal(cache.length, 50)
|
||||||
|
t.equal(cache.max, 100)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test("weighed length item too large", function (t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 10,
|
||||||
|
length: function (item) { return item.size }
|
||||||
|
})
|
||||||
|
t.equal(cache.max, 10)
|
||||||
|
|
||||||
|
// should fall out immediately
|
||||||
|
cache.set("key", {val: "value", size: 50})
|
||||||
|
|
||||||
|
t.equal(cache.length, 0)
|
||||||
|
t.equal(cache.get("key"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("least recently set with weighed length", function (t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max:8,
|
||||||
|
length: function (item) { return item.length }
|
||||||
|
})
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "BB")
|
||||||
|
cache.set("c", "CCC")
|
||||||
|
cache.set("d", "DDDD")
|
||||||
|
t.equal(cache.get("d"), "DDDD")
|
||||||
|
t.equal(cache.get("c"), "CCC")
|
||||||
|
t.equal(cache.get("b"), undefined)
|
||||||
|
t.equal(cache.get("a"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("lru recently gotten with weighed length", function (t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 8,
|
||||||
|
length: function (item) { return item.length }
|
||||||
|
})
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "BB")
|
||||||
|
cache.set("c", "CCC")
|
||||||
|
cache.get("a")
|
||||||
|
cache.get("b")
|
||||||
|
cache.set("d", "DDDD")
|
||||||
|
t.equal(cache.get("c"), undefined)
|
||||||
|
t.equal(cache.get("d"), "DDDD")
|
||||||
|
t.equal(cache.get("b"), "BB")
|
||||||
|
t.equal(cache.get("a"), "A")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("set returns proper booleans", function(t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 5,
|
||||||
|
length: function (item) { return item.length }
|
||||||
|
})
|
||||||
|
|
||||||
|
t.equal(cache.set("a", "A"), true)
|
||||||
|
|
||||||
|
// should return false for max exceeded
|
||||||
|
t.equal(cache.set("b", "donuts"), false)
|
||||||
|
|
||||||
|
t.equal(cache.set("b", "B"), true)
|
||||||
|
t.equal(cache.set("c", "CCCC"), true)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("drop the old items", function(t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 5,
|
||||||
|
maxAge: 50
|
||||||
|
})
|
||||||
|
|
||||||
|
cache.set("a", "A")
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
cache.set("b", "b")
|
||||||
|
t.equal(cache.get("a"), "A")
|
||||||
|
}, 25)
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
cache.set("c", "C")
|
||||||
|
// timed out
|
||||||
|
t.notOk(cache.get("a"))
|
||||||
|
}, 60)
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
t.notOk(cache.get("b"))
|
||||||
|
t.equal(cache.get("c"), "C")
|
||||||
|
}, 90)
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
t.notOk(cache.get("c"))
|
||||||
|
t.end()
|
||||||
|
}, 155)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("disposal function", function(t) {
|
||||||
|
var disposed = false
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 1,
|
||||||
|
dispose: function (k, n) {
|
||||||
|
disposed = n
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
cache.set(1, 1)
|
||||||
|
cache.set(2, 2)
|
||||||
|
t.equal(disposed, 1)
|
||||||
|
cache.set(3, 3)
|
||||||
|
t.equal(disposed, 2)
|
||||||
|
cache.reset()
|
||||||
|
t.equal(disposed, 3)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("disposal function on too big of item", function(t) {
|
||||||
|
var disposed = false
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 1,
|
||||||
|
length: function (k) {
|
||||||
|
return k.length
|
||||||
|
},
|
||||||
|
dispose: function (k, n) {
|
||||||
|
disposed = n
|
||||||
|
}
|
||||||
|
})
|
||||||
|
var obj = [ 1, 2 ]
|
||||||
|
|
||||||
|
t.equal(disposed, false)
|
||||||
|
cache.set("obj", obj)
|
||||||
|
t.equal(disposed, obj)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("has()", function(t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
max: 1,
|
||||||
|
maxAge: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
cache.set('foo', 'bar')
|
||||||
|
t.equal(cache.has('foo'), true)
|
||||||
|
cache.set('blu', 'baz')
|
||||||
|
t.equal(cache.has('foo'), false)
|
||||||
|
t.equal(cache.has('blu'), true)
|
||||||
|
setTimeout(function() {
|
||||||
|
t.equal(cache.has('blu'), false)
|
||||||
|
t.end()
|
||||||
|
}, 15)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("stale", function(t) {
|
||||||
|
var cache = new LRU({
|
||||||
|
maxAge: 10,
|
||||||
|
stale: true
|
||||||
|
})
|
||||||
|
|
||||||
|
cache.set('foo', 'bar')
|
||||||
|
t.equal(cache.get('foo'), 'bar')
|
||||||
|
t.equal(cache.has('foo'), true)
|
||||||
|
setTimeout(function() {
|
||||||
|
t.equal(cache.has('foo'), false)
|
||||||
|
t.equal(cache.get('foo'), 'bar')
|
||||||
|
t.equal(cache.get('foo'), undefined)
|
||||||
|
t.end()
|
||||||
|
}, 15)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("lru update via set", function(t) {
|
||||||
|
var cache = LRU({ max: 2 });
|
||||||
|
|
||||||
|
cache.set('foo', 1);
|
||||||
|
cache.set('bar', 2);
|
||||||
|
cache.del('bar');
|
||||||
|
cache.set('baz', 3);
|
||||||
|
cache.set('qux', 4);
|
||||||
|
|
||||||
|
t.equal(cache.get('foo'), undefined)
|
||||||
|
t.equal(cache.get('bar'), undefined)
|
||||||
|
t.equal(cache.get('baz'), 3)
|
||||||
|
t.equal(cache.get('qux'), 4)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("least recently set w/ peek", function (t) {
|
||||||
|
var cache = new LRU(2)
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "B")
|
||||||
|
t.equal(cache.peek("a"), "A")
|
||||||
|
cache.set("c", "C")
|
||||||
|
t.equal(cache.get("c"), "C")
|
||||||
|
t.equal(cache.get("b"), "B")
|
||||||
|
t.equal(cache.get("a"), undefined)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("pop the least used item", function (t) {
|
||||||
|
var cache = new LRU(3)
|
||||||
|
, last
|
||||||
|
|
||||||
|
cache.set("a", "A")
|
||||||
|
cache.set("b", "B")
|
||||||
|
cache.set("c", "C")
|
||||||
|
|
||||||
|
t.equal(cache.length, 3)
|
||||||
|
t.equal(cache.max, 3)
|
||||||
|
|
||||||
|
// Ensure we pop a, c, b
|
||||||
|
cache.get("b", "B")
|
||||||
|
|
||||||
|
last = cache.pop()
|
||||||
|
t.equal(last.key, "a")
|
||||||
|
t.equal(last.value, "A")
|
||||||
|
t.equal(cache.length, 2)
|
||||||
|
t.equal(cache.max, 3)
|
||||||
|
|
||||||
|
last = cache.pop()
|
||||||
|
t.equal(last.key, "c")
|
||||||
|
t.equal(last.value, "C")
|
||||||
|
t.equal(cache.length, 1)
|
||||||
|
t.equal(cache.max, 3)
|
||||||
|
|
||||||
|
last = cache.pop()
|
||||||
|
t.equal(last.key, "b")
|
||||||
|
t.equal(last.value, "B")
|
||||||
|
t.equal(cache.length, 0)
|
||||||
|
t.equal(cache.max, 3)
|
||||||
|
|
||||||
|
last = cache.pop()
|
||||||
|
t.equal(last, null)
|
||||||
|
t.equal(cache.length, 0)
|
||||||
|
t.equal(cache.max, 3)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
52
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js
generated
vendored
Normal file
52
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
var test = require('tap').test
|
||||||
|
var LRU = require('../')
|
||||||
|
|
||||||
|
test('forEach', function (t) {
|
||||||
|
var l = new LRU(5)
|
||||||
|
for (var i = 0; i < 10; i ++) {
|
||||||
|
l.set(i.toString(), i.toString(2))
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 9
|
||||||
|
l.forEach(function (val, key, cache) {
|
||||||
|
t.equal(cache, l)
|
||||||
|
t.equal(key, i.toString())
|
||||||
|
t.equal(val, i.toString(2))
|
||||||
|
i -= 1
|
||||||
|
})
|
||||||
|
|
||||||
|
// get in order of most recently used
|
||||||
|
l.get(6)
|
||||||
|
l.get(8)
|
||||||
|
|
||||||
|
var order = [ 8, 6, 9, 7, 5 ]
|
||||||
|
var i = 0
|
||||||
|
|
||||||
|
l.forEach(function (val, key, cache) {
|
||||||
|
var j = order[i ++]
|
||||||
|
t.equal(cache, l)
|
||||||
|
t.equal(key, j.toString())
|
||||||
|
t.equal(val, j.toString(2))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('keys() and values()', function (t) {
|
||||||
|
var l = new LRU(5)
|
||||||
|
for (var i = 0; i < 10; i ++) {
|
||||||
|
l.set(i.toString(), i.toString(2))
|
||||||
|
}
|
||||||
|
|
||||||
|
t.similar(l.keys(), ['9', '8', '7', '6', '5'])
|
||||||
|
t.similar(l.values(), ['1001', '1000', '111', '110', '101'])
|
||||||
|
|
||||||
|
// get in order of most recently used
|
||||||
|
l.get(6)
|
||||||
|
l.get(8)
|
||||||
|
|
||||||
|
t.similar(l.keys(), ['8', '6', '9', '7', '5'])
|
||||||
|
t.similar(l.values(), ['1000', '110', '1001', '111', '101'])
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
50
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js
generated
vendored
Normal file
50
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js
generated
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env node --expose_gc
|
||||||
|
|
||||||
|
var weak = require('weak');
|
||||||
|
var test = require('tap').test
|
||||||
|
var LRU = require('../')
|
||||||
|
var l = new LRU({ max: 10 })
|
||||||
|
var refs = 0
|
||||||
|
function X() {
|
||||||
|
refs ++
|
||||||
|
weak(this, deref)
|
||||||
|
}
|
||||||
|
|
||||||
|
function deref() {
|
||||||
|
refs --
|
||||||
|
}
|
||||||
|
|
||||||
|
test('no leaks', function (t) {
|
||||||
|
// fill up the cache
|
||||||
|
for (var i = 0; i < 100; i++) {
|
||||||
|
l.set(i, new X);
|
||||||
|
// throw some gets in there, too.
|
||||||
|
if (i % 2 === 0)
|
||||||
|
l.get(i / 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
gc()
|
||||||
|
|
||||||
|
var start = process.memoryUsage()
|
||||||
|
|
||||||
|
// capture the memory
|
||||||
|
var startRefs = refs
|
||||||
|
|
||||||
|
// do it again, but more
|
||||||
|
for (var i = 0; i < 10000; i++) {
|
||||||
|
l.set(i, new X);
|
||||||
|
// throw some gets in there, too.
|
||||||
|
if (i % 2 === 0)
|
||||||
|
l.get(i / 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
gc()
|
||||||
|
|
||||||
|
var end = process.memoryUsage()
|
||||||
|
t.equal(refs, startRefs, 'no leaky refs')
|
||||||
|
|
||||||
|
console.error('start: %j\n' +
|
||||||
|
'end: %j', start, end);
|
||||||
|
t.pass();
|
||||||
|
t.end();
|
||||||
|
})
|
27
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE
generated
vendored
Normal file
27
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) Isaac Z. Schlueter ("Author")
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
The BSD License
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
53
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md
generated
vendored
Normal file
53
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# sigmund
|
||||||
|
|
||||||
|
Quick and dirty signatures for Objects.
|
||||||
|
|
||||||
|
This is like a much faster `deepEquals` comparison, which returns a
|
||||||
|
string key suitable for caches and the like.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
function doSomething (someObj) {
|
||||||
|
var key = sigmund(someObj, maxDepth) // max depth defaults to 10
|
||||||
|
var cached = cache.get(key)
|
||||||
|
if (cached) return cached)
|
||||||
|
|
||||||
|
var result = expensiveCalculation(someObj)
|
||||||
|
cache.set(key, result)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The resulting key will be as unique and reproducible as calling
|
||||||
|
`JSON.stringify` or `util.inspect` on the object, but is much faster.
|
||||||
|
In order to achieve this speed, some differences are glossed over.
|
||||||
|
For example, the object `{0:'foo'}` will be treated identically to the
|
||||||
|
array `['foo']`.
|
||||||
|
|
||||||
|
Also, just as there is no way to summon the soul from the scribblings
|
||||||
|
of a cocain-addled psychoanalyst, there is no way to revive the object
|
||||||
|
from the signature string that sigmund gives you. In fact, it's
|
||||||
|
barely even readable.
|
||||||
|
|
||||||
|
As with `sys.inspect` and `JSON.stringify`, larger objects will
|
||||||
|
produce larger signature strings.
|
||||||
|
|
||||||
|
Because sigmund is a bit less strict than the more thorough
|
||||||
|
alternatives, the strings will be shorter, and also there is a
|
||||||
|
slightly higher chance for collisions. For example, these objects
|
||||||
|
have the same signature:
|
||||||
|
|
||||||
|
var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}
|
||||||
|
var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}
|
||||||
|
|
||||||
|
Like a good Freudian, sigmund is most effective when you already have
|
||||||
|
some understanding of what you're looking for. It can help you help
|
||||||
|
yourself, but you must be willing to do some work as well.
|
||||||
|
|
||||||
|
Cycles are handled, and cyclical objects are silently omitted (though
|
||||||
|
the key is included in the signature output.)
|
||||||
|
|
||||||
|
The second argument is the maximum depth, which defaults to 10,
|
||||||
|
because that is the maximum object traversal depth covered by most
|
||||||
|
insurance carriers.
|
283
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js
generated
vendored
Normal file
283
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js
generated
vendored
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
// different ways to id objects
|
||||||
|
// use a req/res pair, since it's crazy deep and cyclical
|
||||||
|
|
||||||
|
// sparseFE10 and sigmund are usually pretty close, which is to be expected,
|
||||||
|
// since they are essentially the same algorithm, except that sigmund handles
|
||||||
|
// regular expression objects properly.
|
||||||
|
|
||||||
|
|
||||||
|
var http = require('http')
|
||||||
|
var util = require('util')
|
||||||
|
var sigmund = require('./sigmund.js')
|
||||||
|
var sreq, sres, creq, cres, test
|
||||||
|
|
||||||
|
http.createServer(function (q, s) {
|
||||||
|
sreq = q
|
||||||
|
sres = s
|
||||||
|
sres.end('ok')
|
||||||
|
this.close(function () { setTimeout(function () {
|
||||||
|
start()
|
||||||
|
}, 200) })
|
||||||
|
}).listen(1337, function () {
|
||||||
|
creq = http.get({ port: 1337 })
|
||||||
|
creq.on('response', function (s) { cres = s })
|
||||||
|
})
|
||||||
|
|
||||||
|
function start () {
|
||||||
|
test = [sreq, sres, creq, cres]
|
||||||
|
// test = sreq
|
||||||
|
// sreq.sres = sres
|
||||||
|
// sreq.creq = creq
|
||||||
|
// sreq.cres = cres
|
||||||
|
|
||||||
|
for (var i in exports.compare) {
|
||||||
|
console.log(i)
|
||||||
|
var hash = exports.compare[i]()
|
||||||
|
console.log(hash)
|
||||||
|
console.log(hash.length)
|
||||||
|
console.log('')
|
||||||
|
}
|
||||||
|
|
||||||
|
require('bench').runMain()
|
||||||
|
}
|
||||||
|
|
||||||
|
function customWs (obj, md, d) {
|
||||||
|
d = d || 0
|
||||||
|
var to = typeof obj
|
||||||
|
if (to === 'undefined' || to === 'function' || to === null) return ''
|
||||||
|
if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '')
|
||||||
|
|
||||||
|
if (Array.isArray(obj)) {
|
||||||
|
return obj.map(function (i, _, __) {
|
||||||
|
return customWs(i, md, d + 1)
|
||||||
|
}).reduce(function (a, b) { return a + b }, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = Object.keys(obj)
|
||||||
|
return keys.map(function (k, _, __) {
|
||||||
|
return k + ':' + customWs(obj[k], md, d + 1)
|
||||||
|
}).reduce(function (a, b) { return a + b }, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
function custom (obj, md, d) {
|
||||||
|
d = d || 0
|
||||||
|
var to = typeof obj
|
||||||
|
if (to === 'undefined' || to === 'function' || to === null) return ''
|
||||||
|
if (d > md || !obj || to !== 'object') return '' + obj
|
||||||
|
|
||||||
|
if (Array.isArray(obj)) {
|
||||||
|
return obj.map(function (i, _, __) {
|
||||||
|
return custom(i, md, d + 1)
|
||||||
|
}).reduce(function (a, b) { return a + b }, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = Object.keys(obj)
|
||||||
|
return keys.map(function (k, _, __) {
|
||||||
|
return k + ':' + custom(obj[k], md, d + 1)
|
||||||
|
}).reduce(function (a, b) { return a + b }, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
function sparseFE2 (obj, maxDepth) {
|
||||||
|
var seen = []
|
||||||
|
var soFar = ''
|
||||||
|
function ch (v, depth) {
|
||||||
|
if (depth > maxDepth) return
|
||||||
|
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||||
|
if (typeof v !== 'object' || !v) {
|
||||||
|
soFar += v
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||||
|
seen.push(v)
|
||||||
|
soFar += '{'
|
||||||
|
Object.keys(v).forEach(function (k, _, __) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (k.charAt(0) === '_') return
|
||||||
|
var to = typeof v[k]
|
||||||
|
if (to === 'function' || to === 'undefined') return
|
||||||
|
soFar += k + ':'
|
||||||
|
ch(v[k], depth + 1)
|
||||||
|
})
|
||||||
|
soFar += '}'
|
||||||
|
}
|
||||||
|
ch(obj, 0)
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
|
||||||
|
function sparseFE (obj, maxDepth) {
|
||||||
|
var seen = []
|
||||||
|
var soFar = ''
|
||||||
|
function ch (v, depth) {
|
||||||
|
if (depth > maxDepth) return
|
||||||
|
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||||
|
if (typeof v !== 'object' || !v) {
|
||||||
|
soFar += v
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||||
|
seen.push(v)
|
||||||
|
soFar += '{'
|
||||||
|
Object.keys(v).forEach(function (k, _, __) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (k.charAt(0) === '_') return
|
||||||
|
var to = typeof v[k]
|
||||||
|
if (to === 'function' || to === 'undefined') return
|
||||||
|
soFar += k
|
||||||
|
ch(v[k], depth + 1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
ch(obj, 0)
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
|
||||||
|
function sparse (obj, maxDepth) {
|
||||||
|
var seen = []
|
||||||
|
var soFar = ''
|
||||||
|
function ch (v, depth) {
|
||||||
|
if (depth > maxDepth) return
|
||||||
|
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||||
|
if (typeof v !== 'object' || !v) {
|
||||||
|
soFar += v
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||||
|
seen.push(v)
|
||||||
|
soFar += '{'
|
||||||
|
for (var k in v) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (k.charAt(0) === '_') continue
|
||||||
|
var to = typeof v[k]
|
||||||
|
if (to === 'function' || to === 'undefined') continue
|
||||||
|
soFar += k
|
||||||
|
ch(v[k], depth + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ch(obj, 0)
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
|
||||||
|
function noCommas (obj, maxDepth) {
|
||||||
|
var seen = []
|
||||||
|
var soFar = ''
|
||||||
|
function ch (v, depth) {
|
||||||
|
if (depth > maxDepth) return
|
||||||
|
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||||
|
if (typeof v !== 'object' || !v) {
|
||||||
|
soFar += v
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||||
|
seen.push(v)
|
||||||
|
soFar += '{'
|
||||||
|
for (var k in v) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (k.charAt(0) === '_') continue
|
||||||
|
var to = typeof v[k]
|
||||||
|
if (to === 'function' || to === 'undefined') continue
|
||||||
|
soFar += k + ':'
|
||||||
|
ch(v[k], depth + 1)
|
||||||
|
}
|
||||||
|
soFar += '}'
|
||||||
|
}
|
||||||
|
ch(obj, 0)
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function flatten (obj, maxDepth) {
|
||||||
|
var seen = []
|
||||||
|
var soFar = ''
|
||||||
|
function ch (v, depth) {
|
||||||
|
if (depth > maxDepth) return
|
||||||
|
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||||
|
if (typeof v !== 'object' || !v) {
|
||||||
|
soFar += v
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||||
|
seen.push(v)
|
||||||
|
soFar += '{'
|
||||||
|
for (var k in v) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (k.charAt(0) === '_') continue
|
||||||
|
var to = typeof v[k]
|
||||||
|
if (to === 'function' || to === 'undefined') continue
|
||||||
|
soFar += k + ':'
|
||||||
|
ch(v[k], depth + 1)
|
||||||
|
soFar += ','
|
||||||
|
}
|
||||||
|
soFar += '}'
|
||||||
|
}
|
||||||
|
ch(obj, 0)
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.compare =
|
||||||
|
{
|
||||||
|
// 'custom 2': function () {
|
||||||
|
// return custom(test, 2, 0)
|
||||||
|
// },
|
||||||
|
// 'customWs 2': function () {
|
||||||
|
// return customWs(test, 2, 0)
|
||||||
|
// },
|
||||||
|
'JSON.stringify (guarded)': function () {
|
||||||
|
var seen = []
|
||||||
|
return JSON.stringify(test, function (k, v) {
|
||||||
|
if (typeof v !== 'object' || !v) return v
|
||||||
|
if (seen.indexOf(v) !== -1) return undefined
|
||||||
|
seen.push(v)
|
||||||
|
return v
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
'flatten 10': function () {
|
||||||
|
return flatten(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 'flattenFE 10': function () {
|
||||||
|
// return flattenFE(test, 10)
|
||||||
|
// },
|
||||||
|
|
||||||
|
'noCommas 10': function () {
|
||||||
|
return noCommas(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
'sparse 10': function () {
|
||||||
|
return sparse(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
'sparseFE 10': function () {
|
||||||
|
return sparseFE(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
'sparseFE2 10': function () {
|
||||||
|
return sparseFE2(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
sigmund: function() {
|
||||||
|
return sigmund(test, 10)
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// 'util.inspect 1': function () {
|
||||||
|
// return util.inspect(test, false, 1, false)
|
||||||
|
// },
|
||||||
|
// 'util.inspect undefined': function () {
|
||||||
|
// util.inspect(test)
|
||||||
|
// },
|
||||||
|
// 'util.inspect 2': function () {
|
||||||
|
// util.inspect(test, false, 2, false)
|
||||||
|
// },
|
||||||
|
// 'util.inspect 3': function () {
|
||||||
|
// util.inspect(test, false, 3, false)
|
||||||
|
// },
|
||||||
|
// 'util.inspect 4': function () {
|
||||||
|
// util.inspect(test, false, 4, false)
|
||||||
|
// },
|
||||||
|
// 'util.inspect Infinity': function () {
|
||||||
|
// util.inspect(test, false, Infinity, false)
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/** results
|
||||||
|
**/
|
42
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json
generated
vendored
Normal file
42
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"name": "sigmund",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Quick and dirty signatures for Objects.",
|
||||||
|
"main": "sigmund.js",
|
||||||
|
"directories": {
|
||||||
|
"test": "test"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"tap": "~0.3.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test/*.js",
|
||||||
|
"bench": "node bench.js"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/sigmund"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"object",
|
||||||
|
"signature",
|
||||||
|
"key",
|
||||||
|
"data",
|
||||||
|
"psychoanalysis"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"url": "http://blog.izs.me/"
|
||||||
|
},
|
||||||
|
"license": "BSD",
|
||||||
|
"readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/sigmund/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/isaacs/sigmund",
|
||||||
|
"_id": "sigmund@1.0.0",
|
||||||
|
"_from": "sigmund@~1.0.0"
|
||||||
|
}
|
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js
generated
vendored
Normal file
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module.exports = sigmund
|
||||||
|
function sigmund (subject, maxSessions) {
|
||||||
|
maxSessions = maxSessions || 10;
|
||||||
|
var notes = [];
|
||||||
|
var analysis = '';
|
||||||
|
var RE = RegExp;
|
||||||
|
|
||||||
|
function psychoAnalyze (subject, session) {
|
||||||
|
if (session > maxSessions) return;
|
||||||
|
|
||||||
|
if (typeof subject === 'function' ||
|
||||||
|
typeof subject === 'undefined') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof subject !== 'object' || !subject ||
|
||||||
|
(subject instanceof RE)) {
|
||||||
|
analysis += subject;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notes.indexOf(subject) !== -1 || session === maxSessions) return;
|
||||||
|
|
||||||
|
notes.push(subject);
|
||||||
|
analysis += '{';
|
||||||
|
Object.keys(subject).forEach(function (issue, _, __) {
|
||||||
|
// pseudo-private values. skip those.
|
||||||
|
if (issue.charAt(0) === '_') return;
|
||||||
|
var to = typeof subject[issue];
|
||||||
|
if (to === 'function' || to === 'undefined') return;
|
||||||
|
analysis += issue;
|
||||||
|
psychoAnalyze(subject[issue], session + 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
psychoAnalyze(subject, 0);
|
||||||
|
return analysis;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vim: set softtabstop=4 shiftwidth=4:
|
24
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js
generated
vendored
Normal file
24
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
var test = require('tap').test
|
||||||
|
var sigmund = require('../sigmund.js')
|
||||||
|
|
||||||
|
|
||||||
|
// occasionally there are duplicates
|
||||||
|
// that's an acceptable edge-case. JSON.stringify and util.inspect
|
||||||
|
// have some collision potential as well, though less, and collision
|
||||||
|
// detection is expensive.
|
||||||
|
var hash = '{abc/def/g{0h1i2{jkl'
|
||||||
|
var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}
|
||||||
|
var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}
|
||||||
|
|
||||||
|
var obj3 = JSON.parse(JSON.stringify(obj1))
|
||||||
|
obj3.c = /def/
|
||||||
|
obj3.g[2].cycle = obj3
|
||||||
|
var cycleHash = '{abc/def/g{0h1i2{jklcycle'
|
||||||
|
|
||||||
|
test('basic', function (t) {
|
||||||
|
t.equal(sigmund(obj1), hash)
|
||||||
|
t.equal(sigmund(obj2), hash)
|
||||||
|
t.equal(sigmund(obj3), cycleHash)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
57
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json
generated
vendored
Normal file
57
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"author": {
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"url": "http://blog.izs.me"
|
||||||
|
},
|
||||||
|
"name": "minimatch",
|
||||||
|
"description": "a glob matcher in javascript",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/minimatch.git"
|
||||||
|
},
|
||||||
|
"main": "minimatch.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test/*.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "2",
|
||||||
|
"sigmund": "~1.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tap": ""
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"type": "MIT",
|
||||||
|
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/minimatch/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/isaacs/minimatch",
|
||||||
|
"_id": "minimatch@0.3.0",
|
||||||
|
"_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
|
||||||
|
"_from": "minimatch@0.3",
|
||||||
|
"_npmVersion": "1.4.10",
|
||||||
|
"_npmUser": {
|
||||||
|
"name": "isaacs",
|
||||||
|
"email": "i@izs.me"
|
||||||
|
},
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"name": "isaacs",
|
||||||
|
"email": "i@izs.me"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dist": {
|
||||||
|
"shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
|
||||||
|
"tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
|
||||||
|
"readme": "ERROR: No README data found!"
|
||||||
|
}
|
399
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/basic.js
generated
vendored
Normal file
399
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/basic.js
generated
vendored
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
|
||||||
|
//
|
||||||
|
// TODO: Some of these tests do very bad things with backslashes, and will
|
||||||
|
// most likely fail badly on windows. They should probably be skipped.
|
||||||
|
|
||||||
|
var tap = require("tap")
|
||||||
|
, globalBefore = Object.keys(global)
|
||||||
|
, mm = require("../")
|
||||||
|
, files = [ "a", "b", "c", "d", "abc"
|
||||||
|
, "abd", "abe", "bb", "bcd"
|
||||||
|
, "ca", "cb", "dd", "de"
|
||||||
|
, "bdir/", "bdir/cfile"]
|
||||||
|
, next = files.concat([ "a-b", "aXb"
|
||||||
|
, ".x", ".y" ])
|
||||||
|
|
||||||
|
|
||||||
|
var patterns =
|
||||||
|
[ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test"
|
||||||
|
, ["a*", ["a", "abc", "abd", "abe"]]
|
||||||
|
, ["X*", ["X*"], {nonull: true}]
|
||||||
|
|
||||||
|
// allow null glob expansion
|
||||||
|
, ["X*", []]
|
||||||
|
|
||||||
|
// isaacs: Slightly different than bash/sh/ksh
|
||||||
|
// \\* is not un-escaped to literal "*" in a failed match,
|
||||||
|
// but it does make it get treated as a literal star
|
||||||
|
, ["\\*", ["\\*"], {nonull: true}]
|
||||||
|
, ["\\**", ["\\**"], {nonull: true}]
|
||||||
|
, ["\\*\\*", ["\\*\\*"], {nonull: true}]
|
||||||
|
|
||||||
|
, ["b*/", ["bdir/"]]
|
||||||
|
, ["c*", ["c", "ca", "cb"]]
|
||||||
|
, ["**", files]
|
||||||
|
|
||||||
|
, ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
|
||||||
|
, ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
|
||||||
|
|
||||||
|
, "legendary larry crashes bashes"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
|
||||||
|
|
||||||
|
, "character classes"
|
||||||
|
, ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
|
||||||
|
, ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
|
||||||
|
"bdir/", "ca", "cb", "dd", "de"]]
|
||||||
|
, ["a*[^c]", ["abd", "abe"]]
|
||||||
|
, function () { files.push("a-b", "aXb") }
|
||||||
|
, ["a[X-]b", ["a-b", "aXb"]]
|
||||||
|
, function () { files.push(".x", ".y") }
|
||||||
|
, ["[^a-c]*", ["d", "dd", "de"]]
|
||||||
|
, function () { files.push("a*b/", "a*b/ooo") }
|
||||||
|
, ["a\\*b/*", ["a*b/ooo"]]
|
||||||
|
, ["a\\*?/*", ["a*b/ooo"]]
|
||||||
|
, ["*\\\\!*", [], {null: true}, ["echo !7"]]
|
||||||
|
, ["*\\!*", ["echo !7"], null, ["echo !7"]]
|
||||||
|
, ["*.\\*", ["r.*"], null, ["r.*"]]
|
||||||
|
, ["a[b]c", ["abc"]]
|
||||||
|
, ["a[\\b]c", ["abc"]]
|
||||||
|
, ["a?c", ["abc"]]
|
||||||
|
, ["a\\*c", [], {null: true}, ["abc"]]
|
||||||
|
, ["", [""], { null: true }, [""]]
|
||||||
|
|
||||||
|
, "http://www.opensource.apple.com/source/bash/bash-23/" +
|
||||||
|
"bash/tests/glob-test"
|
||||||
|
, function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
|
||||||
|
, ["*/man*/bash.*", ["man/man1/bash.1"]]
|
||||||
|
, ["man/man1/bash.1", ["man/man1/bash.1"]]
|
||||||
|
, ["a***c", ["abc"], null, ["abc"]]
|
||||||
|
, ["a*****?c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?*****??", ["abc"], null, ["abc"]]
|
||||||
|
, ["*****??", ["abc"], null, ["abc"]]
|
||||||
|
, ["?*****?c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****?", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****", ["abc"], null, ["abc"]]
|
||||||
|
, ["*******c", ["abc"], null, ["abc"]]
|
||||||
|
, ["*******?", ["abc"], null, ["abc"]]
|
||||||
|
, ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["[-abc]", ["-"], null, ["-"]]
|
||||||
|
, ["[abc-]", ["-"], null, ["-"]]
|
||||||
|
, ["\\", ["\\"], null, ["\\"]]
|
||||||
|
, ["[\\\\]", ["\\"], null, ["\\"]]
|
||||||
|
, ["[[]", ["["], null, ["["]]
|
||||||
|
, ["[", ["["], null, ["["]]
|
||||||
|
, ["[*", ["[abc"], null, ["[abc"]]
|
||||||
|
, "a right bracket shall lose its special meaning and\n" +
|
||||||
|
"represent itself in a bracket expression if it occurs\n" +
|
||||||
|
"first in the list. -- POSIX.2 2.8.3.2"
|
||||||
|
, ["[]]", ["]"], null, ["]"]]
|
||||||
|
, ["[]-]", ["]"], null, ["]"]]
|
||||||
|
, ["[a-\z]", ["p"], null, ["p"]]
|
||||||
|
, ["??**********?****?", [], { null: true }, ["abc"]]
|
||||||
|
, ["??**********?****c", [], { null: true }, ["abc"]]
|
||||||
|
, ["?************c****?****", [], { null: true }, ["abc"]]
|
||||||
|
, ["*c*?**", [], { null: true }, ["abc"]]
|
||||||
|
, ["a*****c*?**", [], { null: true }, ["abc"]]
|
||||||
|
, ["a********???*******", [], { null: true }, ["abc"]]
|
||||||
|
, ["[]", [], { null: true }, ["a"]]
|
||||||
|
, ["[abc", [], { null: true }, ["["]]
|
||||||
|
|
||||||
|
, "nocase tests"
|
||||||
|
, ["XYZ", ["xYz"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
, ["ab*", ["ABC"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
, ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
|
||||||
|
// [ pattern, [matches], MM opts, files, TAP opts]
|
||||||
|
, "onestar/twostar"
|
||||||
|
, ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
|
||||||
|
, ["{/?,*}", ["/a", "bb"], {null: true}
|
||||||
|
, ["/a", "/b/b", "/a/b/c", "bb"]]
|
||||||
|
|
||||||
|
, "dots should not match unless requested"
|
||||||
|
, ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
|
||||||
|
|
||||||
|
// .. and . can only match patterns starting with .,
|
||||||
|
// even when options.dot is set.
|
||||||
|
, function () {
|
||||||
|
files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
|
||||||
|
}
|
||||||
|
, ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
|
||||||
|
, ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
|
||||||
|
, ["a/*/b", ["a/c/b"], {dot:false}]
|
||||||
|
, ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
|
||||||
|
|
||||||
|
|
||||||
|
// this also tests that changing the options needs
|
||||||
|
// to change the cache key, even if the pattern is
|
||||||
|
// the same!
|
||||||
|
, ["**", ["a/b","a/.d",".a/.d"], { dot: true }
|
||||||
|
, [ ".a/.d", "a/.d", "a/b"]]
|
||||||
|
|
||||||
|
, "paren sets cannot contain slashes"
|
||||||
|
, ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
|
||||||
|
|
||||||
|
// brace sets trump all else.
|
||||||
|
//
|
||||||
|
// invalid glob pattern. fails on bash4 and bsdglob.
|
||||||
|
// however, in this implementation, it's easier just
|
||||||
|
// to do the intuitive thing, and let brace-expansion
|
||||||
|
// actually come before parsing any extglob patterns,
|
||||||
|
// like the documentation seems to say.
|
||||||
|
//
|
||||||
|
// XXX: if anyone complains about this, either fix it
|
||||||
|
// or tell them to grow up and stop complaining.
|
||||||
|
//
|
||||||
|
// bash/bsdglob says this:
|
||||||
|
// , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
|
||||||
|
// but we do this instead:
|
||||||
|
, ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
|
||||||
|
|
||||||
|
// test partial parsing in the presence of comment/negation chars
|
||||||
|
, ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
|
||||||
|
, ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
|
||||||
|
|
||||||
|
// like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
|
||||||
|
, ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
|
||||||
|
, ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
|
||||||
|
, {}
|
||||||
|
, ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
|
||||||
|
|
||||||
|
|
||||||
|
// crazy nested {,,} and *(||) tests.
|
||||||
|
, function () {
|
||||||
|
files = [ "a", "b", "c", "d"
|
||||||
|
, "ab", "ac", "ad"
|
||||||
|
, "bc", "cb"
|
||||||
|
, "bc,d", "c,db", "c,d"
|
||||||
|
, "d)", "(b|c", "*(b|c"
|
||||||
|
, "b|c", "b|cc", "cb|c"
|
||||||
|
, "x(a|b|c)", "x(a|c)"
|
||||||
|
, "(a|b|c)", "(a|c)"]
|
||||||
|
}
|
||||||
|
, ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
|
||||||
|
, ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
|
||||||
|
// a
|
||||||
|
// *(b|c)
|
||||||
|
// *(b|d)
|
||||||
|
, ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
|
||||||
|
, ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
|
||||||
|
|
||||||
|
|
||||||
|
// test various flag settings.
|
||||||
|
, [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
|
||||||
|
, { noext: true } ]
|
||||||
|
, ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
|
||||||
|
, ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
|
||||||
|
, ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
|
||||||
|
|
||||||
|
|
||||||
|
// begin channelling Boole and deMorgan...
|
||||||
|
, "negation tests"
|
||||||
|
, function () {
|
||||||
|
files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
|
||||||
|
}
|
||||||
|
|
||||||
|
// anything that is NOT a* matches.
|
||||||
|
, ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
|
||||||
|
|
||||||
|
// anything that IS !a* matches.
|
||||||
|
, ["!a*", ["!ab", "!abc"], {nonegate: true}]
|
||||||
|
|
||||||
|
// anything that IS a* matches
|
||||||
|
, ["!!a*", ["a!b"]]
|
||||||
|
|
||||||
|
// anything that is NOT !a* matches
|
||||||
|
, ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
|
||||||
|
|
||||||
|
// negation nestled within a pattern
|
||||||
|
, function () {
|
||||||
|
files = [ "foo.js"
|
||||||
|
, "foo.bar"
|
||||||
|
// can't match this one without negative lookbehind.
|
||||||
|
, "foo.js.js"
|
||||||
|
, "blar.js"
|
||||||
|
, "foo."
|
||||||
|
, "boo.js.boo" ]
|
||||||
|
}
|
||||||
|
, ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
|
||||||
|
|
||||||
|
// https://github.com/isaacs/minimatch/issues/5
|
||||||
|
, function () {
|
||||||
|
files = [ 'a/b/.x/c'
|
||||||
|
, 'a/b/.x/c/d'
|
||||||
|
, 'a/b/.x/c/d/e'
|
||||||
|
, 'a/b/.x'
|
||||||
|
, 'a/b/.x/'
|
||||||
|
, 'a/.x/b'
|
||||||
|
, '.x'
|
||||||
|
, '.x/'
|
||||||
|
, '.x/a'
|
||||||
|
, '.x/a/b'
|
||||||
|
, 'a/.x/b/.x/c'
|
||||||
|
, '.x/.x' ]
|
||||||
|
}
|
||||||
|
, ["**/.x/**", [ '.x/'
|
||||||
|
, '.x/a'
|
||||||
|
, '.x/a/b'
|
||||||
|
, 'a/.x/b'
|
||||||
|
, 'a/b/.x/'
|
||||||
|
, 'a/b/.x/c'
|
||||||
|
, 'a/b/.x/c/d'
|
||||||
|
, 'a/b/.x/c/d/e' ] ]
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
var regexps =
|
||||||
|
[ '/^(?:(?=.)a[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)X[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)X[^/]*?)$/',
|
||||||
|
'/^(?:\\*)$/',
|
||||||
|
'/^(?:(?=.)\\*[^/]*?)$/',
|
||||||
|
'/^(?:\\*\\*)$/',
|
||||||
|
'/^(?:(?=.)b[^/]*?\\/)$/',
|
||||||
|
'/^(?:(?=.)c[^/]*?)$/',
|
||||||
|
'/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
|
||||||
|
'/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/',
|
||||||
|
'/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/',
|
||||||
|
'/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/',
|
||||||
|
'/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^c])$/',
|
||||||
|
'/^(?:(?=.)a[X-]b)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/',
|
||||||
|
'/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/',
|
||||||
|
'/^(?:(?=.)a[b]c)$/',
|
||||||
|
'/^(?:(?=.)a[b]c)$/',
|
||||||
|
'/^(?:(?=.)a[^/]c)$/',
|
||||||
|
'/^(?:a\\*c)$/',
|
||||||
|
'false',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/',
|
||||||
|
'/^(?:man\\/man1\\/bash\\.1)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[-abc])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[abc-])$/',
|
||||||
|
'/^(?:\\\\)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[\\\\])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[\\[])$/',
|
||||||
|
'/^(?:\\[)$/',
|
||||||
|
'/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[\\]])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[\\]-])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[a-z])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
|
||||||
|
'/^(?:\\[\\])$/',
|
||||||
|
'/^(?:\\[abc)$/',
|
||||||
|
'/^(?:(?=.)XYZ)$/i',
|
||||||
|
'/^(?:(?=.)ab[^/]*?)$/i',
|
||||||
|
'/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i',
|
||||||
|
'/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/',
|
||||||
|
'/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/',
|
||||||
|
'/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
|
||||||
|
'/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/',
|
||||||
|
'/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
|
||||||
|
'/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/',
|
||||||
|
'/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
|
||||||
|
'/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
|
||||||
|
'/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)\\[(?=.)#a[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
|
||||||
|
'/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/',
|
||||||
|
'/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/',
|
||||||
|
'/^(?:(?=.)a[^/]b)$/',
|
||||||
|
'/^(?:(?=.)#[^/]*?)$/',
|
||||||
|
'/^(?!^(?:(?=.)a[^/]*?)$).*$/',
|
||||||
|
'/^(?:(?=.)\\!a[^/]*?)$/',
|
||||||
|
'/^(?:(?=.)a[^/]*?)$/',
|
||||||
|
'/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/',
|
||||||
|
'/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/',
|
||||||
|
'/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ]
|
||||||
|
var re = 0;
|
||||||
|
|
||||||
|
tap.test("basic tests", function (t) {
|
||||||
|
var start = Date.now()
|
||||||
|
|
||||||
|
// [ pattern, [matches], MM opts, files, TAP opts]
|
||||||
|
patterns.forEach(function (c) {
|
||||||
|
if (typeof c === "function") return c()
|
||||||
|
if (typeof c === "string") return t.comment(c)
|
||||||
|
|
||||||
|
var pattern = c[0]
|
||||||
|
, expect = c[1].sort(alpha)
|
||||||
|
, options = c[2] || {}
|
||||||
|
, f = c[3] || files
|
||||||
|
, tapOpts = c[4] || {}
|
||||||
|
|
||||||
|
// options.debug = true
|
||||||
|
var m = new mm.Minimatch(pattern, options)
|
||||||
|
var r = m.makeRe()
|
||||||
|
var expectRe = regexps[re++]
|
||||||
|
tapOpts.re = String(r) || JSON.stringify(r)
|
||||||
|
tapOpts.files = JSON.stringify(f)
|
||||||
|
tapOpts.pattern = pattern
|
||||||
|
tapOpts.set = m.set
|
||||||
|
tapOpts.negated = m.negate
|
||||||
|
|
||||||
|
var actual = mm.match(f, pattern, options)
|
||||||
|
actual.sort(alpha)
|
||||||
|
|
||||||
|
t.equivalent( actual, expect
|
||||||
|
, JSON.stringify(pattern) + " " + JSON.stringify(expect)
|
||||||
|
, tapOpts )
|
||||||
|
|
||||||
|
t.equal(tapOpts.re, expectRe, tapOpts)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.comment("time=" + (Date.now() - start) + "ms")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test("global leak test", function (t) {
|
||||||
|
var globalAfter = Object.keys(global)
|
||||||
|
t.equivalent(globalAfter, globalBefore, "no new globals, please")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
function alpha (a, b) {
|
||||||
|
return a > b ? 1 : -1
|
||||||
|
}
|
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/brace-expand.js
generated
vendored
Normal file
33
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/brace-expand.js
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
var tap = require("tap")
|
||||||
|
, minimatch = require("../")
|
||||||
|
|
||||||
|
tap.test("brace expansion", function (t) {
|
||||||
|
// [ pattern, [expanded] ]
|
||||||
|
; [ [ "a{b,c{d,e},{f,g}h}x{y,z}"
|
||||||
|
, [ "abxy"
|
||||||
|
, "abxz"
|
||||||
|
, "acdxy"
|
||||||
|
, "acdxz"
|
||||||
|
, "acexy"
|
||||||
|
, "acexz"
|
||||||
|
, "afhxy"
|
||||||
|
, "afhxz"
|
||||||
|
, "aghxy"
|
||||||
|
, "aghxz" ] ]
|
||||||
|
, [ "a{1..5}b"
|
||||||
|
, [ "a1b"
|
||||||
|
, "a2b"
|
||||||
|
, "a3b"
|
||||||
|
, "a4b"
|
||||||
|
, "a5b" ] ]
|
||||||
|
, [ "a{b}c", ["a{b}c"] ]
|
||||||
|
].forEach(function (tc) {
|
||||||
|
var p = tc[0]
|
||||||
|
, expect = tc[1]
|
||||||
|
t.equivalent(minimatch.braceExpand(p), expect, p)
|
||||||
|
})
|
||||||
|
console.error("ending")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
14
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/caching.js
generated
vendored
Normal file
14
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/caching.js
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
var Minimatch = require("../minimatch.js").Minimatch
|
||||||
|
var tap = require("tap")
|
||||||
|
tap.test("cache test", function (t) {
|
||||||
|
var mm1 = new Minimatch("a?b")
|
||||||
|
var mm2 = new Minimatch("a?b")
|
||||||
|
t.equal(mm1, mm2, "should get the same object")
|
||||||
|
// the lru should drop it after 100 entries
|
||||||
|
for (var i = 0; i < 100; i ++) {
|
||||||
|
new Minimatch("a"+i)
|
||||||
|
}
|
||||||
|
mm2 = new Minimatch("a?b")
|
||||||
|
t.notEqual(mm1, mm2, "cache should have dropped")
|
||||||
|
t.end()
|
||||||
|
})
|
274
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/defaults.js
generated
vendored
Normal file
274
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/defaults.js
generated
vendored
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
|
||||||
|
//
|
||||||
|
// TODO: Some of these tests do very bad things with backslashes, and will
|
||||||
|
// most likely fail badly on windows. They should probably be skipped.
|
||||||
|
|
||||||
|
var tap = require("tap")
|
||||||
|
, globalBefore = Object.keys(global)
|
||||||
|
, mm = require("../")
|
||||||
|
, files = [ "a", "b", "c", "d", "abc"
|
||||||
|
, "abd", "abe", "bb", "bcd"
|
||||||
|
, "ca", "cb", "dd", "de"
|
||||||
|
, "bdir/", "bdir/cfile"]
|
||||||
|
, next = files.concat([ "a-b", "aXb"
|
||||||
|
, ".x", ".y" ])
|
||||||
|
|
||||||
|
tap.test("basic tests", function (t) {
|
||||||
|
var start = Date.now()
|
||||||
|
|
||||||
|
// [ pattern, [matches], MM opts, files, TAP opts]
|
||||||
|
; [ "http://www.bashcookbook.com/bashinfo" +
|
||||||
|
"/source/bash-1.14.7/tests/glob-test"
|
||||||
|
, ["a*", ["a", "abc", "abd", "abe"]]
|
||||||
|
, ["X*", ["X*"], {nonull: true}]
|
||||||
|
|
||||||
|
// allow null glob expansion
|
||||||
|
, ["X*", []]
|
||||||
|
|
||||||
|
// isaacs: Slightly different than bash/sh/ksh
|
||||||
|
// \\* is not un-escaped to literal "*" in a failed match,
|
||||||
|
// but it does make it get treated as a literal star
|
||||||
|
, ["\\*", ["\\*"], {nonull: true}]
|
||||||
|
, ["\\**", ["\\**"], {nonull: true}]
|
||||||
|
, ["\\*\\*", ["\\*\\*"], {nonull: true}]
|
||||||
|
|
||||||
|
, ["b*/", ["bdir/"]]
|
||||||
|
, ["c*", ["c", "ca", "cb"]]
|
||||||
|
, ["**", files]
|
||||||
|
|
||||||
|
, ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
|
||||||
|
, ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
|
||||||
|
|
||||||
|
, "legendary larry crashes bashes"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
|
||||||
|
, ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
|
||||||
|
|
||||||
|
, "character classes"
|
||||||
|
, ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
|
||||||
|
, ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
|
||||||
|
"bdir/", "ca", "cb", "dd", "de"]]
|
||||||
|
, ["a*[^c]", ["abd", "abe"]]
|
||||||
|
, function () { files.push("a-b", "aXb") }
|
||||||
|
, ["a[X-]b", ["a-b", "aXb"]]
|
||||||
|
, function () { files.push(".x", ".y") }
|
||||||
|
, ["[^a-c]*", ["d", "dd", "de"]]
|
||||||
|
, function () { files.push("a*b/", "a*b/ooo") }
|
||||||
|
, ["a\\*b/*", ["a*b/ooo"]]
|
||||||
|
, ["a\\*?/*", ["a*b/ooo"]]
|
||||||
|
, ["*\\\\!*", [], {null: true}, ["echo !7"]]
|
||||||
|
, ["*\\!*", ["echo !7"], null, ["echo !7"]]
|
||||||
|
, ["*.\\*", ["r.*"], null, ["r.*"]]
|
||||||
|
, ["a[b]c", ["abc"]]
|
||||||
|
, ["a[\\b]c", ["abc"]]
|
||||||
|
, ["a?c", ["abc"]]
|
||||||
|
, ["a\\*c", [], {null: true}, ["abc"]]
|
||||||
|
, ["", [""], { null: true }, [""]]
|
||||||
|
|
||||||
|
, "http://www.opensource.apple.com/source/bash/bash-23/" +
|
||||||
|
"bash/tests/glob-test"
|
||||||
|
, function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
|
||||||
|
, ["*/man*/bash.*", ["man/man1/bash.1"]]
|
||||||
|
, ["man/man1/bash.1", ["man/man1/bash.1"]]
|
||||||
|
, ["a***c", ["abc"], null, ["abc"]]
|
||||||
|
, ["a*****?c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?*****??", ["abc"], null, ["abc"]]
|
||||||
|
, ["*****??", ["abc"], null, ["abc"]]
|
||||||
|
, ["?*****?c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****c", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****?", ["abc"], null, ["abc"]]
|
||||||
|
, ["?***?****", ["abc"], null, ["abc"]]
|
||||||
|
, ["*******c", ["abc"], null, ["abc"]]
|
||||||
|
, ["*******?", ["abc"], null, ["abc"]]
|
||||||
|
, ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
|
||||||
|
, ["[-abc]", ["-"], null, ["-"]]
|
||||||
|
, ["[abc-]", ["-"], null, ["-"]]
|
||||||
|
, ["\\", ["\\"], null, ["\\"]]
|
||||||
|
, ["[\\\\]", ["\\"], null, ["\\"]]
|
||||||
|
, ["[[]", ["["], null, ["["]]
|
||||||
|
, ["[", ["["], null, ["["]]
|
||||||
|
, ["[*", ["[abc"], null, ["[abc"]]
|
||||||
|
, "a right bracket shall lose its special meaning and\n" +
|
||||||
|
"represent itself in a bracket expression if it occurs\n" +
|
||||||
|
"first in the list. -- POSIX.2 2.8.3.2"
|
||||||
|
, ["[]]", ["]"], null, ["]"]]
|
||||||
|
, ["[]-]", ["]"], null, ["]"]]
|
||||||
|
, ["[a-\z]", ["p"], null, ["p"]]
|
||||||
|
, ["??**********?****?", [], { null: true }, ["abc"]]
|
||||||
|
, ["??**********?****c", [], { null: true }, ["abc"]]
|
||||||
|
, ["?************c****?****", [], { null: true }, ["abc"]]
|
||||||
|
, ["*c*?**", [], { null: true }, ["abc"]]
|
||||||
|
, ["a*****c*?**", [], { null: true }, ["abc"]]
|
||||||
|
, ["a********???*******", [], { null: true }, ["abc"]]
|
||||||
|
, ["[]", [], { null: true }, ["a"]]
|
||||||
|
, ["[abc", [], { null: true }, ["["]]
|
||||||
|
|
||||||
|
, "nocase tests"
|
||||||
|
, ["XYZ", ["xYz"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
, ["ab*", ["ABC"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
, ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
|
||||||
|
, ["xYz", "ABC", "IjK"]]
|
||||||
|
|
||||||
|
// [ pattern, [matches], MM opts, files, TAP opts]
|
||||||
|
, "onestar/twostar"
|
||||||
|
, ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
|
||||||
|
, ["{/?,*}", ["/a", "bb"], {null: true}
|
||||||
|
, ["/a", "/b/b", "/a/b/c", "bb"]]
|
||||||
|
|
||||||
|
, "dots should not match unless requested"
|
||||||
|
, ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
|
||||||
|
|
||||||
|
// .. and . can only match patterns starting with .,
|
||||||
|
// even when options.dot is set.
|
||||||
|
, function () {
|
||||||
|
files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
|
||||||
|
}
|
||||||
|
, ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
|
||||||
|
, ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
|
||||||
|
, ["a/*/b", ["a/c/b"], {dot:false}]
|
||||||
|
, ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
|
||||||
|
|
||||||
|
|
||||||
|
// this also tests that changing the options needs
|
||||||
|
// to change the cache key, even if the pattern is
|
||||||
|
// the same!
|
||||||
|
, ["**", ["a/b","a/.d",".a/.d"], { dot: true }
|
||||||
|
, [ ".a/.d", "a/.d", "a/b"]]
|
||||||
|
|
||||||
|
, "paren sets cannot contain slashes"
|
||||||
|
, ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
|
||||||
|
|
||||||
|
// brace sets trump all else.
|
||||||
|
//
|
||||||
|
// invalid glob pattern. fails on bash4 and bsdglob.
|
||||||
|
// however, in this implementation, it's easier just
|
||||||
|
// to do the intuitive thing, and let brace-expansion
|
||||||
|
// actually come before parsing any extglob patterns,
|
||||||
|
// like the documentation seems to say.
|
||||||
|
//
|
||||||
|
// XXX: if anyone complains about this, either fix it
|
||||||
|
// or tell them to grow up and stop complaining.
|
||||||
|
//
|
||||||
|
// bash/bsdglob says this:
|
||||||
|
// , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
|
||||||
|
// but we do this instead:
|
||||||
|
, ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
|
||||||
|
|
||||||
|
// test partial parsing in the presence of comment/negation chars
|
||||||
|
, ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
|
||||||
|
, ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
|
||||||
|
|
||||||
|
// like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
|
||||||
|
, ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
|
||||||
|
, ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
|
||||||
|
, {}
|
||||||
|
, ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
|
||||||
|
|
||||||
|
|
||||||
|
// crazy nested {,,} and *(||) tests.
|
||||||
|
, function () {
|
||||||
|
files = [ "a", "b", "c", "d"
|
||||||
|
, "ab", "ac", "ad"
|
||||||
|
, "bc", "cb"
|
||||||
|
, "bc,d", "c,db", "c,d"
|
||||||
|
, "d)", "(b|c", "*(b|c"
|
||||||
|
, "b|c", "b|cc", "cb|c"
|
||||||
|
, "x(a|b|c)", "x(a|c)"
|
||||||
|
, "(a|b|c)", "(a|c)"]
|
||||||
|
}
|
||||||
|
, ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
|
||||||
|
, ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
|
||||||
|
// a
|
||||||
|
// *(b|c)
|
||||||
|
// *(b|d)
|
||||||
|
, ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
|
||||||
|
, ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
|
||||||
|
|
||||||
|
|
||||||
|
// test various flag settings.
|
||||||
|
, [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
|
||||||
|
, { noext: true } ]
|
||||||
|
, ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
|
||||||
|
, ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
|
||||||
|
, ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
|
||||||
|
|
||||||
|
|
||||||
|
// begin channelling Boole and deMorgan...
|
||||||
|
, "negation tests"
|
||||||
|
, function () {
|
||||||
|
files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
|
||||||
|
}
|
||||||
|
|
||||||
|
// anything that is NOT a* matches.
|
||||||
|
, ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
|
||||||
|
|
||||||
|
// anything that IS !a* matches.
|
||||||
|
, ["!a*", ["!ab", "!abc"], {nonegate: true}]
|
||||||
|
|
||||||
|
// anything that IS a* matches
|
||||||
|
, ["!!a*", ["a!b"]]
|
||||||
|
|
||||||
|
// anything that is NOT !a* matches
|
||||||
|
, ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
|
||||||
|
|
||||||
|
// negation nestled within a pattern
|
||||||
|
, function () {
|
||||||
|
files = [ "foo.js"
|
||||||
|
, "foo.bar"
|
||||||
|
// can't match this one without negative lookbehind.
|
||||||
|
, "foo.js.js"
|
||||||
|
, "blar.js"
|
||||||
|
, "foo."
|
||||||
|
, "boo.js.boo" ]
|
||||||
|
}
|
||||||
|
, ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
|
||||||
|
|
||||||
|
].forEach(function (c) {
|
||||||
|
if (typeof c === "function") return c()
|
||||||
|
if (typeof c === "string") return t.comment(c)
|
||||||
|
|
||||||
|
var pattern = c[0]
|
||||||
|
, expect = c[1].sort(alpha)
|
||||||
|
, options = c[2]
|
||||||
|
, f = c[3] || files
|
||||||
|
, tapOpts = c[4] || {}
|
||||||
|
|
||||||
|
// options.debug = true
|
||||||
|
var Class = mm.defaults(options).Minimatch
|
||||||
|
var m = new Class(pattern, {})
|
||||||
|
var r = m.makeRe()
|
||||||
|
tapOpts.re = String(r) || JSON.stringify(r)
|
||||||
|
tapOpts.files = JSON.stringify(f)
|
||||||
|
tapOpts.pattern = pattern
|
||||||
|
tapOpts.set = m.set
|
||||||
|
tapOpts.negated = m.negate
|
||||||
|
|
||||||
|
var actual = mm.match(f, pattern, options)
|
||||||
|
actual.sort(alpha)
|
||||||
|
|
||||||
|
t.equivalent( actual, expect
|
||||||
|
, JSON.stringify(pattern) + " " + JSON.stringify(expect)
|
||||||
|
, tapOpts )
|
||||||
|
})
|
||||||
|
|
||||||
|
t.comment("time=" + (Date.now() - start) + "ms")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test("global leak test", function (t) {
|
||||||
|
var globalAfter = Object.keys(global)
|
||||||
|
t.equivalent(globalAfter, globalBefore, "no new globals, please")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
function alpha (a, b) {
|
||||||
|
return a > b ? 1 : -1
|
||||||
|
}
|
8
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js
generated
vendored
Normal file
8
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
var test = require('tap').test
|
||||||
|
var minimatch = require('../')
|
||||||
|
|
||||||
|
test('extglob ending with statechar', function(t) {
|
||||||
|
t.notOk(minimatch('ax', 'a?(b*)'))
|
||||||
|
t.ok(minimatch('ax', '?(a*|b)'))
|
||||||
|
t.end()
|
||||||
|
})
|
58
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json
generated
vendored
Normal file
58
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"author": {
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"url": "http://blog.izs.me/"
|
||||||
|
},
|
||||||
|
"name": "glob",
|
||||||
|
"description": "a little globber",
|
||||||
|
"version": "3.2.11",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/node-glob.git"
|
||||||
|
},
|
||||||
|
"main": "glob.js",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tap": "~0.4.0",
|
||||||
|
"mkdirp": "0",
|
||||||
|
"rimraf": "1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test/*.js",
|
||||||
|
"test-regen": "TEST_REGEN=1 node test/00-setup.js"
|
||||||
|
},
|
||||||
|
"license": "BSD",
|
||||||
|
"gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/node-glob/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/isaacs/node-glob",
|
||||||
|
"_id": "glob@3.2.11",
|
||||||
|
"_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
|
||||||
|
"_from": "glob@~3.2.9",
|
||||||
|
"_npmVersion": "1.4.10",
|
||||||
|
"_npmUser": {
|
||||||
|
"name": "isaacs",
|
||||||
|
"email": "i@izs.me"
|
||||||
|
},
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"name": "isaacs",
|
||||||
|
"email": "i@izs.me"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dist": {
|
||||||
|
"shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
|
||||||
|
"tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
|
||||||
|
"readme": "ERROR: No README data found!"
|
||||||
|
}
|
176
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/00-setup.js
generated
vendored
Normal file
176
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/00-setup.js
generated
vendored
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
// just a little pre-run script to set up the fixtures.
|
||||||
|
// zz-finish cleans it up
|
||||||
|
|
||||||
|
var mkdirp = require("mkdirp")
|
||||||
|
var path = require("path")
|
||||||
|
var i = 0
|
||||||
|
var tap = require("tap")
|
||||||
|
var fs = require("fs")
|
||||||
|
var rimraf = require("rimraf")
|
||||||
|
|
||||||
|
var files =
|
||||||
|
[ "a/.abcdef/x/y/z/a"
|
||||||
|
, "a/abcdef/g/h"
|
||||||
|
, "a/abcfed/g/h"
|
||||||
|
, "a/b/c/d"
|
||||||
|
, "a/bc/e/f"
|
||||||
|
, "a/c/d/c/b"
|
||||||
|
, "a/cb/e/f"
|
||||||
|
]
|
||||||
|
|
||||||
|
var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c")
|
||||||
|
var symlinkFrom = "../.."
|
||||||
|
|
||||||
|
files = files.map(function (f) {
|
||||||
|
return path.resolve(__dirname, f)
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test("remove fixtures", function (t) {
|
||||||
|
rimraf(path.resolve(__dirname, "a"), function (er) {
|
||||||
|
t.ifError(er, "remove fixtures")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
files.forEach(function (f) {
|
||||||
|
tap.test(f, function (t) {
|
||||||
|
var d = path.dirname(f)
|
||||||
|
mkdirp(d, 0755, function (er) {
|
||||||
|
if (er) {
|
||||||
|
t.fail(er)
|
||||||
|
return t.bailout()
|
||||||
|
}
|
||||||
|
fs.writeFile(f, "i like tests", function (er) {
|
||||||
|
t.ifError(er, "make file")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
if (process.platform !== "win32") {
|
||||||
|
tap.test("symlinky", function (t) {
|
||||||
|
var d = path.dirname(symlinkTo)
|
||||||
|
console.error("mkdirp", d)
|
||||||
|
mkdirp(d, 0755, function (er) {
|
||||||
|
t.ifError(er)
|
||||||
|
fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) {
|
||||||
|
t.ifError(er, "make symlink")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) {
|
||||||
|
w = "/tmp/glob-test/" + w
|
||||||
|
tap.test("create " + w, function (t) {
|
||||||
|
mkdirp(w, function (er) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.pass(w)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// generate the bash pattern test-fixtures if possible
|
||||||
|
if (process.platform === "win32" || !process.env.TEST_REGEN) {
|
||||||
|
console.error("Windows, or TEST_REGEN unset. Using cached fixtures.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var spawn = require("child_process").spawn;
|
||||||
|
var globs =
|
||||||
|
// put more patterns here.
|
||||||
|
// anything that would be directly in / should be in /tmp/glob-test
|
||||||
|
["test/a/*/+(c|g)/./d"
|
||||||
|
,"test/a/**/[cg]/../[cg]"
|
||||||
|
,"test/a/{b,c,d,e,f}/**/g"
|
||||||
|
,"test/a/b/**"
|
||||||
|
,"test/**/g"
|
||||||
|
,"test/a/abc{fed,def}/g/h"
|
||||||
|
,"test/a/abc{fed/g,def}/**/"
|
||||||
|
,"test/a/abc{fed/g,def}/**///**/"
|
||||||
|
,"test/**/a/**/"
|
||||||
|
,"test/+(a|b|c)/a{/,bc*}/**"
|
||||||
|
,"test/*/*/*/f"
|
||||||
|
,"test/**/f"
|
||||||
|
,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
|
||||||
|
,"{./*/*,/tmp/glob-test/*}"
|
||||||
|
,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me!
|
||||||
|
,"test/a/!(symlink)/**"
|
||||||
|
]
|
||||||
|
var bashOutput = {}
|
||||||
|
var fs = require("fs")
|
||||||
|
|
||||||
|
globs.forEach(function (pattern) {
|
||||||
|
tap.test("generate fixture " + pattern, function (t) {
|
||||||
|
var cmd = "shopt -s globstar && " +
|
||||||
|
"shopt -s extglob && " +
|
||||||
|
"shopt -s nullglob && " +
|
||||||
|
// "shopt >&2; " +
|
||||||
|
"eval \'for i in " + pattern + "; do echo $i; done\'"
|
||||||
|
var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) })
|
||||||
|
var out = []
|
||||||
|
cp.stdout.on("data", function (c) {
|
||||||
|
out.push(c)
|
||||||
|
})
|
||||||
|
cp.stderr.pipe(process.stderr)
|
||||||
|
cp.on("close", function (code) {
|
||||||
|
out = flatten(out)
|
||||||
|
if (!out)
|
||||||
|
out = []
|
||||||
|
else
|
||||||
|
out = cleanResults(out.split(/\r*\n/))
|
||||||
|
|
||||||
|
bashOutput[pattern] = out
|
||||||
|
t.notOk(code, "bash test should finish nicely")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test("save fixtures", function (t) {
|
||||||
|
var fname = path.resolve(__dirname, "bash-results.json")
|
||||||
|
var data = JSON.stringify(bashOutput, null, 2) + "\n"
|
||||||
|
fs.writeFile(fname, data, function (er) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function cleanResults (m) {
|
||||||
|
// normalize discrepancies in ordering, duplication,
|
||||||
|
// and ending slashes.
|
||||||
|
return m.map(function (m) {
|
||||||
|
return m.replace(/\/+/g, "/").replace(/\/$/, "")
|
||||||
|
}).sort(alphasort).reduce(function (set, f) {
|
||||||
|
if (f !== set[set.length - 1]) set.push(f)
|
||||||
|
return set
|
||||||
|
}, []).sort(alphasort).map(function (f) {
|
||||||
|
// de-windows
|
||||||
|
return (process.platform !== 'win32') ? f
|
||||||
|
: f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function flatten (chunks) {
|
||||||
|
var s = 0
|
||||||
|
chunks.forEach(function (c) { s += c.length })
|
||||||
|
var out = new Buffer(s)
|
||||||
|
s = 0
|
||||||
|
chunks.forEach(function (c) {
|
||||||
|
c.copy(out, s)
|
||||||
|
s += c.length
|
||||||
|
})
|
||||||
|
|
||||||
|
return out.toString().trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
function alphasort (a, b) {
|
||||||
|
a = a.toLowerCase()
|
||||||
|
b = b.toLowerCase()
|
||||||
|
return a > b ? 1 : a < b ? -1 : 0
|
||||||
|
}
|
63
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/bash-comparison.js
generated
vendored
Normal file
63
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/bash-comparison.js
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// basic test
|
||||||
|
// show that it does the same thing by default as the shell.
|
||||||
|
var tap = require("tap")
|
||||||
|
, child_process = require("child_process")
|
||||||
|
, bashResults = require("./bash-results.json")
|
||||||
|
, globs = Object.keys(bashResults)
|
||||||
|
, glob = require("../")
|
||||||
|
, path = require("path")
|
||||||
|
|
||||||
|
// run from the root of the project
|
||||||
|
// this is usually where you're at anyway, but be sure.
|
||||||
|
process.chdir(path.resolve(__dirname, ".."))
|
||||||
|
|
||||||
|
function alphasort (a, b) {
|
||||||
|
a = a.toLowerCase()
|
||||||
|
b = b.toLowerCase()
|
||||||
|
return a > b ? 1 : a < b ? -1 : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
globs.forEach(function (pattern) {
|
||||||
|
var expect = bashResults[pattern]
|
||||||
|
// anything regarding the symlink thing will fail on windows, so just skip it
|
||||||
|
if (process.platform === "win32" &&
|
||||||
|
expect.some(function (m) {
|
||||||
|
return /\/symlink\//.test(m)
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
|
||||||
|
tap.test(pattern, function (t) {
|
||||||
|
glob(pattern, function (er, matches) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
|
||||||
|
// sort and unmark, just to match the shell results
|
||||||
|
matches = cleanResults(matches)
|
||||||
|
|
||||||
|
t.deepEqual(matches, expect, pattern)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test(pattern + " sync", function (t) {
|
||||||
|
var matches = cleanResults(glob.sync(pattern))
|
||||||
|
|
||||||
|
t.deepEqual(matches, expect, "should match shell")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function cleanResults (m) {
|
||||||
|
// normalize discrepancies in ordering, duplication,
|
||||||
|
// and ending slashes.
|
||||||
|
return m.map(function (m) {
|
||||||
|
return m.replace(/\/+/g, "/").replace(/\/$/, "")
|
||||||
|
}).sort(alphasort).reduce(function (set, f) {
|
||||||
|
if (f !== set[set.length - 1]) set.push(f)
|
||||||
|
return set
|
||||||
|
}, []).sort(alphasort).map(function (f) {
|
||||||
|
// de-windows
|
||||||
|
return (process.platform !== 'win32') ? f
|
||||||
|
: f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/')
|
||||||
|
})
|
||||||
|
}
|
351
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/bash-results.json
generated
vendored
Normal file
351
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/bash-results.json
generated
vendored
Normal file
@ -0,0 +1,351 @@
|
|||||||
|
{
|
||||||
|
"test/a/*/+(c|g)/./d": [
|
||||||
|
"test/a/b/c/./d"
|
||||||
|
],
|
||||||
|
"test/a/**/[cg]/../[cg]": [
|
||||||
|
"test/a/abcdef/g/../g",
|
||||||
|
"test/a/abcfed/g/../g",
|
||||||
|
"test/a/b/c/../c",
|
||||||
|
"test/a/c/../c",
|
||||||
|
"test/a/c/d/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c"
|
||||||
|
],
|
||||||
|
"test/a/{b,c,d,e,f}/**/g": [],
|
||||||
|
"test/a/b/**": [
|
||||||
|
"test/a/b",
|
||||||
|
"test/a/b/c",
|
||||||
|
"test/a/b/c/d"
|
||||||
|
],
|
||||||
|
"test/**/g": [
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcfed/g"
|
||||||
|
],
|
||||||
|
"test/a/abc{fed,def}/g/h": [
|
||||||
|
"test/a/abcdef/g/h",
|
||||||
|
"test/a/abcfed/g/h"
|
||||||
|
],
|
||||||
|
"test/a/abc{fed/g,def}/**/": [
|
||||||
|
"test/a/abcdef",
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcfed/g"
|
||||||
|
],
|
||||||
|
"test/a/abc{fed/g,def}/**///**/": [
|
||||||
|
"test/a/abcdef",
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcfed/g"
|
||||||
|
],
|
||||||
|
"test/**/a/**/": [
|
||||||
|
"test/a",
|
||||||
|
"test/a/abcdef",
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcfed",
|
||||||
|
"test/a/abcfed/g",
|
||||||
|
"test/a/b",
|
||||||
|
"test/a/b/c",
|
||||||
|
"test/a/bc",
|
||||||
|
"test/a/bc/e",
|
||||||
|
"test/a/c",
|
||||||
|
"test/a/c/d",
|
||||||
|
"test/a/c/d/c",
|
||||||
|
"test/a/cb",
|
||||||
|
"test/a/cb/e",
|
||||||
|
"test/a/symlink",
|
||||||
|
"test/a/symlink/a",
|
||||||
|
"test/a/symlink/a/b",
|
||||||
|
"test/a/symlink/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b"
|
||||||
|
],
|
||||||
|
"test/+(a|b|c)/a{/,bc*}/**": [
|
||||||
|
"test/a/abcdef",
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcdef/g/h",
|
||||||
|
"test/a/abcfed",
|
||||||
|
"test/a/abcfed/g",
|
||||||
|
"test/a/abcfed/g/h"
|
||||||
|
],
|
||||||
|
"test/*/*/*/f": [
|
||||||
|
"test/a/bc/e/f",
|
||||||
|
"test/a/cb/e/f"
|
||||||
|
],
|
||||||
|
"test/**/f": [
|
||||||
|
"test/a/bc/e/f",
|
||||||
|
"test/a/cb/e/f"
|
||||||
|
],
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
|
||||||
|
"test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c"
|
||||||
|
],
|
||||||
|
"{./*/*,/tmp/glob-test/*}": [
|
||||||
|
"./examples/g.js",
|
||||||
|
"./examples/usr-local.js",
|
||||||
|
"./node_modules/inherits",
|
||||||
|
"./node_modules/minimatch",
|
||||||
|
"./node_modules/mkdirp",
|
||||||
|
"./node_modules/rimraf",
|
||||||
|
"./node_modules/tap",
|
||||||
|
"./test/00-setup.js",
|
||||||
|
"./test/a",
|
||||||
|
"./test/bash-comparison.js",
|
||||||
|
"./test/bash-results.json",
|
||||||
|
"./test/cwd-test.js",
|
||||||
|
"./test/globstar-match.js",
|
||||||
|
"./test/mark.js",
|
||||||
|
"./test/new-glob-optional-options.js",
|
||||||
|
"./test/nocase-nomagic.js",
|
||||||
|
"./test/pause-resume.js",
|
||||||
|
"./test/readme-issue.js",
|
||||||
|
"./test/root-nomount.js",
|
||||||
|
"./test/root.js",
|
||||||
|
"./test/stat.js",
|
||||||
|
"./test/zz-cleanup.js",
|
||||||
|
"/tmp/glob-test/asdf",
|
||||||
|
"/tmp/glob-test/bar",
|
||||||
|
"/tmp/glob-test/baz",
|
||||||
|
"/tmp/glob-test/foo",
|
||||||
|
"/tmp/glob-test/quux",
|
||||||
|
"/tmp/glob-test/qwer",
|
||||||
|
"/tmp/glob-test/rewq"
|
||||||
|
],
|
||||||
|
"{/tmp/glob-test/*,*}": [
|
||||||
|
"/tmp/glob-test/asdf",
|
||||||
|
"/tmp/glob-test/bar",
|
||||||
|
"/tmp/glob-test/baz",
|
||||||
|
"/tmp/glob-test/foo",
|
||||||
|
"/tmp/glob-test/quux",
|
||||||
|
"/tmp/glob-test/qwer",
|
||||||
|
"/tmp/glob-test/rewq",
|
||||||
|
"examples",
|
||||||
|
"glob.js",
|
||||||
|
"LICENSE",
|
||||||
|
"node_modules",
|
||||||
|
"package.json",
|
||||||
|
"README.md",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"test/a/!(symlink)/**": [
|
||||||
|
"test/a/abcdef",
|
||||||
|
"test/a/abcdef/g",
|
||||||
|
"test/a/abcdef/g/h",
|
||||||
|
"test/a/abcfed",
|
||||||
|
"test/a/abcfed/g",
|
||||||
|
"test/a/abcfed/g/h",
|
||||||
|
"test/a/b",
|
||||||
|
"test/a/b/c",
|
||||||
|
"test/a/b/c/d",
|
||||||
|
"test/a/bc",
|
||||||
|
"test/a/bc/e",
|
||||||
|
"test/a/bc/e/f",
|
||||||
|
"test/a/c",
|
||||||
|
"test/a/c/d",
|
||||||
|
"test/a/c/d/c",
|
||||||
|
"test/a/c/d/c/b",
|
||||||
|
"test/a/cb",
|
||||||
|
"test/a/cb/e",
|
||||||
|
"test/a/cb/e/f"
|
||||||
|
]
|
||||||
|
}
|
55
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/cwd-test.js
generated
vendored
Normal file
55
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/cwd-test.js
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
var tap = require("tap")
|
||||||
|
|
||||||
|
var origCwd = process.cwd()
|
||||||
|
process.chdir(__dirname)
|
||||||
|
|
||||||
|
tap.test("changing cwd and searching for **/d", function (t) {
|
||||||
|
var glob = require('../')
|
||||||
|
var path = require('path')
|
||||||
|
t.test('.', function (t) {
|
||||||
|
glob('**/d', function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('a', function (t) {
|
||||||
|
glob('**/d', {cwd:path.resolve('a')}, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ 'b/c/d', 'c/d' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('a/b', function (t) {
|
||||||
|
glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ 'c/d' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('a/b/', function (t) {
|
||||||
|
glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ 'c/d' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('.', function (t) {
|
||||||
|
glob('**/d', {cwd: process.cwd()}, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('cd -', function (t) {
|
||||||
|
process.chdir(origCwd)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
19
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/globstar-match.js
generated
vendored
Normal file
19
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/globstar-match.js
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
var Glob = require("../glob.js").Glob
|
||||||
|
var test = require('tap').test
|
||||||
|
|
||||||
|
test('globstar should not have dupe matches', function(t) {
|
||||||
|
var pattern = 'a/**/[gh]'
|
||||||
|
var g = new Glob(pattern, { cwd: __dirname })
|
||||||
|
var matches = []
|
||||||
|
g.on('match', function(m) {
|
||||||
|
console.error('match %j', m)
|
||||||
|
matches.push(m)
|
||||||
|
})
|
||||||
|
g.on('end', function(set) {
|
||||||
|
console.error('set', set)
|
||||||
|
matches = matches.sort()
|
||||||
|
set = set.sort()
|
||||||
|
t.same(matches, set, 'should have same set of matches')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
118
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/mark.js
generated
vendored
Normal file
118
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/mark.js
generated
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
var test = require("tap").test
|
||||||
|
var glob = require('../')
|
||||||
|
process.chdir(__dirname)
|
||||||
|
|
||||||
|
// expose timing issues
|
||||||
|
var lag = 5
|
||||||
|
glob.Glob.prototype._stat = function(o) { return function(f, cb) {
|
||||||
|
var args = arguments
|
||||||
|
setTimeout(function() {
|
||||||
|
o.call(this, f, cb)
|
||||||
|
}.bind(this), lag += 5)
|
||||||
|
}}(glob.Glob.prototype._stat)
|
||||||
|
|
||||||
|
|
||||||
|
test("mark, with **", function (t) {
|
||||||
|
glob("a/*b*/**", {mark: true}, function (er, results) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
var expect =
|
||||||
|
[ 'a/abcdef/',
|
||||||
|
'a/abcdef/g/',
|
||||||
|
'a/abcdef/g/h',
|
||||||
|
'a/abcfed/',
|
||||||
|
'a/abcfed/g/',
|
||||||
|
'a/abcfed/g/h',
|
||||||
|
'a/b/',
|
||||||
|
'a/b/c/',
|
||||||
|
'a/b/c/d',
|
||||||
|
'a/bc/',
|
||||||
|
'a/bc/e/',
|
||||||
|
'a/bc/e/f',
|
||||||
|
'a/cb/',
|
||||||
|
'a/cb/e/',
|
||||||
|
'a/cb/e/f' ]
|
||||||
|
|
||||||
|
t.same(results, expect)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("mark, no / on pattern", function (t) {
|
||||||
|
glob("a/*", {mark: true}, function (er, results) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
var expect = [ 'a/abcdef/',
|
||||||
|
'a/abcfed/',
|
||||||
|
'a/b/',
|
||||||
|
'a/bc/',
|
||||||
|
'a/c/',
|
||||||
|
'a/cb/' ]
|
||||||
|
|
||||||
|
if (process.platform !== "win32")
|
||||||
|
expect.push('a/symlink/')
|
||||||
|
|
||||||
|
t.same(results, expect)
|
||||||
|
t.end()
|
||||||
|
}).on('match', function(m) {
|
||||||
|
t.similar(m, /\/$/)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("mark=false, no / on pattern", function (t) {
|
||||||
|
glob("a/*", function (er, results) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
var expect = [ 'a/abcdef',
|
||||||
|
'a/abcfed',
|
||||||
|
'a/b',
|
||||||
|
'a/bc',
|
||||||
|
'a/c',
|
||||||
|
'a/cb' ]
|
||||||
|
|
||||||
|
if (process.platform !== "win32")
|
||||||
|
expect.push('a/symlink')
|
||||||
|
t.same(results, expect)
|
||||||
|
t.end()
|
||||||
|
}).on('match', function(m) {
|
||||||
|
t.similar(m, /[^\/]$/)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("mark=true, / on pattern", function (t) {
|
||||||
|
glob("a/*/", {mark: true}, function (er, results) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
var expect = [ 'a/abcdef/',
|
||||||
|
'a/abcfed/',
|
||||||
|
'a/b/',
|
||||||
|
'a/bc/',
|
||||||
|
'a/c/',
|
||||||
|
'a/cb/' ]
|
||||||
|
if (process.platform !== "win32")
|
||||||
|
expect.push('a/symlink/')
|
||||||
|
t.same(results, expect)
|
||||||
|
t.end()
|
||||||
|
}).on('match', function(m) {
|
||||||
|
t.similar(m, /\/$/)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("mark=false, / on pattern", function (t) {
|
||||||
|
glob("a/*/", function (er, results) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
var expect = [ 'a/abcdef/',
|
||||||
|
'a/abcfed/',
|
||||||
|
'a/b/',
|
||||||
|
'a/bc/',
|
||||||
|
'a/c/',
|
||||||
|
'a/cb/' ]
|
||||||
|
if (process.platform !== "win32")
|
||||||
|
expect.push('a/symlink/')
|
||||||
|
t.same(results, expect)
|
||||||
|
t.end()
|
||||||
|
}).on('match', function(m) {
|
||||||
|
t.similar(m, /\/$/)
|
||||||
|
})
|
||||||
|
})
|
10
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/new-glob-optional-options.js
generated
vendored
Normal file
10
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/new-glob-optional-options.js
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
var Glob = require('../glob.js').Glob;
|
||||||
|
var test = require('tap').test;
|
||||||
|
|
||||||
|
test('new glob, with cb, and no options', function (t) {
|
||||||
|
new Glob(__filename, function(er, results) {
|
||||||
|
if (er) throw er;
|
||||||
|
t.same(results, [__filename]);
|
||||||
|
t.end();
|
||||||
|
});
|
||||||
|
});
|
113
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/nocase-nomagic.js
generated
vendored
Normal file
113
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/nocase-nomagic.js
generated
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
var fs = require('fs');
|
||||||
|
var test = require('tap').test;
|
||||||
|
var glob = require('../');
|
||||||
|
|
||||||
|
test('mock fs', function(t) {
|
||||||
|
var stat = fs.stat
|
||||||
|
var statSync = fs.statSync
|
||||||
|
var readdir = fs.readdir
|
||||||
|
var readdirSync = fs.readdirSync
|
||||||
|
|
||||||
|
function fakeStat(path) {
|
||||||
|
var ret
|
||||||
|
switch (path.toLowerCase()) {
|
||||||
|
case '/tmp': case '/tmp/':
|
||||||
|
ret = { isDirectory: function() { return true } }
|
||||||
|
break
|
||||||
|
case '/tmp/a':
|
||||||
|
ret = { isDirectory: function() { return false } }
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.stat = function(path, cb) {
|
||||||
|
var f = fakeStat(path);
|
||||||
|
if (f) {
|
||||||
|
process.nextTick(function() {
|
||||||
|
cb(null, f)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
stat.call(fs, path, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.statSync = function(path) {
|
||||||
|
return fakeStat(path) || statSync.call(fs, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
function fakeReaddir(path) {
|
||||||
|
var ret
|
||||||
|
switch (path.toLowerCase()) {
|
||||||
|
case '/tmp': case '/tmp/':
|
||||||
|
ret = [ 'a', 'A' ]
|
||||||
|
break
|
||||||
|
case '/':
|
||||||
|
ret = ['tmp', 'tMp', 'tMP', 'TMP']
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.readdir = function(path, cb) {
|
||||||
|
var f = fakeReaddir(path)
|
||||||
|
if (f)
|
||||||
|
process.nextTick(function() {
|
||||||
|
cb(null, f)
|
||||||
|
})
|
||||||
|
else
|
||||||
|
readdir.call(fs, path, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.readdirSync = function(path) {
|
||||||
|
return fakeReaddir(path) || readdirSync.call(fs, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.pass('mocked')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('nocase, nomagic', function(t) {
|
||||||
|
var n = 2
|
||||||
|
var want = [ '/TMP/A',
|
||||||
|
'/TMP/a',
|
||||||
|
'/tMP/A',
|
||||||
|
'/tMP/a',
|
||||||
|
'/tMp/A',
|
||||||
|
'/tMp/a',
|
||||||
|
'/tmp/A',
|
||||||
|
'/tmp/a' ]
|
||||||
|
glob('/tmp/a', { nocase: true }, function(er, res) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.same(res.sort(), want)
|
||||||
|
if (--n === 0) t.end()
|
||||||
|
})
|
||||||
|
glob('/tmp/A', { nocase: true }, function(er, res) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.same(res.sort(), want)
|
||||||
|
if (--n === 0) t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('nocase, with some magic', function(t) {
|
||||||
|
t.plan(2)
|
||||||
|
var want = [ '/TMP/A',
|
||||||
|
'/TMP/a',
|
||||||
|
'/tMP/A',
|
||||||
|
'/tMP/a',
|
||||||
|
'/tMp/A',
|
||||||
|
'/tMp/a',
|
||||||
|
'/tmp/A',
|
||||||
|
'/tmp/a' ]
|
||||||
|
glob('/tmp/*', { nocase: true }, function(er, res) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.same(res.sort(), want)
|
||||||
|
})
|
||||||
|
glob('/tmp/*', { nocase: true }, function(er, res) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.same(res.sort(), want)
|
||||||
|
})
|
||||||
|
})
|
73
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/pause-resume.js
generated
vendored
Normal file
73
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/pause-resume.js
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// show that no match events happen while paused.
|
||||||
|
var tap = require("tap")
|
||||||
|
, child_process = require("child_process")
|
||||||
|
// just some gnarly pattern with lots of matches
|
||||||
|
, pattern = "test/a/!(symlink)/**"
|
||||||
|
, bashResults = require("./bash-results.json")
|
||||||
|
, patterns = Object.keys(bashResults)
|
||||||
|
, glob = require("../")
|
||||||
|
, Glob = glob.Glob
|
||||||
|
, path = require("path")
|
||||||
|
|
||||||
|
// run from the root of the project
|
||||||
|
// this is usually where you're at anyway, but be sure.
|
||||||
|
process.chdir(path.resolve(__dirname, ".."))
|
||||||
|
|
||||||
|
function alphasort (a, b) {
|
||||||
|
a = a.toLowerCase()
|
||||||
|
b = b.toLowerCase()
|
||||||
|
return a > b ? 1 : a < b ? -1 : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanResults (m) {
|
||||||
|
// normalize discrepancies in ordering, duplication,
|
||||||
|
// and ending slashes.
|
||||||
|
return m.map(function (m) {
|
||||||
|
return m.replace(/\/+/g, "/").replace(/\/$/, "")
|
||||||
|
}).sort(alphasort).reduce(function (set, f) {
|
||||||
|
if (f !== set[set.length - 1]) set.push(f)
|
||||||
|
return set
|
||||||
|
}, []).sort(alphasort).map(function (f) {
|
||||||
|
// de-windows
|
||||||
|
return (process.platform !== 'win32') ? f
|
||||||
|
: f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var globResults = []
|
||||||
|
tap.test("use a Glob object, and pause/resume it", function (t) {
|
||||||
|
var g = new Glob(pattern)
|
||||||
|
, paused = false
|
||||||
|
, res = []
|
||||||
|
, expect = bashResults[pattern]
|
||||||
|
|
||||||
|
g.on("pause", function () {
|
||||||
|
console.error("pause")
|
||||||
|
})
|
||||||
|
|
||||||
|
g.on("resume", function () {
|
||||||
|
console.error("resume")
|
||||||
|
})
|
||||||
|
|
||||||
|
g.on("match", function (m) {
|
||||||
|
t.notOk(g.paused, "must not be paused")
|
||||||
|
globResults.push(m)
|
||||||
|
g.pause()
|
||||||
|
t.ok(g.paused, "must be paused")
|
||||||
|
setTimeout(g.resume.bind(g), 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
g.on("end", function (matches) {
|
||||||
|
t.pass("reached glob end")
|
||||||
|
globResults = cleanResults(globResults)
|
||||||
|
matches = cleanResults(matches)
|
||||||
|
t.deepEqual(matches, globResults,
|
||||||
|
"end event matches should be the same as match events")
|
||||||
|
|
||||||
|
t.deepEqual(matches, expect,
|
||||||
|
"glob matches should be the same as bash results")
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
36
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/readme-issue.js
generated
vendored
Normal file
36
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/readme-issue.js
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
var test = require("tap").test
|
||||||
|
var glob = require("../")
|
||||||
|
|
||||||
|
var mkdirp = require("mkdirp")
|
||||||
|
var fs = require("fs")
|
||||||
|
var rimraf = require("rimraf")
|
||||||
|
var dir = __dirname + "/package"
|
||||||
|
|
||||||
|
test("setup", function (t) {
|
||||||
|
mkdirp.sync(dir)
|
||||||
|
fs.writeFileSync(dir + "/package.json", "{}", "ascii")
|
||||||
|
fs.writeFileSync(dir + "/README", "x", "ascii")
|
||||||
|
t.pass("setup done")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("glob", function (t) {
|
||||||
|
var opt = {
|
||||||
|
cwd: dir,
|
||||||
|
nocase: true,
|
||||||
|
mark: true
|
||||||
|
}
|
||||||
|
|
||||||
|
glob("README?(.*)", opt, function (er, files) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
t.same(files, ["README"])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("cleanup", function (t) {
|
||||||
|
rimraf.sync(dir)
|
||||||
|
t.pass("clean")
|
||||||
|
t.end()
|
||||||
|
})
|
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/root-nomount.js
generated
vendored
Normal file
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/root-nomount.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
var tap = require("tap")
|
||||||
|
|
||||||
|
var origCwd = process.cwd()
|
||||||
|
process.chdir(__dirname)
|
||||||
|
|
||||||
|
tap.test("changing root and searching for /b*/**", function (t) {
|
||||||
|
var glob = require('../')
|
||||||
|
var path = require('path')
|
||||||
|
t.test('.', function (t) {
|
||||||
|
glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('a', function (t) {
|
||||||
|
glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('root=a, cwd=a/b', function (t) {
|
||||||
|
glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('cd -', function (t) {
|
||||||
|
process.chdir(origCwd)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
46
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/root.js
generated
vendored
Normal file
46
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/root.js
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
var t = require("tap")
|
||||||
|
|
||||||
|
var origCwd = process.cwd()
|
||||||
|
process.chdir(__dirname)
|
||||||
|
|
||||||
|
var glob = require('../')
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
t.test('.', function (t) {
|
||||||
|
glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [])
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
t.test('a', function (t) {
|
||||||
|
console.error("root=" + path.resolve('a'))
|
||||||
|
glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
var wanted = [
|
||||||
|
'/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f'
|
||||||
|
].map(function (m) {
|
||||||
|
return path.join(path.resolve('a'), m).replace(/\\/g, '/')
|
||||||
|
})
|
||||||
|
|
||||||
|
t.like(matches, wanted)
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('root=a, cwd=a/b', function (t) {
|
||||||
|
glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
|
||||||
|
t.ifError(er)
|
||||||
|
t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
|
||||||
|
return path.join(path.resolve('a'), m).replace(/\\/g, '/')
|
||||||
|
}))
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('cd -', function (t) {
|
||||||
|
process.chdir(origCwd)
|
||||||
|
t.end()
|
||||||
|
})
|
32
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/stat.js
generated
vendored
Normal file
32
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/stat.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
var glob = require('../')
|
||||||
|
var test = require('tap').test
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
test('stat all the things', function(t) {
|
||||||
|
var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname })
|
||||||
|
var matches = []
|
||||||
|
g.on('match', function(m) {
|
||||||
|
matches.push(m)
|
||||||
|
})
|
||||||
|
var stats = []
|
||||||
|
g.on('stat', function(m) {
|
||||||
|
stats.push(m)
|
||||||
|
})
|
||||||
|
g.on('end', function(eof) {
|
||||||
|
stats = stats.sort()
|
||||||
|
matches = matches.sort()
|
||||||
|
eof = eof.sort()
|
||||||
|
t.same(stats, matches)
|
||||||
|
t.same(eof, matches)
|
||||||
|
var cache = Object.keys(this.statCache)
|
||||||
|
t.same(cache.map(function (f) {
|
||||||
|
return path.relative(__dirname, f)
|
||||||
|
}).sort(), matches)
|
||||||
|
|
||||||
|
cache.forEach(function(c) {
|
||||||
|
t.equal(typeof this.statCache[c], 'object')
|
||||||
|
}, this)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
11
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/zz-cleanup.js
generated
vendored
Normal file
11
node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/test/zz-cleanup.js
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// remove the fixtures
|
||||||
|
var tap = require("tap")
|
||||||
|
, rimraf = require("rimraf")
|
||||||
|
, path = require("path")
|
||||||
|
|
||||||
|
tap.test("cleanup fixtures", function (t) {
|
||||||
|
rimraf(path.resolve(__dirname, "a"), function (er) {
|
||||||
|
t.ifError(er, "removed")
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
22
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/LICENSE.txt
generated
vendored
Normal file
22
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/LICENSE.txt
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
|
||||||
|
Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
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.
|
163
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md
generated
vendored
Normal file
163
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md
generated
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
# Lo-Dash v2.4.1
|
||||||
|
A utility library delivering consistency, [customization](http://lodash.com/custom-builds), [performance](http://lodash.com/benchmarks), & [extras](http://lodash.com/#features).
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
Check out our [wiki]([https://github.com/lodash/lodash/wiki/build-differences]) for details over the differences between builds.
|
||||||
|
|
||||||
|
* Modern builds perfect for newer browsers/environments:<br>
|
||||||
|
[Development](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.js) &
|
||||||
|
[Production](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.min.js)
|
||||||
|
|
||||||
|
* Compatibility builds for older environment support too:<br>
|
||||||
|
[Development](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.compat.js) &
|
||||||
|
[Production](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.compat.min.js)
|
||||||
|
|
||||||
|
* Underscore builds to use as a drop-in replacement:<br>
|
||||||
|
[Development](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.underscore.js) &
|
||||||
|
[Production](https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.underscore.min.js)
|
||||||
|
|
||||||
|
CDN copies are available on [cdnjs](http://cdnjs.com/libraries/lodash.js/) & [jsDelivr](http://www.jsdelivr.com/#!lodash). For smaller file sizes, create [custom builds](http://lodash.com/custom-builds) with only the features needed.
|
||||||
|
|
||||||
|
Love modules? We’ve got you covered with [lodash-amd](https://npmjs.org/package/lodash-amd), [lodash-es6](https://github.com/lodash/lodash-es6), [lodash-node](https://npmjs.org/package/lodash-node), & [npm packages](https://npmjs.org/browse/keyword/lodash-modularized) per method.
|
||||||
|
|
||||||
|
## Dive in
|
||||||
|
|
||||||
|
There’s plenty of **[documentation](http://lodash.com/docs)**, [unit tests](http://lodash.com/tests), & [benchmarks](http://lodash.com/benchmarks).<br>
|
||||||
|
Check out <a href="http://devdocs.io/lodash/">DevDocs</a> as a fast, organized, & searchable interface for our documentation.
|
||||||
|
|
||||||
|
The full changelog for this release is available on our [wiki](https://github.com/lodash/lodash/wiki/Changelog).<br>
|
||||||
|
A list of upcoming features is available on our [roadmap](https://github.com/lodash/lodash/wiki/Roadmap).
|
||||||
|
|
||||||
|
## Features *not* in Underscore
|
||||||
|
|
||||||
|
* AMD loader support ([curl](https://github.com/cujojs/curl), [dojo](http://dojotoolkit.org/), [requirejs](http://requirejs.org/), etc.)
|
||||||
|
* [_(…)](http://lodash.com/docs#_) supports intuitive chaining
|
||||||
|
* [_.at](http://lodash.com/docs#at) for cherry-picking collection values
|
||||||
|
* [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods
|
||||||
|
* [_.clone](http://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects
|
||||||
|
* [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays & objects
|
||||||
|
* [_.constant](http://lodash.com/docs#constant) & [_.property](http://lodash.com/docs#property) function generators for composing functions
|
||||||
|
* [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex`
|
||||||
|
* [_.create](http://lodash.com/docs#create) for easier object inheritance
|
||||||
|
* [_.createCallback](http://lodash.com/docs#createCallback) for extending callbacks in methods & mixins
|
||||||
|
* [_.curry](http://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions
|
||||||
|
* [_.debounce](http://lodash.com/docs#debounce) & [_.throttle](http://lodash.com/docs#throttle) accept additional `options` for more control
|
||||||
|
* [_.findIndex](http://lodash.com/docs#findIndex) & [_.findKey](http://lodash.com/docs#findKey) for finding indexes & keys
|
||||||
|
* [_.forEach](http://lodash.com/docs#forEach) is chainable & supports exiting early
|
||||||
|
* [_.forIn](http://lodash.com/docs#forIn) for iterating own & inherited properties
|
||||||
|
* [_.forOwn](http://lodash.com/docs#forOwn) for iterating own properties
|
||||||
|
* [_.isPlainObject](http://lodash.com/docs#isPlainObject) for checking if values are created by `Object`
|
||||||
|
* [_.mapValues](http://lodash.com/docs#mapValues) for [mapping](http://lodash.com/docs#map) values to an object
|
||||||
|
* [_.memoize](http://lodash.com/docs#memoize) exposes the `cache` of memoized functions
|
||||||
|
* [_.merge](http://lodash.com/docs#merge) for a deep [_.extend](http://lodash.com/docs#extend)
|
||||||
|
* [_.noop](http://lodash.com/docs#noop) for function placeholders
|
||||||
|
* [_.now](http://lodash.com/docs#now) as a cross-browser `Date.now` alternative
|
||||||
|
* [_.parseInt](http://lodash.com/docs#parseInt) for consistent behavior
|
||||||
|
* [_.pull](http://lodash.com/docs#pull) & [_.remove](http://lodash.com/docs#remove) for mutating arrays
|
||||||
|
* [_.random](http://lodash.com/docs#random) supports returning floating-point numbers
|
||||||
|
* [_.runInContext](http://lodash.com/docs#runInContext) for easier mocking
|
||||||
|
* [_.sortBy](http://lodash.com/docs#sortBy) supports sorting by multiple properties
|
||||||
|
* [_.support](http://lodash.com/docs#support) for flagging environment features
|
||||||
|
* [_.template](http://lodash.com/docs#template) supports [*“imports”*](http://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals)
|
||||||
|
* [_.transform](http://lodash.com/docs#transform) as a powerful alternative to [_.reduce](http://lodash.com/docs#reduce) for transforming objects
|
||||||
|
* [_.where](http://lodash.com/docs#where) supports deep object comparisons
|
||||||
|
* [_.xor](http://lodash.com/docs#xor) as a companion to [_.difference](http://lodash.com/docs#difference), [_.intersection](http://lodash.com/docs#intersection), & [_.union](http://lodash.com/docs#union)
|
||||||
|
* [_.zip](http://lodash.com/docs#zip) is capable of unzipping values
|
||||||
|
* [_.omit](http://lodash.com/docs#omit), [_.pick](http://lodash.com/docs#pick), &
|
||||||
|
[more](http://lodash.com/docs "_.assign, _.clone, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept callbacks
|
||||||
|
* [_.contains](http://lodash.com/docs#contains), [_.toArray](http://lodash.com/docs#toArray), &
|
||||||
|
[more](http://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.forEachRight, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.where") accept strings
|
||||||
|
* [_.filter](http://lodash.com/docs#filter), [_.map](http://lodash.com/docs#map), &
|
||||||
|
[more](http://lodash.com/docs "_.countBy, _.every, _.find, _.findKey, _.findLast, _.findLastIndex, _.findLastKey, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* & *“_.where”* shorthands
|
||||||
|
* [_.findLast](http://lodash.com/docs#findLast), [_.findLastIndex](http://lodash.com/docs#findLastIndex), &
|
||||||
|
[more](http://lodash.com/docs "_.findLastKey, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
* Podcasts
|
||||||
|
- [JavaScript Jabber](http://javascriptjabber.com/079-jsj-lo-dash-with-john-david-dalton/)
|
||||||
|
|
||||||
|
* Posts
|
||||||
|
- [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/)
|
||||||
|
- [Custom builds in Lo-Dash 2.0](http://kitcambridge.be/blog/custom-builds-in-lo-dash-2-dot-0/)
|
||||||
|
|
||||||
|
* Videos
|
||||||
|
- [Introduction](https://vimeo.com/44154599)
|
||||||
|
- [Origins](https://vimeo.com/44154600)
|
||||||
|
- [Optimizations & builds](https://vimeo.com/44154601)
|
||||||
|
- [Native method use](https://vimeo.com/48576012)
|
||||||
|
- [Testing](https://vimeo.com/45865290)
|
||||||
|
- [CascadiaJS ’12](http://www.youtube.com/watch?v=dpPy4f_SeEk)
|
||||||
|
|
||||||
|
A list of other community created podcasts, posts, & videos is available on our [wiki](https://github.com/lodash/lodash/wiki/Resources).
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Tested in Chrome 5~31, Firefox 2~25, IE 6-11, Opera 9.25~17, Safari 3-7, Node.js 0.6.21~0.10.22, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5.<br>
|
||||||
|
Automated browser test results [are available](https://saucelabs.com/u/lodash) as well as [Travis CI](https://travis-ci.org/) builds for [lodash](https://travis-ci.org/lodash/lodash/), [lodash-cli](https://travis-ci.org/lodash/lodash-cli/), [lodash-amd](https://travis-ci.org/lodash/lodash-amd/), [lodash-node](https://travis-ci.org/lodash/lodash-node/), & [grunt-lodash](https://travis-ci.org/lodash/grunt-lodash).
|
||||||
|
|
||||||
|
Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing.<br>
|
||||||
|
[![Sauce Labs](http://lodash.com/_img/sauce.png)](https://saucelabs.com/ "Sauce Labs: Selenium Testing & More")
|
||||||
|
|
||||||
|
## Installation & usage
|
||||||
|
|
||||||
|
In browsers:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="lodash.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
Using [`npm`](http://npmjs.org/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm i --save lodash
|
||||||
|
|
||||||
|
{sudo} npm i -g lodash
|
||||||
|
npm ln lodash
|
||||||
|
```
|
||||||
|
|
||||||
|
In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/):
|
||||||
|
|
||||||
|
```js
|
||||||
|
var _ = require('lodash');
|
||||||
|
// or as Underscore
|
||||||
|
var _ = require('lodash/dist/lodash.underscore');
|
||||||
|
```
|
||||||
|
|
||||||
|
**Notes:**
|
||||||
|
* Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL
|
||||||
|
* If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it
|
||||||
|
|
||||||
|
In [Rhino](http://www.mozilla.org/rhino/):
|
||||||
|
|
||||||
|
```js
|
||||||
|
load('lodash.js');
|
||||||
|
```
|
||||||
|
|
||||||
|
In an AMD loader:
|
||||||
|
|
||||||
|
```js
|
||||||
|
require({
|
||||||
|
'packages': [
|
||||||
|
{ 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
['lodash'], function(_) {
|
||||||
|
console.log(_.VERSION);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
|
||||||
|
|---|
|
||||||
|
| [John-David Dalton](http://allyoucanleet.com/) |
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||||
|
|---|---|---|
|
||||||
|
| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |
|
||||||
|
|
||||||
|
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/lodash/lodash/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
7157
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js
generated
vendored
Normal file
7157
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
61
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js
generated
vendored
Normal file
61
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Lo-Dash 2.4.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
|
||||||
|
* Build: `lodash -o ./dist/lodash.compat.js`
|
||||||
|
*/
|
||||||
|
;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:b+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=true;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:b+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=true
|
||||||
|
}}function r(n){return n.charCodeAt(0)}function u(n,t){for(var e=n.m,r=t.m,u=-1,o=e.length;++u<o;){var a=e[u],i=r[u];if(a!==i){if(a>i||typeof a=="undefined")return 1;if(a<i||typeof i=="undefined")return-1}}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[r/2|0],a=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&a&&typeof a=="object")return false;for(u=l(),u["false"]=u["null"]=u["true"]=u.undefined=false,o=l(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+Y[n]
|
||||||
|
}function i(){return v.pop()||[]}function l(){return y.pop()||{k:null,l:null,m:null,"false":false,n:0,"null":false,number:null,object:null,push:null,string:null,"true":false,undefined:false,o:null}}function f(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function c(n){n.length=0,v.length<w&&v.push(n)}function p(n){var t=n.l;t&&p(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,y.length<w&&y.push(n)}function s(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];
|
||||||
|
return u}function g(e){function v(n){return n&&typeof n=="object"&&!qe(n)&&we.call(n,"__wrapped__")?n:new y(n)}function y(n,t){this.__chain__=!!t,this.__wrapped__=n}function w(n){function t(){if(r){var n=s(r);je.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return xt(n)?n:o}return e.apply(u,n||arguments)}var e=n[0],r=n[2],u=n[4];return ze(t,n),t}function Y(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!xt(n))return n;var a=he.call(n);if(!V[a]||!Le.nodeClass&&f(n))return n;
|
||||||
|
var l=Te[a];switch(a){case L:case z:return new l(+n);case W:case M:return new l(n);case J:return o=l(n.source,S.exec(n)),o.lastIndex=n.lastIndex,o}if(a=qe(n),t){var p=!r;r||(r=i()),u||(u=i());for(var g=r.length;g--;)if(r[g]==n)return u[g];o=a?l(n.length):{}}else o=a?s(n):Ye({},n);return a&&(we.call(n,"index")&&(o.index=n.index),we.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(a?Xe:tr)(n,function(n,a){o[a]=Y(n,t,e,r,u)}),p&&(c(r),c(u)),o):o}function nt(n){return xt(n)?Se(n):{}}function tt(n,t,e){if(typeof n!="function")return Ht;
|
||||||
|
if(typeof t=="undefined"||!("prototype"in n))return n;var r=n.__bindData__;if(typeof r=="undefined"&&(Le.funcNames&&(r=!n.name),r=r||!Le.funcDecomp,!r)){var u=be.call(n);Le.funcNames||(r=!A.test(u)),r||(r=B.test(u),ze(n,r))}if(false===r||true!==r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)}}return Mt(n,t)}function et(n){function t(){var n=l?a:this;
|
||||||
|
if(u){var h=s(u);je.apply(h,arguments)}return(o||c)&&(h||(h=s(arguments)),o&&je.apply(h,o),c&&h.length<i)?(r|=16,et([e,p?r:-4&r,h,null,a,i])):(h||(h=arguments),f&&(e=n[g]),this instanceof t?(n=nt(e.prototype),h=e.apply(n,h),xt(h)?h:n):e.apply(n,h))}var e=n[0],r=n[1],u=n[2],o=n[3],a=n[4],i=n[5],l=1&r,f=2&r,c=4&r,p=8&r,g=e;return ze(t,n),t}function rt(e,r){var u=-1,a=ht(),i=e?e.length:0,l=i>=_&&a===n,f=[];if(l){var c=o(r);c?(a=t,r=c):l=false}for(;++u<i;)c=e[u],0>a(r,c)&&f.push(c);return l&&p(r),f}function ot(n,t,e,r){r=(r||0)-1;
|
||||||
|
for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];if(a&&typeof a=="object"&&typeof a.length=="number"&&(qe(a)||dt(a))){t||(a=ot(a,t,e));var i=-1,l=a.length,f=o.length;for(o.length+=l;++i<l;)o[f++]=a[i]}else e||o.push(a)}return o}function at(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&X[typeof n]||t&&X[typeof t]))return false;if(null==n||null==t)return n===t;var l=he.call(n),p=he.call(t);if(l==T&&(l=G),p==T&&(p=G),l!=p)return false;switch(l){case L:case z:return+n==+t;
|
||||||
|
case W:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case J:case M:return n==ie(t)}if(p=l==$,!p){var s=we.call(n,"__wrapped__"),g=we.call(t,"__wrapped__");if(s||g)return at(s?n.__wrapped__:n,g?t.__wrapped__:t,e,r,u,o);if(l!=G||!Le.nodeClass&&(f(n)||f(t)))return false;if(l=!Le.argsObject&&dt(n)?oe:n.constructor,s=!Le.argsObject&&dt(t)?oe:t.constructor,l!=s&&!(jt(l)&&l instanceof l&&jt(s)&&s instanceof s)&&"constructor"in n&&"constructor"in t)return false}for(l=!u,u||(u=i()),o||(o=i()),s=u.length;s--;)if(u[s]==n)return o[s]==t;
|
||||||
|
var h=0,a=true;if(u.push(n),o.push(t),p){if(s=n.length,h=t.length,(a=h==s)||r)for(;h--;)if(p=s,g=t[h],r)for(;p--&&!(a=at(n[p],g,e,r,u,o)););else if(!(a=at(n[h],g,e,r,u,o)))break}else nr(t,function(t,i,l){return we.call(l,i)?(h++,a=we.call(n,i)&&at(n[i],t,e,r,u,o)):void 0}),a&&!r&&nr(n,function(n,t,e){return we.call(e,t)?a=-1<--h:void 0});return u.pop(),o.pop(),l&&(c(u),c(o)),a}function it(n,t,e,r,u){(qe(t)?Dt:tr)(t,function(t,o){var a,i,l=t,f=n[o];if(t&&((i=qe(t))||er(t))){for(l=r.length;l--;)if(a=r[l]==t){f=u[l];
|
||||||
|
break}if(!a){var c;e&&(l=e(f,t),c=typeof l!="undefined")&&(f=l),c||(f=i?qe(f)?f:[]:er(f)?f:{}),r.push(t),u.push(f),c||it(f,t,e,r,u)}}else e&&(l=e(f,t),typeof l=="undefined"&&(l=t)),typeof l!="undefined"&&(f=l);n[o]=f})}function lt(n,t){return n+de(Fe()*(t-n+1))}function ft(e,r,u){var a=-1,l=ht(),f=e?e.length:0,s=[],g=!r&&f>=_&&l===n,h=u||g?i():s;for(g&&(h=o(h),l=t);++a<f;){var v=e[a],y=u?u(v,a,e):v;(r?!a||h[h.length-1]!==y:0>l(h,y))&&((u||g)&&h.push(y),s.push(v))}return g?(c(h.k),p(h)):u&&c(h),s}function ct(n){return function(t,e,r){var u={};
|
||||||
|
if(e=v.createCallback(e,r,3),qe(t)){r=-1;for(var o=t.length;++r<o;){var a=t[r];n(u,a,e(a,r,t),t)}}else Xe(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function pt(n,t,e,r,u,o){var a=1&t,i=4&t,l=16&t,f=32&t;if(!(2&t||jt(n)))throw new le;l&&!e.length&&(t&=-17,l=e=false),f&&!r.length&&(t&=-33,f=r=false);var c=n&&n.__bindData__;return c&&true!==c?(c=s(c),c[2]&&(c[2]=s(c[2])),c[3]&&(c[3]=s(c[3])),!a||1&c[1]||(c[4]=u),!a&&1&c[1]&&(t|=8),!i||4&c[1]||(c[5]=o),l&&je.apply(c[2]||(c[2]=[]),e),f&&Ee.apply(c[3]||(c[3]=[]),r),c[1]|=t,pt.apply(null,c)):(1==t||17===t?w:et)([n,t,e,r,u,o])
|
||||||
|
}function st(){Q.h=F,Q.b=Q.c=Q.g=Q.i="",Q.e="t",Q.j=true;for(var n,t=0;n=arguments[t];t++)for(var e in n)Q[e]=n[e];t=Q.a,Q.d=/^[^,]+/.exec(t)[0],n=ee,t="return function("+t+"){",e=Q;var r="var n,t="+e.d+",E="+e.e+";if(!t)return E;"+e.i+";";e.b?(r+="var u=t.length;n=-1;if("+e.b+"){",Le.unindexedChars&&(r+="if(s(t)){t=t.split('')}"),r+="while(++n<u){"+e.g+";}}else{"):Le.nonEnumArgs&&(r+="var u=t.length;n=-1;if(u&&p(t)){while(++n<u){n+='';"+e.g+";}}else{"),Le.enumPrototypes&&(r+="var G=typeof t=='function';"),Le.enumErrorProps&&(r+="var F=t===k||t instanceof Error;");
|
||||||
|
var u=[];if(Le.enumPrototypes&&u.push('!(G&&n=="prototype")'),Le.enumErrorProps&&u.push('!(F&&(n=="message"||n=="name"))'),e.j&&e.f)r+="var C=-1,D=B[typeof t]&&v(t),u=D?D.length:0;while(++C<u){n=D[C];",u.length&&(r+="if("+u.join("&&")+"){"),r+=e.g+";",u.length&&(r+="}"),r+="}";else if(r+="for(n in t){",e.j&&u.push("m.call(t, n)"),u.length&&(r+="if("+u.join("&&")+"){"),r+=e.g+";",u.length&&(r+="}"),r+="}",Le.nonEnumShadows){for(r+="if(t!==A){var i=t.constructor,r=t===(i&&i.prototype),f=t===J?I:t===k?j:L.call(t),x=y[f];",k=0;7>k;k++)r+="n='"+e.h[k]+"';if((!(r&&x[n])&&m.call(t,n))",e.j||(r+="||(!x[n]&&t[n]!==A[n])"),r+="){"+e.g+"}";
|
||||||
|
r+="}"}return(e.b||Le.nonEnumArgs)&&(r+="}"),r+=e.c+";return E",n("d,j,k,m,o,p,q,s,v,A,B,y,I,J,L",t+r+"}")(tt,q,ce,we,d,dt,qe,kt,Q.f,pe,X,$e,M,se,he)}function gt(n){return Ve[n]}function ht(){var t=(t=v.indexOf)===zt?n:t;return t}function vt(n){return typeof n=="function"&&ve.test(n)}function yt(n){var t,e;return!n||he.call(n)!=G||(t=n.constructor,jt(t)&&!(t instanceof t))||!Le.argsClass&&dt(n)||!Le.nodeClass&&f(n)?false:Le.ownLast?(nr(n,function(n,t,r){return e=we.call(r,t),false}),false!==e):(nr(n,function(n,t){e=t
|
||||||
|
}),typeof e=="undefined"||we.call(n,e))}function mt(n){return He[n]}function dt(n){return n&&typeof n=="object"&&typeof n.length=="number"&&he.call(n)==T||false}function bt(n,t,e){var r=We(n),u=r.length;for(t=tt(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function _t(n){var t=[];return nr(n,function(n,e){jt(n)&&t.push(e)}),t.sort()}function wt(n){for(var t=-1,e=We(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function jt(n){return typeof n=="function"}function xt(n){return!(!n||!X[typeof n])
|
||||||
|
}function Ct(n){return typeof n=="number"||n&&typeof n=="object"&&he.call(n)==W||false}function kt(n){return typeof n=="string"||n&&typeof n=="object"&&he.call(n)==M||false}function Et(n){for(var t=-1,e=We(n),r=e.length,u=Zt(r);++t<r;)u[t]=n[e[t]];return u}function Ot(n,t,e){var r=-1,u=ht(),o=n?n.length:0,a=false;return e=(0>e?Be(0,o+e):e)||0,qe(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(kt(n)?n.indexOf(t,e):u(n,t,e)):Xe(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function St(n,t,e){var r=true;if(t=v.createCallback(t,e,3),qe(n)){e=-1;
|
||||||
|
for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else Xe(n,function(n,e,u){return r=!!t(n,e,u)});return r}function At(n,t,e){var r=[];if(t=v.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else Xe(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function It(n,t,e){if(t=v.createCallback(t,e,3),!qe(n)){var r;return Xe(n,function(n,e,u){return t(n,e,u)?(r=n,false):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];if(t(o,e,n))return o}}function Dt(n,t,e){if(t&&typeof e=="undefined"&&qe(n)){e=-1;
|
||||||
|
for(var r=n.length;++e<r&&false!==t(n[e],e,n););}else Xe(n,t,e);return n}function Nt(n,t,e){var r=n,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:tt(t,e,3),qe(n))for(;u--&&false!==t(n[u],u,n););else{if(typeof u!="number")var o=We(n),u=o.length;else Le.unindexedChars&&kt(n)&&(r=n.split(""));Xe(n,function(n,e,a){return e=o?o[--u]:--u,t(r[e],e,a)})}return n}function Bt(n,t,e){var r=-1,u=n?n.length:0,o=Zt(typeof u=="number"?u:0);if(t=v.createCallback(t,e,3),qe(n))for(;++r<u;)o[r]=t(n[r],r,n);else Xe(n,function(n,e,u){o[++r]=t(n,e,u)
|
||||||
|
});return o}function Pt(n,t,e){var u=-1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=null==t&&kt(n)?r:v.createCallback(t,e,3),Xe(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Rt(n,t,e,r){var u=3>arguments.length;if(t=v.createCallback(t,r,4),qe(n)){var o=-1,a=n.length;for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n)}else Xe(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)});return e}function Ft(n,t,e,r){var u=3>arguments.length;
|
||||||
|
return t=v.createCallback(t,r,4),Nt(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)}),e}function Tt(n){var t=-1,e=n?n.length:0,r=Zt(typeof e=="number"?e:0);return Dt(n,function(n){var e=lt(0,++t);r[t]=r[e],r[e]=n}),r}function $t(n,t,e){var r;if(t=v.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else Xe(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Lt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=v.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++
|
||||||
|
}else if(r=t,null==r||e)return n?n[0]:h;return s(n,0,Pe(Be(0,r),u))}function zt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Be(0,u+r):r||0}else if(r)return r=Kt(t,e),t[r]===e?r:-1;return n(t,e,r)}function qt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=v.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Be(0,t);return s(n,r)}function Kt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?v.createCallback(e,r,1):Ht,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;
|
||||||
|
return u}function Wt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(e=v.createCallback(e,r,3)),ft(n,t,e)}function Gt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?Pt(ar(n,"length")):0,r=Zt(0>e?0:e);++t<e;)r[t]=ar(n,t);return r}function Jt(n,t){var e=-1,r=n?n.length:0,u={};for(t||!r||qe(n[0])||(t=[]);++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Mt(n,t){return 2<arguments.length?pt(n,17,s(arguments,2),null,t):pt(n,1,null,null,t)
|
||||||
|
}function Vt(n,t,e){var r,u,o,a,i,l,f,c=0,p=false,s=true;if(!jt(n))throw new le;if(t=Be(0,t)||0,true===e)var g=true,s=false;else xt(e)&&(g=e.leading,p="maxWait"in e&&(Be(t,e.maxWait)||0),s="trailing"in e?e.trailing:s);var v=function(){var e=t-(ir()-a);0<e?l=Ce(v,e):(u&&me(u),e=f,u=l=f=h,e&&(c=ir(),o=n.apply(i,r),l||u||(r=i=null)))},y=function(){l&&me(l),u=l=f=h,(s||p!==t)&&(c=ir(),o=n.apply(i,r),l||u||(r=i=null))};return function(){if(r=arguments,a=ir(),i=this,f=s&&(l||!g),false===p)var e=g&&!l;else{u||g||(c=a);
|
||||||
|
var h=p-(a-c),m=0>=h;m?(u&&(u=me(u)),c=a,o=n.apply(i,r)):u||(u=Ce(y,h))}return m&&l?l=me(l):l||t===p||(l=Ce(v,t)),e&&(m=true,o=n.apply(i,r)),!m||l||u||(r=i=null),o}}function Ht(n){return n}function Ut(n,t,e){var r=true,u=t&&_t(t);t&&(e||u.length)||(null==e&&(e=t),o=y,t=n,n=v,u=_t(t)),false===e?r=false:xt(e)&&"chain"in e&&(r=e.chain);var o=n,a=jt(o);Dt(u,function(e){var u=n[e]=t[e];a&&(o.prototype[e]=function(){var t=this.__chain__,e=this.__wrapped__,a=[e];if(je.apply(a,arguments),a=u.apply(n,a),r||t){if(e===a&&xt(a))return this;
|
||||||
|
a=new o(a),a.__chain__=t}return a})})}function Qt(){}function Xt(n){return function(t){return t[n]}}function Yt(){return this.__wrapped__}e=e?ut.defaults(Z.Object(),e,ut.pick(Z,R)):Z;var Zt=e.Array,ne=e.Boolean,te=e.Date,ee=e.Function,re=e.Math,ue=e.Number,oe=e.Object,ae=e.RegExp,ie=e.String,le=e.TypeError,fe=[],ce=e.Error.prototype,pe=oe.prototype,se=ie.prototype,ge=e._,he=pe.toString,ve=ae("^"+ie(he).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),ye=re.ceil,me=e.clearTimeout,de=re.floor,be=ee.prototype.toString,_e=vt(_e=oe.getPrototypeOf)&&_e,we=pe.hasOwnProperty,je=fe.push,xe=pe.propertyIsEnumerable,Ce=e.setTimeout,ke=fe.splice,Ee=fe.unshift,Oe=function(){try{var n={},t=vt(t=oe.defineProperty)&&t,e=t(n,n,n)&&t
|
||||||
|
}catch(r){}return e}(),Se=vt(Se=oe.create)&&Se,Ae=vt(Ae=Zt.isArray)&&Ae,Ie=e.isFinite,De=e.isNaN,Ne=vt(Ne=oe.keys)&&Ne,Be=re.max,Pe=re.min,Re=e.parseInt,Fe=re.random,Te={};Te[$]=Zt,Te[L]=ne,Te[z]=te,Te[K]=ee,Te[G]=oe,Te[W]=ue,Te[J]=ae,Te[M]=ie;var $e={};$e[$]=$e[z]=$e[W]={constructor:true,toLocaleString:true,toString:true,valueOf:true},$e[L]=$e[M]={constructor:true,toString:true,valueOf:true},$e[q]=$e[K]=$e[J]={constructor:true,toString:true},$e[G]={constructor:true},function(){for(var n=F.length;n--;){var t,e=F[n];
|
||||||
|
for(t in $e)we.call($e,t)&&!we.call($e[t],e)&&($e[t][e]=false)}}(),y.prototype=v.prototype;var Le=v.support={};!function(){var n=function(){this.x=1},t={0:1,length:1},r=[];n.prototype={valueOf:1,y:1};for(var u in new n)r.push(u);for(u in arguments);Le.argsClass=he.call(arguments)==T,Le.argsObject=arguments.constructor==oe&&!(arguments instanceof Zt),Le.enumErrorProps=xe.call(ce,"message")||xe.call(ce,"name"),Le.enumPrototypes=xe.call(n,"prototype"),Le.funcDecomp=!vt(e.WinRTError)&&B.test(g),Le.funcNames=typeof ee.name=="string",Le.nonEnumArgs=0!=u,Le.nonEnumShadows=!/valueOf/.test(r),Le.ownLast="x"!=r[0],Le.spliceObjects=(fe.splice.call(t,0,1),!t[0]),Le.unindexedChars="xx"!="x"[0]+oe("x")[0];
|
||||||
|
try{Le.nodeClass=!(he.call(document)==G&&!({toString:0}+""))}catch(o){Le.nodeClass=true}}(1),v.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:I,variable:"",imports:{_:v}},Se||(nt=function(){function n(){}return function(t){if(xt(t)){n.prototype=t;var r=new n;n.prototype=null}return r||e.Object()}}());var ze=Oe?function(n,t){U.value=t,Oe(n,"__bindData__",U)}:Qt;Le.argsClass||(dt=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&we.call(n,"callee")&&!xe.call(n,"callee")||false
|
||||||
|
});var qe=Ae||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&he.call(n)==$||false},Ke=st({a:"z",e:"[]",i:"if(!(B[typeof z]))return E",g:"E.push(n)"}),We=Ne?function(n){return xt(n)?Le.enumPrototypes&&typeof n=="function"||Le.nonEnumArgs&&n.length&&dt(n)?Ke(n):Ne(n):[]}:Ke,Ge={a:"g,e,K",i:"e=e&&typeof K=='undefined'?e:d(e,K,3)",b:"typeof u=='number'",v:We,g:"if(e(t[n],n,g)===false)return E"},Je={a:"z,H,l",i:"var a=arguments,b=0,c=typeof l=='number'?2:a.length;while(++b<c){t=a[b];if(t&&B[typeof t]){",v:We,g:"if(typeof E[n]=='undefined')E[n]=t[n]",c:"}}"},Me={i:"if(!B[typeof t])return E;"+Ge.i,b:false},Ve={"&":"&","<":"<",">":">",'"':""","'":"'"},He=wt(Ve),Ue=ae("("+We(He).join("|")+")","g"),Qe=ae("["+We(Ve).join("")+"]","g"),Xe=st(Ge),Ye=st(Je,{i:Je.i.replace(";",";if(c>3&&typeof a[c-2]=='function'){var e=d(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){e=a[--c]}"),g:"E[n]=e?e(E[n],t[n]):t[n]"}),Ze=st(Je),nr=st(Ge,Me,{j:false}),tr=st(Ge,Me);
|
||||||
|
jt(/x/)&&(jt=function(n){return typeof n=="function"&&he.call(n)==K});var er=_e?function(n){if(!n||he.call(n)!=G||!Le.argsClass&&dt(n))return false;var t=n.valueOf,e=vt(t)&&(e=_e(t))&&_e(e);return e?n==e||_e(n)==e:yt(n)}:yt,rr=ct(function(n,t,e){we.call(n,e)?n[e]++:n[e]=1}),ur=ct(function(n,t,e){(we.call(n,e)?n[e]:n[e]=[]).push(t)}),or=ct(function(n,t,e){n[e]=t}),ar=Bt,ir=vt(ir=te.now)&&ir||function(){return(new te).getTime()},lr=8==Re(j+"08")?Re:function(n,t){return Re(kt(n)?n.replace(D,""):n,t||0)};
|
||||||
|
return v.after=function(n,t){if(!jt(t))throw new le;return function(){return 1>--n?t.apply(this,arguments):void 0}},v.assign=Ye,v.at=function(n){var t=arguments,e=-1,r=ot(t,true,false,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Zt(t);for(Le.unindexedChars&&kt(n)&&(n=n.split(""));++e<t;)u[e]=n[r[e]];return u},v.bind=Mt,v.bindAll=function(n){for(var t=1<arguments.length?ot(arguments,true,false,1):_t(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=pt(n[u],1,null,null,n)}return n},v.bindKey=function(n,t){return 2<arguments.length?pt(t,19,s(arguments,2),null,n):pt(t,3,null,null,n)
|
||||||
|
},v.chain=function(n){return n=new y(n),n.__chain__=true,n},v.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},v.compose=function(){for(var n=arguments,t=n.length;t--;)if(!jt(n[t]))throw new le;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},v.constant=function(n){return function(){return n}},v.countBy=rr,v.create=function(n,t){var e=nt(n);return t?Ye(e,t):e},v.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return tt(n,t,e);
|
||||||
|
if("object"!=r)return Xt(n);var u=We(n),o=u[0],a=n[o];return 1!=u.length||a!==a||xt(a)?function(t){for(var e=u.length,r=false;e--&&(r=at(t[u[e]],n[u[e]],null,true)););return r}:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},v.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,pt(n,4,null,null,null,t)},v.debounce=Vt,v.defaults=Ze,v.defer=function(n){if(!jt(n))throw new le;var t=s(arguments,1);return Ce(function(){n.apply(h,t)},1)},v.delay=function(n,t){if(!jt(n))throw new le;var e=s(arguments,2);
|
||||||
|
return Ce(function(){n.apply(h,e)},t)},v.difference=function(n){return rt(n,ot(arguments,true,true,1))},v.filter=At,v.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(n=Bt(n,e,r)),ot(n,t)},v.forEach=Dt,v.forEachRight=Nt,v.forIn=nr,v.forInRight=function(n,t,e){var r=[];nr(n,function(n,t){r.push(t,n)});var u=r.length;for(t=tt(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},v.forOwn=tr,v.forOwnRight=bt,v.functions=_t,v.groupBy=ur,v.indexBy=or,v.initial=function(n,t,e){var r=0,u=n?n.length:0;
|
||||||
|
if(typeof t!="number"&&null!=t){var o=u;for(t=v.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return s(n,0,Pe(Be(0,u-r),u))},v.intersection=function(){for(var e=[],r=-1,u=arguments.length,a=i(),l=ht(),f=l===n,s=i();++r<u;){var g=arguments[r];(qe(g)||dt(g))&&(e.push(g),a.push(f&&g.length>=_&&o(r?e[r]:s)))}var f=e[0],h=-1,v=f?f.length:0,y=[];n:for(;++h<v;){var m=a[0],g=f[h];if(0>(m?t(m,g):l(s,g))){for(r=u,(m||s).push(g);--r;)if(m=a[r],0>(m?t(m,g):l(e[r],g)))continue n;y.push(g)
|
||||||
|
}}for(;u--;)(m=a[u])&&p(m);return c(a),c(s),y},v.invert=wt,v.invoke=function(n,t){var e=s(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Zt(typeof o=="number"?o:0);return Dt(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},v.keys=We,v.map=Bt,v.mapValues=function(n,t,e){var r={};return t=v.createCallback(t,e,3),tr(n,function(n,e,u){r[e]=t(n,e,u)}),r},v.max=Pt,v.memoize=function(n,t){if(!jt(n))throw new le;var e=function(){var r=e.cache,u=t?t.apply(this,arguments):b+arguments[0];return we.call(r,u)?r[u]:r[u]=n.apply(this,arguments)
|
||||||
|
};return e.cache={},e},v.merge=function(n){var t=arguments,e=2;if(!xt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=tt(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=s(arguments,1,e),u=-1,o=i(),a=i();++u<e;)it(n,t[u],r,o,a);return c(o),c(a),n},v.min=function(n,t,e){var u=1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=null==t&&kt(n)?r:v.createCallback(t,e,3),Xe(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)
|
||||||
|
});return o},v.omit=function(n,t,e){var r={};if(typeof t!="function"){var u=[];nr(n,function(n,t){u.push(t)});for(var u=rt(u,ot(arguments,true,false,1)),o=-1,a=u.length;++o<a;){var i=u[o];r[i]=n[i]}}else t=v.createCallback(t,e,3),nr(n,function(n,e,u){t(n,e,u)||(r[e]=n)});return r},v.once=function(n){var t,e;if(!jt(n))throw new le;return function(){return t?e:(t=true,e=n.apply(this,arguments),n=null,e)}},v.pairs=function(n){for(var t=-1,e=We(n),r=e.length,u=Zt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u
|
||||||
|
},v.partial=function(n){return pt(n,16,s(arguments,1))},v.partialRight=function(n){return pt(n,32,null,s(arguments,1))},v.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=ot(arguments,true,false,1),a=xt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=v.createCallback(t,e,3),nr(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},v.pluck=ar,v.property=Xt,v.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(ke.call(n,o--,1),u--);
|
||||||
|
return n},v.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Be(0,ye((t-n)/(e||1)));for(var u=Zt(t);++r<t;)u[r]=n,n+=e;return u},v.reject=function(n,t,e){return t=v.createCallback(t,e,3),At(n,function(n,e,r){return!t(n,e,r)})},v.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=v.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),ke.call(n,r--,1),u--);return o},v.rest=qt,v.shuffle=Tt,v.sortBy=function(n,t,e){var r=-1,o=qe(t),a=n?n.length:0,f=Zt(typeof a=="number"?a:0);
|
||||||
|
for(o||(t=v.createCallback(t,e,3)),Dt(n,function(n,e,u){var a=f[++r]=l();o?a.m=Bt(t,function(t){return n[t]}):(a.m=i())[0]=t(n,e,u),a.n=r,a.o=n}),a=f.length,f.sort(u);a--;)n=f[a],f[a]=n.o,o||c(n.m),p(n);return f},v.tap=function(n,t){return t(n),n},v.throttle=function(n,t,e){var r=true,u=true;if(!jt(n))throw new le;return false===e?r=false:xt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),H.leading=r,H.maxWait=t,H.trailing=u,Vt(n,t,H)},v.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Zt(n);
|
||||||
|
for(t=tt(t,e,1);++r<n;)u[r]=t(r);return u},v.toArray=function(n){return n&&typeof n.length=="number"?Le.unindexedChars&&kt(n)?n.split(""):s(n):Et(n)},v.transform=function(n,t,e,r){var u=qe(n);if(null==e)if(u)e=[];else{var o=n&&n.constructor;e=nt(o&&o.prototype)}return t&&(t=v.createCallback(t,r,4),(u?Xe:tr)(n,function(n,r,u){return t(e,n,r,u)})),e},v.union=function(){return ft(ot(arguments,true,true))},v.uniq=Wt,v.values=Et,v.where=At,v.without=function(n){return rt(n,s(arguments,1))},v.wrap=function(n,t){return pt(t,16,[n])
|
||||||
|
},v.xor=function(){for(var n=-1,t=arguments.length;++n<t;){var e=arguments[n];if(qe(e)||dt(e))var r=r?ft(rt(r,e).concat(rt(e,r))):e}return r||[]},v.zip=Gt,v.zipObject=Jt,v.collect=Bt,v.drop=qt,v.each=Dt,v.eachRight=Nt,v.extend=Ye,v.methods=_t,v.object=Jt,v.select=At,v.tail=qt,v.unique=Wt,v.unzip=Gt,Ut(v),v.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=false),Y(n,t,typeof e=="function"&&tt(e,r,1))},v.cloneDeep=function(n,t,e){return Y(n,true,typeof t=="function"&&tt(t,e,1))},v.contains=Ot,v.escape=function(n){return null==n?"":ie(n).replace(Qe,gt)
|
||||||
|
},v.every=St,v.find=It,v.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=v.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},v.findKey=function(n,t,e){var r;return t=v.createCallback(t,e,3),tr(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},v.findLast=function(n,t,e){var r;return t=v.createCallback(t,e,3),Nt(n,function(n,e,u){return t(n,e,u)?(r=n,false):void 0}),r},v.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=v.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;
|
||||||
|
return-1},v.findLastKey=function(n,t,e){var r;return t=v.createCallback(t,e,3),bt(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},v.has=function(n,t){return n?we.call(n,t):false},v.identity=Ht,v.indexOf=zt,v.isArguments=dt,v.isArray=qe,v.isBoolean=function(n){return true===n||false===n||n&&typeof n=="object"&&he.call(n)==L||false},v.isDate=function(n){return n&&typeof n=="object"&&he.call(n)==z||false},v.isElement=function(n){return n&&1===n.nodeType||false},v.isEmpty=function(n){var t=true;if(!n)return t;var e=he.call(n),r=n.length;
|
||||||
|
return e==$||e==M||(Le.argsClass?e==T:dt(n))||e==G&&typeof r=="number"&&jt(n.splice)?!r:(tr(n,function(){return t=false}),t)},v.isEqual=function(n,t,e,r){return at(n,t,typeof e=="function"&&tt(e,r,2))},v.isFinite=function(n){return Ie(n)&&!De(parseFloat(n))},v.isFunction=jt,v.isNaN=function(n){return Ct(n)&&n!=+n},v.isNull=function(n){return null===n},v.isNumber=Ct,v.isObject=xt,v.isPlainObject=er,v.isRegExp=function(n){return n&&X[typeof n]&&he.call(n)==J||false},v.isString=kt,v.isUndefined=function(n){return typeof n=="undefined"
|
||||||
|
},v.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Be(0,r+e):Pe(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},v.mixin=Ut,v.noConflict=function(){return e._=ge,this},v.noop=Qt,v.now=ir,v.parseInt=lr,v.random=function(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=true)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,e||n%1||t%1?(e=Fe(),Pe(n+e*(t-n+parseFloat("1e-"+((e+"").length-1))),t)):lt(n,t)},v.reduce=Rt,v.reduceRight=Ft,v.result=function(n,t){if(n){var e=n[t];
|
||||||
|
return jt(e)?n[t]():e}},v.runInContext=g,v.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:We(n).length},v.some=$t,v.sortedIndex=Kt,v.template=function(n,t,e){var r=v.templateSettings;n=ie(n||""),e=Ze({},e,r);var u,o=Ze({},e.imports,r.imports),r=We(o),o=Et(o),i=0,l=e.interpolate||N,f="__p+='",l=ae((e.escape||N).source+"|"+l.source+"|"+(l===I?O:N).source+"|"+(e.evaluate||N).source+"|$","g");n.replace(l,function(t,e,r,o,l,c){return r||(r=o),f+=n.slice(i,c).replace(P,a),e&&(f+="'+__e("+e+")+'"),l&&(u=true,f+="';"+l+";\n__p+='"),r&&(f+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t
|
||||||
|
}),f+="';",l=e=e.variable,l||(e="obj",f="with("+e+"){"+f+"}"),f=(u?f.replace(x,""):f).replace(C,"$1").replace(E,"$1;"),f="function("+e+"){"+(l?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+f+"return __p}";try{var c=ee(r,"return "+f).apply(h,o)}catch(p){throw p.source=f,p}return t?c(t):(c.source=f,c)},v.unescape=function(n){return null==n?"":ie(n).replace(Ue,mt)},v.uniqueId=function(n){var t=++m;return ie(null==n?"":n)+t
|
||||||
|
},v.all=St,v.any=$t,v.detect=It,v.findWhere=It,v.foldl=Rt,v.foldr=Ft,v.include=Ot,v.inject=Rt,Ut(function(){var n={};return tr(v,function(t,e){v.prototype[e]||(n[e]=t)}),n}(),false),v.first=Lt,v.last=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=v.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:h;return s(n,Be(0,u-r))},v.sample=function(n,t,e){return n&&typeof n.length!="number"?n=Et(n):Le.unindexedChars&&kt(n)&&(n=n.split("")),null==t||e?n?n[lt(0,n.length-1)]:h:(n=Tt(n),n.length=Pe(Be(0,t),n.length),n)
|
||||||
|
},v.take=Lt,v.head=Lt,tr(v,function(n,t){var e="sample"!==t;v.prototype[t]||(v.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new y(o,u):o})}),v.VERSION="2.4.1",v.prototype.chain=function(){return this.__chain__=true,this},v.prototype.toString=function(){return ie(this.__wrapped__)},v.prototype.value=Yt,v.prototype.valueOf=Yt,Xe(["join","pop","shift"],function(n){var t=fe[n];v.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);
|
||||||
|
return n?new y(e,n):e}}),Xe(["push","reverse","sort","unshift"],function(n){var t=fe[n];v.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Xe(["concat","slice","splice"],function(n){var t=fe[n];v.prototype[n]=function(){return new y(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Le.spliceObjects||Xe(["pop","shift","splice"],function(n){var t=fe[n],e="splice"==n;v.prototype[n]=function(){var n=this.__chain__,r=this.__wrapped__,u=t.apply(r,arguments);return 0===r.length&&delete r[0],n||e?new y(u,n):u
|
||||||
|
}}),v}var h,v=[],y=[],m=0,d={},b=+new Date+"",_=75,w=40,j=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",x=/\b__p\+='';/g,C=/\b(__p\+=)''\+/g,E=/(__e\(.*?\)|\b__t\))\+'';/g,O=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,S=/\w*$/,A=/^\s*function[ \n\r\t]+\w/,I=/<%=([\s\S]+?)%>/g,D=RegExp("^["+j+"]*0+(?=.$)"),N=/($^)/,B=/\bthis\b/,P=/['\n\r\t\u2028\u2029\\]/g,R="Array Boolean Date Error Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setTimeout".split(" "),F="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),T="[object Arguments]",$="[object Array]",L="[object Boolean]",z="[object Date]",q="[object Error]",K="[object Function]",W="[object Number]",G="[object Object]",J="[object RegExp]",M="[object String]",V={};
|
||||||
|
V[K]=false,V[T]=V[$]=V[L]=V[z]=V[W]=V[G]=V[J]=V[M]=true;var H={leading:false,maxWait:0,trailing:false},U={configurable:false,enumerable:false,value:null,writable:false},Q={a:"",b:null,c:"",d:"",e:"",v:null,g:"",h:null,support:null,i:"",j:false},X={"boolean":false,"function":true,object:true,number:false,string:false,undefined:false},Y={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},Z=X[typeof window]&&window||this,nt=X[typeof exports]&&exports&&!exports.nodeType&&exports,tt=X[typeof module]&&module&&!module.nodeType&&module,et=tt&&tt.exports===nt&&nt,rt=X[typeof global]&&global;
|
||||||
|
!rt||rt.global!==rt&&rt.window!==rt||(Z=rt);var ut=g();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Z._=ut, define(function(){return ut})):nt&&tt?et?(tt.exports=ut)._=ut:nt._=ut:Z._=ut}).call(this);
|
6785
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.js
generated
vendored
Normal file
6785
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
56
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js
generated
vendored
Normal file
56
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js
generated
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Lo-Dash 2.4.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
|
||||||
|
* Build: `lodash modern -o ./dist/lodash.js`
|
||||||
|
*/
|
||||||
|
;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:m+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=true;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:m+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=true
|
||||||
|
}}function r(n){return n.charCodeAt(0)}function u(n,t){for(var e=n.m,r=t.m,u=-1,o=e.length;++u<o;){var i=e[u],a=r[u];if(i!==a){if(i>a||typeof i=="undefined")return 1;if(i<a||typeof a=="undefined")return-1}}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[r/2|0],i=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&i&&typeof i=="object")return false;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=false,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function i(n){return"\\"+U[n]
|
||||||
|
}function a(){return h.pop()||[]}function f(){return g.pop()||{k:null,l:null,m:null,"false":false,n:0,"null":false,number:null,object:null,push:null,string:null,"true":false,undefined:false,o:null}}function l(n){n.length=0,h.length<_&&h.push(n)}function c(n){var t=n.l;t&&c(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,g.length<_&&g.push(n)}function p(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function s(e){function h(n,t,e){if(!n||!V[typeof n])return n;
|
||||||
|
t=t&&typeof e=="undefined"?t:tt(t,e,3);for(var r=-1,u=V[typeof n]&&Fe(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function g(n,t,e){var r;if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:tt(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function _(n,t,e){var r,u=n,o=u;if(!u)return o;for(var i=arguments,a=0,f=typeof e=="number"?2:i.length;++a<f;)if((u=i[a])&&V[typeof u])for(var l=-1,c=V[typeof u]&&Fe(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);
|
||||||
|
return o}function U(n,t,e){var r,u=n,o=u;if(!u)return o;var i=arguments,a=0,f=typeof e=="number"?2:i.length;if(3<f&&"function"==typeof i[f-2])var l=tt(i[--f-1],i[f--],2);else 2<f&&"function"==typeof i[f-1]&&(l=i[--f]);for(;++a<f;)if((u=i[a])&&V[typeof u])for(var c=-1,p=V[typeof u]&&Fe(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function H(n){var t,e=[];if(!n||!V[typeof n])return e;for(t in n)me.call(n,t)&&e.push(t);return e}function J(n){return n&&typeof n=="object"&&!Te(n)&&me.call(n,"__wrapped__")?n:new Q(n)
|
||||||
|
}function Q(n,t){this.__chain__=!!t,this.__wrapped__=n}function X(n){function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)}var e=n[0],r=n[2],u=n[4];return $e(t,n),t}function Z(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!wt(n))return n;var i=ce.call(n);if(!K[i])return n;var f=Ae[i];switch(i){case T:case F:return new f(+n);case W:case P:return new f(n);case z:return o=f(n.source,C.exec(n)),o.lastIndex=n.lastIndex,o
|
||||||
|
}if(i=Te(n),t){var c=!r;r||(r=a()),u||(u=a());for(var s=r.length;s--;)if(r[s]==n)return u[s];o=i?f(n.length):{}}else o=i?p(n):U({},n);return i&&(me.call(n,"index")&&(o.index=n.index),me.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(i?St:h)(n,function(n,i){o[i]=Z(n,t,e,r,u)}),c&&(l(r),l(u)),o):o}function nt(n){return wt(n)?ke(n):{}}function tt(n,t,e){if(typeof n!="function")return Ut;if(typeof t=="undefined"||!("prototype"in n))return n;var r=n.__bindData__;if(typeof r=="undefined"&&(De.funcNames&&(r=!n.name),r=r||!De.funcDecomp,!r)){var u=ge.call(n);
|
||||||
|
De.funcNames||(r=!O.test(u)),r||(r=E.test(u),$e(n,r))}if(false===r||true!==r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)}}return Mt(n,t)}function et(n){function t(){var n=f?i:this;if(u){var h=p(u);be.apply(h,arguments)}return(o||c)&&(h||(h=p(arguments)),o&&be.apply(h,o),c&&h.length<a)?(r|=16,et([e,s?r:-4&r,h,null,i,a])):(h||(h=arguments),l&&(e=n[v]),this instanceof t?(n=nt(e.prototype),h=e.apply(n,h),wt(h)?h:n):e.apply(n,h))
|
||||||
|
}var e=n[0],r=n[1],u=n[2],o=n[3],i=n[4],a=n[5],f=1&r,l=2&r,c=4&r,s=8&r,v=e;return $e(t,n),t}function rt(e,r){var u=-1,i=st(),a=e?e.length:0,f=a>=b&&i===n,l=[];if(f){var p=o(r);p?(i=t,r=p):f=false}for(;++u<a;)p=e[u],0>i(r,p)&&l.push(p);return f&&c(r),l}function ut(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var i=n[r];if(i&&typeof i=="object"&&typeof i.length=="number"&&(Te(i)||yt(i))){t||(i=ut(i,t,e));var a=-1,f=i.length,l=o.length;for(o.length+=f;++a<f;)o[l++]=i[a]}else e||o.push(i)}return o
|
||||||
|
}function ot(n,t,e,r,u,o){if(e){var i=e(n,t);if(typeof i!="undefined")return!!i}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&V[typeof n]||t&&V[typeof t]))return false;if(null==n||null==t)return n===t;var f=ce.call(n),c=ce.call(t);if(f==D&&(f=q),c==D&&(c=q),f!=c)return false;switch(f){case T:case F:return+n==+t;case W:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case z:case P:return n==oe(t)}if(c=f==$,!c){var p=me.call(n,"__wrapped__"),s=me.call(t,"__wrapped__");if(p||s)return ot(p?n.__wrapped__:n,s?t.__wrapped__:t,e,r,u,o);
|
||||||
|
if(f!=q)return false;if(f=n.constructor,p=t.constructor,f!=p&&!(dt(f)&&f instanceof f&&dt(p)&&p instanceof p)&&"constructor"in n&&"constructor"in t)return false}for(f=!u,u||(u=a()),o||(o=a()),p=u.length;p--;)if(u[p]==n)return o[p]==t;var v=0,i=true;if(u.push(n),o.push(t),c){if(p=n.length,v=t.length,(i=v==p)||r)for(;v--;)if(c=p,s=t[v],r)for(;c--&&!(i=ot(n[c],s,e,r,u,o)););else if(!(i=ot(n[v],s,e,r,u,o)))break}else g(t,function(t,a,f){return me.call(f,a)?(v++,i=me.call(n,a)&&ot(n[a],t,e,r,u,o)):void 0}),i&&!r&&g(n,function(n,t,e){return me.call(e,t)?i=-1<--v:void 0
|
||||||
|
});return u.pop(),o.pop(),f&&(l(u),l(o)),i}function it(n,t,e,r,u){(Te(t)?St:h)(t,function(t,o){var i,a,f=t,l=n[o];if(t&&((a=Te(t))||Pe(t))){for(f=r.length;f--;)if(i=r[f]==t){l=u[f];break}if(!i){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=a?Te(l)?l:[]:Pe(l)?l:{}),r.push(t),u.push(l),c||it(l,t,e,r,u)}}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function at(n,t){return n+he(Re()*(t-n+1))}function ft(e,r,u){var i=-1,f=st(),p=e?e.length:0,s=[],v=!r&&p>=b&&f===n,h=u||v?a():s;
|
||||||
|
for(v&&(h=o(h),f=t);++i<p;){var g=e[i],y=u?u(g,i,e):g;(r?!i||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(l(h.k),c(h)):u&&l(h),s}function lt(n){return function(t,e,r){var u={};e=J.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var i=t[r];n(u,i,e(i,r,t),t)}else h(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ct(n,t,e,r,u,o){var i=1&t,a=4&t,f=16&t,l=32&t;if(!(2&t||dt(n)))throw new ie;f&&!e.length&&(t&=-17,f=e=false),l&&!r.length&&(t&=-33,l=r=false);
|
||||||
|
var c=n&&n.__bindData__;return c&&true!==c?(c=p(c),c[2]&&(c[2]=p(c[2])),c[3]&&(c[3]=p(c[3])),!i||1&c[1]||(c[4]=u),!i&&1&c[1]&&(t|=8),!a||4&c[1]||(c[5]=o),f&&be.apply(c[2]||(c[2]=[]),e),l&&we.apply(c[3]||(c[3]=[]),r),c[1]|=t,ct.apply(null,c)):(1==t||17===t?X:et)([n,t,e,r,u,o])}function pt(n){return Be[n]}function st(){var t=(t=J.indexOf)===Wt?n:t;return t}function vt(n){return typeof n=="function"&&pe.test(n)}function ht(n){var t,e;return n&&ce.call(n)==q&&(t=n.constructor,!dt(t)||t instanceof t)?(g(n,function(n,t){e=t
|
||||||
|
}),typeof e=="undefined"||me.call(n,e)):false}function gt(n){return We[n]}function yt(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ce.call(n)==D||false}function mt(n,t,e){var r=Fe(n),u=r.length;for(t=tt(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function bt(n){var t=[];return g(n,function(n,e){dt(n)&&t.push(e)}),t.sort()}function _t(n){for(var t=-1,e=Fe(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function dt(n){return typeof n=="function"}function wt(n){return!(!n||!V[typeof n])
|
||||||
|
}function jt(n){return typeof n=="number"||n&&typeof n=="object"&&ce.call(n)==W||false}function kt(n){return typeof n=="string"||n&&typeof n=="object"&&ce.call(n)==P||false}function xt(n){for(var t=-1,e=Fe(n),r=e.length,u=Xt(r);++t<r;)u[t]=n[e[t]];return u}function Ct(n,t,e){var r=-1,u=st(),o=n?n.length:0,i=false;return e=(0>e?Ie(0,o+e):e)||0,Te(n)?i=-1<u(n,t,e):typeof o=="number"?i=-1<(kt(n)?n.indexOf(t,e):u(n,t,e)):h(n,function(n){return++r<e?void 0:!(i=n===t)}),i}function Ot(n,t,e){var r=true;t=J.createCallback(t,e,3),e=-1;
|
||||||
|
var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else h(n,function(n,e,u){return r=!!t(n,e,u)});return r}function Nt(n,t,e){var r=[];t=J.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}else h(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function It(n,t,e){t=J.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return h(n,function(n,e,r){return t(n,e,r)?(u=n,false):void 0}),u}for(;++e<r;){var o=n[e];
|
||||||
|
if(t(o,e,n))return o}}function St(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:tt(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else h(n,t);return n}function Et(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:tt(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=Fe(n),r=u.length;h(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Rt(n,t,e){var r=-1,u=n?n.length:0;if(t=J.createCallback(t,e,3),typeof u=="number")for(var o=Xt(u);++r<u;)o[r]=t(n[r],r,n);
|
||||||
|
else o=[],h(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function At(n,t,e){var u=-1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&Te(n)){e=-1;for(var i=n.length;++e<i;){var a=n[e];a>o&&(o=a)}}else t=null==t&&kt(n)?r:J.createCallback(t,e,3),St(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Dt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=J.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++o<i;)e=t(e,n[o],o,n);else h(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)
|
||||||
|
});return e}function $t(n,t,e,r){var u=3>arguments.length;return t=J.createCallback(t,r,4),Et(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)}),e}function Tt(n){var t=-1,e=n?n.length:0,r=Xt(typeof e=="number"?e:0);return St(n,function(n){var e=at(0,++t);r[t]=r[e],r[e]=n}),r}function Ft(n,t,e){var r;t=J.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else h(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Bt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;
|
||||||
|
for(t=J.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:v;return p(n,0,Se(Ie(0,r),u))}function Wt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ie(0,u+r):r||0}else if(r)return r=zt(t,e),t[r]===e?r:-1;return n(t,e,r)}function qt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=J.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ie(0,t);return p(n,r)}function zt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?J.createCallback(e,r,1):Ut,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;
|
||||||
|
return u}function Pt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(e=J.createCallback(e,r,3)),ft(n,t,e)}function Kt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?At(Ve(n,"length")):0,r=Xt(0>e?0:e);++t<e;)r[t]=Ve(n,t);return r}function Lt(n,t){var e=-1,r=n?n.length:0,u={};for(t||!r||Te(n[0])||(t=[]);++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Mt(n,t){return 2<arguments.length?ct(n,17,p(arguments,2),null,t):ct(n,1,null,null,t)
|
||||||
|
}function Vt(n,t,e){function r(){c&&ve(c),i=c=p=v,(g||h!==t)&&(s=Ue(),a=n.apply(l,o),c||i||(o=l=null))}function u(){var e=t-(Ue()-f);0<e?c=_e(u,e):(i&&ve(i),e=p,i=c=p=v,e&&(s=Ue(),a=n.apply(l,o),c||i||(o=l=null)))}var o,i,a,f,l,c,p,s=0,h=false,g=true;if(!dt(n))throw new ie;if(t=Ie(0,t)||0,true===e)var y=true,g=false;else wt(e)&&(y=e.leading,h="maxWait"in e&&(Ie(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=Ue(),l=this,p=g&&(c||!y),false===h)var e=y&&!c;else{i||y||(s=f);var v=h-(f-s),m=0>=v;
|
||||||
|
m?(i&&(i=ve(i)),s=f,a=n.apply(l,o)):i||(i=_e(r,v))}return m&&c?c=ve(c):c||t===h||(c=_e(u,t)),e&&(m=true,a=n.apply(l,o)),!m||c||i||(o=l=null),a}}function Ut(n){return n}function Gt(n,t,e){var r=true,u=t&&bt(t);t&&(e||u.length)||(null==e&&(e=t),o=Q,t=n,n=J,u=bt(t)),false===e?r=false:wt(e)&&"chain"in e&&(r=e.chain);var o=n,i=dt(o);St(u,function(e){var u=n[e]=t[e];i&&(o.prototype[e]=function(){var t=this.__chain__,e=this.__wrapped__,i=[e];if(be.apply(i,arguments),i=u.apply(n,i),r||t){if(e===i&&wt(i))return this;
|
||||||
|
i=new o(i),i.__chain__=t}return i})})}function Ht(){}function Jt(n){return function(t){return t[n]}}function Qt(){return this.__wrapped__}e=e?Y.defaults(G.Object(),e,Y.pick(G,A)):G;var Xt=e.Array,Yt=e.Boolean,Zt=e.Date,ne=e.Function,te=e.Math,ee=e.Number,re=e.Object,ue=e.RegExp,oe=e.String,ie=e.TypeError,ae=[],fe=re.prototype,le=e._,ce=fe.toString,pe=ue("^"+oe(ce).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),se=te.ceil,ve=e.clearTimeout,he=te.floor,ge=ne.prototype.toString,ye=vt(ye=re.getPrototypeOf)&&ye,me=fe.hasOwnProperty,be=ae.push,_e=e.setTimeout,de=ae.splice,we=ae.unshift,je=function(){try{var n={},t=vt(t=re.defineProperty)&&t,e=t(n,n,n)&&t
|
||||||
|
}catch(r){}return e}(),ke=vt(ke=re.create)&&ke,xe=vt(xe=Xt.isArray)&&xe,Ce=e.isFinite,Oe=e.isNaN,Ne=vt(Ne=re.keys)&&Ne,Ie=te.max,Se=te.min,Ee=e.parseInt,Re=te.random,Ae={};Ae[$]=Xt,Ae[T]=Yt,Ae[F]=Zt,Ae[B]=ne,Ae[q]=re,Ae[W]=ee,Ae[z]=ue,Ae[P]=oe,Q.prototype=J.prototype;var De=J.support={};De.funcDecomp=!vt(e.a)&&E.test(s),De.funcNames=typeof ne.name=="string",J.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:J}},ke||(nt=function(){function n(){}return function(t){if(wt(t)){n.prototype=t;
|
||||||
|
var r=new n;n.prototype=null}return r||e.Object()}}());var $e=je?function(n,t){M.value=t,je(n,"__bindData__",M)}:Ht,Te=xe||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ce.call(n)==$||false},Fe=Ne?function(n){return wt(n)?Ne(n):[]}:H,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},We=_t(Be),qe=ue("("+Fe(We).join("|")+")","g"),ze=ue("["+Fe(Be).join("")+"]","g"),Pe=ye?function(n){if(!n||ce.call(n)!=q)return false;var t=n.valueOf,e=vt(t)&&(e=ye(t))&&ye(e);return e?n==e||ye(n)==e:ht(n)
|
||||||
|
}:ht,Ke=lt(function(n,t,e){me.call(n,e)?n[e]++:n[e]=1}),Le=lt(function(n,t,e){(me.call(n,e)?n[e]:n[e]=[]).push(t)}),Me=lt(function(n,t,e){n[e]=t}),Ve=Rt,Ue=vt(Ue=Zt.now)&&Ue||function(){return(new Zt).getTime()},Ge=8==Ee(d+"08")?Ee:function(n,t){return Ee(kt(n)?n.replace(I,""):n,t||0)};return J.after=function(n,t){if(!dt(t))throw new ie;return function(){return 1>--n?t.apply(this,arguments):void 0}},J.assign=U,J.at=function(n){for(var t=arguments,e=-1,r=ut(t,true,false,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Xt(t);++e<t;)u[e]=n[r[e]];
|
||||||
|
return u},J.bind=Mt,J.bindAll=function(n){for(var t=1<arguments.length?ut(arguments,true,false,1):bt(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=ct(n[u],1,null,null,n)}return n},J.bindKey=function(n,t){return 2<arguments.length?ct(t,19,p(arguments,2),null,n):ct(t,3,null,null,n)},J.chain=function(n){return n=new Q(n),n.__chain__=true,n},J.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},J.compose=function(){for(var n=arguments,t=n.length;t--;)if(!dt(n[t]))throw new ie;
|
||||||
|
return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},J.constant=function(n){return function(){return n}},J.countBy=Ke,J.create=function(n,t){var e=nt(n);return t?U(e,t):e},J.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return tt(n,t,e);if("object"!=r)return Jt(n);var u=Fe(n),o=u[0],i=n[o];return 1!=u.length||i!==i||wt(i)?function(t){for(var e=u.length,r=false;e--&&(r=ot(t[u[e]],n[u[e]],null,true)););return r}:function(n){return n=n[o],i===n&&(0!==i||1/i==1/n)
|
||||||
|
}},J.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,ct(n,4,null,null,null,t)},J.debounce=Vt,J.defaults=_,J.defer=function(n){if(!dt(n))throw new ie;var t=p(arguments,1);return _e(function(){n.apply(v,t)},1)},J.delay=function(n,t){if(!dt(n))throw new ie;var e=p(arguments,2);return _e(function(){n.apply(v,e)},t)},J.difference=function(n){return rt(n,ut(arguments,true,true,1))},J.filter=Nt,J.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(n=Rt(n,e,r)),ut(n,t)
|
||||||
|
},J.forEach=St,J.forEachRight=Et,J.forIn=g,J.forInRight=function(n,t,e){var r=[];g(n,function(n,t){r.push(t,n)});var u=r.length;for(t=tt(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},J.forOwn=h,J.forOwnRight=mt,J.functions=bt,J.groupBy=Le,J.indexBy=Me,J.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=J.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return p(n,0,Se(Ie(0,u-r),u))},J.intersection=function(){for(var e=[],r=-1,u=arguments.length,i=a(),f=st(),p=f===n,s=a();++r<u;){var v=arguments[r];
|
||||||
|
(Te(v)||yt(v))&&(e.push(v),i.push(p&&v.length>=b&&o(r?e[r]:s)))}var p=e[0],h=-1,g=p?p.length:0,y=[];n:for(;++h<g;){var m=i[0],v=p[h];if(0>(m?t(m,v):f(s,v))){for(r=u,(m||s).push(v);--r;)if(m=i[r],0>(m?t(m,v):f(e[r],v)))continue n;y.push(v)}}for(;u--;)(m=i[u])&&c(m);return l(i),l(s),y},J.invert=_t,J.invoke=function(n,t){var e=p(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,i=Xt(typeof o=="number"?o:0);return St(n,function(n){i[++r]=(u?t:n[t]).apply(n,e)}),i},J.keys=Fe,J.map=Rt,J.mapValues=function(n,t,e){var r={};
|
||||||
|
return t=J.createCallback(t,e,3),h(n,function(n,e,u){r[e]=t(n,e,u)}),r},J.max=At,J.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):m+arguments[0];return me.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!dt(n))throw new ie;return e.cache={},e},J.merge=function(n){var t=arguments,e=2;if(!wt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=tt(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=p(arguments,1,e),u=-1,o=a(),i=a();++u<e;)it(n,t[u],r,o,i);
|
||||||
|
return l(o),l(i),n},J.min=function(n,t,e){var u=1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&Te(n)){e=-1;for(var i=n.length;++e<i;){var a=n[e];a<o&&(o=a)}}else t=null==t&&kt(n)?r:J.createCallback(t,e,3),St(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)});return o},J.omit=function(n,t,e){var r={};if(typeof t!="function"){var u=[];g(n,function(n,t){u.push(t)});for(var u=rt(u,ut(arguments,true,false,1)),o=-1,i=u.length;++o<i;){var a=u[o];r[a]=n[a]}}else t=J.createCallback(t,e,3),g(n,function(n,e,u){t(n,e,u)||(r[e]=n)
|
||||||
|
});return r},J.once=function(n){var t,e;if(!dt(n))throw new ie;return function(){return t?e:(t=true,e=n.apply(this,arguments),n=null,e)}},J.pairs=function(n){for(var t=-1,e=Fe(n),r=e.length,u=Xt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},J.partial=function(n){return ct(n,16,p(arguments,1))},J.partialRight=function(n){return ct(n,32,null,p(arguments,1))},J.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=ut(arguments,true,false,1),i=wt(n)?o.length:0;++u<i;){var a=o[u];a in n&&(r[a]=n[a])
|
||||||
|
}else t=J.createCallback(t,e,3),g(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},J.pluck=Ve,J.property=Jt,J.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,i=t[e];++o<u;)n[o]===i&&(de.call(n,o--,1),u--);return n},J.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Ie(0,se((t-n)/(e||1)));for(var u=Xt(t);++r<t;)u[r]=n,n+=e;return u},J.reject=function(n,t,e){return t=J.createCallback(t,e,3),Nt(n,function(n,e,r){return!t(n,e,r)
|
||||||
|
})},J.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=J.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),de.call(n,r--,1),u--);return o},J.rest=qt,J.shuffle=Tt,J.sortBy=function(n,t,e){var r=-1,o=Te(t),i=n?n.length:0,p=Xt(typeof i=="number"?i:0);for(o||(t=J.createCallback(t,e,3)),St(n,function(n,e,u){var i=p[++r]=f();o?i.m=Rt(t,function(t){return n[t]}):(i.m=a())[0]=t(n,e,u),i.n=r,i.o=n}),i=p.length,p.sort(u);i--;)n=p[i],p[i]=n.o,o||l(n.m),c(n);return p},J.tap=function(n,t){return t(n),n
|
||||||
|
},J.throttle=function(n,t,e){var r=true,u=true;if(!dt(n))throw new ie;return false===e?r=false:wt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),L.leading=r,L.maxWait=t,L.trailing=u,Vt(n,t,L)},J.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Xt(n);for(t=tt(t,e,1);++r<n;)u[r]=t(r);return u},J.toArray=function(n){return n&&typeof n.length=="number"?p(n):xt(n)},J.transform=function(n,t,e,r){var u=Te(n);if(null==e)if(u)e=[];else{var o=n&&n.constructor;e=nt(o&&o.prototype)}return t&&(t=J.createCallback(t,r,4),(u?St:h)(n,function(n,r,u){return t(e,n,r,u)
|
||||||
|
})),e},J.union=function(){return ft(ut(arguments,true,true))},J.uniq=Pt,J.values=xt,J.where=Nt,J.without=function(n){return rt(n,p(arguments,1))},J.wrap=function(n,t){return ct(t,16,[n])},J.xor=function(){for(var n=-1,t=arguments.length;++n<t;){var e=arguments[n];if(Te(e)||yt(e))var r=r?ft(rt(r,e).concat(rt(e,r))):e}return r||[]},J.zip=Kt,J.zipObject=Lt,J.collect=Rt,J.drop=qt,J.each=St,J.eachRight=Et,J.extend=U,J.methods=bt,J.object=Lt,J.select=Nt,J.tail=qt,J.unique=Pt,J.unzip=Kt,Gt(J),J.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=false),Z(n,t,typeof e=="function"&&tt(e,r,1))
|
||||||
|
},J.cloneDeep=function(n,t,e){return Z(n,true,typeof t=="function"&&tt(t,e,1))},J.contains=Ct,J.escape=function(n){return null==n?"":oe(n).replace(ze,pt)},J.every=Ot,J.find=It,J.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=J.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},J.findKey=function(n,t,e){var r;return t=J.createCallback(t,e,3),h(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},J.findLast=function(n,t,e){var r;return t=J.createCallback(t,e,3),Et(n,function(n,e,u){return t(n,e,u)?(r=n,false):void 0
|
||||||
|
}),r},J.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=J.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},J.findLastKey=function(n,t,e){var r;return t=J.createCallback(t,e,3),mt(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},J.has=function(n,t){return n?me.call(n,t):false},J.identity=Ut,J.indexOf=Wt,J.isArguments=yt,J.isArray=Te,J.isBoolean=function(n){return true===n||false===n||n&&typeof n=="object"&&ce.call(n)==T||false},J.isDate=function(n){return n&&typeof n=="object"&&ce.call(n)==F||false
|
||||||
|
},J.isElement=function(n){return n&&1===n.nodeType||false},J.isEmpty=function(n){var t=true;if(!n)return t;var e=ce.call(n),r=n.length;return e==$||e==P||e==D||e==q&&typeof r=="number"&&dt(n.splice)?!r:(h(n,function(){return t=false}),t)},J.isEqual=function(n,t,e,r){return ot(n,t,typeof e=="function"&&tt(e,r,2))},J.isFinite=function(n){return Ce(n)&&!Oe(parseFloat(n))},J.isFunction=dt,J.isNaN=function(n){return jt(n)&&n!=+n},J.isNull=function(n){return null===n},J.isNumber=jt,J.isObject=wt,J.isPlainObject=Pe,J.isRegExp=function(n){return n&&typeof n=="object"&&ce.call(n)==z||false
|
||||||
|
},J.isString=kt,J.isUndefined=function(n){return typeof n=="undefined"},J.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Ie(0,r+e):Se(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},J.mixin=Gt,J.noConflict=function(){return e._=le,this},J.noop=Ht,J.now=Ue,J.parseInt=Ge,J.random=function(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=true)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,e||n%1||t%1?(e=Re(),Se(n+e*(t-n+parseFloat("1e-"+((e+"").length-1))),t)):at(n,t)
|
||||||
|
},J.reduce=Dt,J.reduceRight=$t,J.result=function(n,t){if(n){var e=n[t];return dt(e)?n[t]():e}},J.runInContext=s,J.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Fe(n).length},J.some=Ft,J.sortedIndex=zt,J.template=function(n,t,e){var r=J.templateSettings;n=oe(n||""),e=_({},e,r);var u,o=_({},e.imports,r.imports),r=Fe(o),o=xt(o),a=0,f=e.interpolate||S,l="__p+='",f=ue((e.escape||S).source+"|"+f.source+"|"+(f===N?x:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(a,c).replace(R,i),e&&(l+="'+__e("+e+")+'"),f&&(u=true,l+="';"+f+";\n__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),a=c+t.length,t
|
||||||
|
}),l+="';",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(w,""):l).replace(j,"$1").replace(k,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var c=ne(r,"return "+l).apply(v,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},J.unescape=function(n){return null==n?"":oe(n).replace(qe,gt)},J.uniqueId=function(n){var t=++y;return oe(null==n?"":n)+t
|
||||||
|
},J.all=Ot,J.any=Ft,J.detect=It,J.findWhere=It,J.foldl=Dt,J.foldr=$t,J.include=Ct,J.inject=Dt,Gt(function(){var n={};return h(J,function(t,e){J.prototype[e]||(n[e]=t)}),n}(),false),J.first=Bt,J.last=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=J.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return p(n,Ie(0,u-r))},J.sample=function(n,t,e){return n&&typeof n.length!="number"&&(n=xt(n)),null==t||e?n?n[at(0,n.length-1)]:v:(n=Tt(n),n.length=Se(Ie(0,t),n.length),n)
|
||||||
|
},J.take=Bt,J.head=Bt,h(J,function(n,t){var e="sample"!==t;J.prototype[t]||(J.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new Q(o,u):o})}),J.VERSION="2.4.1",J.prototype.chain=function(){return this.__chain__=true,this},J.prototype.toString=function(){return oe(this.__wrapped__)},J.prototype.value=Qt,J.prototype.valueOf=Qt,St(["join","pop","shift"],function(n){var t=ae[n];J.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);
|
||||||
|
return n?new Q(e,n):e}}),St(["push","reverse","sort","unshift"],function(n){var t=ae[n];J.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),St(["concat","slice","splice"],function(n){var t=ae[n];J.prototype[n]=function(){return new Q(t.apply(this.__wrapped__,arguments),this.__chain__)}}),J}var v,h=[],g=[],y=0,m=+new Date+"",b=75,_=40,d=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",w=/\b__p\+='';/g,j=/\b(__p\+=)''\+/g,k=/(__e\(.*?\)|\b__t\))\+'';/g,x=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,C=/\w*$/,O=/^\s*function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,I=RegExp("^["+d+"]*0+(?=.$)"),S=/($^)/,E=/\bthis\b/,R=/['\n\r\t\u2028\u2029\\]/g,A="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setTimeout".split(" "),D="[object Arguments]",$="[object Array]",T="[object Boolean]",F="[object Date]",B="[object Function]",W="[object Number]",q="[object Object]",z="[object RegExp]",P="[object String]",K={};
|
||||||
|
K[B]=false,K[D]=K[$]=K[T]=K[F]=K[W]=K[q]=K[z]=K[P]=true;var L={leading:false,maxWait:0,trailing:false},M={configurable:false,enumerable:false,value:null,writable:false},V={"boolean":false,"function":true,object:true,number:false,string:false,undefined:false},U={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},G=V[typeof window]&&window||this,H=V[typeof exports]&&exports&&!exports.nodeType&&exports,J=V[typeof module]&&module&&!module.nodeType&&module,Q=J&&J.exports===H&&H,X=V[typeof global]&&global;!X||X.global!==X&&X.window!==X||(G=X);
|
||||||
|
var Y=s();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(G._=Y, define(function(){return Y})):H&&J?Q?(J.exports=Y)._=Y:H._=Y:G._=Y}).call(this);
|
4979
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js
generated
vendored
Normal file
4979
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js
generated
vendored
Normal file
39
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Lo-Dash 2.4.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
|
||||||
|
* Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
|
||||||
|
*/
|
||||||
|
;(function(){function n(n,r,t){t=(t||0)-1;for(var e=n?n.length:0;++t<e;)if(n[t]===r)return t;return-1}function r(n,r){for(var t=n.m,e=r.m,u=-1,o=t.length;++u<o;){var i=t[u],f=e[u];if(i!==f){if(i>f||typeof i=="undefined")return 1;if(i<f||typeof f=="undefined")return-1}}return n.n-r.n}function t(n){return"\\"+yr[n]}function e(n,r,t){r||(r=0),typeof t=="undefined"&&(t=n?n.length:0);var e=-1;t=t-r||0;for(var u=Array(0>t?0:t);++e<t;)u[e]=n[r+e];return u}function u(n){return n instanceof u?n:new o(n)}function o(n,r){this.__chain__=!!r,this.__wrapped__=n
|
||||||
|
}function i(n){function r(){if(u){var n=e(u);Rr.apply(n,arguments)}if(this instanceof r){var i=f(t.prototype),n=t.apply(i,n||arguments);return O(n)?n:i}return t.apply(o,n||arguments)}var t=n[0],u=n[2],o=n[4];return r}function f(n){return O(n)?Br(n):{}}function a(n,r,t){if(typeof n!="function")return Y;if(typeof r=="undefined"||!("prototype"in n))return n;switch(t){case 1:return function(t){return n.call(r,t)};case 2:return function(t,e){return n.call(r,t,e)};case 3:return function(t,e,u){return n.call(r,t,e,u)
|
||||||
|
};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return L(n,r)}function l(n){function r(){var n=p?a:this;if(o){var y=e(o);Rr.apply(y,arguments)}return(i||g)&&(y||(y=e(arguments)),i&&Rr.apply(y,i),g&&y.length<c)?(u|=16,l([t,h?u:-4&u,y,null,a,c])):(y||(y=arguments),s&&(t=n[v]),this instanceof r?(n=f(t.prototype),y=t.apply(n,y),O(y)?y:n):t.apply(n,y))}var t=n[0],u=n[1],o=n[2],i=n[3],a=n[4],c=n[5],p=1&u,s=2&u,g=4&u,h=8&u,v=t;return r}function c(n,r){for(var t=-1,e=m(),u=n?n.length:0,o=[];++t<u;){var i=n[t];
|
||||||
|
0>e(r,i)&&o.push(i)}return o}function p(n,r,t,e){e=(e||0)-1;for(var u=n?n.length:0,o=[];++e<u;){var i=n[e];if(i&&typeof i=="object"&&typeof i.length=="number"&&(Cr(i)||b(i))){r||(i=p(i,r,t));var f=-1,a=i.length,l=o.length;for(o.length+=a;++f<a;)o[l++]=i[f]}else t||o.push(i)}return o}function s(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(n===n&&!(n&&vr[typeof n]||r&&vr[typeof r]))return false;if(null==n||null==r)return n===r;var o=Er.call(n),i=Er.call(r);if(o!=i)return false;switch(o){case lr:case cr:return+n==+r;
|
||||||
|
case pr:return n!=+n?r!=+r:0==n?1/n==1/r:n==+r;case gr:case hr:return n==r+""}if(i=o==ar,!i){var f=n instanceof u,a=r instanceof u;if(f||a)return s(f?n.__wrapped__:n,a?r.__wrapped__:r,t,e);if(o!=sr)return false;if(o=n.constructor,f=r.constructor,o!=f&&!(A(o)&&o instanceof o&&A(f)&&f instanceof f)&&"constructor"in n&&"constructor"in r)return false}for(t||(t=[]),e||(e=[]),o=t.length;o--;)if(t[o]==n)return e[o]==r;var l=true,c=0;if(t.push(n),e.push(r),i){if(c=r.length,l=c==n.length)for(;c--&&(l=s(n[c],r[c],t,e)););}else Kr(r,function(r,u,o){return Nr.call(o,u)?(c++,!(l=Nr.call(n,u)&&s(n[u],r,t,e))&&er):void 0
|
||||||
|
}),l&&Kr(n,function(n,r,t){return Nr.call(t,r)?!(l=-1<--c)&&er:void 0});return t.pop(),e.pop(),l}function g(n,r,t){for(var e=-1,u=m(),o=n?n.length:0,i=[],f=t?[]:i;++e<o;){var a=n[e],l=t?t(a,e,n):a;(r?!e||f[f.length-1]!==l:0>u(f,l))&&(t&&f.push(l),i.push(a))}return i}function h(n){return function(r,t,e){var u={};t=X(t,e,3),e=-1;var o=r?r.length:0;if(typeof o=="number")for(;++e<o;){var i=r[e];n(u,i,t(i,e,r),r)}else Lr(r,function(r,e,o){n(u,r,t(r,e,o),o)});return u}}function v(n,r,t,e,u,o){var f=16&r,a=32&r;
|
||||||
|
if(!(2&r||A(n)))throw new TypeError;return f&&!t.length&&(r&=-17,t=false),a&&!e.length&&(r&=-33,e=false),(1==r||17===r?i:l)([n,r,t,e,u,o])}function y(n){return Vr[n]}function m(){var r=(r=u.indexOf)===G?n:r;return r}function _(n){return typeof n=="function"&&Ar.test(n)}function d(n){return Gr[n]}function b(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Er.call(n)==fr||false}function w(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)n[u]=e[u]}return n
|
||||||
|
}function j(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)"undefined"==typeof n[u]&&(n[u]=e[u])}return n}function x(n){var r=[];return Kr(n,function(n,t){A(n)&&r.push(t)}),r.sort()}function T(n){for(var r=-1,t=Ur(n),e=t.length,u={};++r<e;){var o=t[r];u[n[o]]=o}return u}function E(n){if(!n)return true;if(Cr(n)||N(n))return!n.length;for(var r in n)if(Nr.call(n,r))return false;return true}function A(n){return typeof n=="function"}function O(n){return!(!n||!vr[typeof n])
|
||||||
|
}function S(n){return typeof n=="number"||n&&typeof n=="object"&&Er.call(n)==pr||false}function N(n){return typeof n=="string"||n&&typeof n=="object"&&Er.call(n)==hr||false}function R(n){for(var r=-1,t=Ur(n),e=t.length,u=Array(e);++r<e;)u[r]=n[t[r]];return u}function k(n,r){var t=m(),e=n?n.length:0,u=false;return e&&typeof e=="number"?u=-1<t(n,r):Lr(n,function(n){return(u=n===r)&&er}),u}function B(n,r,t){var e=true;r=X(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&(e=!!r(n[t],t,n)););else Lr(n,function(n,t,u){return!(e=!!r(n,t,u))&&er
|
||||||
|
});return e}function F(n,r,t){var e=[];r=X(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u;){var o=n[t];r(o,t,n)&&e.push(o)}else Lr(n,function(n,t,u){r(n,t,u)&&e.push(n)});return e}function q(n,r,t){r=X(r,t,3),t=-1;var e=n?n.length:0;if(typeof e!="number"){var u;return Lr(n,function(n,t,e){return r(n,t,e)?(u=n,er):void 0}),u}for(;++t<e;){var o=n[t];if(r(o,t,n))return o}}function D(n,r,t){var e=-1,u=n?n.length:0;if(r=r&&typeof t=="undefined"?r:a(r,t,3),typeof u=="number")for(;++e<u&&r(n[e],e,n)!==er;);else Lr(n,r)
|
||||||
|
}function I(n,r){var t=n?n.length:0;if(typeof t=="number")for(;t--&&false!==r(n[t],t,n););else{var e=Ur(n),t=e.length;Lr(n,function(n,u,o){return u=e?e[--t]:--t,false===r(o[u],u,o)&&er})}}function M(n,r,t){var e=-1,u=n?n.length:0;if(r=X(r,t,3),typeof u=="number")for(var o=Array(u);++e<u;)o[e]=r(n[e],e,n);else o=[],Lr(n,function(n,t,u){o[++e]=r(n,t,u)});return o}function $(n,r,t){var e=-1/0,u=e;typeof r!="function"&&t&&t[r]===n&&(r=null);var o=-1,i=n?n.length:0;if(null==r&&typeof i=="number")for(;++o<i;)t=n[o],t>u&&(u=t);
|
||||||
|
else r=X(r,t,3),D(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});return u}function W(n,r,t,e){if(!n)return t;var u=3>arguments.length;r=X(r,e,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(t=n[++o]);++o<i;)t=r(t,n[o],o,n);else Lr(n,function(n,e,o){t=u?(u=false,n):r(t,n,e,o)});return t}function z(n,r,t,e){var u=3>arguments.length;return r=X(r,e,4),I(n,function(n,e,o){t=u?(u=false,n):r(t,n,e,o)}),t}function C(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return D(n,function(n){var t;t=++r,t=0+Sr(Wr()*(t-0+1)),e[r]=e[t],e[t]=n
|
||||||
|
}),e}function P(n,r,t){var e;r=X(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&!(e=r(n[t],t,n)););else Lr(n,function(n,t,u){return(e=r(n,t,u))&&er});return!!e}function U(n,r,t){return t&&E(r)?rr:(t?q:F)(n,r)}function V(n,r,t){var u=0,o=n?n.length:0;if(typeof r!="number"&&null!=r){var i=-1;for(r=X(r,t,3);++i<o&&r(n[i],i,n);)u++}else if(u=r,null==u||t)return n?n[0]:rr;return e(n,0,$r(Mr(0,u),o))}function G(r,t,e){if(typeof e=="number"){var u=r?r.length:0;e=0>e?Mr(0,u+e):e||0}else if(e)return e=J(r,t),r[e]===t?e:-1;
|
||||||
|
return n(r,t,e)}function H(n,r,t){if(typeof r!="number"&&null!=r){var u=0,o=-1,i=n?n.length:0;for(r=X(r,t,3);++o<i&&r(n[o],o,n);)u++}else u=null==r||t?1:Mr(0,r);return e(n,u)}function J(n,r,t,e){var u=0,o=n?n.length:u;for(t=t?X(t,e,1):Y,r=t(r);u<o;)e=u+o>>>1,t(n[e])<r?u=e+1:o=e;return u}function K(n,r,t,e){return typeof r!="boolean"&&null!=r&&(e=t,t=typeof r!="function"&&e&&e[r]===n?null:r,r=false),null!=t&&(t=X(t,e,3)),g(n,r,t)}function L(n,r){return 2<arguments.length?v(n,17,e(arguments,2),null,r):v(n,1,null,null,r)
|
||||||
|
}function Q(n,r,t){var e,u,o,i,f,a,l,c=0,p=false,s=true;if(!A(n))throw new TypeError;if(r=Mr(0,r)||0,true===t)var g=true,s=false;else O(t)&&(g=t.leading,p="maxWait"in t&&(Mr(r,t.maxWait)||0),s="trailing"in t?t.trailing:s);var h=function(){var t=r-(nt()-i);0<t?a=setTimeout(h,t):(u&&clearTimeout(u),t=l,u=a=l=rr,t&&(c=nt(),o=n.apply(f,e),a||u||(e=f=null)))},v=function(){a&&clearTimeout(a),u=a=l=rr,(s||p!==r)&&(c=nt(),o=n.apply(f,e),a||u||(e=f=null))};return function(){if(e=arguments,i=nt(),f=this,l=s&&(a||!g),false===p)var t=g&&!a;
|
||||||
|
else{u||g||(c=i);var y=p-(i-c),m=0>=y;m?(u&&(u=clearTimeout(u)),c=i,o=n.apply(f,e)):u||(u=setTimeout(v,y))}return m&&a?a=clearTimeout(a):a||r===p||(a=setTimeout(h,r)),t&&(m=true,o=n.apply(f,e)),!m||a||u||(e=f=null),o}}function X(n,r,t){var e=typeof n;if(null==n||"function"==e)return a(n,r,t);if("object"!=e)return nr(n);var u=Ur(n);return function(r){for(var t=u.length,e=false;t--&&(e=r[u[t]]===n[u[t]]););return e}}function Y(n){return n}function Z(n){D(x(n),function(r){var t=u[r]=n[r];u.prototype[r]=function(){var n=[this.__wrapped__];
|
||||||
|
return Rr.apply(n,arguments),n=t.apply(u,n),this.__chain__?new o(n,true):n}})}function nr(n){return function(r){return r[n]}}var rr,tr=0,er={},ur=+new Date+"",or=/($^)/,ir=/['\n\r\t\u2028\u2029\\]/g,fr="[object Arguments]",ar="[object Array]",lr="[object Boolean]",cr="[object Date]",pr="[object Number]",sr="[object Object]",gr="[object RegExp]",hr="[object String]",vr={"boolean":false,"function":true,object:true,number:false,string:false,undefined:false},yr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},mr=vr[typeof window]&&window||this,_r=vr[typeof exports]&&exports&&!exports.nodeType&&exports,dr=vr[typeof module]&&module&&!module.nodeType&&module,br=dr&&dr.exports===_r&&_r,wr=vr[typeof global]&&global;
|
||||||
|
!wr||wr.global!==wr&&wr.window!==wr||(mr=wr);var jr=[],xr=Object.prototype,Tr=mr._,Er=xr.toString,Ar=RegExp("^"+(Er+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),Or=Math.ceil,Sr=Math.floor,Nr=xr.hasOwnProperty,Rr=jr.push,kr=xr.propertyIsEnumerable,Br=_(Br=Object.create)&&Br,Fr=_(Fr=Array.isArray)&&Fr,qr=mr.isFinite,Dr=mr.isNaN,Ir=_(Ir=Object.keys)&&Ir,Mr=Math.max,$r=Math.min,Wr=Math.random;o.prototype=u.prototype;var zr={};!function(){var n={0:1,length:1};zr.spliceObjects=(jr.splice.call(n,0,1),!n[0])
|
||||||
|
}(1),u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Br||(f=function(){function n(){}return function(r){if(O(r)){n.prototype=r;var t=new n;n.prototype=null}return t||mr.Object()}}()),b(arguments)||(b=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Nr.call(n,"callee")&&!kr.call(n,"callee")||false});var Cr=Fr||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Er.call(n)==ar||false},Pr=function(n){var r,t=[];
|
||||||
|
if(!n||!vr[typeof n])return t;for(r in n)Nr.call(n,r)&&t.push(r);return t},Ur=Ir?function(n){return O(n)?Ir(n):[]}:Pr,Vr={"&":"&","<":"<",">":">",'"':""","'":"'"},Gr=T(Vr),Hr=RegExp("("+Ur(Gr).join("|")+")","g"),Jr=RegExp("["+Ur(Vr).join("")+"]","g"),Kr=function(n,r){var t;if(!n||!vr[typeof n])return n;for(t in n)if(r(n[t],t,n)===er)break;return n},Lr=function(n,r){var t;if(!n||!vr[typeof n])return n;for(t in n)if(Nr.call(n,t)&&r(n[t],t,n)===er)break;return n};A(/x/)&&(A=function(n){return typeof n=="function"&&"[object Function]"==Er.call(n)
|
||||||
|
});var Qr=h(function(n,r,t){Nr.call(n,t)?n[t]++:n[t]=1}),Xr=h(function(n,r,t){(Nr.call(n,t)?n[t]:n[t]=[]).push(r)}),Yr=h(function(n,r,t){n[t]=r}),Zr=M,nt=_(nt=Date.now)&&nt||function(){return(new Date).getTime()};u.after=function(n,r){if(!A(r))throw new TypeError;return function(){return 1>--n?r.apply(this,arguments):void 0}},u.bind=L,u.bindAll=function(n){for(var r=1<arguments.length?p(arguments,true,false,1):x(n),t=-1,e=r.length;++t<e;){var u=r[t];n[u]=v(n[u],1,null,null,n)}return n},u.chain=function(n){return n=new o(n),n.__chain__=true,n
|
||||||
|
},u.compact=function(n){for(var r=-1,t=n?n.length:0,e=[];++r<t;){var u=n[r];u&&e.push(u)}return e},u.compose=function(){for(var n=arguments,r=n.length;r--;)if(!A(n[r]))throw new TypeError;return function(){for(var r=arguments,t=n.length;t--;)r=[n[t].apply(this,r)];return r[0]}},u.countBy=Qr,u.debounce=Q,u.defaults=j,u.defer=function(n){if(!A(n))throw new TypeError;var r=e(arguments,1);return setTimeout(function(){n.apply(rr,r)},1)},u.delay=function(n,r){if(!A(n))throw new TypeError;var t=e(arguments,2);
|
||||||
|
return setTimeout(function(){n.apply(rr,t)},r)},u.difference=function(n){return c(n,p(arguments,true,true,1))},u.filter=F,u.flatten=function(n,r){return p(n,r)},u.forEach=D,u.functions=x,u.groupBy=Xr,u.indexBy=Yr,u.initial=function(n,r,t){var u=0,o=n?n.length:0;if(typeof r!="number"&&null!=r){var i=o;for(r=X(r,t,3);i--&&r(n[i],i,n);)u++}else u=null==r||t?1:r||u;return e(n,0,$r(Mr(0,o-u),o))},u.intersection=function(){for(var n=[],r=-1,t=arguments.length;++r<t;){var e=arguments[r];(Cr(e)||b(e))&&n.push(e)
|
||||||
|
}var u=n[0],o=-1,i=m(),f=u?u.length:0,a=[];n:for(;++o<f;)if(e=u[o],0>i(a,e)){for(r=t;--r;)if(0>i(n[r],e))continue n;a.push(e)}return a},u.invert=T,u.invoke=function(n,r){var t=e(arguments,2),u=-1,o=typeof r=="function",i=n?n.length:0,f=Array(typeof i=="number"?i:0);return D(n,function(n){f[++u]=(o?r:n[r]).apply(n,t)}),f},u.keys=Ur,u.map=M,u.max=$,u.memoize=function(n,r){var t={};return function(){var e=r?r.apply(this,arguments):ur+arguments[0];return Nr.call(t,e)?t[e]:t[e]=n.apply(this,arguments)
|
||||||
|
}},u.min=function(n,r,t){var e=1/0,u=e;typeof r!="function"&&t&&t[r]===n&&(r=null);var o=-1,i=n?n.length:0;if(null==r&&typeof i=="number")for(;++o<i;)t=n[o],t<u&&(u=t);else r=X(r,t,3),D(n,function(n,t,o){t=r(n,t,o),t<e&&(e=t,u=n)});return u},u.omit=function(n){var r=[];Kr(n,function(n,t){r.push(t)});for(var r=c(r,p(arguments,true,false,1)),t=-1,e=r.length,u={};++t<e;){var o=r[t];u[o]=n[o]}return u},u.once=function(n){var r,t;if(!A(n))throw new TypeError;return function(){return r?t:(r=true,t=n.apply(this,arguments),n=null,t)
|
||||||
|
}},u.pairs=function(n){for(var r=-1,t=Ur(n),e=t.length,u=Array(e);++r<e;){var o=t[r];u[r]=[o,n[o]]}return u},u.partial=function(n){return v(n,16,e(arguments,1))},u.pick=function(n){for(var r=-1,t=p(arguments,true,false,1),e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u},u.pluck=Zr,u.range=function(n,r,t){n=+n||0,t=+t||1,null==r&&(r=n,n=0);var e=-1;r=Mr(0,Or((r-n)/t));for(var u=Array(r);++e<r;)u[e]=n,n+=t;return u},u.reject=function(n,r,t){return r=X(r,t,3),F(n,function(n,t,e){return!r(n,t,e)
|
||||||
|
})},u.rest=H,u.shuffle=C,u.sortBy=function(n,t,e){var u=-1,o=n?n.length:0,i=Array(typeof o=="number"?o:0);for(t=X(t,e,3),D(n,function(n,r,e){i[++u]={m:[t(n,r,e)],n:u,o:n}}),o=i.length,i.sort(r);o--;)i[o]=i[o].o;return i},u.tap=function(n,r){return r(n),n},u.throttle=function(n,r,t){var e=true,u=true;if(!A(n))throw new TypeError;return false===t?e=false:O(t)&&(e="leading"in t?t.leading:e,u="trailing"in t?t.trailing:u),t={},t.leading=e,t.maxWait=r,t.trailing=u,Q(n,r,t)},u.times=function(n,r,t){n=-1<(n=+n)?n:0;
|
||||||
|
var e=-1,u=Array(n);for(r=a(r,t,1);++e<n;)u[e]=r(e);return u},u.toArray=function(n){return Cr(n)?e(n):n&&typeof n.length=="number"?M(n):R(n)},u.union=function(){return g(p(arguments,true,true))},u.uniq=K,u.values=R,u.where=U,u.without=function(n){return c(n,e(arguments,1))},u.wrap=function(n,r){return v(r,16,[n])},u.zip=function(){for(var n=-1,r=$(Zr(arguments,"length")),t=Array(0>r?0:r);++n<r;)t[n]=Zr(arguments,n);return t},u.collect=M,u.drop=H,u.each=D,u.extend=w,u.methods=x,u.object=function(n,r){var t=-1,e=n?n.length:0,u={};
|
||||||
|
for(r||!e||Cr(n[0])||(r=[]);++t<e;){var o=n[t];r?u[o]=r[t]:o&&(u[o[0]]=o[1])}return u},u.select=F,u.tail=H,u.unique=K,u.clone=function(n){return O(n)?Cr(n)?e(n):w({},n):n},u.contains=k,u.escape=function(n){return null==n?"":(n+"").replace(Jr,y)},u.every=B,u.find=q,u.has=function(n,r){return n?Nr.call(n,r):false},u.identity=Y,u.indexOf=G,u.isArguments=b,u.isArray=Cr,u.isBoolean=function(n){return true===n||false===n||n&&typeof n=="object"&&Er.call(n)==lr||false},u.isDate=function(n){return n&&typeof n=="object"&&Er.call(n)==cr||false
|
||||||
|
},u.isElement=function(n){return n&&1===n.nodeType||false},u.isEmpty=E,u.isEqual=function(n,r){return s(n,r)},u.isFinite=function(n){return qr(n)&&!Dr(parseFloat(n))},u.isFunction=A,u.isNaN=function(n){return S(n)&&n!=+n},u.isNull=function(n){return null===n},u.isNumber=S,u.isObject=O,u.isRegExp=function(n){return n&&vr[typeof n]&&Er.call(n)==gr||false},u.isString=N,u.isUndefined=function(n){return typeof n=="undefined"},u.lastIndexOf=function(n,r,t){var e=n?n.length:0;for(typeof t=="number"&&(e=(0>t?Mr(0,e+t):$r(t,e-1))+1);e--;)if(n[e]===r)return e;
|
||||||
|
return-1},u.mixin=Z,u.noConflict=function(){return mr._=Tr,this},u.random=function(n,r){return null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0,n+Sr(Wr()*(r-n+1))},u.reduce=W,u.reduceRight=z,u.result=function(n,r){if(n){var t=n[r];return A(t)?n[r]():t}},u.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:Ur(n).length},u.some=P,u.sortedIndex=J,u.template=function(n,r,e){var o=u,i=o.templateSettings;n=(n||"")+"",e=j({},e,i);var f=0,a="__p+='",i=e.variable;n.replace(RegExp((e.escape||or).source+"|"+(e.interpolate||or).source+"|"+(e.evaluate||or).source+"|$","g"),function(r,e,u,o,i){return a+=n.slice(f,i).replace(ir,t),e&&(a+="'+_.escape("+e+")+'"),o&&(a+="';"+o+";\n__p+='"),u&&(a+="'+((__t=("+u+"))==null?'':__t)+'"),f=i+r.length,r
|
||||||
|
}),a+="';",i||(i="obj",a="with("+i+"||{}){"+a+"}"),a="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";try{var l=Function("_","return "+a)(o)}catch(c){throw c.source=a,c}return r?l(r):(l.source=a,l)},u.unescape=function(n){return null==n?"":(n+"").replace(Hr,d)},u.uniqueId=function(n){var r=++tr+"";return n?n+r:r},u.all=B,u.any=P,u.detect=q,u.findWhere=function(n,r){return U(n,r,true)},u.foldl=W,u.foldr=z,u.include=k,u.inject=W,u.first=V,u.last=function(n,r,t){var u=0,o=n?n.length:0;
|
||||||
|
if(typeof r!="number"&&null!=r){var i=o;for(r=X(r,t,3);i--&&r(n[i],i,n);)u++}else if(u=r,null==u||t)return n?n[o-1]:rr;return e(n,Mr(0,o-u))},u.sample=function(n,r,t){return n&&typeof n.length!="number"&&(n=R(n)),null==r||t?n?n[0+Sr(Wr()*(n.length-1-0+1))]:rr:(n=C(n),n.length=$r(Mr(0,r),n.length),n)},u.take=V,u.head=V,Z(u),u.VERSION="2.4.1",u.prototype.chain=function(){return this.__chain__=true,this},u.prototype.value=function(){return this.__wrapped__},D("pop push reverse shift sort splice unshift".split(" "),function(n){var r=jr[n];
|
||||||
|
u.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),zr.spliceObjects||0!==n.length||delete n[0],this}}),D(["concat","join","slice"],function(n){var r=jr[n];u.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new o(n),n.__chain__=true),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(mr._=u, define(function(){return u})):_r&&dr?br?(dr.exports=u)._=u:_r._=u:mr._=u}).call(this);
|
7179
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/lodash.js
generated
vendored
Normal file
7179
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/lodash.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
102
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/package.json
generated
vendored
Normal file
102
node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/package.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
48
node_modules/grunt-cli/node_modules/findup-sync/package.json
generated
vendored
Normal file
48
node_modules/grunt-cli/node_modules/findup-sync/package.json
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "findup-sync",
|
||||||
|
"description": "Find the first file matching a given pattern in the current directory or the nearest ancestor directory.",
|
||||||
|
"version": "0.1.3",
|
||||||
|
"homepage": "https://github.com/cowboy/node-findup-sync",
|
||||||
|
"author": {
|
||||||
|
"name": "\"Cowboy\" Ben Alman",
|
||||||
|
"url": "http://benalman.com/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/cowboy/node-findup-sync.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/cowboy/node-findup-sync/issues"
|
||||||
|
},
|
||||||
|
"licenses": [
|
||||||
|
{
|
||||||
|
"type": "MIT",
|
||||||
|
"url": "https://github.com/cowboy/node-findup-sync/blob/master/LICENSE-MIT"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "lib/findup-sync",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "grunt nodeunit"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "~3.2.9",
|
||||||
|
"lodash": "~2.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"grunt": "~0.4.4",
|
||||||
|
"grunt-contrib-jshint": "~0.9.2",
|
||||||
|
"grunt-contrib-nodeunit": "~0.3.3"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"find",
|
||||||
|
"glob",
|
||||||
|
"file"
|
||||||
|
],
|
||||||
|
"readme": "# findup-sync [![Build Status](https://secure.travis-ci.org/cowboy/node-findup-sync.png?branch=master)](http://travis-ci.org/cowboy/node-findup-sync)\n\nFind the first file matching a given pattern in the current directory or the nearest ancestor directory.\n\n## Getting Started\nInstall the module with: `npm install findup-sync`\n\n```js\nvar findup = require('findup-sync');\n\n// Start looking in the CWD.\nvar filepath1 = findup('{a,b}*.txt');\n\n// Start looking somewhere else, and ignore case (probably a good idea).\nvar filepath2 = findup('{a,b}*.txt', {cwd: '/some/path', nocase: true});\n```\n\n## Usage\n\n```js\nfindup(patternOrPatterns [, minimatchOptions])\n```\n\n### patternOrPatterns\nType: `String` or `Array` \nDefault: none\n\nOne or more wildcard glob patterns. Or just filenames.\n\n### minimatchOptions\nType: `Object` \nDefault: `{}`\n\nOptions to be passed to [minimatch](https://github.com/isaacs/minimatch).\n\nNote that if you want to start in a different directory than the current working directory, specify a `cwd` property here.\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).\n\n## Release History\n2014-03-14 - v0.1.3 - Updated dependencies. \n2013-03-08 - v0.1.2 - Updated dependencies. Fixed a Node 0.9.x bug. Updated unit tests to work cross-platform. \n2012-11-15 - v0.1.1 - Now works without an options object. \n2012-11-01 - v0.1.0 - Initial release.\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"_id": "findup-sync@0.1.3",
|
||||||
|
"_from": "findup-sync@~0.1.0"
|
||||||
|
}
|
48
node_modules/grunt-cli/node_modules/findup-sync/test/findup-sync_test.js
generated
vendored
Normal file
48
node_modules/grunt-cli/node_modules/findup-sync/test/findup-sync_test.js
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Nodejs lib.
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var findup = require('../lib/findup-sync.js');
|
||||||
|
|
||||||
|
// Get a relative path.
|
||||||
|
var rel = function(abspath) {
|
||||||
|
return typeof abspath === 'string' ? path.relative('.', abspath) : abspath;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports['findup'] = {
|
||||||
|
setUp: function(done) {
|
||||||
|
this.cwd = process.cwd();
|
||||||
|
done();
|
||||||
|
},
|
||||||
|
tearDown: function(done) {
|
||||||
|
process.chdir(this.cwd);
|
||||||
|
done();
|
||||||
|
},
|
||||||
|
'simple': function(test) {
|
||||||
|
test.expect(8);
|
||||||
|
var opts = {cwd: 'test/fixtures/a/b'};
|
||||||
|
test.equal(rel(findup('foo.txt', opts)), path.normalize('test/fixtures/a/foo.txt'), 'should find files');
|
||||||
|
test.equal(rel(findup('bar.txt', opts)), path.normalize('test/fixtures/a/b/bar.txt'), 'should find files');
|
||||||
|
test.equal(rel(findup('a.txt', opts)), path.normalize('test/fixtures/a.txt'), 'should find files');
|
||||||
|
test.equal(rel(findup('?.txt', opts)), path.normalize('test/fixtures/a.txt'), 'should support glob patterns');
|
||||||
|
test.equal(rel(findup('*.txt', opts)), path.normalize('test/fixtures/a/b/bar.txt'), 'should find the first thing that matches the glob pattern');
|
||||||
|
test.equal(rel(findup(['b*.txt', 'f*.txt'], opts)), path.normalize('test/fixtures/a/b/bar.txt'), 'should find the first thing that matches any of the glob patterns');
|
||||||
|
test.equal(rel(findup(['f*.txt', 'b*.txt'], opts)), path.normalize('test/fixtures/a/b/bar.txt'), 'should find the first thing that matches any of the glob patterns');
|
||||||
|
test.equal(findup('not-gonna-exist-i-hope.txt', opts), null, 'should returning null if no files found');
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'cwd': function(test) {
|
||||||
|
test.expect(8);
|
||||||
|
process.chdir('test/fixtures/a/b');
|
||||||
|
test.equal(rel(findup('foo.txt')), path.normalize('../foo.txt'), 'should find files');
|
||||||
|
test.equal(rel(findup('bar.txt')), 'bar.txt', 'should find files');
|
||||||
|
test.equal(rel(findup('a.txt')), path.normalize('../../a.txt'), 'should find files');
|
||||||
|
test.equal(rel(findup('?.txt')), path.normalize('../../a.txt'), 'should support glob patterns');
|
||||||
|
test.equal(rel(findup('*.txt')), 'bar.txt', 'should find the first thing that matches the glob pattern');
|
||||||
|
test.equal(rel(findup(['b*.txt', 'f*.txt'])), 'bar.txt', 'should find the first thing that matches any of the glob patterns');
|
||||||
|
test.equal(rel(findup(['f*.txt', 'b*.txt'])), 'bar.txt', 'should find the first thing that matches any of the glob patterns');
|
||||||
|
test.equal(findup('not-gonna-exist-i-hope.txt'), null, 'should returning null if no files found');
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
};
|
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a/b/bar.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a/b/bar.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a/foo.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/a/foo.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/aaa.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/findup-sync/test/fixtures/aaa.txt
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/nopt/.npmignore
generated
vendored
Normal file
0
node_modules/grunt-cli/node_modules/nopt/.npmignore
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/nopt/LICENSE
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/nopt/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
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.
|
208
node_modules/grunt-cli/node_modules/nopt/README.md
generated
vendored
Normal file
208
node_modules/grunt-cli/node_modules/nopt/README.md
generated
vendored
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
If you want to write an option parser, and have it be good, there are
|
||||||
|
two ways to do it. The Right Way, and the Wrong Way.
|
||||||
|
|
||||||
|
The Wrong Way is to sit down and write an option parser. We've all done
|
||||||
|
that.
|
||||||
|
|
||||||
|
The Right Way is to write some complex configurable program with so many
|
||||||
|
options that you go half-insane just trying to manage them all, and put
|
||||||
|
it off with duct-tape solutions until you see exactly to the core of the
|
||||||
|
problem, and finally snap and write an awesome option parser.
|
||||||
|
|
||||||
|
If you want to write an option parser, don't write an option parser.
|
||||||
|
Write a package manager, or a source control system, or a service
|
||||||
|
restarter, or an operating system. You probably won't end up with a
|
||||||
|
good one of those, but if you don't give up, and you are relentless and
|
||||||
|
diligent enough in your procrastination, you may just end up with a very
|
||||||
|
nice option parser.
|
||||||
|
|
||||||
|
## USAGE
|
||||||
|
|
||||||
|
// my-program.js
|
||||||
|
var nopt = require("nopt")
|
||||||
|
, Stream = require("stream").Stream
|
||||||
|
, path = require("path")
|
||||||
|
, knownOpts = { "foo" : [String, null]
|
||||||
|
, "bar" : [Stream, Number]
|
||||||
|
, "baz" : path
|
||||||
|
, "bloo" : [ "big", "medium", "small" ]
|
||||||
|
, "flag" : Boolean
|
||||||
|
, "pick" : Boolean
|
||||||
|
, "many" : [String, Array]
|
||||||
|
}
|
||||||
|
, shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
|
||||||
|
, "b7" : ["--bar", "7"]
|
||||||
|
, "m" : ["--bloo", "medium"]
|
||||||
|
, "p" : ["--pick"]
|
||||||
|
, "f" : ["--flag"]
|
||||||
|
}
|
||||||
|
// everything is optional.
|
||||||
|
// knownOpts and shorthands default to {}
|
||||||
|
// arg list defaults to process.argv
|
||||||
|
// slice defaults to 2
|
||||||
|
, parsed = nopt(knownOpts, shortHands, process.argv, 2)
|
||||||
|
console.log(parsed)
|
||||||
|
|
||||||
|
This would give you support for any of the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ node my-program.js --foo "blerp" --no-flag
|
||||||
|
{ "foo" : "blerp", "flag" : false }
|
||||||
|
|
||||||
|
$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag
|
||||||
|
{ bar: 7, foo: "Mr. Hand", flag: true }
|
||||||
|
|
||||||
|
$ node my-program.js --foo "blerp" -f -----p
|
||||||
|
{ foo: "blerp", flag: true, pick: true }
|
||||||
|
|
||||||
|
$ node my-program.js -fp --foofoo
|
||||||
|
{ foo: "Mr. Foo", flag: true, pick: true }
|
||||||
|
|
||||||
|
$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.
|
||||||
|
{ foo: "Mr. Foo", argv: { remain: ["-fp"] } }
|
||||||
|
|
||||||
|
$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.
|
||||||
|
{ blatzk: 1000, flag: true, pick: true }
|
||||||
|
|
||||||
|
$ node my-program.js --blatzk true -fp # but they need a value
|
||||||
|
{ blatzk: true, flag: true, pick: true }
|
||||||
|
|
||||||
|
$ node my-program.js --no-blatzk -fp # unless they start with "no-"
|
||||||
|
{ blatzk: false, flag: true, pick: true }
|
||||||
|
|
||||||
|
$ node my-program.js --baz b/a/z # known paths are resolved.
|
||||||
|
{ baz: "/Users/isaacs/b/a/z" }
|
||||||
|
|
||||||
|
# if Array is one of the types, then it can take many
|
||||||
|
# values, and will always be an array. The other types provided
|
||||||
|
# specify what types are allowed in the list.
|
||||||
|
|
||||||
|
$ node my-program.js --many 1 --many null --many foo
|
||||||
|
{ many: ["1", "null", "foo"] }
|
||||||
|
|
||||||
|
$ node my-program.js --many foo
|
||||||
|
{ many: ["foo"] }
|
||||||
|
```
|
||||||
|
|
||||||
|
Read the tests at the bottom of `lib/nopt.js` for more examples of
|
||||||
|
what this puppy can do.
|
||||||
|
|
||||||
|
## Types
|
||||||
|
|
||||||
|
The following types are supported, and defined on `nopt.typeDefs`
|
||||||
|
|
||||||
|
* String: A normal string. No parsing is done.
|
||||||
|
* path: A file system path. Gets resolved against cwd if not absolute.
|
||||||
|
* url: A url. If it doesn't parse, it isn't accepted.
|
||||||
|
* Number: Must be numeric.
|
||||||
|
* Date: Must parse as a date. If it does, and `Date` is one of the options,
|
||||||
|
then it will return a Date object, not a string.
|
||||||
|
* Boolean: Must be either `true` or `false`. If an option is a boolean,
|
||||||
|
then it does not need a value, and its presence will imply `true` as
|
||||||
|
the value. To negate boolean flags, do `--no-whatever` or `--whatever
|
||||||
|
false`
|
||||||
|
* NaN: Means that the option is strictly not allowed. Any value will
|
||||||
|
fail.
|
||||||
|
* Stream: An object matching the "Stream" class in node. Valuable
|
||||||
|
for use when validating programmatically. (npm uses this to let you
|
||||||
|
supply any WriteStream on the `outfd` and `logfd` config options.)
|
||||||
|
* Array: If `Array` is specified as one of the types, then the value
|
||||||
|
will be parsed as a list of options. This means that multiple values
|
||||||
|
can be specified, and that the value will always be an array.
|
||||||
|
|
||||||
|
If a type is an array of values not on this list, then those are
|
||||||
|
considered valid values. For instance, in the example above, the
|
||||||
|
`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`,
|
||||||
|
and any other value will be rejected.
|
||||||
|
|
||||||
|
When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be
|
||||||
|
interpreted as their JavaScript equivalents, and numeric values will be
|
||||||
|
interpreted as a number.
|
||||||
|
|
||||||
|
You can also mix types and values, or multiple types, in a list. For
|
||||||
|
instance `{ blah: [Number, null] }` would allow a value to be set to
|
||||||
|
either a Number or null.
|
||||||
|
|
||||||
|
To define a new type, add it to `nopt.typeDefs`. Each item in that
|
||||||
|
hash is an object with a `type` member and a `validate` method. The
|
||||||
|
`type` member is an object that matches what goes in the type list. The
|
||||||
|
`validate` method is a function that gets called with `validate(data,
|
||||||
|
key, val)`. Validate methods should assign `data[key]` to the valid
|
||||||
|
value of `val` if it can be handled properly, or return boolean
|
||||||
|
`false` if it cannot.
|
||||||
|
|
||||||
|
You can also call `nopt.clean(data, types, typeDefs)` to clean up a
|
||||||
|
config object and remove its invalid properties.
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
By default, nopt outputs a warning to standard error when invalid
|
||||||
|
options are found. You can change this behavior by assigning a method
|
||||||
|
to `nopt.invalidHandler`. This method will be called with
|
||||||
|
the offending `nopt.invalidHandler(key, val, types)`.
|
||||||
|
|
||||||
|
If no `nopt.invalidHandler` is assigned, then it will console.error
|
||||||
|
its whining. If it is assigned to boolean `false` then the warning is
|
||||||
|
suppressed.
|
||||||
|
|
||||||
|
## Abbreviations
|
||||||
|
|
||||||
|
Yes, they are supported. If you define options like this:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
{ "foolhardyelephants" : Boolean
|
||||||
|
, "pileofmonkeys" : Boolean }
|
||||||
|
```
|
||||||
|
|
||||||
|
Then this will work:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node program.js --foolhar --pil
|
||||||
|
node program.js --no-f --pileofmon
|
||||||
|
# etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Shorthands
|
||||||
|
|
||||||
|
Shorthands are a hash of shorter option names to a snippet of args that
|
||||||
|
they expand to.
|
||||||
|
|
||||||
|
If multiple one-character shorthands are all combined, and the
|
||||||
|
combination does not unambiguously match any other option or shorthand,
|
||||||
|
then they will be broken up into their constituent parts. For example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "s" : ["--loglevel", "silent"]
|
||||||
|
, "g" : "--global"
|
||||||
|
, "f" : "--force"
|
||||||
|
, "p" : "--parseable"
|
||||||
|
, "l" : "--long"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm ls -sgflp
|
||||||
|
# just like doing this:
|
||||||
|
npm ls --loglevel silent --global --force --long --parseable
|
||||||
|
```
|
||||||
|
|
||||||
|
## The Rest of the args
|
||||||
|
|
||||||
|
The config object returned by nopt is given a special member called
|
||||||
|
`argv`, which is an object with the following fields:
|
||||||
|
|
||||||
|
* `remain`: The remaining args after all the parsing has occurred.
|
||||||
|
* `original`: The args as they originally appeared.
|
||||||
|
* `cooked`: The args after flags and shorthands are expanded.
|
||||||
|
|
||||||
|
## Slicing
|
||||||
|
|
||||||
|
Node programs are called with more or less the exact argv as it appears
|
||||||
|
in C land, after the v8 and node-specific options have been plucked off.
|
||||||
|
As such, `argv[0]` is always `node` and `argv[1]` is always the
|
||||||
|
JavaScript program being run.
|
||||||
|
|
||||||
|
That's usually not very useful to you. So they're sliced off by
|
||||||
|
default. If you want them, then you can pass in `0` as the last
|
||||||
|
argument, or any other number that you'd like to slice off the start of
|
||||||
|
the list.
|
44
node_modules/grunt-cli/node_modules/nopt/bin/nopt.js
generated
vendored
Executable file
44
node_modules/grunt-cli/node_modules/nopt/bin/nopt.js
generated
vendored
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
var nopt = require("../lib/nopt")
|
||||||
|
, types = { num: Number
|
||||||
|
, bool: Boolean
|
||||||
|
, help: Boolean
|
||||||
|
, list: Array
|
||||||
|
, "num-list": [Number, Array]
|
||||||
|
, "str-list": [String, Array]
|
||||||
|
, "bool-list": [Boolean, Array]
|
||||||
|
, str: String }
|
||||||
|
, shorthands = { s: [ "--str", "astring" ]
|
||||||
|
, b: [ "--bool" ]
|
||||||
|
, nb: [ "--no-bool" ]
|
||||||
|
, tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ]
|
||||||
|
, "?": ["--help"]
|
||||||
|
, h: ["--help"]
|
||||||
|
, H: ["--help"]
|
||||||
|
, n: [ "--num", "125" ] }
|
||||||
|
, parsed = nopt( types
|
||||||
|
, shorthands
|
||||||
|
, process.argv
|
||||||
|
, 2 )
|
||||||
|
|
||||||
|
console.log("parsed", parsed)
|
||||||
|
|
||||||
|
if (parsed.help) {
|
||||||
|
console.log("")
|
||||||
|
console.log("nopt cli tester")
|
||||||
|
console.log("")
|
||||||
|
console.log("types")
|
||||||
|
console.log(Object.keys(types).map(function M (t) {
|
||||||
|
var type = types[t]
|
||||||
|
if (Array.isArray(type)) {
|
||||||
|
return [t, type.map(function (type) { return type.name })]
|
||||||
|
}
|
||||||
|
return [t, type && type.name]
|
||||||
|
}).reduce(function (s, i) {
|
||||||
|
s[i[0]] = i[1]
|
||||||
|
return s
|
||||||
|
}, {}))
|
||||||
|
console.log("")
|
||||||
|
console.log("shorthands")
|
||||||
|
console.log(shorthands)
|
||||||
|
}
|
30
node_modules/grunt-cli/node_modules/nopt/examples/my-program.js
generated
vendored
Executable file
30
node_modules/grunt-cli/node_modules/nopt/examples/my-program.js
generated
vendored
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
//process.env.DEBUG_NOPT = 1
|
||||||
|
|
||||||
|
// my-program.js
|
||||||
|
var nopt = require("../lib/nopt")
|
||||||
|
, Stream = require("stream").Stream
|
||||||
|
, path = require("path")
|
||||||
|
, knownOpts = { "foo" : [String, null]
|
||||||
|
, "bar" : [Stream, Number]
|
||||||
|
, "baz" : path
|
||||||
|
, "bloo" : [ "big", "medium", "small" ]
|
||||||
|
, "flag" : Boolean
|
||||||
|
, "pick" : Boolean
|
||||||
|
}
|
||||||
|
, shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
|
||||||
|
, "b7" : ["--bar", "7"]
|
||||||
|
, "m" : ["--bloo", "medium"]
|
||||||
|
, "p" : ["--pick"]
|
||||||
|
, "f" : ["--flag", "true"]
|
||||||
|
, "g" : ["--flag"]
|
||||||
|
, "s" : "--flag"
|
||||||
|
}
|
||||||
|
// everything is optional.
|
||||||
|
// knownOpts and shorthands default to {}
|
||||||
|
// arg list defaults to process.argv
|
||||||
|
// slice defaults to 2
|
||||||
|
, parsed = nopt(knownOpts, shortHands, process.argv, 2)
|
||||||
|
|
||||||
|
console.log("parsed =\n"+ require("util").inspect(parsed))
|
552
node_modules/grunt-cli/node_modules/nopt/lib/nopt.js
generated
vendored
Normal file
552
node_modules/grunt-cli/node_modules/nopt/lib/nopt.js
generated
vendored
Normal file
@ -0,0 +1,552 @@
|
|||||||
|
// info about each config option.
|
||||||
|
|
||||||
|
var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG
|
||||||
|
? function () { console.error.apply(console, arguments) }
|
||||||
|
: function () {}
|
||||||
|
|
||||||
|
var url = require("url")
|
||||||
|
, path = require("path")
|
||||||
|
, Stream = require("stream").Stream
|
||||||
|
, abbrev = require("abbrev")
|
||||||
|
|
||||||
|
module.exports = exports = nopt
|
||||||
|
exports.clean = clean
|
||||||
|
|
||||||
|
exports.typeDefs =
|
||||||
|
{ String : { type: String, validate: validateString }
|
||||||
|
, Boolean : { type: Boolean, validate: validateBoolean }
|
||||||
|
, url : { type: url, validate: validateUrl }
|
||||||
|
, Number : { type: Number, validate: validateNumber }
|
||||||
|
, path : { type: path, validate: validatePath }
|
||||||
|
, Stream : { type: Stream, validate: validateStream }
|
||||||
|
, Date : { type: Date, validate: validateDate }
|
||||||
|
}
|
||||||
|
|
||||||
|
function nopt (types, shorthands, args, slice) {
|
||||||
|
args = args || process.argv
|
||||||
|
types = types || {}
|
||||||
|
shorthands = shorthands || {}
|
||||||
|
if (typeof slice !== "number") slice = 2
|
||||||
|
|
||||||
|
debug(types, shorthands, args, slice)
|
||||||
|
|
||||||
|
args = args.slice(slice)
|
||||||
|
var data = {}
|
||||||
|
, key
|
||||||
|
, remain = []
|
||||||
|
, cooked = args
|
||||||
|
, original = args.slice(0)
|
||||||
|
|
||||||
|
parse(args, data, remain, types, shorthands)
|
||||||
|
// now data is full
|
||||||
|
clean(data, types, exports.typeDefs)
|
||||||
|
data.argv = {remain:remain,cooked:cooked,original:original}
|
||||||
|
data.argv.toString = function () {
|
||||||
|
return this.original.map(JSON.stringify).join(" ")
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean (data, types, typeDefs) {
|
||||||
|
typeDefs = typeDefs || exports.typeDefs
|
||||||
|
var remove = {}
|
||||||
|
, typeDefault = [false, true, null, String, Number]
|
||||||
|
|
||||||
|
Object.keys(data).forEach(function (k) {
|
||||||
|
if (k === "argv") return
|
||||||
|
var val = data[k]
|
||||||
|
, isArray = Array.isArray(val)
|
||||||
|
, type = types[k]
|
||||||
|
if (!isArray) val = [val]
|
||||||
|
if (!type) type = typeDefault
|
||||||
|
if (type === Array) type = typeDefault.concat(Array)
|
||||||
|
if (!Array.isArray(type)) type = [type]
|
||||||
|
|
||||||
|
debug("val=%j", val)
|
||||||
|
debug("types=", type)
|
||||||
|
val = val.map(function (val) {
|
||||||
|
// if it's an unknown value, then parse false/true/null/numbers/dates
|
||||||
|
if (typeof val === "string") {
|
||||||
|
debug("string %j", val)
|
||||||
|
val = val.trim()
|
||||||
|
if ((val === "null" && ~type.indexOf(null))
|
||||||
|
|| (val === "true" &&
|
||||||
|
(~type.indexOf(true) || ~type.indexOf(Boolean)))
|
||||||
|
|| (val === "false" &&
|
||||||
|
(~type.indexOf(false) || ~type.indexOf(Boolean)))) {
|
||||||
|
val = JSON.parse(val)
|
||||||
|
debug("jsonable %j", val)
|
||||||
|
} else if (~type.indexOf(Number) && !isNaN(val)) {
|
||||||
|
debug("convert to number", val)
|
||||||
|
val = +val
|
||||||
|
} else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) {
|
||||||
|
debug("convert to date", val)
|
||||||
|
val = new Date(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!types.hasOwnProperty(k)) {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
// allow `--no-blah` to set 'blah' to null if null is allowed
|
||||||
|
if (val === false && ~type.indexOf(null) &&
|
||||||
|
!(~type.indexOf(false) || ~type.indexOf(Boolean))) {
|
||||||
|
val = null
|
||||||
|
}
|
||||||
|
|
||||||
|
var d = {}
|
||||||
|
d[k] = val
|
||||||
|
debug("prevalidated val", d, val, types[k])
|
||||||
|
if (!validate(d, k, val, types[k], typeDefs)) {
|
||||||
|
if (exports.invalidHandler) {
|
||||||
|
exports.invalidHandler(k, val, types[k], data)
|
||||||
|
} else if (exports.invalidHandler !== false) {
|
||||||
|
debug("invalid: "+k+"="+val, types[k])
|
||||||
|
}
|
||||||
|
return remove
|
||||||
|
}
|
||||||
|
debug("validated val", d, val, types[k])
|
||||||
|
return d[k]
|
||||||
|
}).filter(function (val) { return val !== remove })
|
||||||
|
|
||||||
|
if (!val.length) delete data[k]
|
||||||
|
else if (isArray) {
|
||||||
|
debug(isArray, data[k], val)
|
||||||
|
data[k] = val
|
||||||
|
} else data[k] = val[0]
|
||||||
|
|
||||||
|
debug("k=%s val=%j", k, val, data[k])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateString (data, k, val) {
|
||||||
|
data[k] = String(val)
|
||||||
|
}
|
||||||
|
|
||||||
|
function validatePath (data, k, val) {
|
||||||
|
data[k] = path.resolve(String(val))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateNumber (data, k, val) {
|
||||||
|
debug("validate Number %j %j %j", k, val, isNaN(val))
|
||||||
|
if (isNaN(val)) return false
|
||||||
|
data[k] = +val
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateDate (data, k, val) {
|
||||||
|
debug("validate Date %j %j %j", k, val, Date.parse(val))
|
||||||
|
var s = Date.parse(val)
|
||||||
|
if (isNaN(s)) return false
|
||||||
|
data[k] = new Date(val)
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateBoolean (data, k, val) {
|
||||||
|
if (val instanceof Boolean) val = val.valueOf()
|
||||||
|
else if (typeof val === "string") {
|
||||||
|
if (!isNaN(val)) val = !!(+val)
|
||||||
|
else if (val === "null" || val === "false") val = false
|
||||||
|
else val = true
|
||||||
|
} else val = !!val
|
||||||
|
data[k] = val
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateUrl (data, k, val) {
|
||||||
|
val = url.parse(String(val))
|
||||||
|
if (!val.host) return false
|
||||||
|
data[k] = val.href
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateStream (data, k, val) {
|
||||||
|
if (!(val instanceof Stream)) return false
|
||||||
|
data[k] = val
|
||||||
|
}
|
||||||
|
|
||||||
|
function validate (data, k, val, type, typeDefs) {
|
||||||
|
// arrays are lists of types.
|
||||||
|
if (Array.isArray(type)) {
|
||||||
|
for (var i = 0, l = type.length; i < l; i ++) {
|
||||||
|
if (type[i] === Array) continue
|
||||||
|
if (validate(data, k, val, type[i], typeDefs)) return true
|
||||||
|
}
|
||||||
|
delete data[k]
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// an array of anything?
|
||||||
|
if (type === Array) return true
|
||||||
|
|
||||||
|
// NaN is poisonous. Means that something is not allowed.
|
||||||
|
if (type !== type) {
|
||||||
|
debug("Poison NaN", k, val, type)
|
||||||
|
delete data[k]
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// explicit list of values
|
||||||
|
if (val === type) {
|
||||||
|
debug("Explicitly allowed %j", val)
|
||||||
|
// if (isArray) (data[k] = data[k] || []).push(val)
|
||||||
|
// else data[k] = val
|
||||||
|
data[k] = val
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// now go through the list of typeDefs, validate against each one.
|
||||||
|
var ok = false
|
||||||
|
, types = Object.keys(typeDefs)
|
||||||
|
for (var i = 0, l = types.length; i < l; i ++) {
|
||||||
|
debug("test type %j %j %j", k, val, types[i])
|
||||||
|
var t = typeDefs[types[i]]
|
||||||
|
if (t && type === t.type) {
|
||||||
|
var d = {}
|
||||||
|
ok = false !== t.validate(d, k, val)
|
||||||
|
val = d[k]
|
||||||
|
if (ok) {
|
||||||
|
// if (isArray) (data[k] = data[k] || []).push(val)
|
||||||
|
// else data[k] = val
|
||||||
|
data[k] = val
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug("OK? %j (%j %j %j)", ok, k, val, types[i])
|
||||||
|
|
||||||
|
if (!ok) delete data[k]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse (args, data, remain, types, shorthands) {
|
||||||
|
debug("parse", args, data, remain)
|
||||||
|
|
||||||
|
var key = null
|
||||||
|
, abbrevs = abbrev(Object.keys(types))
|
||||||
|
, shortAbbr = abbrev(Object.keys(shorthands))
|
||||||
|
|
||||||
|
for (var i = 0; i < args.length; i ++) {
|
||||||
|
var arg = args[i]
|
||||||
|
debug("arg", arg)
|
||||||
|
|
||||||
|
if (arg.match(/^-{2,}$/)) {
|
||||||
|
// done with keys.
|
||||||
|
// the rest are args.
|
||||||
|
remain.push.apply(remain, args.slice(i + 1))
|
||||||
|
args[i] = "--"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (arg.charAt(0) === "-") {
|
||||||
|
if (arg.indexOf("=") !== -1) {
|
||||||
|
var v = arg.split("=")
|
||||||
|
arg = v.shift()
|
||||||
|
v = v.join("=")
|
||||||
|
args.splice.apply(args, [i, 1].concat([arg, v]))
|
||||||
|
}
|
||||||
|
// see if it's a shorthand
|
||||||
|
// if so, splice and back up to re-parse it.
|
||||||
|
var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs)
|
||||||
|
debug("arg=%j shRes=%j", arg, shRes)
|
||||||
|
if (shRes) {
|
||||||
|
debug(arg, shRes)
|
||||||
|
args.splice.apply(args, [i, 1].concat(shRes))
|
||||||
|
if (arg !== shRes[0]) {
|
||||||
|
i --
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arg = arg.replace(/^-+/, "")
|
||||||
|
var no = false
|
||||||
|
while (arg.toLowerCase().indexOf("no-") === 0) {
|
||||||
|
no = !no
|
||||||
|
arg = arg.substr(3)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (abbrevs[arg]) arg = abbrevs[arg]
|
||||||
|
|
||||||
|
var isArray = types[arg] === Array ||
|
||||||
|
Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1
|
||||||
|
|
||||||
|
var val
|
||||||
|
, la = args[i + 1]
|
||||||
|
|
||||||
|
var isBool = no ||
|
||||||
|
types[arg] === Boolean ||
|
||||||
|
Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 ||
|
||||||
|
(la === "false" &&
|
||||||
|
(types[arg] === null ||
|
||||||
|
Array.isArray(types[arg]) && ~types[arg].indexOf(null)))
|
||||||
|
|
||||||
|
if (isBool) {
|
||||||
|
// just set and move along
|
||||||
|
val = !no
|
||||||
|
// however, also support --bool true or --bool false
|
||||||
|
if (la === "true" || la === "false") {
|
||||||
|
val = JSON.parse(la)
|
||||||
|
la = null
|
||||||
|
if (no) val = !val
|
||||||
|
i ++
|
||||||
|
}
|
||||||
|
|
||||||
|
// also support "foo":[Boolean, "bar"] and "--foo bar"
|
||||||
|
if (Array.isArray(types[arg]) && la) {
|
||||||
|
if (~types[arg].indexOf(la)) {
|
||||||
|
// an explicit type
|
||||||
|
val = la
|
||||||
|
i ++
|
||||||
|
} else if ( la === "null" && ~types[arg].indexOf(null) ) {
|
||||||
|
// null allowed
|
||||||
|
val = null
|
||||||
|
i ++
|
||||||
|
} else if ( !la.match(/^-{2,}[^-]/) &&
|
||||||
|
!isNaN(la) &&
|
||||||
|
~types[arg].indexOf(Number) ) {
|
||||||
|
// number
|
||||||
|
val = +la
|
||||||
|
i ++
|
||||||
|
} else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) {
|
||||||
|
// string
|
||||||
|
val = la
|
||||||
|
i ++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isArray) (data[arg] = data[arg] || []).push(val)
|
||||||
|
else data[arg] = val
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (la && la.match(/^-{2,}$/)) {
|
||||||
|
la = undefined
|
||||||
|
i --
|
||||||
|
}
|
||||||
|
|
||||||
|
val = la === undefined ? true : la
|
||||||
|
if (isArray) (data[arg] = data[arg] || []).push(val)
|
||||||
|
else data[arg] = val
|
||||||
|
|
||||||
|
i ++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
remain.push(arg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveShort (arg, shorthands, shortAbbr, abbrevs) {
|
||||||
|
// handle single-char shorthands glommed together, like
|
||||||
|
// npm ls -glp, but only if there is one dash, and only if
|
||||||
|
// all of the chars are single-char shorthands, and it's
|
||||||
|
// not a match to some other abbrev.
|
||||||
|
arg = arg.replace(/^-+/, '')
|
||||||
|
if (abbrevs[arg] && !shorthands[arg]) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
if (shortAbbr[arg]) {
|
||||||
|
arg = shortAbbr[arg]
|
||||||
|
} else {
|
||||||
|
var singles = shorthands.___singles
|
||||||
|
if (!singles) {
|
||||||
|
singles = Object.keys(shorthands).filter(function (s) {
|
||||||
|
return s.length === 1
|
||||||
|
}).reduce(function (l,r) { l[r] = true ; return l }, {})
|
||||||
|
shorthands.___singles = singles
|
||||||
|
}
|
||||||
|
var chrs = arg.split("").filter(function (c) {
|
||||||
|
return singles[c]
|
||||||
|
})
|
||||||
|
if (chrs.join("") === arg) return chrs.map(function (c) {
|
||||||
|
return shorthands[c]
|
||||||
|
}).reduce(function (l, r) {
|
||||||
|
return l.concat(r)
|
||||||
|
}, [])
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shorthands[arg] && !Array.isArray(shorthands[arg])) {
|
||||||
|
shorthands[arg] = shorthands[arg].split(/\s+/)
|
||||||
|
}
|
||||||
|
return shorthands[arg]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (module === require.main) {
|
||||||
|
var assert = require("assert")
|
||||||
|
, util = require("util")
|
||||||
|
|
||||||
|
, shorthands =
|
||||||
|
{ s : ["--loglevel", "silent"]
|
||||||
|
, d : ["--loglevel", "info"]
|
||||||
|
, dd : ["--loglevel", "verbose"]
|
||||||
|
, ddd : ["--loglevel", "silly"]
|
||||||
|
, noreg : ["--no-registry"]
|
||||||
|
, reg : ["--registry"]
|
||||||
|
, "no-reg" : ["--no-registry"]
|
||||||
|
, silent : ["--loglevel", "silent"]
|
||||||
|
, verbose : ["--loglevel", "verbose"]
|
||||||
|
, h : ["--usage"]
|
||||||
|
, H : ["--usage"]
|
||||||
|
, "?" : ["--usage"]
|
||||||
|
, help : ["--usage"]
|
||||||
|
, v : ["--version"]
|
||||||
|
, f : ["--force"]
|
||||||
|
, desc : ["--description"]
|
||||||
|
, "no-desc" : ["--no-description"]
|
||||||
|
, "local" : ["--no-global"]
|
||||||
|
, l : ["--long"]
|
||||||
|
, p : ["--parseable"]
|
||||||
|
, porcelain : ["--parseable"]
|
||||||
|
, g : ["--global"]
|
||||||
|
}
|
||||||
|
|
||||||
|
, types =
|
||||||
|
{ aoa: Array
|
||||||
|
, nullstream: [null, Stream]
|
||||||
|
, date: Date
|
||||||
|
, str: String
|
||||||
|
, browser : String
|
||||||
|
, cache : path
|
||||||
|
, color : ["always", Boolean]
|
||||||
|
, depth : Number
|
||||||
|
, description : Boolean
|
||||||
|
, dev : Boolean
|
||||||
|
, editor : path
|
||||||
|
, force : Boolean
|
||||||
|
, global : Boolean
|
||||||
|
, globalconfig : path
|
||||||
|
, group : [String, Number]
|
||||||
|
, gzipbin : String
|
||||||
|
, logfd : [Number, Stream]
|
||||||
|
, loglevel : ["silent","win","error","warn","info","verbose","silly"]
|
||||||
|
, long : Boolean
|
||||||
|
, "node-version" : [false, String]
|
||||||
|
, npaturl : url
|
||||||
|
, npat : Boolean
|
||||||
|
, "onload-script" : [false, String]
|
||||||
|
, outfd : [Number, Stream]
|
||||||
|
, parseable : Boolean
|
||||||
|
, pre: Boolean
|
||||||
|
, prefix: path
|
||||||
|
, proxy : url
|
||||||
|
, "rebuild-bundle" : Boolean
|
||||||
|
, registry : url
|
||||||
|
, searchopts : String
|
||||||
|
, searchexclude: [null, String]
|
||||||
|
, shell : path
|
||||||
|
, t: [Array, String]
|
||||||
|
, tag : String
|
||||||
|
, tar : String
|
||||||
|
, tmp : path
|
||||||
|
, "unsafe-perm" : Boolean
|
||||||
|
, usage : Boolean
|
||||||
|
, user : String
|
||||||
|
, username : String
|
||||||
|
, userconfig : path
|
||||||
|
, version : Boolean
|
||||||
|
, viewer: path
|
||||||
|
, _exit : Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
; [["-v", {version:true}, []]
|
||||||
|
,["---v", {version:true}, []]
|
||||||
|
,["ls -s --no-reg connect -d",
|
||||||
|
{loglevel:"info",registry:null},["ls","connect"]]
|
||||||
|
,["ls ---s foo",{loglevel:"silent"},["ls","foo"]]
|
||||||
|
,["ls --registry blargle", {}, ["ls"]]
|
||||||
|
,["--no-registry", {registry:null}, []]
|
||||||
|
,["--no-color true", {color:false}, []]
|
||||||
|
,["--no-color false", {color:true}, []]
|
||||||
|
,["--no-color", {color:false}, []]
|
||||||
|
,["--color false", {color:false}, []]
|
||||||
|
,["--color --logfd 7", {logfd:7,color:true}, []]
|
||||||
|
,["--color=true", {color:true}, []]
|
||||||
|
,["--logfd=10", {logfd:10}, []]
|
||||||
|
,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]
|
||||||
|
,["--tmp=tmp -tar=gtar",
|
||||||
|
{tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]
|
||||||
|
,["--logfd x", {}, []]
|
||||||
|
,["a -true -- -no-false", {true:true},["a","-no-false"]]
|
||||||
|
,["a -no-false", {false:false},["a"]]
|
||||||
|
,["a -no-no-true", {true:true}, ["a"]]
|
||||||
|
,["a -no-no-no-false", {false:false}, ["a"]]
|
||||||
|
,["---NO-no-No-no-no-no-nO-no-no"+
|
||||||
|
"-No-no-no-no-no-no-no-no-no"+
|
||||||
|
"-no-no-no-no-NO-NO-no-no-no-no-no-no"+
|
||||||
|
"-no-body-can-do-the-boogaloo-like-I-do"
|
||||||
|
,{"body-can-do-the-boogaloo-like-I-do":false}, []]
|
||||||
|
,["we are -no-strangers-to-love "+
|
||||||
|
"--you-know the-rules --and so-do-i "+
|
||||||
|
"---im-thinking-of=a-full-commitment "+
|
||||||
|
"--no-you-would-get-this-from-any-other-guy "+
|
||||||
|
"--no-gonna-give-you-up "+
|
||||||
|
"-no-gonna-let-you-down=true "+
|
||||||
|
"--no-no-gonna-run-around false "+
|
||||||
|
"--desert-you=false "+
|
||||||
|
"--make-you-cry false "+
|
||||||
|
"--no-tell-a-lie "+
|
||||||
|
"--no-no-and-hurt-you false"
|
||||||
|
,{"strangers-to-love":false
|
||||||
|
,"you-know":"the-rules"
|
||||||
|
,"and":"so-do-i"
|
||||||
|
,"you-would-get-this-from-any-other-guy":false
|
||||||
|
,"gonna-give-you-up":false
|
||||||
|
,"gonna-let-you-down":false
|
||||||
|
,"gonna-run-around":false
|
||||||
|
,"desert-you":false
|
||||||
|
,"make-you-cry":false
|
||||||
|
,"tell-a-lie":false
|
||||||
|
,"and-hurt-you":false
|
||||||
|
},["we", "are"]]
|
||||||
|
,["-t one -t two -t three"
|
||||||
|
,{t: ["one", "two", "three"]}
|
||||||
|
,[]]
|
||||||
|
,["-t one -t null -t three four five null"
|
||||||
|
,{t: ["one", "null", "three"]}
|
||||||
|
,["four", "five", "null"]]
|
||||||
|
,["-t foo"
|
||||||
|
,{t:["foo"]}
|
||||||
|
,[]]
|
||||||
|
,["--no-t"
|
||||||
|
,{t:["false"]}
|
||||||
|
,[]]
|
||||||
|
,["-no-no-t"
|
||||||
|
,{t:["true"]}
|
||||||
|
,[]]
|
||||||
|
,["-aoa one -aoa null -aoa 100"
|
||||||
|
,{aoa:["one", null, 100]}
|
||||||
|
,[]]
|
||||||
|
,["-str 100"
|
||||||
|
,{str:"100"}
|
||||||
|
,[]]
|
||||||
|
,["--color always"
|
||||||
|
,{color:"always"}
|
||||||
|
,[]]
|
||||||
|
,["--no-nullstream"
|
||||||
|
,{nullstream:null}
|
||||||
|
,[]]
|
||||||
|
,["--nullstream false"
|
||||||
|
,{nullstream:null}
|
||||||
|
,[]]
|
||||||
|
,["--notadate 2011-01-25"
|
||||||
|
,{notadate: "2011-01-25"}
|
||||||
|
,[]]
|
||||||
|
,["--date 2011-01-25"
|
||||||
|
,{date: new Date("2011-01-25")}
|
||||||
|
,[]]
|
||||||
|
].forEach(function (test) {
|
||||||
|
var argv = test[0].split(/\s+/)
|
||||||
|
, opts = test[1]
|
||||||
|
, rem = test[2]
|
||||||
|
, actual = nopt(types, shorthands, argv, 0)
|
||||||
|
, parsed = actual.argv
|
||||||
|
delete actual.argv
|
||||||
|
console.log(util.inspect(actual, false, 2, true), parsed.remain)
|
||||||
|
for (var i in opts) {
|
||||||
|
var e = JSON.stringify(opts[i])
|
||||||
|
, a = JSON.stringify(actual[i] === undefined ? null : actual[i])
|
||||||
|
if (e && typeof e === "object") {
|
||||||
|
assert.deepEqual(e, a)
|
||||||
|
} else {
|
||||||
|
assert.equal(e, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.deepEqual(rem, parsed.remain)
|
||||||
|
})
|
||||||
|
}
|
3
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/CONTRIBUTING.md
generated
vendored
Normal file
3
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/CONTRIBUTING.md
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
To get started, <a
|
||||||
|
href="http://www.clahub.com/agreements/isaacs/abbrev-js">sign the
|
||||||
|
Contributor License Agreement</a>.
|
23
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/LICENSE
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
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.
|
23
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/README.md
generated
vendored
Normal file
23
node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/README.md
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# abbrev-js
|
||||||
|
|
||||||
|
Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
var abbrev = require("abbrev");
|
||||||
|
abbrev("foo", "fool", "folding", "flop");
|
||||||
|
|
||||||
|
// returns:
|
||||||
|
{ fl: 'flop'
|
||||||
|
, flo: 'flop'
|
||||||
|
, flop: 'flop'
|
||||||
|
, fol: 'folding'
|
||||||
|
, fold: 'folding'
|
||||||
|
, foldi: 'folding'
|
||||||
|
, foldin: 'folding'
|
||||||
|
, folding: 'folding'
|
||||||
|
, foo: 'foo'
|
||||||
|
, fool: 'fool'
|
||||||
|
}
|
||||||
|
|
||||||
|
This is handy for command-line scripts, or other cases where you want to be able to accept shorthands.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user