diff --git a/README.md b/README.md
index d4773b09a6..ed2ec988af 100644
--- a/README.md
+++ b/README.md
@@ -74,9 +74,13 @@ Once you have installed Ruby, clone this repository to your machine. Once done,
**Serving the site after the first install**
-All you need to run in consequent builds of the site is `bundle exec jekyll serve`. You can add the suffix `--incremental` to enable incremental building of the site. This saves build times since the regeneration feature is enabled by default (the site rebuilds every time you hit "save"). When `--incremental` is used, Jekyll won't rebuild the entire site on every save, only the affected sections. If you'd like the project to automatically open in a new tab, you can add the `-o` flag to the end of the above command.
+You have two options to run the site after the first install:
-**Note**: changes that alter site navigation or other changes that change the site as a whole might not show up when using `--incremental`. If that occurs, simply "kill" the build and run `bundle exec jekyll serve` without the suffix.
+* **Using gulp.js**. [Gulp](https://gulpjs.com/) is a toolkit for automating painful or time-consuming tasks. By simply typing in `gulp` in your command line, it takes care of all the build commands needed to serve the site. It also watches the root directory and will automatically refresh your browser once any changes were built. Gulp and its dependencies is installed locally in the project, so there's no further installation needed from your end.
+
+* **Using Jekyll's standard commands**. All you need to run in consequent builds of the site is `bundle exec jekyll serve`. You can add the suffix `--incremental` to enable incremental building of the site. This saves build times since the regeneration feature is enabled by default (the site rebuilds every time you hit "save"). When `--incremental` is used, Jekyll won't rebuild the entire site on every save, only the affected sections. If you'd like the project to automatically open in a new tab, you can add the `-o` flag to the end of the above command.
+
+**Note**: changes that alter site navigation or other changes that change the site as a whole might not show up when using `--incremental`. If that occurs, simply "kill" the build and run `bundle exec jekyll serve` without the suffix. **This is also true for gulp: you will need to kill your gulp instance and then run the direct Jekyll command**.
### Template
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 0000000000..fd691b9550
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,19 @@
+var gulp = require('gulp');
+var shell = require('gulp-shell');
+var browserSync = require('browser-sync').create();
+
+// Task for building blog when something changed:
+gulp.task('build', shell.task(['bundle exec jekyll serve --incremental']));
+// If you don't use bundle:
+// gulp.task('build', shell.task(['jekyll serve']));
+// If you use Windows Subsystem for Linux (thanks @SamuliAlajarvela):
+// gulp.task('build', shell.task(['bundle exec jekyll serve --force_polling']));
+
+// Task for serving blog with Browsersync
+gulp.task('serve', function () {
+ browserSync.init({server: {baseDir: '_site/'}});
+ // Reloads page when some of the already built files changed:
+ gulp.watch('_site/**/*.*').on('change', browserSync.reload);
+});
+
+gulp.task('default', gulp.parallel('build', 'serve'));
diff --git a/js/additionalscripts.js b/js/additionalscripts.js
index e3e2480e54..f271706a55 100644
--- a/js/additionalscripts.js
+++ b/js/additionalscripts.js
@@ -108,8 +108,8 @@ function navigateContent(url) {
$('.innerpageitem').removeClass("activeitem");
}
//jump to top when page loads
- var hash = window.location.hash;
- if (!hash) {
+ if (window.location.hash == "") {
+ console.log(window.location.hash);
window.scrollTo(0, 0);
}
if (/Mobi|Android/i.test(navigator.userAgent) == true) {
@@ -559,48 +559,51 @@ function scrollToHash () {
}
function domainTool() {
-let input;
-let accountInput;
-const csdsButton = document.getElementById("csds-button");
-const csdsResult = document.getElementById("csds-result");
-let csdsUrl;
-let html = "";
-csdsButton.addEventListener("click", event => {
- input = document.getElementById("account");
- accountInput = input.value;
- csdsUrl = 'https://api.liveperson.net/api/account/' + accountInput + '/service/baseURI?version=1.0';
- retrieveDomains(accountInput);
-});
-const retrieveDomains = (account) => {
- $.ajax({
- url: csdsUrl,
- headers: {
- 'Accept': 'application/json'
- },
- dataType: "json",
- success: function(data) {
- html = '';
- $(csdsResult).css('display', 'table');
- if (data.baseURIs.length > 0) {
- html += 'Service name | Base URI |
';
- data.baseURIs.sort(function(a, b){
- var m1 = a.service.toLowerCase();
- var m2 = b.service.toLowerCase();
- if(m1< m2) return -1;
- if(m1> m2) return 1;
- return 0;
- })
- data.baseURIs.forEach((entry) => {
- html += `${entry.service} | ${entry.baseURI} |
`;
- });
- html += ''
- csdsResult.innerHTML = html;
- } else {
- csdsResult.innerHTML = "Unable to retrieve base URIs for account, please verify your account number.";
- }
- }
- });
- }
+ var $title = $('.h1').text();
+ if ($title == "Domain API") {
+ let input;
+ let accountInput;
+ const csdsButton = document.getElementById("csds-button");
+ const csdsResult = document.getElementById("csds-result");
+ let csdsUrl;
+ let html = "";
+ csdsButton.addEventListener("click", event => {
+ input = document.getElementById("account");
+ accountInput = input.value;
+ csdsUrl = 'https://api.liveperson.net/api/account/' + accountInput + '/service/baseURI?version=1.0';
+ retrieveDomains(accountInput);
+ });
+ const retrieveDomains = (account) => {
+ $.ajax({
+ url: csdsUrl,
+ headers: {
+ 'Accept': 'application/json'
+ },
+ dataType: "json",
+ success: function(data) {
+ html = '';
+ $(csdsResult).css('display', 'table');
+ if (data.baseURIs.length > 0) {
+ html += 'Service name | Base URI | ';
+ data.baseURIs.sort(function(a, b){
+ var m1 = a.service.toLowerCase();
+ var m2 = b.service.toLowerCase();
+ if(m1< m2) return -1;
+ if(m1> m2) return 1;
+ return 0;
+ })
+ data.baseURIs.forEach((entry) => {
+ html += `${entry.service} | ${entry.baseURI} |
`;
+ });
+ html += ''
+ csdsResult.innerHTML = html;
+ } else {
+ csdsResult.innerHTML = "Unable to retrieve base URIs for account, please verify your account number.";
+ }
+ }
+ });
+ }
+ }
}
//detect if explorer and then add a bunch of classes with its own CSS because it's oh so special
diff --git a/node_modules/.bin/atob b/node_modules/.bin/atob
new file mode 120000
index 0000000000..a68344a381
--- /dev/null
+++ b/node_modules/.bin/atob
@@ -0,0 +1 @@
+../atob/bin/atob.js
\ No newline at end of file
diff --git a/node_modules/.bin/browser-sync b/node_modules/.bin/browser-sync
new file mode 120000
index 0000000000..666f25bd08
--- /dev/null
+++ b/node_modules/.bin/browser-sync
@@ -0,0 +1 @@
+../browser-sync/dist/bin.js
\ No newline at end of file
diff --git a/node_modules/.bin/color-support b/node_modules/.bin/color-support
new file mode 120000
index 0000000000..fcbcb2865a
--- /dev/null
+++ b/node_modules/.bin/color-support
@@ -0,0 +1 @@
+../color-support/bin.js
\ No newline at end of file
diff --git a/node_modules/.bin/dev-ip b/node_modules/.bin/dev-ip
new file mode 120000
index 0000000000..138e5aca93
--- /dev/null
+++ b/node_modules/.bin/dev-ip
@@ -0,0 +1 @@
+../dev-ip/lib/dev-ip.js
\ No newline at end of file
diff --git a/node_modules/.bin/gulp b/node_modules/.bin/gulp
new file mode 120000
index 0000000000..5de73328bc
--- /dev/null
+++ b/node_modules/.bin/gulp
@@ -0,0 +1 @@
+../gulp/bin/gulp.js
\ No newline at end of file
diff --git a/node_modules/.bin/lt b/node_modules/.bin/lt
new file mode 120000
index 0000000000..f79fff9e40
--- /dev/null
+++ b/node_modules/.bin/lt
@@ -0,0 +1 @@
+../localtunnel/bin/client
\ No newline at end of file
diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime
new file mode 120000
index 0000000000..fbb7ee0eed
--- /dev/null
+++ b/node_modules/.bin/mime
@@ -0,0 +1 @@
+../mime/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
new file mode 120000
index 0000000000..317eb293d8
--- /dev/null
+++ b/node_modules/.bin/semver
@@ -0,0 +1 @@
+../semver/bin/semver
\ No newline at end of file
diff --git a/node_modules/.bin/throttleproxy b/node_modules/.bin/throttleproxy
new file mode 120000
index 0000000000..2ec6e307bc
--- /dev/null
+++ b/node_modules/.bin/throttleproxy
@@ -0,0 +1 @@
+../stream-throttle/bin/throttleproxy.js
\ No newline at end of file
diff --git a/node_modules/.bin/which b/node_modules/.bin/which
new file mode 120000
index 0000000000..f62471c851
--- /dev/null
+++ b/node_modules/.bin/which
@@ -0,0 +1 @@
+../which/bin/which
\ No newline at end of file
diff --git a/node_modules/.bin/window-size b/node_modules/.bin/window-size
new file mode 120000
index 0000000000..e84c8ece59
--- /dev/null
+++ b/node_modules/.bin/window-size
@@ -0,0 +1 @@
+../window-size/cli.js
\ No newline at end of file
diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md
new file mode 100644
index 0000000000..0bf041781d
--- /dev/null
+++ b/node_modules/accepts/HISTORY.md
@@ -0,0 +1,236 @@
+1.3.7 / 2019-04-29
+==================
+
+ * deps: negotiator@0.6.2
+ - Fix sorting charset, encoding, and language with extra parameters
+
+1.3.6 / 2019-04-28
+==================
+
+ * deps: mime-types@~2.1.24
+ - deps: mime-db@~1.40.0
+
+1.3.5 / 2018-02-28
+==================
+
+ * deps: mime-types@~2.1.18
+ - deps: mime-db@~1.33.0
+
+1.3.4 / 2017-08-22
+==================
+
+ * deps: mime-types@~2.1.16
+ - deps: mime-db@~1.29.0
+
+1.3.3 / 2016-05-02
+==================
+
+ * deps: mime-types@~2.1.11
+ - deps: mime-db@~1.23.0
+ * deps: negotiator@0.6.1
+ - perf: improve `Accept` parsing speed
+ - perf: improve `Accept-Charset` parsing speed
+ - perf: improve `Accept-Encoding` parsing speed
+ - perf: improve `Accept-Language` parsing speed
+
+1.3.2 / 2016-03-08
+==================
+
+ * deps: mime-types@~2.1.10
+ - Fix extension of `application/dash+xml`
+ - Update primary extension for `audio/mp4`
+ - deps: mime-db@~1.22.0
+
+1.3.1 / 2016-01-19
+==================
+
+ * deps: mime-types@~2.1.9
+ - deps: mime-db@~1.21.0
+
+1.3.0 / 2015-09-29
+==================
+
+ * deps: mime-types@~2.1.7
+ - deps: mime-db@~1.19.0
+ * deps: negotiator@0.6.0
+ - Fix including type extensions in parameters in `Accept` parsing
+ - Fix parsing `Accept` parameters with quoted equals
+ - Fix parsing `Accept` parameters with quoted semicolons
+ - Lazy-load modules from main entry point
+ - perf: delay type concatenation until needed
+ - perf: enable strict mode
+ - perf: hoist regular expressions
+ - perf: remove closures getting spec properties
+ - perf: remove a closure from media type parsing
+ - perf: remove property delete from media type parsing
+
+1.2.13 / 2015-09-06
+===================
+
+ * deps: mime-types@~2.1.6
+ - deps: mime-db@~1.18.0
+
+1.2.12 / 2015-07-30
+===================
+
+ * deps: mime-types@~2.1.4
+ - deps: mime-db@~1.16.0
+
+1.2.11 / 2015-07-16
+===================
+
+ * deps: mime-types@~2.1.3
+ - deps: mime-db@~1.15.0
+
+1.2.10 / 2015-07-01
+===================
+
+ * deps: mime-types@~2.1.2
+ - deps: mime-db@~1.14.0
+
+1.2.9 / 2015-06-08
+==================
+
+ * deps: mime-types@~2.1.1
+ - perf: fix deopt during mapping
+
+1.2.8 / 2015-06-07
+==================
+
+ * deps: mime-types@~2.1.0
+ - deps: mime-db@~1.13.0
+ * perf: avoid argument reassignment & argument slice
+ * perf: avoid negotiator recursive construction
+ * perf: enable strict mode
+ * perf: remove unnecessary bitwise operator
+
+1.2.7 / 2015-05-10
+==================
+
+ * deps: negotiator@0.5.3
+ - Fix media type parameter matching to be case-insensitive
+
+1.2.6 / 2015-05-07
+==================
+
+ * deps: mime-types@~2.0.11
+ - deps: mime-db@~1.9.1
+ * deps: negotiator@0.5.2
+ - Fix comparing media types with quoted values
+ - Fix splitting media types with quoted commas
+
+1.2.5 / 2015-03-13
+==================
+
+ * deps: mime-types@~2.0.10
+ - deps: mime-db@~1.8.0
+
+1.2.4 / 2015-02-14
+==================
+
+ * Support Node.js 0.6
+ * deps: mime-types@~2.0.9
+ - deps: mime-db@~1.7.0
+ * deps: negotiator@0.5.1
+ - Fix preference sorting to be stable for long acceptable lists
+
+1.2.3 / 2015-01-31
+==================
+
+ * deps: mime-types@~2.0.8
+ - deps: mime-db@~1.6.0
+
+1.2.2 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.7
+ - deps: mime-db@~1.5.0
+
+1.2.1 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.5
+ - deps: mime-db@~1.3.1
+
+1.2.0 / 2014-12-19
+==================
+
+ * deps: negotiator@0.5.0
+ - Fix list return order when large accepted list
+ - Fix missing identity encoding when q=0 exists
+ - Remove dynamic building of Negotiator class
+
+1.1.4 / 2014-12-10
+==================
+
+ * deps: mime-types@~2.0.4
+ - deps: mime-db@~1.3.0
+
+1.1.3 / 2014-11-09
+==================
+
+ * deps: mime-types@~2.0.3
+ - deps: mime-db@~1.2.0
+
+1.1.2 / 2014-10-14
+==================
+
+ * deps: negotiator@0.4.9
+ - Fix error when media type has invalid parameter
+
+1.1.1 / 2014-09-28
+==================
+
+ * deps: mime-types@~2.0.2
+ - deps: mime-db@~1.1.0
+ * deps: negotiator@0.4.8
+ - Fix all negotiations to be case-insensitive
+ - Stable sort preferences of same quality according to client order
+
+1.1.0 / 2014-09-02
+==================
+
+ * update `mime-types`
+
+1.0.7 / 2014-07-04
+==================
+
+ * Fix wrong type returned from `type` when match after unknown extension
+
+1.0.6 / 2014-06-24
+==================
+
+ * deps: negotiator@0.4.7
+
+1.0.5 / 2014-06-20
+==================
+
+ * fix crash when unknown extension given
+
+1.0.4 / 2014-06-19
+==================
+
+ * use `mime-types`
+
+1.0.3 / 2014-06-11
+==================
+
+ * deps: negotiator@0.4.6
+ - Order by specificity when quality is the same
+
+1.0.2 / 2014-05-29
+==================
+
+ * Fix interpretation when header not in request
+ * deps: pin negotiator@0.4.5
+
+1.0.1 / 2014-01-18
+==================
+
+ * Identity encoding isn't always acceptable
+ * deps: negotiator@~0.4.0
+
+1.0.0 / 2013-12-27
+==================
+
+ * Genesis
diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE
new file mode 100644
index 0000000000..06166077be
--- /dev/null
+++ b/node_modules/accepts/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/accepts/README.md b/node_modules/accepts/README.md
new file mode 100644
index 0000000000..66a2f5400f
--- /dev/null
+++ b/node_modules/accepts/README.md
@@ -0,0 +1,142 @@
+# accepts
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
+Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
+
+In addition to negotiator, it allows:
+
+- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
+ as well as `('text/html', 'application/json')`.
+- Allows type shorthands such as `json`.
+- Returns `false` when no types match
+- Treats non-existent headers as `*`
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install accepts
+```
+
+## API
+
+
+
+```js
+var accepts = require('accepts')
+```
+
+### accepts(req)
+
+Create a new `Accepts` object for the given `req`.
+
+#### .charset(charsets)
+
+Return the first accepted charset. If nothing in `charsets` is accepted,
+then `false` is returned.
+
+#### .charsets()
+
+Return the charsets that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .encoding(encodings)
+
+Return the first accepted encoding. If nothing in `encodings` is accepted,
+then `false` is returned.
+
+#### .encodings()
+
+Return the encodings that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .language(languages)
+
+Return the first accepted language. If nothing in `languages` is accepted,
+then `false` is returned.
+
+#### .languages()
+
+Return the languages that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .type(types)
+
+Return the first accepted type (and it is returned as the same text as what
+appears in the `types` array). If nothing in `types` is accepted, then `false`
+is returned.
+
+The `types` array can contain full MIME types or file extensions. Any value
+that is not a full MIME types is passed to `require('mime-types').lookup`.
+
+#### .types()
+
+Return the types that the request accepts, in the order of the client's
+preference (most preferred first).
+
+## Examples
+
+### Simple type negotiation
+
+This simple example shows how to use `accepts` to return a different typed
+respond body based on what the client wants to accept. The server lists it's
+preferences in order and will get back the best match between the client and
+server.
+
+```js
+var accepts = require('accepts')
+var http = require('http')
+
+function app (req, res) {
+ var accept = accepts(req)
+
+ // the order of this list is significant; should be server preferred order
+ switch (accept.type(['json', 'html'])) {
+ case 'json':
+ res.setHeader('Content-Type', 'application/json')
+ res.write('{"hello":"world!"}')
+ break
+ case 'html':
+ res.setHeader('Content-Type', 'text/html')
+ res.write('hello, world!')
+ break
+ default:
+ // the fallback is text/plain, so no need to specify it above
+ res.setHeader('Content-Type', 'text/plain')
+ res.write('hello, world!')
+ break
+ }
+
+ res.end()
+}
+
+http.createServer(app).listen(3000)
+```
+
+You can test this out with the cURL program:
+```sh
+curl -I -H'Accept: text/html' http://localhost:3000/
+```
+
+## License
+
+[MIT](LICENSE)
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
+[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
+[node-version-image]: https://badgen.net/npm/node/accepts
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/accepts
+[npm-url]: https://npmjs.org/package/accepts
+[npm-version-image]: https://badgen.net/npm/v/accepts
+[travis-image]: https://badgen.net/travis/jshttp/accepts/master
+[travis-url]: https://travis-ci.org/jshttp/accepts
diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js
new file mode 100644
index 0000000000..e9b2f63fb1
--- /dev/null
+++ b/node_modules/accepts/index.js
@@ -0,0 +1,238 @@
+/*!
+ * accepts
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var Negotiator = require('negotiator')
+var mime = require('mime-types')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = Accepts
+
+/**
+ * Create a new Accepts object for the given req.
+ *
+ * @param {object} req
+ * @public
+ */
+
+function Accepts (req) {
+ if (!(this instanceof Accepts)) {
+ return new Accepts(req)
+ }
+
+ this.headers = req.headers
+ this.negotiator = new Negotiator(req)
+}
+
+/**
+ * Check if the given `type(s)` is acceptable, returning
+ * the best match when true, otherwise `undefined`, in which
+ * case you should respond with 406 "Not Acceptable".
+ *
+ * The `type` value may be a single mime type string
+ * such as "application/json", the extension name
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
+ * or array is given the _best_ match, if any is returned.
+ *
+ * Examples:
+ *
+ * // Accept: text/html
+ * this.types('html');
+ * // => "html"
+ *
+ * // Accept: text/*, application/json
+ * this.types('html');
+ * // => "html"
+ * this.types('text/html');
+ * // => "text/html"
+ * this.types('json', 'text');
+ * // => "json"
+ * this.types('application/json');
+ * // => "application/json"
+ *
+ * // Accept: text/*, application/json
+ * this.types('image/png');
+ * this.types('png');
+ * // => undefined
+ *
+ * // Accept: text/*;q=.5, application/json
+ * this.types(['html', 'json']);
+ * this.types('html', 'json');
+ * // => "json"
+ *
+ * @param {String|Array} types...
+ * @return {String|Array|Boolean}
+ * @public
+ */
+
+Accepts.prototype.type =
+Accepts.prototype.types = function (types_) {
+ var types = types_
+
+ // support flattened arguments
+ if (types && !Array.isArray(types)) {
+ types = new Array(arguments.length)
+ for (var i = 0; i < types.length; i++) {
+ types[i] = arguments[i]
+ }
+ }
+
+ // no types, return all requested types
+ if (!types || types.length === 0) {
+ return this.negotiator.mediaTypes()
+ }
+
+ // no accept header, return first given type
+ if (!this.headers.accept) {
+ return types[0]
+ }
+
+ var mimes = types.map(extToMime)
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
+ var first = accepts[0]
+
+ return first
+ ? types[mimes.indexOf(first)]
+ : false
+}
+
+/**
+ * Return accepted encodings or best fit based on `encodings`.
+ *
+ * Given `Accept-Encoding: gzip, deflate`
+ * an array sorted by quality is returned:
+ *
+ * ['gzip', 'deflate']
+ *
+ * @param {String|Array} encodings...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.encoding =
+Accepts.prototype.encodings = function (encodings_) {
+ var encodings = encodings_
+
+ // support flattened arguments
+ if (encodings && !Array.isArray(encodings)) {
+ encodings = new Array(arguments.length)
+ for (var i = 0; i < encodings.length; i++) {
+ encodings[i] = arguments[i]
+ }
+ }
+
+ // no encodings, return all requested encodings
+ if (!encodings || encodings.length === 0) {
+ return this.negotiator.encodings()
+ }
+
+ return this.negotiator.encodings(encodings)[0] || false
+}
+
+/**
+ * Return accepted charsets or best fit based on `charsets`.
+ *
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
+ * an array sorted by quality is returned:
+ *
+ * ['utf-8', 'utf-7', 'iso-8859-1']
+ *
+ * @param {String|Array} charsets...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.charset =
+Accepts.prototype.charsets = function (charsets_) {
+ var charsets = charsets_
+
+ // support flattened arguments
+ if (charsets && !Array.isArray(charsets)) {
+ charsets = new Array(arguments.length)
+ for (var i = 0; i < charsets.length; i++) {
+ charsets[i] = arguments[i]
+ }
+ }
+
+ // no charsets, return all requested charsets
+ if (!charsets || charsets.length === 0) {
+ return this.negotiator.charsets()
+ }
+
+ return this.negotiator.charsets(charsets)[0] || false
+}
+
+/**
+ * Return accepted languages or best fit based on `langs`.
+ *
+ * Given `Accept-Language: en;q=0.8, es, pt`
+ * an array sorted by quality is returned:
+ *
+ * ['es', 'pt', 'en']
+ *
+ * @param {String|Array} langs...
+ * @return {Array|String}
+ * @public
+ */
+
+Accepts.prototype.lang =
+Accepts.prototype.langs =
+Accepts.prototype.language =
+Accepts.prototype.languages = function (languages_) {
+ var languages = languages_
+
+ // support flattened arguments
+ if (languages && !Array.isArray(languages)) {
+ languages = new Array(arguments.length)
+ for (var i = 0; i < languages.length; i++) {
+ languages[i] = arguments[i]
+ }
+ }
+
+ // no languages, return all requested languages
+ if (!languages || languages.length === 0) {
+ return this.negotiator.languages()
+ }
+
+ return this.negotiator.languages(languages)[0] || false
+}
+
+/**
+ * Convert extnames to mime.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function extToMime (type) {
+ return type.indexOf('/') === -1
+ ? mime.lookup(type)
+ : type
+}
+
+/**
+ * Check if mime is valid.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function validMime (type) {
+ return typeof type === 'string'
+}
diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json
new file mode 100644
index 0000000000..6fd8ec16ea
--- /dev/null
+++ b/node_modules/accepts/package.json
@@ -0,0 +1,87 @@
+{
+ "_from": "accepts@~1.3.4",
+ "_id": "accepts@1.3.7",
+ "_inBundle": false,
+ "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "_location": "/accepts",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "accepts@~1.3.4",
+ "name": "accepts",
+ "escapedName": "accepts",
+ "rawSpec": "~1.3.4",
+ "saveSpec": null,
+ "fetchSpec": "~1.3.4"
+ },
+ "_requiredBy": [
+ "/engine.io",
+ "/serve-index"
+ ],
+ "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd",
+ "_spec": "accepts@~1.3.4",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/serve-index",
+ "bugs": {
+ "url": "https://github.com/jshttp/accepts/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "dependencies": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "deprecated": false,
+ "description": "Higher-level content negotiation",
+ "devDependencies": {
+ "deep-equal": "1.0.1",
+ "eslint": "5.16.0",
+ "eslint-config-standard": "12.0.0",
+ "eslint-plugin-import": "2.17.2",
+ "eslint-plugin-markdown": "1.0.0",
+ "eslint-plugin-node": "8.0.1",
+ "eslint-plugin-promise": "4.1.1",
+ "eslint-plugin-standard": "4.0.0",
+ "mocha": "6.1.4",
+ "nyc": "14.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "index.js"
+ ],
+ "homepage": "https://github.com/jshttp/accepts#readme",
+ "keywords": [
+ "content",
+ "negotiation",
+ "accept",
+ "accepts"
+ ],
+ "license": "MIT",
+ "name": "accepts",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jshttp/accepts.git"
+ },
+ "scripts": {
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --reporter spec --check-leaks --bail test/",
+ "test-cov": "nyc --reporter=html --reporter=text npm test",
+ "test-travis": "nyc --reporter=text npm test"
+ },
+ "version": "1.3.7"
+}
diff --git a/node_modules/after/.npmignore b/node_modules/after/.npmignore
new file mode 100644
index 0000000000..6c7860241d
--- /dev/null
+++ b/node_modules/after/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+.monitor
diff --git a/node_modules/after/.travis.yml b/node_modules/after/.travis.yml
new file mode 100644
index 0000000000..afd72d0e58
--- /dev/null
+++ b/node_modules/after/.travis.yml
@@ -0,0 +1,12 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
+ - 0.9
+ - 0.10
+ - 0.12
+ - 4.2.4
+ - 5.4.1
+ - iojs-1
+ - iojs-2
+ - iojs-3
diff --git a/node_modules/after/LICENCE b/node_modules/after/LICENCE
new file mode 100644
index 0000000000..7c35130683
--- /dev/null
+++ b/node_modules/after/LICENCE
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Raynos.
+
+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.
\ No newline at end of file
diff --git a/node_modules/after/README.md b/node_modules/after/README.md
new file mode 100644
index 0000000000..fc69096476
--- /dev/null
+++ b/node_modules/after/README.md
@@ -0,0 +1,115 @@
+# After [![Build Status][1]][2]
+
+Invoke callback after n calls
+
+## Status: production ready
+
+## Example
+
+```js
+var after = require("after")
+var db = require("./db") // some db.
+
+var updateUser = function (req, res) {
+ // use after to run two tasks in parallel,
+ // namely get request body and get session
+ // then run updateUser with the results
+ var next = after(2, updateUser)
+ var results = {}
+
+ getJSONBody(req, res, function (err, body) {
+ if (err) return next(err)
+
+ results.body = body
+ next(null, results)
+ })
+
+ getSessionUser(req, res, function (err, user) {
+ if (err) return next(err)
+
+ results.user = user
+ next(null, results)
+ })
+
+ // now do the thing!
+ function updateUser(err, result) {
+ if (err) {
+ res.statusCode = 500
+ return res.end("Unexpected Error")
+ }
+
+ if (!result.user || result.user.role !== "admin") {
+ res.statusCode = 403
+ return res.end("Permission Denied")
+ }
+
+ db.put("users:" + req.params.userId, result.body, function (err) {
+ if (err) {
+ res.statusCode = 500
+ return res.end("Unexpected Error")
+ }
+
+ res.statusCode = 200
+ res.end("Ok")
+ })
+ }
+}
+```
+
+## Naive Example
+
+```js
+var after = require("after")
+ , next = after(3, logItWorks)
+
+next()
+next()
+next() // it works
+
+function logItWorks() {
+ console.log("it works!")
+}
+```
+
+## Example with error handling
+
+```js
+var after = require("after")
+ , next = after(3, logError)
+
+next()
+next(new Error("oops")) // logs oops
+next() // does nothing
+
+// This callback is only called once.
+// If there is an error the callback gets called immediately
+// this avoids the situation where errors get lost.
+function logError(err) {
+ console.log(err)
+}
+```
+
+## Installation
+
+`npm install after`
+
+## Tests
+
+`npm test`
+
+## Contributors
+
+ - Raynos
+ - defunctzombie
+
+## MIT Licenced
+
+ [1]: https://secure.travis-ci.org/Raynos/after.png
+ [2]: http://travis-ci.org/Raynos/after
+ [3]: http://raynos.org/blog/2/Flow-control-in-node.js
+ [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
+ [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
+ [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
+ [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
+ [8]: http://github.com/Raynos/iterators
+ [9]: http://github.com/Raynos/composite
diff --git a/node_modules/after/index.js b/node_modules/after/index.js
new file mode 100644
index 0000000000..ec24879744
--- /dev/null
+++ b/node_modules/after/index.js
@@ -0,0 +1,28 @@
+module.exports = after
+
+function after(count, callback, err_cb) {
+ var bail = false
+ err_cb = err_cb || noop
+ proxy.count = count
+
+ return (count === 0) ? callback() : proxy
+
+ function proxy(err, result) {
+ if (proxy.count <= 0) {
+ throw new Error('after called too many times')
+ }
+ --proxy.count
+
+ // after first error, rest are passed to err_cb
+ if (err) {
+ bail = true
+ callback(err)
+ // future error callbacks will go to error handler
+ callback = err_cb
+ } else if (proxy.count === 0 && !bail) {
+ callback(null, result)
+ }
+ }
+}
+
+function noop() {}
diff --git a/node_modules/after/package.json b/node_modules/after/package.json
new file mode 100644
index 0000000000..d289e56f64
--- /dev/null
+++ b/node_modules/after/package.json
@@ -0,0 +1,63 @@
+{
+ "_from": "after@0.8.2",
+ "_id": "after@0.8.2",
+ "_inBundle": false,
+ "_integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "_location": "/after",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "version",
+ "registry": true,
+ "raw": "after@0.8.2",
+ "name": "after",
+ "escapedName": "after",
+ "rawSpec": "0.8.2",
+ "saveSpec": null,
+ "fetchSpec": "0.8.2"
+ },
+ "_requiredBy": [
+ "/engine.io-parser"
+ ],
+ "_resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "_shasum": "fedb394f9f0e02aa9768e702bda23b505fae7e1f",
+ "_spec": "after@0.8.2",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/engine.io-parser",
+ "author": {
+ "name": "Raynos",
+ "email": "raynos2@gmail.com"
+ },
+ "bugs": {
+ "url": "https://github.com/Raynos/after/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Raynos",
+ "email": "raynos2@gmail.com",
+ "url": "http://raynos.org"
+ }
+ ],
+ "deprecated": false,
+ "description": "after - tiny flow control",
+ "devDependencies": {
+ "mocha": "~1.8.1"
+ },
+ "homepage": "https://github.com/Raynos/after#readme",
+ "keywords": [
+ "flowcontrol",
+ "after",
+ "flow",
+ "control",
+ "arch"
+ ],
+ "license": "MIT",
+ "name": "after",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/Raynos/after.git"
+ },
+ "scripts": {
+ "test": "mocha --ui tdd --reporter spec test/*.js"
+ },
+ "version": "0.8.2"
+}
diff --git a/node_modules/after/test/after-test.js b/node_modules/after/test/after-test.js
new file mode 100644
index 0000000000..0d63f4c246
--- /dev/null
+++ b/node_modules/after/test/after-test.js
@@ -0,0 +1,120 @@
+/*global suite, test*/
+
+var assert = require("assert")
+ , after = require("../")
+
+test("exists", function () {
+ assert(typeof after === "function", "after is not a function")
+})
+
+test("after when called with 0 invokes", function (done) {
+ after(0, done)
+});
+
+test("after 1", function (done) {
+ var next = after(1, done)
+ next()
+})
+
+test("after 5", function (done) {
+ var next = after(5, done)
+ , i = 5
+
+ while (i--) {
+ next()
+ }
+})
+
+test("manipulate count", function (done) {
+ var next = after(1, done)
+ , i = 5
+
+ next.count = i
+ while (i--) {
+ next()
+ }
+})
+
+test("after terminates on error", function (done) {
+ var next = after(2, function(err) {
+ assert.equal(err.message, 'test');
+ done();
+ })
+ next(new Error('test'))
+ next(new Error('test2'))
+})
+
+test('gee', function(done) {
+ done = after(2, done)
+
+ function cb(err) {
+ assert.equal(err.message, 1);
+ done()
+ }
+
+ var next = after(3, cb, function(err) {
+ assert.equal(err.message, 2)
+ done()
+ });
+
+ next()
+ next(new Error(1))
+ next(new Error(2))
+})
+
+test('eee', function(done) {
+ done = after(3, done)
+
+ function cb(err) {
+ assert.equal(err.message, 1);
+ done()
+ }
+
+ var next = after(3, cb, function(err) {
+ assert.equal(err.message, 2)
+ done()
+ });
+
+ next(new Error(1))
+ next(new Error(2))
+ next(new Error(2))
+})
+
+test('gge', function(done) {
+ function cb(err) {
+ assert.equal(err.message, 1);
+ done()
+ }
+
+ var next = after(3, cb, function(err) {
+ // should not happen
+ assert.ok(false);
+ });
+
+ next()
+ next()
+ next(new Error(1))
+})
+
+test('egg', function(done) {
+ function cb(err) {
+ assert.equal(err.message, 1);
+ done()
+ }
+
+ var next = after(3, cb, function(err) {
+ // should not happen
+ assert.ok(false);
+ });
+
+ next(new Error(1))
+ next()
+ next()
+})
+
+test('throws on too many calls', function(done) {
+ var next = after(1, done);
+ next()
+ assert.throws(next, /after called too many times/);
+});
+
diff --git a/node_modules/ansi-colors/LICENSE b/node_modules/ansi-colors/LICENSE
new file mode 100644
index 0000000000..b70671f0a3
--- /dev/null
+++ b/node_modules/ansi-colors/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Brian Woodward.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ansi-colors/README.md b/node_modules/ansi-colors/README.md
new file mode 100644
index 0000000000..2e669fe469
--- /dev/null
+++ b/node_modules/ansi-colors/README.md
@@ -0,0 +1,105 @@
+# ansi-colors [![NPM version](https://img.shields.io/npm/v/ansi-colors.svg?style=flat)](https://www.npmjs.com/package/ansi-colors) [![NPM monthly downloads](https://img.shields.io/npm/dm/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![NPM total downloads](https://img.shields.io/npm/dt/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![Linux Build Status](https://img.shields.io/travis/doowb/ansi-colors.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/ansi-colors) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/ansi-colors.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/ansi-colors)
+
+> Collection of ansi colors and styles.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save ansi-colors
+```
+
+## Usage
+
+This module exports an object of functions. Each function wraps a string with the ansi codes used to display the string with that color (or style). Use the wrapped string with `console.log`:
+
+```js
+var colors = require('ansi-colors');
+console.log(colors.bold(colors.cyan('[info]')), colors.cyan('This is some information'));
+console.log(colors.bold(colors.yellow('[warning]')), colors.yellow('This is a warning'));
+console.error(colors.bold(colors.red('[ERROR]')), colors.red('Danger! There was an error!'));
+```
+
+![image](https://user-images.githubusercontent.com/995160/34897845-3150daae-f7be-11e7-9706-38c42461e0ee.png)
+
+## Example
+
+See the [example](./example.js) for more colors and styles.
+
+## About
+
+### Related projects
+
+* [ansi-bgblack](https://www.npmjs.com/package/ansi-bgblack): The color bgblack, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgblack "The color bgblack, in ansi.")
+* [ansi-bgblue](https://www.npmjs.com/package/ansi-bgblue): The color bgblue, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgblue "The color bgblue, in ansi.")
+* [ansi-bgcyan](https://www.npmjs.com/package/ansi-bgcyan): The color bgcyan, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgcyan "The color bgcyan, in ansi.")
+* [ansi-bggreen](https://www.npmjs.com/package/ansi-bggreen): The color bggreen, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bggreen "The color bggreen, in ansi.")
+* [ansi-bgmagenta](https://www.npmjs.com/package/ansi-bgmagenta): The color bgmagenta, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgmagenta "The color bgmagenta, in ansi.")
+* [ansi-bgred](https://www.npmjs.com/package/ansi-bgred): The color bgred, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgred "The color bgred, in ansi.")
+* [ansi-bgwhite](https://www.npmjs.com/package/ansi-bgwhite): The color bgwhite, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgwhite "The color bgwhite, in ansi.")
+* [ansi-bgyellow](https://www.npmjs.com/package/ansi-bgyellow): The color bgyellow, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgyellow "The color bgyellow, in ansi.")
+* [ansi-black](https://www.npmjs.com/package/ansi-black): The color black, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-black "The color black, in ansi.")
+* [ansi-blue](https://www.npmjs.com/package/ansi-blue): The color blue, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-blue "The color blue, in ansi.")
+* [ansi-bold](https://www.npmjs.com/package/ansi-bold): The color bold, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bold "The color bold, in ansi.")
+* [ansi-cyan](https://www.npmjs.com/package/ansi-cyan): The color cyan, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-cyan "The color cyan, in ansi.")
+* [ansi-dim](https://www.npmjs.com/package/ansi-dim): The color dim, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-dim "The color dim, in ansi.")
+* [ansi-gray](https://www.npmjs.com/package/ansi-gray): The color gray, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-gray "The color gray, in ansi.")
+* [ansi-green](https://www.npmjs.com/package/ansi-green): The color green, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-green "The color green, in ansi.")
+* [ansi-grey](https://www.npmjs.com/package/ansi-grey): The color grey, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-grey "The color grey, in ansi.")
+* [ansi-hidden](https://www.npmjs.com/package/ansi-hidden): The color hidden, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-hidden "The color hidden, in ansi.")
+* [ansi-inverse](https://www.npmjs.com/package/ansi-inverse): The color inverse, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-inverse "The color inverse, in ansi.")
+* [ansi-italic](https://www.npmjs.com/package/ansi-italic): The color italic, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-italic "The color italic, in ansi.")
+* [ansi-magenta](https://www.npmjs.com/package/ansi-magenta): The color magenta, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-magenta "The color magenta, in ansi.")
+* [ansi-red](https://www.npmjs.com/package/ansi-red): The color red, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-red "The color red, in ansi.")
+* [ansi-reset](https://www.npmjs.com/package/ansi-reset): The color reset, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-reset "The color reset, in ansi.")
+* [ansi-strikethrough](https://www.npmjs.com/package/ansi-strikethrough): The color strikethrough, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-strikethrough "The color strikethrough, in ansi.")
+* [ansi-underline](https://www.npmjs.com/package/ansi-underline): The color underline, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-underline "The color underline, in ansi.")
+* [ansi-white](https://www.npmjs.com/package/ansi-white): The color white, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-white "The color white, in ansi.")
+* [ansi-wrap](https://www.npmjs.com/package/ansi-wrap): Create ansi colors by passing the open and close codes. | [homepage](https://github.com/jonschlinkert/ansi-wrap "Create ansi colors by passing the open and close codes.")
+* [ansi-yellow](https://www.npmjs.com/package/ansi-yellow): The color yellow, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-yellow "The color yellow, in ansi.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 10 | [doowb](https://github.com/doowb) |
+| 3 | [jonschlinkert](https://github.com/jonschlinkert) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2018, [Brian Woodward](https://github.com/doowb).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on January 12, 2018._
\ No newline at end of file
diff --git a/node_modules/ansi-colors/index.js b/node_modules/ansi-colors/index.js
new file mode 100644
index 0000000000..37da67fb49
--- /dev/null
+++ b/node_modules/ansi-colors/index.js
@@ -0,0 +1,456 @@
+/*!
+ * ansi-colors
+ *
+ * Copyright (c) 2015-2017, Brian Woodward.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var wrap = require('ansi-wrap');
+
+/**
+ * Wrap a string with ansi codes to create a black background.
+ *
+ * ```js
+ * console.log(colors.bgblack('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgblack
+ */
+
+exports.bgblack = function bgblack(message) {
+ return wrap(40, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a blue background.
+ *
+ * ```js
+ * console.log(colors.bgblue('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgblue
+ */
+
+exports.bgblue = function bgblue(message) {
+ return wrap(44, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a cyan background.
+ *
+ * ```js
+ * console.log(colors.bgcyan('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgcyan
+ */
+
+exports.bgcyan = function bgcyan(message) {
+ return wrap(46, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a green background.
+ *
+ * ```js
+ * console.log(colors.bggreen('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bggreen
+ */
+
+exports.bggreen = function bggreen(message) {
+ return wrap(42, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a magenta background.
+ *
+ * ```js
+ * console.log(colors.bgmagenta('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgmagenta
+ */
+
+exports.bgmagenta = function bgmagenta(message) {
+ return wrap(45, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a red background.
+ *
+ * ```js
+ * console.log(colors.bgred('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgred
+ */
+
+exports.bgred = function bgred(message) {
+ return wrap(41, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a white background.
+ *
+ * ```js
+ * console.log(colors.bgwhite('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgwhite
+ */
+
+exports.bgwhite = function bgwhite(message) {
+ return wrap(47, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a yellow background.
+ *
+ * ```js
+ * console.log(colors.bgyellow('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgyellow
+ */
+
+exports.bgyellow = function bgyellow(message) {
+ return wrap(43, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create black text.
+ *
+ * ```js
+ * console.log(colors.black('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name black
+ */
+
+exports.black = function black(message) {
+ return wrap(30, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create blue text.
+ *
+ * ```js
+ * console.log(colors.blue('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name blue
+ */
+
+exports.blue = function blue(message) {
+ return wrap(34, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create bold text.
+ *
+ * ```js
+ * console.log(colors.bold('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bold
+ */
+
+exports.bold = function bold(message) {
+ return wrap(1, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create cyan text.
+ *
+ * ```js
+ * console.log(colors.cyan('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name cyan
+ */
+
+exports.cyan = function cyan(message) {
+ return wrap(36, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create dim text.
+ *
+ * ```js
+ * console.log(colors.dim('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name dim
+ */
+
+exports.dim = function dim(message) {
+ return wrap(2, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create gray text.
+ *
+ * ```js
+ * console.log(colors.gray('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name gray
+ */
+
+exports.gray = function gray(message) {
+ return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create green text.
+ *
+ * ```js
+ * console.log(colors.green('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name green
+ */
+
+exports.green = function green(message) {
+ return wrap(32, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create grey text.
+ *
+ * ```js
+ * console.log(colors.grey('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name grey
+ */
+
+exports.grey = function grey(message) {
+ return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create hidden text.
+ *
+ * ```js
+ * console.log(colors.hidden('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name hidden
+ */
+
+exports.hidden = function hidden(message) {
+ return wrap(8, 28, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create inverse text.
+ *
+ * ```js
+ * console.log(colors.inverse('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name inverse
+ */
+
+exports.inverse = function inverse(message) {
+ return wrap(7, 27, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create italic text.
+ *
+ * ```js
+ * console.log(colors.italic('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name italic
+ */
+
+exports.italic = function italic(message) {
+ return wrap(3, 23, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create magenta text.
+ *
+ * ```js
+ * console.log(colors.magenta('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name magenta
+ */
+
+exports.magenta = function magenta(message) {
+ return wrap(35, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create red text.
+ *
+ * ```js
+ * console.log(colors.red('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name red
+ */
+
+exports.red = function red(message) {
+ return wrap(31, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to reset ansi colors currently on the string.
+ *
+ * ```js
+ * console.log(colors.reset('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name reset
+ */
+
+exports.reset = function reset(message) {
+ return wrap(0, 0, message);
+};
+
+/**
+ * Wrap a string with ansi codes to add a strikethrough to the text.
+ *
+ * ```js
+ * console.log(colors.strikethrough('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name strikethrough
+ */
+
+exports.strikethrough = function strikethrough(message) {
+ return wrap(9, 29, message);
+};
+
+/**
+ * Wrap a string with ansi codes to underline the text.
+ *
+ * ```js
+ * console.log(colors.underline('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name underline
+ */
+
+exports.underline = function underline(message) {
+ return wrap(4, 24, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create white text.
+ *
+ * ```js
+ * console.log(colors.white('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name white
+ */
+
+exports.white = function white(message) {
+ return wrap(37, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create yellow text.
+ *
+ * ```js
+ * console.log(colors.yellow('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name yellow
+ */
+
+exports.yellow = function yellow(message) {
+ return wrap(33, 39, message);
+};
diff --git a/node_modules/ansi-colors/package.json b/node_modules/ansi-colors/package.json
new file mode 100644
index 0000000000..3c64e09d39
--- /dev/null
+++ b/node_modules/ansi-colors/package.json
@@ -0,0 +1,175 @@
+{
+ "_from": "ansi-colors@^1.0.1",
+ "_id": "ansi-colors@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "_location": "/ansi-colors",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "ansi-colors@^1.0.1",
+ "name": "ansi-colors",
+ "escapedName": "ansi-colors",
+ "rawSpec": "^1.0.1",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.1"
+ },
+ "_requiredBy": [
+ "/gulp/gulp-cli"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "_shasum": "6374b4dd5d4718ff3ce27a671a3b1cad077132a9",
+ "_spec": "ansi-colors@^1.0.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/gulp/node_modules/gulp-cli",
+ "author": {
+ "name": "Brian Woodward",
+ "url": "https://github.com/doowb"
+ },
+ "bugs": {
+ "url": "https://github.com/doowb/ansi-colors/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ }
+ ],
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "deprecated": false,
+ "description": "Collection of ansi colors and styles.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3",
+ "typescript": "^2.7.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "types/index.d.ts"
+ ],
+ "homepage": "https://github.com/doowb/ansi-colors",
+ "keywords": [
+ "ansi-bgblack",
+ "ansi-bgblue",
+ "ansi-bgcyan",
+ "ansi-bggreen",
+ "ansi-bgmagenta",
+ "ansi-bgred",
+ "ansi-bgwhite",
+ "ansi-bgyellow",
+ "ansi-black",
+ "ansi-blue",
+ "ansi-bold",
+ "ansi-cyan",
+ "ansi-dim",
+ "ansi-gray",
+ "ansi-green",
+ "ansi-grey",
+ "ansi-hidden",
+ "ansi-inverse",
+ "ansi-italic",
+ "ansi-magenta",
+ "ansi-red",
+ "ansi-reset",
+ "ansi-strikethrough",
+ "ansi-underline",
+ "ansi-white",
+ "ansi-yellow",
+ "bgblack",
+ "bgblue",
+ "bgcyan",
+ "bggreen",
+ "bgmagenta",
+ "bgred",
+ "bgwhite",
+ "bgyellow",
+ "black",
+ "blue",
+ "bold",
+ "cyan",
+ "dim",
+ "gray",
+ "green",
+ "grey",
+ "hidden",
+ "inverse",
+ "italic",
+ "magenta",
+ "red",
+ "reset",
+ "strikethrough",
+ "underline",
+ "white",
+ "yellow"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "ansi-colors",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/doowb/ansi-colors.git"
+ },
+ "scripts": {
+ "test": "mocha && tsc --project types"
+ },
+ "types": "./types/index.d.ts",
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb-readme-generator",
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "ansi-bgblack",
+ "ansi-bgblue",
+ "ansi-bgcyan",
+ "ansi-bggreen",
+ "ansi-bgmagenta",
+ "ansi-bgred",
+ "ansi-bgwhite",
+ "ansi-bgyellow",
+ "ansi-black",
+ "ansi-blue",
+ "ansi-bold",
+ "ansi-cyan",
+ "ansi-dim",
+ "ansi-gray",
+ "ansi-green",
+ "ansi-grey",
+ "ansi-hidden",
+ "ansi-inverse",
+ "ansi-italic",
+ "ansi-magenta",
+ "ansi-red",
+ "ansi-reset",
+ "ansi-strikethrough",
+ "ansi-underline",
+ "ansi-white",
+ "ansi-wrap",
+ "ansi-yellow"
+ ]
+ }
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/ansi-colors/types/index.d.ts b/node_modules/ansi-colors/types/index.d.ts
new file mode 100644
index 0000000000..5f216a8c3e
--- /dev/null
+++ b/node_modules/ansi-colors/types/index.d.ts
@@ -0,0 +1,31 @@
+// Imported from from DefinitelyTyped project.
+// TypeScript definitions for ansi-colors
+// Definitions by: Rogier Schouten
+// Integrated by: Jordan Mele
+
+export function bgblack(message: string): string;
+export function bgblue(message: string): string;
+export function bgcyan(message: string): string;
+export function bggreen(message: string): string;
+export function bgmagenta(message: string): string;
+export function bgred(message: string): string;
+export function bgwhite(message: string): string;
+export function bgyellow(message: string): string;
+export function black(message: string): string;
+export function blue(message: string): string;
+export function bold(message: string): string;
+export function cyan(message: string): string;
+export function dim(message: string): string;
+export function gray(message: string): string;
+export function green(message: string): string;
+export function grey(message: string): string;
+export function hidden(message: string): string;
+export function inverse(message: string): string;
+export function italic(message: string): string;
+export function magenta(message: string): string;
+export function red(message: string): string;
+export function reset(message: string): string;
+export function strikethrough(message: string): string;
+export function underline(message: string): string;
+export function white(message: string): string;
+export function yellow(message: string): string;
diff --git a/node_modules/ansi-gray/LICENSE b/node_modules/ansi-gray/LICENSE
new file mode 100644
index 0000000000..41283c9f71
--- /dev/null
+++ b/node_modules/ansi-gray/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) <%= year() %>, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ansi-gray/index.js b/node_modules/ansi-gray/index.js
new file mode 100644
index 0000000000..c22176a3d8
--- /dev/null
+++ b/node_modules/ansi-gray/index.js
@@ -0,0 +1,14 @@
+/*!
+ * ansi-gray
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var wrap = require('ansi-wrap');
+
+module.exports = function gray(message) {
+ return wrap(90, 39, message);
+};
diff --git a/node_modules/ansi-gray/package.json b/node_modules/ansi-gray/package.json
new file mode 100644
index 0000000000..041fdb0ebd
--- /dev/null
+++ b/node_modules/ansi-gray/package.json
@@ -0,0 +1,86 @@
+{
+ "_from": "ansi-gray@^0.1.1",
+ "_id": "ansi-gray@0.1.1",
+ "_inBundle": false,
+ "_integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "_location": "/ansi-gray",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "ansi-gray@^0.1.1",
+ "name": "ansi-gray",
+ "escapedName": "ansi-gray",
+ "rawSpec": "^0.1.1",
+ "saveSpec": null,
+ "fetchSpec": "^0.1.1"
+ },
+ "_requiredBy": [
+ "/fancy-log"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "_shasum": "2962cf54ec9792c48510a3deb524436861ef7251",
+ "_spec": "ansi-gray@^0.1.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/fancy-log",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/ansi-gray/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "deprecated": false,
+ "description": "The color gray, in ansi.",
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/ansi-gray",
+ "keywords": [
+ "gray",
+ "256",
+ "ansi",
+ "cli",
+ "color",
+ "colors",
+ "colour",
+ "command",
+ "command-line",
+ "console",
+ "format",
+ "formatting",
+ "iterm",
+ "log",
+ "logging",
+ "rgb",
+ "shell",
+ "string",
+ "style",
+ "styles",
+ "styling",
+ "terminal",
+ "text",
+ "tty",
+ "xterm"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "ansi-gray",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/ansi-gray.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "0.1.1"
+}
diff --git a/node_modules/ansi-gray/readme.md b/node_modules/ansi-gray/readme.md
new file mode 100644
index 0000000000..9b59a29a1e
--- /dev/null
+++ b/node_modules/ansi-gray/readme.md
@@ -0,0 +1,74 @@
+# ansi-gray [![NPM version](https://badge.fury.io/js/ansi-gray.svg)](http://badge.fury.io/js/ansi-gray)
+
+> The color gray, in ansi.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-gray --save
+```
+
+## Usage
+
+```js
+var gray = require('ansi-gray');
+```
+
+## Related projects
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-gray/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._
\ No newline at end of file
diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000000..b9574ed7e8
--- /dev/null
+++ b/node_modules/ansi-regex/index.js
@@ -0,0 +1,4 @@
+'use strict';
+module.exports = function () {
+ return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
+};
diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license
new file mode 100644
index 0000000000..654d0bfe94
--- /dev/null
+++ b/node_modules/ansi-regex/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000000..42e4264842
--- /dev/null
+++ b/node_modules/ansi-regex/package.json
@@ -0,0 +1,108 @@
+{
+ "_from": "ansi-regex@^2.0.0",
+ "_id": "ansi-regex@2.1.1",
+ "_inBundle": false,
+ "_integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "_location": "/ansi-regex",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "ansi-regex@^2.0.0",
+ "name": "ansi-regex",
+ "escapedName": "ansi-regex",
+ "rawSpec": "^2.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.0"
+ },
+ "_requiredBy": [
+ "/strip-ansi"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+ "_spec": "ansi-regex@^2.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/strip-ansi",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/chalk/ansi-regex/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Regular expression for matching ANSI escape codes",
+ "devDependencies": {
+ "ava": "0.17.0",
+ "xo": "0.16.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/chalk/ansi-regex#readme",
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ {
+ "name": "Joshua Appelman",
+ "email": "jappelman@xebia.com",
+ "url": "jbnicolai.com"
+ },
+ {
+ "name": "JD Ballard",
+ "email": "i.am.qix@gmail.com",
+ "url": "github.com/qix-"
+ }
+ ],
+ "name": "ansi-regex",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/chalk/ansi-regex.git"
+ },
+ "scripts": {
+ "test": "xo && ava --verbose",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "version": "2.1.1",
+ "xo": {
+ "rules": {
+ "guard-for-in": 0,
+ "no-loop-func": 0
+ }
+ }
+}
diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md
new file mode 100644
index 0000000000..6a928edf0f
--- /dev/null
+++ b/node_modules/ansi-regex/readme.md
@@ -0,0 +1,39 @@
+# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
+
+> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install --save ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001b[4mcake\u001b[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001b[4mcake\u001b[0m'.match(ansiRegex());
+//=> ['\u001b[4m', '\u001b[0m']
+```
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js
new file mode 100644
index 0000000000..90a871c4d7
--- /dev/null
+++ b/node_modules/ansi-styles/index.js
@@ -0,0 +1,165 @@
+'use strict';
+const colorConvert = require('color-convert');
+
+const wrapAnsi16 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
+ return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
+ return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => function () {
+ const rgb = fn.apply(colorConvert, arguments);
+ return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+function assembleStyles() {
+ const codes = new Map();
+ const styles = {
+ modifier: {
+ reset: [0, 0],
+ // 21 isn't widely supported and 22 does the same thing
+ bold: [1, 22],
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29]
+ },
+ color: {
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+ gray: [90, 39],
+
+ // Bright color
+ redBright: [91, 39],
+ greenBright: [92, 39],
+ yellowBright: [93, 39],
+ blueBright: [94, 39],
+ magentaBright: [95, 39],
+ cyanBright: [96, 39],
+ whiteBright: [97, 39]
+ },
+ bgColor: {
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49],
+
+ // Bright color
+ bgBlackBright: [100, 49],
+ bgRedBright: [101, 49],
+ bgGreenBright: [102, 49],
+ bgYellowBright: [103, 49],
+ bgBlueBright: [104, 49],
+ bgMagentaBright: [105, 49],
+ bgCyanBright: [106, 49],
+ bgWhiteBright: [107, 49]
+ }
+ };
+
+ // Fix humans
+ styles.color.grey = styles.color.gray;
+
+ for (const groupName of Object.keys(styles)) {
+ const group = styles[groupName];
+
+ for (const styleName of Object.keys(group)) {
+ const style = group[styleName];
+
+ styles[styleName] = {
+ open: `\u001B[${style[0]}m`,
+ close: `\u001B[${style[1]}m`
+ };
+
+ group[styleName] = styles[styleName];
+
+ codes.set(style[0], style[1]);
+ }
+
+ Object.defineProperty(styles, groupName, {
+ value: group,
+ enumerable: false
+ });
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false
+ });
+ }
+
+ const ansi2ansi = n => n;
+ const rgb2rgb = (r, g, b) => [r, g, b];
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ styles.color.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 0)
+ };
+ styles.color.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 0)
+ };
+ styles.color.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 0)
+ };
+
+ styles.bgColor.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 10)
+ };
+
+ for (let key of Object.keys(colorConvert)) {
+ if (typeof colorConvert[key] !== 'object') {
+ continue;
+ }
+
+ const suite = colorConvert[key];
+
+ if (key === 'ansi16') {
+ key = 'ansi';
+ }
+
+ if ('ansi16' in suite) {
+ styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+ styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+ }
+
+ if ('ansi256' in suite) {
+ styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+ styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+ }
+
+ if ('rgb' in suite) {
+ styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+ styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+ }
+ }
+
+ return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: assembleStyles
+});
diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license
new file mode 100644
index 0000000000..e7af2f7710
--- /dev/null
+++ b/node_modules/ansi-styles/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json
new file mode 100644
index 0000000000..8f23a72cb1
--- /dev/null
+++ b/node_modules/ansi-styles/package.json
@@ -0,0 +1,88 @@
+{
+ "_from": "ansi-styles@^3.2.1",
+ "_id": "ansi-styles@3.2.1",
+ "_inBundle": false,
+ "_integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "_location": "/ansi-styles",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "ansi-styles@^3.2.1",
+ "name": "ansi-styles",
+ "escapedName": "ansi-styles",
+ "rawSpec": "^3.2.1",
+ "saveSpec": null,
+ "fetchSpec": "^3.2.1"
+ },
+ "_requiredBy": [
+ "/chalk"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "_shasum": "41fbb20243e50b12be0f04b8dedbf07520ce841d",
+ "_spec": "ansi-styles@^3.2.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/chalk",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "ava": {
+ "require": "babel-polyfill"
+ },
+ "bugs": {
+ "url": "https://github.com/chalk/ansi-styles/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "deprecated": false,
+ "description": "ANSI escape codes for styling strings in the terminal",
+ "devDependencies": {
+ "ava": "*",
+ "babel-polyfill": "^6.23.0",
+ "svg-term-cli": "^2.1.1",
+ "xo": "*"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/chalk/ansi-styles#readme",
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "license": "MIT",
+ "name": "ansi-styles",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/chalk/ansi-styles.git"
+ },
+ "scripts": {
+ "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor",
+ "test": "xo && ava"
+ },
+ "version": "3.2.1"
+}
diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md
new file mode 100644
index 0000000000..3158e2df59
--- /dev/null
+++ b/node_modules/ansi-styles/readme.md
@@ -0,0 +1,147 @@
+# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
+
+> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+
+You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
+
+
+
+
+## Install
+
+```
+$ npm install ansi-styles
+```
+
+
+## Usage
+
+```js
+const style = require('ansi-styles');
+
+console.log(`${style.green.open}Hello world!${style.green.close}`);
+
+
+// Color conversion between 16/256/truecolor
+// NOTE: If conversion goes to 16 colors or 256 colors, the original color
+// may be degraded to fit that color palette. This means terminals
+// that do not support 16 million colors will best-match the
+// original color.
+console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
+console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
+```
+
+## API
+
+Each style has an `open` and `close` property.
+
+
+## Styles
+
+### Modifiers
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(Not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(Not widely supported)*
+
+### Colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray` ("bright black")
+- `redBright`
+- `greenBright`
+- `yellowBright`
+- `blueBright`
+- `magentaBright`
+- `cyanBright`
+- `whiteBright`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+- `bgBlackBright`
+- `bgRedBright`
+- `bgGreenBright`
+- `bgYellowBright`
+- `bgBlueBright`
+- `bgMagentaBright`
+- `bgCyanBright`
+- `bgWhiteBright`
+
+
+## Advanced usage
+
+By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
+
+- `style.modifier`
+- `style.color`
+- `style.bgColor`
+
+###### Example
+
+```js
+console.log(style.color.green.open);
+```
+
+Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.
+
+###### Example
+
+```js
+console.log(style.codes.get(36));
+//=> 39
+```
+
+
+## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
+
+`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
+
+To use these, call the associated conversion function with the intended output, for example:
+
+```js
+style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code
+style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code
+
+style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+
+style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code
+style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
+```
+
+
+## Related
+
+- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+## License
+
+MIT
diff --git a/node_modules/ansi-wrap/LICENSE b/node_modules/ansi-wrap/LICENSE
new file mode 100644
index 0000000000..65f90aca8c
--- /dev/null
+++ b/node_modules/ansi-wrap/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ansi-wrap/README.md b/node_modules/ansi-wrap/README.md
new file mode 100644
index 0000000000..032c1e6b2e
--- /dev/null
+++ b/node_modules/ansi-wrap/README.md
@@ -0,0 +1,89 @@
+# ansi-wrap [![NPM version](https://badge.fury.io/js/ansi-wrap.svg)](http://badge.fury.io/js/ansi-wrap)
+
+> Create ansi colors by passing the open and close codes.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-wrap --save
+```
+
+## Usage
+
+```js
+var wrap = require('ansi-wrap');
+```
+
+**Example**
+
+Pass codes for [ansi magenta background](https://github.com/jonschlinkert/ansi-bgmagenta):
+
+```js
+console.log(wrap(45, 49, 'This is a message...'));
+//=> '\u001b[45mfoo\u001b[49m'
+```
+
+Which prints out...
+
+[![screen shot 2015-05-21 at 8 28 32 pm](https://cloud.githubusercontent.com/assets/383994/7761769/12488afa-fff8-11e4-9cc1-71a8a6ec14a4.png)](https://www.npmjs.com/)
+
+## Related projects
+
+This is used in these projects:
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-wrap/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._
\ No newline at end of file
diff --git a/node_modules/ansi-wrap/index.js b/node_modules/ansi-wrap/index.js
new file mode 100644
index 0000000000..ffc52d75cc
--- /dev/null
+++ b/node_modules/ansi-wrap/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function(a, b, msg) {
+ return '\u001b['+ a + 'm' + msg + '\u001b[' + b + 'm';
+};
diff --git a/node_modules/ansi-wrap/package.json b/node_modules/ansi-wrap/package.json
new file mode 100644
index 0000000000..65ac439659
--- /dev/null
+++ b/node_modules/ansi-wrap/package.json
@@ -0,0 +1,60 @@
+{
+ "_from": "ansi-wrap@^0.1.0",
+ "_id": "ansi-wrap@0.1.0",
+ "_inBundle": false,
+ "_integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "_location": "/ansi-wrap",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "ansi-wrap@^0.1.0",
+ "name": "ansi-wrap",
+ "escapedName": "ansi-wrap",
+ "rawSpec": "^0.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^0.1.0"
+ },
+ "_requiredBy": [
+ "/ansi-colors",
+ "/ansi-gray"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "_shasum": "a82250ddb0015e9a27ca82e82ea603bbfa45efaf",
+ "_spec": "ansi-wrap@^0.1.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/ansi-colors",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/ansi-wrap/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {},
+ "deprecated": false,
+ "description": "Create ansi colors by passing the open and close codes.",
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/ansi-wrap",
+ "keywords": [],
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/jonschlinkert/ansi-wrap/blob/master/LICENSE"
+ },
+ "main": "index.js",
+ "name": "ansi-wrap",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/ansi-wrap.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "0.1.0"
+}
diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE
new file mode 100644
index 0000000000..bc424705fb
--- /dev/null
+++ b/node_modules/anymatch/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2014 Elan Shanker
+
+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.
diff --git a/node_modules/anymatch/README.md b/node_modules/anymatch/README.md
new file mode 100644
index 0000000000..f674f407cf
--- /dev/null
+++ b/node_modules/anymatch/README.md
@@ -0,0 +1,99 @@
+anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master)
+======
+Javascript module to match a string against a regular expression, glob, string,
+or function that takes the string as an argument and returns a truthy or falsy
+value. The matcher can also be an array of any or all of these. Useful for
+allowing a very flexible user-defined config to define things like file paths.
+
+__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__
+
+[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/)
+[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/)
+
+Usage
+-----
+```sh
+npm install anymatch --save
+```
+
+#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex])
+* __matchers__: (_Array|String|RegExp|Function_)
+String to be directly matched, string with glob patterns, regular expression
+test, function that takes the testString as an argument and returns a truthy
+value if it should be matched, or an array of any number and mix of these types.
+* __testString__: (_String|Array_) The string to test against the matchers. If
+passed as an array, the first element of the array will be used as the
+`testString` for non-function matchers, while the entire array will be applied
+as the arguments for function matchers.
+* __returnIndex__: (_Boolean [optional]_) If true, return the array index of
+the first matcher that that testString matched, or -1 if no match, instead of a
+boolean result.
+* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a
+subset out of the array of provided matchers to test against. Can be useful
+with bound matcher functions (see below). When used with `returnIndex = true`
+preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e.
+includes array members up to, but not including endIndex).
+
+```js
+var anymatch = require('anymatch');
+
+var matchers = [
+ 'path/to/file.js',
+ 'path/anyjs/**/*.js',
+ /foo\.js$/,
+ function (string) {
+ return string.indexOf('bar') !== -1 && string.length > 10
+ }
+];
+
+anymatch(matchers, 'path/to/file.js'); // true
+anymatch(matchers, 'path/anyjs/baz.js'); // true
+anymatch(matchers, 'path/to/foo.js'); // true
+anymatch(matchers, 'path/to/bar.js'); // true
+anymatch(matchers, 'bar.js'); // false
+
+// returnIndex = true
+anymatch(matchers, 'foo.js', true); // 2
+anymatch(matchers, 'path/anyjs/foo.js', true); // 1
+
+// skip matchers
+anymatch(matchers, 'path/to/file.js', false, 1); // false
+anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2
+anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1
+
+// using globs to match directories and their children
+anymatch('node_modules', 'node_modules'); // true
+anymatch('node_modules', 'node_modules/somelib/index.js'); // false
+anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true
+anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false
+anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true
+```
+
+#### anymatch (matchers)
+You can also pass in only your matcher(s) to get a curried function that has
+already been bound to the provided matching criteria. This can be used as an
+`Array.prototype.filter` callback.
+
+```js
+var matcher = anymatch(matchers);
+
+matcher('path/to/file.js'); // true
+matcher('path/anyjs/baz.js', true); // 1
+matcher('path/anyjs/baz.js', true, 2); // -1
+
+['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
+```
+
+Change Log
+----------
+[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)
+
+NOTE: As of v2.0.0, [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).
+
+NOTE: As of v1.2.0, anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)
+for glob pattern matching. Issues with glob pattern matching should be
+reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).
+
+License
+-------
+[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)
diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js
new file mode 100644
index 0000000000..e411618506
--- /dev/null
+++ b/node_modules/anymatch/index.js
@@ -0,0 +1,67 @@
+'use strict';
+
+var micromatch = require('micromatch');
+var normalize = require('normalize-path');
+var path = require('path'); // required for tests.
+var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); };
+
+var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) {
+ criteria = arrify(criteria);
+ value = arrify(value);
+ if (arguments.length === 1) {
+ return anymatch.bind(null, criteria.map(function(criterion) {
+ return typeof criterion === 'string' && criterion[0] !== '!' ?
+ micromatch.matcher(criterion) : criterion;
+ }));
+ }
+ startIndex = startIndex || 0;
+ var string = value[0];
+ var altString, altValue;
+ var matched = false;
+ var matchIndex = -1;
+ function testCriteria(criterion, index) {
+ var result;
+ switch (Object.prototype.toString.call(criterion)) {
+ case '[object String]':
+ result = string === criterion || altString && altString === criterion;
+ result = result || micromatch.isMatch(string, criterion);
+ break;
+ case '[object RegExp]':
+ result = criterion.test(string) || altString && criterion.test(altString);
+ break;
+ case '[object Function]':
+ result = criterion.apply(null, value);
+ result = result || altValue && criterion.apply(null, altValue);
+ break;
+ default:
+ result = false;
+ }
+ if (result) {
+ matchIndex = index + startIndex;
+ }
+ return result;
+ }
+ var crit = criteria;
+ var negGlobs = crit.reduce(function(arr, criterion, index) {
+ if (typeof criterion === 'string' && criterion[0] === '!') {
+ if (crit === criteria) {
+ // make a copy before modifying
+ crit = crit.slice();
+ }
+ crit[index] = null;
+ arr.push(criterion.substr(1));
+ }
+ return arr;
+ }, []);
+ if (!negGlobs.length || !micromatch.any(string, negGlobs)) {
+ if (path.sep === '\\' && typeof string === 'string') {
+ altString = normalize(string);
+ altString = altString === string ? null : altString;
+ if (altString) altValue = [altString].concat(value.slice(1));
+ }
+ matched = crit.slice(startIndex, endIndex).some(testCriteria);
+ }
+ return returnIndex === true ? matchIndex : matched;
+};
+
+module.exports = anymatch;
diff --git a/node_modules/anymatch/node_modules/extglob/LICENSE b/node_modules/anymatch/node_modules/extglob/LICENSE
new file mode 100644
index 0000000000..e33d14b754
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/extglob/README.md b/node_modules/anymatch/node_modules/extglob/README.md
new file mode 100644
index 0000000000..3255ea2b78
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/README.md
@@ -0,0 +1,362 @@
+# extglob [![NPM version](https://img.shields.io/npm/v/extglob.svg?style=flat)](https://www.npmjs.com/package/extglob) [![NPM monthly downloads](https://img.shields.io/npm/dm/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![NPM total downloads](https://img.shields.io/npm/dt/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![Linux Build Status](https://img.shields.io/travis/micromatch/extglob.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/extglob) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/extglob.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/extglob)
+
+> Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save extglob
+```
+
+* Convert an extglob string to a regex-compatible string.
+* More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) (minimatch fails a large percentage of the extglob tests)
+* Handles [negation patterns](#extglob-patterns)
+* Handles [nested patterns](#extglob-patterns)
+* Organized code base, easy to maintain and make changes when edge cases arise
+* As you can see by the [benchmarks](#benchmarks), extglob doesn't pay with speed for it's completeness, accuracy and quality.
+
+**Heads up!**: This library only supports extglobs, to handle full glob patterns and other extended globbing features use [micromatch](https://github.com/jonschlinkert/micromatch) instead.
+
+## Usage
+
+The main export is a function that takes a string and options, and returns an object with the parsed AST and the compiled `.output`, which is a regex-compatible string that can be used for matching.
+
+```js
+var extglob = require('extglob');
+console.log(extglob('!(xyz)*.js'));
+```
+
+## Extglob cheatsheet
+
+Extended globbing patterns can be defined as follows (as described by the [bash man page](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)):
+
+| **pattern** | **regex equivalent** | **description** |
+| --- | --- | --- |
+| `?(pattern-list)` | `(...|...)?` | Matches zero or one occurrence of the given pattern(s) |
+| `*(pattern-list)` | `(...|...)*` | Matches zero or more occurrences of the given pattern(s) |
+| `+(pattern-list)` | `(...|...)+` | Matches one or more occurrences of the given pattern(s) |
+| `@(pattern-list)` | `(...|...)` | Matches one of the given pattern(s) |
+| `!(pattern-list)` | N/A | Matches anything except one of the given pattern(s) |
+
+## API
+
+### [extglob](index.js#L36)
+
+Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST.
+
+**Params**
+
+* `pattern` **{String}**
+* `options` **{Object}**
+* `returns` **{String}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob('*.!(*a)'));
+//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+```
+
+### [.match](index.js#L56)
+
+Takes an array of strings and an extglob pattern and returns a new array that contains only the strings that match the pattern.
+
+**Params**
+
+* `list` **{Array}**: Array of strings to match
+* `pattern` **{String}**: Extglob pattern
+* `options` **{Object}**
+* `returns` **{Array}**: Returns an array of matches
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)'));
+//=> ['a.b', 'a.c']
+```
+
+### [.isMatch](index.js#L111)
+
+Returns true if the specified `string` matches the given extglob `pattern`.
+
+**Params**
+
+* `string` **{String}**: String to match
+* `pattern` **{String}**: Extglob pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+
+console.log(extglob.isMatch('a.a', '*.!(*a)'));
+//=> false
+console.log(extglob.isMatch('a.b', '*.!(*a)'));
+//=> true
+```
+
+### [.contains](index.js#L150)
+
+Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but the pattern can match any part of the string.
+
+**Params**
+
+* `str` **{String}**: The string to match.
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `options` **{Object}**
+* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`.
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.contains('aa/bb/cc', '*b'));
+//=> true
+console.log(extglob.contains('aa/bb/cc', '*d'));
+//=> false
+```
+
+### [.matcher](index.js#L184)
+
+Takes an extglob pattern and returns a matcher function. The returned function takes the string to match as its only argument.
+
+**Params**
+
+* `pattern` **{String}**: Extglob pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+var isMatch = extglob.matcher('*.!(*a)');
+
+console.log(isMatch('a.a'));
+//=> false
+console.log(isMatch('a.b'));
+//=> true
+```
+
+### [.create](index.js#L214)
+
+Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST.
+
+**Params**
+
+* `str` **{String}**
+* `options` **{Object}**
+* `returns` **{String}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.create('*.!(*a)').output);
+//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+```
+
+### [.capture](index.js#L248)
+
+Returns an array of matches captured by `pattern` in `string`, or `null` if the pattern did not match.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `string` **{String}**: String to match
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+
+**Example**
+
+```js
+var extglob = require('extglob');
+extglob.capture(pattern, string[, options]);
+
+console.log(extglob.capture('test/*.js', 'test/foo.js'));
+//=> ['foo']
+console.log(extglob.capture('test/*.js', 'foo/bar.css'));
+//=> null
+```
+
+### [.makeRe](index.js#L281)
+
+Create a regular expression from the given `pattern` and `options`.
+
+**Params**
+
+* `pattern` **{String}**: The pattern to convert to regex.
+* `options` **{Object}**
+* `returns` **{RegExp}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+var re = extglob.makeRe('*.!(*a)');
+console.log(re);
+//=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/
+```
+
+## Options
+
+Available options are based on the options from Bash (and the option names used in bash).
+
+### options.nullglob
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+When enabled, the pattern itself will be returned when no matches are found.
+
+### options.nonull
+
+Alias for [options.nullglob](#optionsnullglob), included for parity with minimatch.
+
+### options.cache
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Functions are memoized based on the given glob patterns and options. Disable memoization by setting `options.cache` to false.
+
+### options.failglob
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Throw an error is no matches are found.
+
+## Benchmarks
+
+Last run on December 21, 2017
+
+```sh
+# negation-nested (49 bytes)
+ extglob x 2,228,255 ops/sec ±0.98% (89 runs sampled)
+ minimatch x 207,875 ops/sec ±0.61% (91 runs sampled)
+
+ fastest is extglob (by 1072% avg)
+
+# negation-simple (43 bytes)
+ extglob x 2,205,668 ops/sec ±1.00% (91 runs sampled)
+ minimatch x 311,923 ops/sec ±1.25% (91 runs sampled)
+
+ fastest is extglob (by 707% avg)
+
+# range-false (57 bytes)
+ extglob x 2,263,877 ops/sec ±0.40% (94 runs sampled)
+ minimatch x 271,372 ops/sec ±1.02% (91 runs sampled)
+
+ fastest is extglob (by 834% avg)
+
+# range-true (56 bytes)
+ extglob x 2,161,891 ops/sec ±0.41% (92 runs sampled)
+ minimatch x 268,265 ops/sec ±1.17% (91 runs sampled)
+
+ fastest is extglob (by 806% avg)
+
+# star-simple (46 bytes)
+ extglob x 2,211,081 ops/sec ±0.49% (92 runs sampled)
+ minimatch x 343,319 ops/sec ±0.59% (91 runs sampled)
+
+ fastest is extglob (by 644% avg)
+
+```
+
+## Differences from Bash
+
+This library has complete parity with Bash 4.3 with only a couple of minor differences.
+
+* In some cases Bash returns true if the given string "contains" the pattern, whereas this library returns true if the string is an exact match for the pattern. You can relax this by setting `options.contains` to true.
+* This library is more accurate than Bash and thus does not fail some of the tests that Bash 4.3 still lists as failing in their unit tests
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.")
+* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by [micromatch].")
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 49 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [isiahmeadows](https://github.com/isiahmeadows) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [devongovett](https://github.com/devongovett) |
+| 1 | [mjbvz](https://github.com/mjbvz) |
+| 1 | [shinnn](https://github.com/shinnn) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on December 21, 2017._
+
+
+
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/extglob/changelog.md b/node_modules/anymatch/node_modules/extglob/changelog.md
new file mode 100644
index 0000000000..c9fc4fcd72
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/changelog.md
@@ -0,0 +1,25 @@
+## Changelog
+
+### v2.0.0
+
+**Added features**
+
+- Adds [.capture](readme.md#capture) method for capturing matches, thanks to [devongovett](https://github.com/devongovett)
+
+
+### v1.0.0
+
+**Breaking changes**
+
+- The main export now returns the compiled string, instead of the object returned from the compiler
+
+**Added features**
+
+- Adds a `.create` method to do what the main function did before v1.0.0
+
+**Other changes**
+
+- adds `expand-brackets` parsers/compilers to handle nested brackets and extglobs
+- uses `to-regex` to build regex for `makeRe` method
+- improves coverage
+- optimizations
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/extglob/index.js b/node_modules/anymatch/node_modules/extglob/index.js
new file mode 100644
index 0000000000..116e6d5cbb
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/index.js
@@ -0,0 +1,331 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var extend = require('extend-shallow');
+var unique = require('array-unique');
+var toRegex = require('to-regex');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./lib/compilers');
+var parsers = require('./lib/parsers');
+var Extglob = require('./lib/extglob');
+var utils = require('./lib/utils');
+var MAX_LENGTH = 1024 * 64;
+
+/**
+ * Convert the given `extglob` pattern into a regex-compatible string. Returns
+ * an object with the compiled result and the parsed AST.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob('*.!(*a)'));
+ * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+function extglob(pattern, options) {
+ return extglob.create(pattern, options).output;
+}
+
+/**
+ * Takes an array of strings and an extglob pattern and returns a new
+ * array that contains only the strings that match the pattern.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)'));
+ * //=> ['a.b', 'a.c']
+ * ```
+ * @param {Array} `list` Array of strings to match
+ * @param {String} `pattern` Extglob pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of matches
+ * @api public
+ */
+
+extglob.match = function(list, pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ list = utils.arrayify(list);
+ var isMatch = extglob.matcher(pattern, options);
+ var len = list.length;
+ var idx = -1;
+ var matches = [];
+
+ while (++idx < len) {
+ var ele = list[idx];
+
+ if (isMatch(ele)) {
+ matches.push(ele);
+ }
+ }
+
+ // if no options were passed, uniquify results and return
+ if (typeof options === 'undefined') {
+ return unique(matches);
+ }
+
+ if (matches.length === 0) {
+ if (options.failglob === true) {
+ throw new Error('no matches found for "' + pattern + '"');
+ }
+ if (options.nonull === true || options.nullglob === true) {
+ return [pattern.split('\\').join('')];
+ }
+ }
+
+ return options.nodupes !== false ? unique(matches) : matches;
+};
+
+/**
+ * Returns true if the specified `string` matches the given
+ * extglob `pattern`.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ *
+ * console.log(extglob.isMatch('a.a', '*.!(*a)'));
+ * //=> false
+ * console.log(extglob.isMatch('a.b', '*.!(*a)'));
+ * //=> true
+ * ```
+ * @param {String} `string` String to match
+ * @param {String} `pattern` Extglob pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+extglob.isMatch = function(str, pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (pattern === str) {
+ return true;
+ }
+
+ if (pattern === '' || pattern === ' ' || pattern === '.') {
+ return pattern === str;
+ }
+
+ var isMatch = utils.memoize('isMatch', pattern, options, extglob.matcher);
+ return isMatch(str);
+};
+
+/**
+ * Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but
+ * the pattern can match any part of the string.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.contains('aa/bb/cc', '*b'));
+ * //=> true
+ * console.log(extglob.contains('aa/bb/cc', '*d'));
+ * //=> false
+ * ```
+ * @param {String} `str` The string to match.
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {Object} `options`
+ * @return {Boolean} Returns true if the patter matches any part of `str`.
+ * @api public
+ */
+
+extglob.contains = function(str, pattern, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (pattern === '' || pattern === ' ' || pattern === '.') {
+ return pattern === str;
+ }
+
+ var opts = extend({}, options, {contains: true});
+ opts.strictClose = false;
+ opts.strictOpen = false;
+ return extglob.isMatch(str, pattern, opts);
+};
+
+/**
+ * Takes an extglob pattern and returns a matcher function. The returned
+ * function takes the string to match as its only argument.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * var isMatch = extglob.matcher('*.!(*a)');
+ *
+ * console.log(isMatch('a.a'));
+ * //=> false
+ * console.log(isMatch('a.b'));
+ * //=> true
+ * ```
+ * @param {String} `pattern` Extglob pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+extglob.matcher = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ function matcher() {
+ var re = extglob.makeRe(pattern, options);
+ return function(str) {
+ return re.test(str);
+ };
+ }
+
+ return utils.memoize('matcher', pattern, options, matcher);
+};
+
+/**
+ * Convert the given `extglob` pattern into a regex-compatible string. Returns
+ * an object with the compiled result and the parsed AST.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.create('*.!(*a)').output);
+ * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+extglob.create = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ function create() {
+ var ext = new Extglob(options);
+ var ast = ext.parse(pattern, options);
+ return ext.compile(ast, options);
+ }
+
+ return utils.memoize('create', pattern, options, create);
+};
+
+/**
+ * Returns an array of matches captured by `pattern` in `string`, or `null`
+ * if the pattern did not match.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * extglob.capture(pattern, string[, options]);
+ *
+ * console.log(extglob.capture('test/*.js', 'test/foo.js'));
+ * //=> ['foo']
+ * console.log(extglob.capture('test/*.js', 'foo/bar.css'));
+ * //=> null
+ * ```
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {String} `string` String to match
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+ * @api public
+ */
+
+extglob.capture = function(pattern, str, options) {
+ var re = extglob.makeRe(pattern, extend({capture: true}, options));
+
+ function match() {
+ return function(string) {
+ var match = re.exec(string);
+ if (!match) {
+ return null;
+ }
+
+ return match.slice(1);
+ };
+ }
+
+ var capture = utils.memoize('capture', pattern, options, match);
+ return capture(str);
+};
+
+/**
+ * Create a regular expression from the given `pattern` and `options`.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * var re = extglob.makeRe('*.!(*a)');
+ * console.log(re);
+ * //=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/
+ * ```
+ * @param {String} `pattern` The pattern to convert to regex.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+extglob.makeRe = function(pattern, options) {
+ if (pattern instanceof RegExp) {
+ return pattern;
+ }
+
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ if (pattern.length > MAX_LENGTH) {
+ throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters');
+ }
+
+ function makeRe() {
+ var opts = extend({strictErrors: false}, options);
+ if (opts.strictErrors === true) opts.strict = true;
+ var res = extglob.create(pattern, opts);
+ return toRegex(res.output, opts);
+ }
+
+ var regex = utils.memoize('makeRe', pattern, options, makeRe);
+ if (regex.source.length > MAX_LENGTH) {
+ throw new SyntaxError('potentially malicious regex detected');
+ }
+
+ return regex;
+};
+
+/**
+ * Cache
+ */
+
+extglob.cache = utils.cache;
+extglob.clearCache = function() {
+ extglob.cache.__data__ = {};
+};
+
+/**
+ * Expose `Extglob` constructor, parsers and compilers
+ */
+
+extglob.Extglob = Extglob;
+extglob.compilers = compilers;
+extglob.parsers = parsers;
+
+/**
+ * Expose `extglob`
+ * @type {Function}
+ */
+
+module.exports = extglob;
diff --git a/node_modules/anymatch/node_modules/extglob/lib/compilers.js b/node_modules/anymatch/node_modules/extglob/lib/compilers.js
new file mode 100644
index 0000000000..d7bed252a0
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/lib/compilers.js
@@ -0,0 +1,169 @@
+'use strict';
+
+var brackets = require('expand-brackets');
+
+/**
+ * Extglob compilers
+ */
+
+module.exports = function(extglob) {
+ function star() {
+ if (typeof extglob.options.star === 'function') {
+ return extglob.options.star.apply(this, arguments);
+ }
+ if (typeof extglob.options.star === 'string') {
+ return extglob.options.star;
+ }
+ return '.*?';
+ }
+
+ /**
+ * Use `expand-brackets` compilers
+ */
+
+ extglob.use(brackets.compilers);
+ extglob.compiler
+
+ /**
+ * Escaped: "\\*"
+ */
+
+ .set('escape', function(node) {
+ return this.emit(node.val, node);
+ })
+
+ /**
+ * Dot: "."
+ */
+
+ .set('dot', function(node) {
+ return this.emit('\\' + node.val, node);
+ })
+
+ /**
+ * Question mark: "?"
+ */
+
+ .set('qmark', function(node) {
+ var val = '[^\\\\/.]';
+ var prev = this.prev();
+
+ if (node.parsed.slice(-1) === '(') {
+ var ch = node.rest.charAt(0);
+ if (ch !== '!' && ch !== '=' && ch !== ':') {
+ return this.emit(val, node);
+ }
+ return this.emit(node.val, node);
+ }
+
+ if (prev.type === 'text' && prev.val) {
+ return this.emit(val, node);
+ }
+
+ if (node.val.length > 1) {
+ val += '{' + node.val.length + '}';
+ }
+ return this.emit(val, node);
+ })
+
+ /**
+ * Plus: "+"
+ */
+
+ .set('plus', function(node) {
+ var prev = node.parsed.slice(-1);
+ if (prev === ']' || prev === ')') {
+ return this.emit(node.val, node);
+ }
+ var ch = this.output.slice(-1);
+ if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) {
+ return this.emit('\\+', node);
+ }
+ if (/\w/.test(ch) && !node.inside) {
+ return this.emit('+\\+?', node);
+ }
+ return this.emit('+', node);
+ })
+
+ /**
+ * Star: "*"
+ */
+
+ .set('star', function(node) {
+ var prev = this.prev();
+ var prefix = prev.type !== 'text' && prev.type !== 'escape'
+ ? '(?!\\.)'
+ : '';
+
+ return this.emit(prefix + star.call(this, node), node);
+ })
+
+ /**
+ * Parens
+ */
+
+ .set('paren', function(node) {
+ return this.mapVisit(node.nodes);
+ })
+ .set('paren.open', function(node) {
+ var capture = this.options.capture ? '(' : '';
+
+ switch (node.parent.prefix) {
+ case '!':
+ case '^':
+ return this.emit(capture + '(?:(?!(?:', node);
+ case '*':
+ case '+':
+ case '?':
+ case '@':
+ return this.emit(capture + '(?:', node);
+ default: {
+ var val = node.val;
+ if (this.options.bash === true) {
+ val = '\\' + val;
+ } else if (!this.options.capture && val === '(' && node.parent.rest[0] !== '?') {
+ val += '?:';
+ }
+
+ return this.emit(val, node);
+ }
+ }
+ })
+ .set('paren.close', function(node) {
+ var capture = this.options.capture ? ')' : '';
+
+ switch (node.prefix) {
+ case '!':
+ case '^':
+ var prefix = /^(\)|$)/.test(node.rest) ? '$' : '';
+ var str = star.call(this, node);
+
+ // if the extglob has a slash explicitly defined, we know the user wants
+ // to match slashes, so we need to ensure the "star" regex allows for it
+ if (node.parent.hasSlash && !this.options.star && this.options.slash !== false) {
+ str = '.*?';
+ }
+
+ return this.emit(prefix + ('))' + str + ')') + capture, node);
+ case '*':
+ case '+':
+ case '?':
+ return this.emit(')' + node.prefix + capture, node);
+ case '@':
+ return this.emit(')' + capture, node);
+ default: {
+ var val = (this.options.bash === true ? '\\' : '') + ')';
+ return this.emit(val, node);
+ }
+ }
+ })
+
+ /**
+ * Text
+ */
+
+ .set('text', function(node) {
+ var val = node.val.replace(/[\[\]]/g, '\\$&');
+ return this.emit(val, node);
+ });
+};
diff --git a/node_modules/anymatch/node_modules/extglob/lib/extglob.js b/node_modules/anymatch/node_modules/extglob/lib/extglob.js
new file mode 100644
index 0000000000..015f928955
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/lib/extglob.js
@@ -0,0 +1,78 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var Snapdragon = require('snapdragon');
+var define = require('define-property');
+var extend = require('extend-shallow');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./compilers');
+var parsers = require('./parsers');
+
+/**
+ * Customize Snapdragon parser and renderer
+ */
+
+function Extglob(options) {
+ this.options = extend({source: 'extglob'}, options);
+ this.snapdragon = this.options.snapdragon || new Snapdragon(this.options);
+ this.snapdragon.patterns = this.snapdragon.patterns || {};
+ this.compiler = this.snapdragon.compiler;
+ this.parser = this.snapdragon.parser;
+
+ compilers(this.snapdragon);
+ parsers(this.snapdragon);
+
+ /**
+ * Override Snapdragon `.parse` method
+ */
+
+ define(this.snapdragon, 'parse', function(str, options) {
+ var parsed = Snapdragon.prototype.parse.apply(this, arguments);
+ parsed.input = str;
+
+ // escape unmatched brace/bracket/parens
+ var last = this.parser.stack.pop();
+ if (last && this.options.strict !== true) {
+ var node = last.nodes[0];
+ node.val = '\\' + node.val;
+ var sibling = node.parent.nodes[1];
+ if (sibling.type === 'star') {
+ sibling.loose = true;
+ }
+ }
+
+ // add non-enumerable parser reference
+ define(parsed, 'parser', this.parser);
+ return parsed;
+ });
+
+ /**
+ * Decorate `.parse` method
+ */
+
+ define(this, 'parse', function(ast, options) {
+ return this.snapdragon.parse.apply(this.snapdragon, arguments);
+ });
+
+ /**
+ * Decorate `.compile` method
+ */
+
+ define(this, 'compile', function(ast, options) {
+ return this.snapdragon.compile.apply(this.snapdragon, arguments);
+ });
+
+}
+
+/**
+ * Expose `Extglob`
+ */
+
+module.exports = Extglob;
diff --git a/node_modules/anymatch/node_modules/extglob/lib/parsers.js b/node_modules/anymatch/node_modules/extglob/lib/parsers.js
new file mode 100644
index 0000000000..2ba7352e9e
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/lib/parsers.js
@@ -0,0 +1,156 @@
+'use strict';
+
+var brackets = require('expand-brackets');
+var define = require('define-property');
+var utils = require('./utils');
+
+/**
+ * Characters to use in text regex (we want to "not" match
+ * characters that are matched by other parsers)
+ */
+
+var TEXT_REGEX = '([!@*?+]?\\(|\\)|[*?.+\\\\]|\\[:?(?=.*\\])|:?\\])+';
+var not = utils.createRegex(TEXT_REGEX);
+
+/**
+ * Extglob parsers
+ */
+
+function parsers(extglob) {
+ extglob.state = extglob.state || {};
+
+ /**
+ * Use `expand-brackets` parsers
+ */
+
+ extglob.use(brackets.parsers);
+ extglob.parser.sets.paren = extglob.parser.sets.paren || [];
+ extglob.parser
+
+ /**
+ * Extglob open: "*("
+ */
+
+ .capture('paren.open', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^([!@*?+])?\(/);
+ if (!m) return;
+
+ var prev = this.prev();
+ var prefix = m[1];
+ var val = m[0];
+
+ var open = pos({
+ type: 'paren.open',
+ parsed: parsed,
+ val: val
+ });
+
+ var node = pos({
+ type: 'paren',
+ prefix: prefix,
+ nodes: [open]
+ });
+
+ // if nested negation extglobs, just cancel them out to simplify
+ if (prefix === '!' && prev.type === 'paren' && prev.prefix === '!') {
+ prev.prefix = '@';
+ node.prefix = '@';
+ }
+
+ define(node, 'rest', this.input);
+ define(node, 'parsed', parsed);
+ define(node, 'parent', prev);
+ define(open, 'parent', node);
+
+ this.push('paren', node);
+ prev.nodes.push(node);
+ })
+
+ /**
+ * Extglob close: ")"
+ */
+
+ .capture('paren.close', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\)/);
+ if (!m) return;
+
+ var parent = this.pop('paren');
+ var node = pos({
+ type: 'paren.close',
+ rest: this.input,
+ parsed: parsed,
+ val: m[0]
+ });
+
+ if (!this.isType(parent, 'paren')) {
+ if (this.options.strict) {
+ throw new Error('missing opening paren: "("');
+ }
+ node.escaped = true;
+ return node;
+ }
+
+ node.prefix = parent.prefix;
+ parent.nodes.push(node);
+ define(node, 'parent', parent);
+ })
+
+ /**
+ * Escape: "\\."
+ */
+
+ .capture('escape', function() {
+ var pos = this.position();
+ var m = this.match(/^\\(.)/);
+ if (!m) return;
+
+ return pos({
+ type: 'escape',
+ val: m[0],
+ ch: m[1]
+ });
+ })
+
+ /**
+ * Question marks: "?"
+ */
+
+ .capture('qmark', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\?+(?!\()/);
+ if (!m) return;
+ extglob.state.metachar = true;
+ return pos({
+ type: 'qmark',
+ rest: this.input,
+ parsed: parsed,
+ val: m[0]
+ });
+ })
+
+ /**
+ * Character parsers
+ */
+
+ .capture('star', /^\*(?!\()/)
+ .capture('plus', /^\+(?!\()/)
+ .capture('dot', /^\./)
+ .capture('text', not);
+};
+
+/**
+ * Expose text regex string
+ */
+
+module.exports.TEXT_REGEX = TEXT_REGEX;
+
+/**
+ * Extglob parsers
+ */
+
+module.exports = parsers;
diff --git a/node_modules/anymatch/node_modules/extglob/lib/utils.js b/node_modules/anymatch/node_modules/extglob/lib/utils.js
new file mode 100644
index 0000000000..37a59fbce1
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/lib/utils.js
@@ -0,0 +1,69 @@
+'use strict';
+
+var regex = require('regex-not');
+var Cache = require('fragment-cache');
+
+/**
+ * Utils
+ */
+
+var utils = module.exports;
+var cache = utils.cache = new Cache();
+
+/**
+ * Cast `val` to an array
+ * @return {Array}
+ */
+
+utils.arrayify = function(val) {
+ if (!Array.isArray(val)) {
+ return [val];
+ }
+ return val;
+};
+
+/**
+ * Memoize a generated regex or function
+ */
+
+utils.memoize = function(type, pattern, options, fn) {
+ var key = utils.createKey(type + pattern, options);
+
+ if (cache.has(type, key)) {
+ return cache.get(type, key);
+ }
+
+ var val = fn(pattern, options);
+ if (options && options.cache === false) {
+ return val;
+ }
+
+ cache.set(type, key, val);
+ return val;
+};
+
+/**
+ * Create the key to use for memoization. The key is generated
+ * by iterating over the options and concatenating key-value pairs
+ * to the pattern string.
+ */
+
+utils.createKey = function(pattern, options) {
+ var key = pattern;
+ if (typeof options === 'undefined') {
+ return key;
+ }
+ for (var prop in options) {
+ key += ';' + prop + '=' + String(options[prop]);
+ }
+ return key;
+};
+
+/**
+ * Create the regex to use for matching text
+ */
+
+utils.createRegex = function(str) {
+ var opts = {contains: true, strictClose: false};
+ return regex(str, opts);
+};
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/define-property/LICENSE b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/LICENSE
new file mode 100644
index 0000000000..ec85897eb1
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/define-property/README.md b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/README.md
new file mode 100644
index 0000000000..2f1af05f3c
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/README.md
@@ -0,0 +1,95 @@
+# define-property [![NPM version](https://img.shields.io/npm/v/define-property.svg?style=flat)](https://www.npmjs.com/package/define-property) [![NPM monthly downloads](https://img.shields.io/npm/dm/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![NPM total downloads](https://img.shields.io/npm/dt/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/define-property.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/define-property)
+
+> Define a non-enumerable property on an object.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save define-property
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add define-property
+```
+
+## Usage
+
+**Params**
+
+* `obj`: The object on which to define the property.
+* `prop`: The name of the property to be defined or modified.
+* `descriptor`: The descriptor for the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+ return val.toUpperCase();
+});
+
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**get/set**
+
+```js
+define(obj, 'foo', {
+ get: function() {},
+ set: function() {}
+});
+```
+
+## About
+
+### Related projects
+
+* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.")
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.")
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.")
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 20, 2017._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/define-property/index.js b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/index.js
new file mode 100644
index 0000000000..27c19ebf6d
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/index.js
@@ -0,0 +1,31 @@
+/*!
+ * define-property
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isDescriptor = require('is-descriptor');
+
+module.exports = function defineProperty(obj, prop, val) {
+ if (typeof obj !== 'object' && typeof obj !== 'function') {
+ throw new TypeError('expected an object or function.');
+ }
+
+ if (typeof prop !== 'string') {
+ throw new TypeError('expected `prop` to be a string.');
+ }
+
+ if (isDescriptor(val) && ('set' in val || 'get' in val)) {
+ return Object.defineProperty(obj, prop, val);
+ }
+
+ return Object.defineProperty(obj, prop, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: val
+ });
+};
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/define-property/package.json b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/package.json
new file mode 100644
index 0000000000..772127593e
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/define-property/package.json
@@ -0,0 +1,93 @@
+{
+ "_from": "define-property@^1.0.0",
+ "_id": "define-property@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "_location": "/anymatch/extglob/define-property",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "define-property@^1.0.0",
+ "name": "define-property",
+ "escapedName": "define-property",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/anymatch/extglob"
+ ],
+ "_resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "_shasum": "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6",
+ "_spec": "define-property@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/extglob",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/define-property/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "deprecated": false,
+ "description": "Define a non-enumerable property on an object.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/define-property",
+ "keywords": [
+ "define",
+ "define-property",
+ "enumerable",
+ "key",
+ "non",
+ "non-enumerable",
+ "object",
+ "prop",
+ "property",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "define-property",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/define-property.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "extend-shallow",
+ "merge-deep",
+ "assign-deep",
+ "mixin-deep"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/LICENSE b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/LICENSE
new file mode 100644
index 0000000000..fa30c4cb3e
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/README.md b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/README.md
new file mode 100644
index 0000000000..cdc45d4ff7
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/README.md
@@ -0,0 +1,61 @@
+# extend-shallow [![NPM version](https://badge.fury.io/js/extend-shallow.svg)](http://badge.fury.io/js/extend-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/extend-shallow.svg)](https://travis-ci.org/jonschlinkert/extend-shallow)
+
+> Extend an object with the properties of additional objects. node.js/javascript util.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i extend-shallow --save
+```
+
+## Usage
+
+```js
+var extend = require('extend-shallow');
+
+extend({a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+Pass an empty object to shallow clone:
+
+```js
+var obj = {};
+extend(obj, {a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+## Related
+
+* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util.
+* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own)
+* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in)
+* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor.
+* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null.
+* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value.
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 29, 2015._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/index.js b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/index.js
new file mode 100644
index 0000000000..92a067fcc4
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/index.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var isObject = require('is-extendable');
+
+module.exports = function extend(o/*, objects*/) {
+ if (!isObject(o)) { o = {}; }
+
+ var len = arguments.length;
+ for (var i = 1; i < len; i++) {
+ var obj = arguments[i];
+
+ if (isObject(obj)) {
+ assign(o, obj);
+ }
+ }
+ return o;
+};
+
+function assign(a, b) {
+ for (var key in b) {
+ if (hasOwn(b, key)) {
+ a[key] = b[key];
+ }
+ }
+}
+
+/**
+ * Returns true if the given `key` is an own property of `obj`.
+ */
+
+function hasOwn(obj, key) {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+}
diff --git a/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/package.json b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/package.json
new file mode 100644
index 0000000000..d8f3278e39
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/node_modules/extend-shallow/package.json
@@ -0,0 +1,87 @@
+{
+ "_from": "extend-shallow@^2.0.1",
+ "_id": "extend-shallow@2.0.1",
+ "_inBundle": false,
+ "_integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "_location": "/anymatch/extglob/extend-shallow",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "extend-shallow@^2.0.1",
+ "name": "extend-shallow",
+ "escapedName": "extend-shallow",
+ "rawSpec": "^2.0.1",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.1"
+ },
+ "_requiredBy": [
+ "/anymatch/extglob"
+ ],
+ "_resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "_shasum": "51af7d614ad9a9f610ea1bafbb989d6b1c56890f",
+ "_spec": "extend-shallow@^2.0.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/extglob",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/extend-shallow/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "deprecated": false,
+ "description": "Extend an object with the properties of additional objects. node.js/javascript util.",
+ "devDependencies": {
+ "array-slice": "^0.2.3",
+ "benchmarked": "^0.1.4",
+ "chalk": "^1.0.0",
+ "for-own": "^0.1.3",
+ "glob": "^5.0.12",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^2.0.0",
+ "minimist": "^1.1.1",
+ "mocha": "^2.2.5",
+ "should": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/extend-shallow",
+ "keywords": [
+ "assign",
+ "extend",
+ "javascript",
+ "js",
+ "keys",
+ "merge",
+ "obj",
+ "object",
+ "prop",
+ "properties",
+ "property",
+ "props",
+ "shallow",
+ "util",
+ "utility",
+ "utils",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "extend-shallow",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/extend-shallow.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "2.0.1"
+}
diff --git a/node_modules/anymatch/node_modules/extglob/package.json b/node_modules/anymatch/node_modules/extglob/package.json
new file mode 100644
index 0000000000..906e54b3bc
--- /dev/null
+++ b/node_modules/anymatch/node_modules/extglob/package.json
@@ -0,0 +1,160 @@
+{
+ "_from": "extglob@^2.0.4",
+ "_id": "extglob@2.0.4",
+ "_inBundle": false,
+ "_integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "_location": "/anymatch/extglob",
+ "_phantomChildren": {
+ "is-descriptor": "1.0.2",
+ "is-extendable": "0.1.1"
+ },
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "extglob@^2.0.4",
+ "name": "extglob",
+ "escapedName": "extglob",
+ "rawSpec": "^2.0.4",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.4"
+ },
+ "_requiredBy": [
+ "/anymatch/micromatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "_shasum": "ad00fe4dc612a9232e8718711dc5cb5ab0285543",
+ "_spec": "extglob@^2.0.4",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/micromatch/extglob/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Devon Govett",
+ "url": "http://badassjs.com"
+ },
+ {
+ "name": "Isiah Meadows",
+ "url": "https://www.isiahmeadows.com"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Matt Bierner",
+ "url": "http://mattbierner.com"
+ },
+ {
+ "name": "Shinnosuke Watanabe",
+ "url": "https://shinnn.github.io"
+ }
+ ],
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "deprecated": false,
+ "description": "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.",
+ "devDependencies": {
+ "bash-match": "^1.0.2",
+ "for-own": "^1.0.0",
+ "gulp": "^3.9.1",
+ "gulp-eslint": "^4.0.0",
+ "gulp-format-md": "^1.0.0",
+ "gulp-istanbul": "^1.1.2",
+ "gulp-mocha": "^3.0.1",
+ "gulp-unused": "^0.2.1",
+ "helper-changelog": "^0.3.0",
+ "is-windows": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "minimatch": "^3.0.4",
+ "minimist": "^1.2.0",
+ "mocha": "^3.5.0",
+ "multimatch": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "homepage": "https://github.com/micromatch/extglob",
+ "keywords": [
+ "bash",
+ "extended",
+ "extglob",
+ "glob",
+ "globbing",
+ "ksh",
+ "match",
+ "pattern",
+ "patterns",
+ "regex",
+ "test",
+ "wildcard"
+ ],
+ "license": "MIT",
+ "lintDeps": {
+ "devDependencies": {
+ "files": {
+ "options": {
+ "ignore": [
+ "benchmark/**/*.js"
+ ]
+ }
+ }
+ }
+ },
+ "main": "index.js",
+ "name": "extglob",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/micromatch/extglob.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "related": {
+ "list": [
+ "braces",
+ "expand-brackets",
+ "expand-range",
+ "fill-range",
+ "micromatch"
+ ]
+ },
+ "helpers": [
+ "helper-changelog"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "2.0.4"
+}
diff --git a/node_modules/anymatch/node_modules/is-accessor-descriptor/LICENSE b/node_modules/anymatch/node_modules/is-accessor-descriptor/LICENSE
new file mode 100644
index 0000000000..e33d14b754
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-accessor-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/is-accessor-descriptor/README.md b/node_modules/anymatch/node_modules/is-accessor-descriptor/README.md
new file mode 100644
index 0000000000..d198e1f05e
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-accessor-descriptor/README.md
@@ -0,0 +1,144 @@
+# is-accessor-descriptor [![NPM version](https://img.shields.io/npm/v/is-accessor-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-accessor-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-accessor-descriptor.svg?style=flat)](https://npmjs.org/package/is-accessor-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-accessor-descriptor.svg?style=flat)](https://npmjs.org/package/is-accessor-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-accessor-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-accessor-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-accessor-descriptor
+```
+
+## Usage
+
+```js
+var isAccessor = require('is-accessor-descriptor');
+
+isAccessor({get: function() {}});
+//=> true
+```
+
+You may also pass an object and property name to check if the property is an accessor:
+
+```js
+isAccessor(foo, 'bar');
+```
+
+## Examples
+
+`false` when not an object
+
+```js
+isAccessor('a')
+isAccessor(null)
+isAccessor([])
+//=> false
+```
+
+`true` when the object has valid properties
+
+and the properties all have the correct JavaScript types:
+
+```js
+isAccessor({get: noop, set: noop})
+isAccessor({get: noop})
+isAccessor({set: noop})
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isAccessor({get: noop, set: noop, bar: 'baz'})
+isAccessor({get: noop, writable: true})
+isAccessor({get: noop, value: true})
+//=> false
+```
+
+`false` when an accessor is not a function
+
+```js
+isAccessor({get: noop, set: 'baz'})
+isAccessor({get: 'foo', set: noop})
+isAccessor({get: 'foo', bar: 'baz'})
+isAccessor({get: 'foo', set: 'baz'})
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isAccessor({get: noop, set: noop, enumerable: 'foo'})
+isAccessor({set: noop, configurable: 'foo'})
+isAccessor({get: noop, configurable: 'foo'})
+//=> false
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.")
+* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.")
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.")
+* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 22 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [realityking](https://github.com/realityking) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 01, 2017._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/is-accessor-descriptor/index.js b/node_modules/anymatch/node_modules/is-accessor-descriptor/index.js
new file mode 100644
index 0000000000..d2e6fe8b9e
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-accessor-descriptor/index.js
@@ -0,0 +1,69 @@
+/*!
+ * is-accessor-descriptor
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+
+// accessor descriptor properties
+var accessor = {
+ get: 'function',
+ set: 'function',
+ configurable: 'boolean',
+ enumerable: 'boolean'
+};
+
+function isAccessorDescriptor(obj, prop) {
+ if (typeof prop === 'string') {
+ var val = Object.getOwnPropertyDescriptor(obj, prop);
+ return typeof val !== 'undefined';
+ }
+
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+
+ if (has(obj, 'value') || has(obj, 'writable')) {
+ return false;
+ }
+
+ if (!has(obj, 'get') || typeof obj.get !== 'function') {
+ return false;
+ }
+
+ // tldr: it's valid to have "set" be undefined
+ // "set" might be undefined if `Object.getOwnPropertyDescriptor`
+ // was used to get the value, and only `get` was defined by the user
+ if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') {
+ return false;
+ }
+
+ for (var key in obj) {
+ if (!accessor.hasOwnProperty(key)) {
+ continue;
+ }
+
+ if (typeOf(obj[key]) === accessor[key]) {
+ continue;
+ }
+
+ if (typeof obj[key] !== 'undefined') {
+ return false;
+ }
+ }
+ return true;
+}
+
+function has(obj, key) {
+ return {}.hasOwnProperty.call(obj, key);
+}
+
+/**
+ * Expose `isAccessorDescriptor`
+ */
+
+module.exports = isAccessorDescriptor;
diff --git a/node_modules/anymatch/node_modules/is-accessor-descriptor/package.json b/node_modules/anymatch/node_modules/is-accessor-descriptor/package.json
new file mode 100644
index 0000000000..a06361df61
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-accessor-descriptor/package.json
@@ -0,0 +1,110 @@
+{
+ "_from": "is-accessor-descriptor@^1.0.0",
+ "_id": "is-accessor-descriptor@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "_location": "/anymatch/is-accessor-descriptor",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "is-accessor-descriptor@^1.0.0",
+ "name": "is-accessor-descriptor",
+ "escapedName": "is-accessor-descriptor",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/anymatch/is-descriptor"
+ ],
+ "_resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "_shasum": "169c2f6d3df1f992618072365c9b0ea1f6878656",
+ "_spec": "is-accessor-descriptor@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/is-descriptor",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-accessor-descriptor/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Rouven Weßling",
+ "url": "www.rouvenwessling.de"
+ }
+ ],
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "deprecated": false,
+ "description": "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/is-accessor-descriptor",
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-accessor-descriptor",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/is-accessor-descriptor.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "is-plain-object",
+ "isobject"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/anymatch/node_modules/is-data-descriptor/LICENSE b/node_modules/anymatch/node_modules/is-data-descriptor/LICENSE
new file mode 100644
index 0000000000..e33d14b754
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-data-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/is-data-descriptor/README.md b/node_modules/anymatch/node_modules/is-data-descriptor/README.md
new file mode 100644
index 0000000000..42b0714465
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-data-descriptor/README.md
@@ -0,0 +1,161 @@
+# is-data-descriptor [![NPM version](https://img.shields.io/npm/v/is-data-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-data-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-data-descriptor.svg?style=flat)](https://npmjs.org/package/is-data-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-data-descriptor.svg?style=flat)](https://npmjs.org/package/is-data-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-data-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-data-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript data descriptor.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-data-descriptor
+```
+
+## Usage
+
+```js
+var isDataDesc = require('is-data-descriptor');
+```
+
+## Examples
+
+`true` when the descriptor has valid properties with valid values.
+
+```js
+// `value` can be anything
+isDataDesc({value: 'foo'})
+isDataDesc({value: function() {}})
+isDataDesc({value: true})
+//=> true
+```
+
+`false` when not an object
+
+```js
+isDataDesc('a')
+//=> false
+isDataDesc(null)
+//=> false
+isDataDesc([])
+//=> false
+```
+
+`false` when the object has invalid properties
+
+```js
+isDataDesc({value: 'foo', bar: 'baz'})
+//=> false
+isDataDesc({value: 'foo', bar: 'baz'})
+//=> false
+isDataDesc({value: 'foo', get: function(){}})
+//=> false
+isDataDesc({get: function(){}, value: 'foo'})
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDataDesc({value: 'foo', enumerable: 'foo'})
+//=> false
+isDataDesc({value: 'foo', configurable: 'foo'})
+//=> false
+isDataDesc({value: 'foo', writable: 'foo'})
+//=> false
+```
+
+## Valid properties
+
+The only valid data descriptor properties are the following:
+
+* `configurable` (required)
+* `enumerable` (required)
+* `value` (optional)
+* `writable` (optional)
+
+To be a valid data descriptor, either `value` or `writable` must be defined.
+
+**Invalid properties**
+
+A descriptor may have additional _invalid_ properties (an error will **not** be thrown).
+
+```js
+var foo = {};
+
+Object.defineProperty(foo, 'bar', {
+ enumerable: true,
+ whatever: 'blah', // invalid, but doesn't cause an error
+ get: function() {
+ return 'baz';
+ }
+});
+
+console.log(foo.bar);
+//=> 'baz'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.")
+* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.")
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 21 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [realityking](https://github.com/realityking) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 01, 2017._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/is-data-descriptor/index.js b/node_modules/anymatch/node_modules/is-data-descriptor/index.js
new file mode 100644
index 0000000000..cfeae36190
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-data-descriptor/index.js
@@ -0,0 +1,49 @@
+/*!
+ * is-data-descriptor
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+
+module.exports = function isDataDescriptor(obj, prop) {
+ // data descriptor properties
+ var data = {
+ configurable: 'boolean',
+ enumerable: 'boolean',
+ writable: 'boolean'
+ };
+
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+
+ if (typeof prop === 'string') {
+ var val = Object.getOwnPropertyDescriptor(obj, prop);
+ return typeof val !== 'undefined';
+ }
+
+ if (!('value' in obj) && !('writable' in obj)) {
+ return false;
+ }
+
+ for (var key in obj) {
+ if (key === 'value') continue;
+
+ if (!data.hasOwnProperty(key)) {
+ continue;
+ }
+
+ if (typeOf(obj[key]) === data[key]) {
+ continue;
+ }
+
+ if (typeof obj[key] !== 'undefined') {
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/node_modules/anymatch/node_modules/is-data-descriptor/package.json b/node_modules/anymatch/node_modules/is-data-descriptor/package.json
new file mode 100644
index 0000000000..66a93697ff
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-data-descriptor/package.json
@@ -0,0 +1,109 @@
+{
+ "_from": "is-data-descriptor@^1.0.0",
+ "_id": "is-data-descriptor@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "_location": "/anymatch/is-data-descriptor",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "is-data-descriptor@^1.0.0",
+ "name": "is-data-descriptor",
+ "escapedName": "is-data-descriptor",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/anymatch/is-descriptor"
+ ],
+ "_resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "_shasum": "d84876321d0e7add03990406abbbbd36ba9268c7",
+ "_spec": "is-data-descriptor@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/is-descriptor",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-data-descriptor/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Rouven Weßling",
+ "url": "www.rouvenwessling.de"
+ }
+ ],
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "deprecated": false,
+ "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/is-data-descriptor",
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-data-descriptor",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/is-data-descriptor.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "isobject"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/anymatch/node_modules/is-descriptor/LICENSE b/node_modules/anymatch/node_modules/is-descriptor/LICENSE
new file mode 100644
index 0000000000..c0d7f13627
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/is-descriptor/README.md b/node_modules/anymatch/node_modules/is-descriptor/README.md
new file mode 100644
index 0000000000..658e53301b
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-descriptor/README.md
@@ -0,0 +1,193 @@
+# is-descriptor [![NPM version](https://img.shields.io/npm/v/is-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-descriptor
+```
+
+## Usage
+
+```js
+var isDescriptor = require('is-descriptor');
+
+isDescriptor({value: 'foo'})
+//=> true
+isDescriptor({get: function(){}, set: function(){}})
+//=> true
+isDescriptor({get: 'foo', set: function(){}})
+//=> false
+```
+
+You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument.
+
+```js
+var obj = {};
+obj.foo = 'abc';
+
+Object.defineProperty(obj, 'bar', {
+ value: 'xyz'
+});
+
+isDescriptor(obj, 'foo');
+//=> true
+isDescriptor(obj, 'bar');
+//=> true
+```
+
+## Examples
+
+### value type
+
+`false` when not an object
+
+```js
+isDescriptor('a');
+//=> false
+isDescriptor(null);
+//=> false
+isDescriptor([]);
+//=> false
+```
+
+### data descriptor
+
+`true` when the object has valid properties with valid values.
+
+```js
+isDescriptor({value: 'foo'});
+//=> true
+isDescriptor({value: noop});
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isDescriptor({value: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({value: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({value: 'foo', get: noop});
+//=> false
+isDescriptor({get: noop, value: noop});
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDescriptor({value: 'foo', enumerable: 'foo'});
+//=> false
+isDescriptor({value: 'foo', configurable: 'foo'});
+//=> false
+isDescriptor({value: 'foo', writable: 'foo'});
+//=> false
+```
+
+### accessor descriptor
+
+`true` when the object has valid properties with valid values.
+
+```js
+isDescriptor({get: noop, set: noop});
+//=> true
+isDescriptor({get: noop});
+//=> true
+isDescriptor({set: noop});
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isDescriptor({get: noop, set: noop, bar: 'baz'});
+//=> false
+isDescriptor({get: noop, writable: true});
+//=> false
+isDescriptor({get: noop, value: true});
+//=> false
+```
+
+`false` when an accessor is not a function
+
+```js
+isDescriptor({get: noop, set: 'baz'});
+//=> false
+isDescriptor({get: 'foo', set: noop});
+//=> false
+isDescriptor({get: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({get: 'foo', set: 'baz'});
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDescriptor({get: noop, set: noop, enumerable: 'foo'});
+//=> false
+isDescriptor({set: noop, configurable: 'foo'});
+//=> false
+isDescriptor({get: noop, configurable: 'foo'});
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.")
+* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.")
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 24 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 22, 2017._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/is-descriptor/index.js b/node_modules/anymatch/node_modules/is-descriptor/index.js
new file mode 100644
index 0000000000..c9b91d7622
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-descriptor/index.js
@@ -0,0 +1,22 @@
+/*!
+ * is-descriptor
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+var isAccessor = require('is-accessor-descriptor');
+var isData = require('is-data-descriptor');
+
+module.exports = function isDescriptor(obj, key) {
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+ if ('get' in obj) {
+ return isAccessor(obj, key);
+ }
+ return isData(obj, key);
+};
diff --git a/node_modules/anymatch/node_modules/is-descriptor/package.json b/node_modules/anymatch/node_modules/is-descriptor/package.json
new file mode 100644
index 0000000000..7bc2594131
--- /dev/null
+++ b/node_modules/anymatch/node_modules/is-descriptor/package.json
@@ -0,0 +1,114 @@
+{
+ "_from": "is-descriptor@^1.0.0",
+ "_id": "is-descriptor@1.0.2",
+ "_inBundle": false,
+ "_integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "_location": "/anymatch/is-descriptor",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "is-descriptor@^1.0.0",
+ "name": "is-descriptor",
+ "escapedName": "is-descriptor",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/anymatch/extglob/define-property"
+ ],
+ "_resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "_shasum": "3b159746a66604b04f8c81524ba365c5f14d86ec",
+ "_spec": "is-descriptor@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/extglob/node_modules/define-property",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-descriptor/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "url": "https://github.com/wtgtybhertgeghgtwtg"
+ }
+ ],
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "deprecated": false,
+ "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/is-descriptor",
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-descriptor",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/is-descriptor.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "isobject"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.2"
+}
diff --git a/node_modules/anymatch/node_modules/micromatch/CHANGELOG.md b/node_modules/anymatch/node_modules/micromatch/CHANGELOG.md
new file mode 100644
index 0000000000..9d8e5ed094
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/CHANGELOG.md
@@ -0,0 +1,37 @@
+## History
+
+### key
+
+Changelog entries are classified using the following labels _(from [keep-a-changelog][]_):
+
+- `added`: for new features
+- `changed`: for changes in existing functionality
+- `deprecated`: for once-stable features removed in upcoming releases
+- `removed`: for deprecated features removed in this release
+- `fixed`: for any bug fixes
+- `bumped`: updated dependencies, only minor or higher will be listed.
+
+### [3.0.0] - 2017-04-11
+
+TODO. There should be no breaking changes. Please report any regressions. I will [reformat these release notes](https://github.com/micromatch/micromatch/pull/76) and add them to the changelog as soon as I have a chance.
+
+### [1.0.1] - 2016-12-12
+
+**Added**
+
+- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations.
+
+### [1.0.0] - 2016-12-12
+
+Stable release.
+
+### [0.1.0] - 2016-10-08
+
+First release.
+
+
+[Unreleased]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...HEAD
+[0.2.0]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...0.2.0
+
+[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog
+
diff --git a/node_modules/anymatch/node_modules/micromatch/LICENSE b/node_modules/anymatch/node_modules/micromatch/LICENSE
new file mode 100755
index 0000000000..d32ab4426a
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2018, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/anymatch/node_modules/micromatch/README.md b/node_modules/anymatch/node_modules/micromatch/README.md
new file mode 100644
index 0000000000..5dfa1498a6
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/README.md
@@ -0,0 +1,1150 @@
+# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Linux Build Status](https://img.shields.io/travis/micromatch/micromatch.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/micromatch) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/micromatch.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/micromatch)
+
+> Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Table of Contents
+
+
+Details
+
+- [Install](#install)
+- [Quickstart](#quickstart)
+- [Why use micromatch?](#why-use-micromatch)
+ * [Matching features](#matching-features)
+- [Switching to micromatch](#switching-to-micromatch)
+ * [From minimatch](#from-minimatch)
+ * [From multimatch](#from-multimatch)
+- [API](#api)
+- [Options](#options)
+ * [options.basename](#optionsbasename)
+ * [options.bash](#optionsbash)
+ * [options.cache](#optionscache)
+ * [options.dot](#optionsdot)
+ * [options.failglob](#optionsfailglob)
+ * [options.ignore](#optionsignore)
+ * [options.matchBase](#optionsmatchbase)
+ * [options.nobrace](#optionsnobrace)
+ * [options.nocase](#optionsnocase)
+ * [options.nodupes](#optionsnodupes)
+ * [options.noext](#optionsnoext)
+ * [options.nonegate](#optionsnonegate)
+ * [options.noglobstar](#optionsnoglobstar)
+ * [options.nonull](#optionsnonull)
+ * [options.nullglob](#optionsnullglob)
+ * [options.snapdragon](#optionssnapdragon)
+ * [options.sourcemap](#optionssourcemap)
+ * [options.unescape](#optionsunescape)
+ * [options.unixify](#optionsunixify)
+- [Extended globbing](#extended-globbing)
+ * [extglobs](#extglobs)
+ * [braces](#braces)
+ * [regex character classes](#regex-character-classes)
+ * [regex groups](#regex-groups)
+ * [POSIX bracket expressions](#posix-bracket-expressions)
+- [Notes](#notes)
+ * [Bash 4.3 parity](#bash-43-parity)
+ * [Backslashes](#backslashes)
+- [Contributing](#contributing)
+- [Benchmarks](#benchmarks)
+ * [Running benchmarks](#running-benchmarks)
+ * [Latest results](#latest-results)
+- [About](#about)
+
+
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save micromatch
+```
+
+## Quickstart
+
+```js
+var mm = require('micromatch');
+mm(list, patterns[, options]);
+```
+
+The [main export](#micromatch) takes a list of strings and one or more glob patterns:
+
+```js
+console.log(mm(['foo', 'bar', 'qux'], ['f*', 'b*']));
+//=> ['foo', 'bar']
+```
+
+Use [.isMatch()](#ismatch) to get true/false:
+
+```js
+console.log(mm.isMatch('foo', 'f*'));
+//=> true
+```
+
+[Switching](#switching-to-micromatch) from minimatch and multimatch is easy!
+
+## Why use micromatch?
+
+> micromatch is a [drop-in replacement](#switching-to-micromatch) for minimatch and multimatch
+
+* Supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch)
+* Micromatch uses [snapdragon](https://github.com/jonschlinkert/snapdragon) for parsing and compiling globs, which provides granular control over the entire conversion process in a way that is easy to understand, reason about, and maintain.
+* More consistently accurate matching [than minimatch](https://github.com/yarnpkg/yarn/pull/3339), with more than 36,000 [test assertions](./test) to prove it.
+* More complete support for the Bash 4.3 specification than minimatch and multimatch. In fact, micromatch passes _all of the spec tests_ from bash, including some that bash still fails.
+* [Faster matching](#benchmarks), from a combination of optimized glob patterns, faster algorithms, and regex caching.
+* [Micromatch is safer](https://github.com/micromatch/braces#braces-is-safe), and is not subject to DoS with brace patterns, like minimatch and multimatch.
+* More reliable windows support than minimatch and multimatch.
+
+### Matching features
+
+* Support for multiple glob patterns (no need for wrappers like multimatch)
+* Wildcards (`**`, `*.js`)
+* Negation (`'!a/*.js'`, `'*!(b).js']`)
+* [extglobs](https://github.com/micromatch/extglob) (`+(x|y)`, `!(a|b)`)
+* [POSIX character classes](https://github.com/micromatch/expand-brackets) (`[[:alpha:][:digit:]]`)
+* [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`)
+* regex character classes (`foo-[1-5].js`)
+* regex logical "or" (`foo/(abc|xyz).js`)
+
+You can mix and match these features to create whatever patterns you need!
+
+## Switching to micromatch
+
+There is one notable difference between micromatch and minimatch in regards to how backslashes are handled. See [the notes about backslashes](#backslashes) for more information.
+
+### From minimatch
+
+Use [mm.isMatch()](#ismatch) instead of `minimatch()`:
+
+```js
+mm.isMatch('foo', 'b*');
+//=> false
+```
+
+Use [mm.match()](#match) instead of `minimatch.match()`:
+
+```js
+mm.match(['foo', 'bar'], 'b*');
+//=> 'bar'
+```
+
+### From multimatch
+
+Same signature:
+
+```js
+mm(['foo', 'bar', 'baz'], ['f*', '*z']);
+//=> ['foo', 'baz']
+```
+
+## API
+
+### [micromatch](index.js#L41)
+
+The main function takes a list of strings and one or more glob patterns to use for matching.
+
+**Params**
+
+* `list` **{Array}**: A list of strings to match
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Array}**: Returns an array of matches
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm(list, patterns[, options]);
+
+console.log(mm(['a.js', 'a.txt'], ['*.js']));
+//=> [ 'a.js' ]
+```
+
+### [.match](index.js#L93)
+
+Similar to the main function, but `pattern` must be a string.
+
+**Params**
+
+* `list` **{Array}**: Array of strings to match
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Array}**: Returns an array of matches
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.match(list, pattern[, options]);
+
+console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a'));
+//=> ['a.a', 'a.aa']
+```
+
+### [.isMatch](index.js#L154)
+
+Returns true if the specified `string` matches the given glob `pattern`.
+
+**Params**
+
+* `string` **{String}**: String to match
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if the string matches the glob pattern.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.isMatch(string, pattern[, options]);
+
+console.log(mm.isMatch('a.a', '*.a'));
+//=> true
+console.log(mm.isMatch('a.b', '*.a'));
+//=> false
+```
+
+### [.some](index.js#L192)
+
+Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
+
+**Params**
+
+* `list` **{String|Array}**: The string or array of strings to test. Returns as soon as the first match is found.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.some(list, patterns[, options]);
+
+console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+// true
+console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
+// false
+```
+
+### [.every](index.js#L228)
+
+Returns true if every string in the given `list` matches any of the given glob `patterns`.
+
+**Params**
+
+* `list` **{String|Array}**: The string or array of strings to test.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.every(list, patterns[, options]);
+
+console.log(mm.every('foo.js', ['foo.js']));
+// true
+console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
+// true
+console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+// false
+console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
+// false
+```
+
+### [.any](index.js#L260)
+
+Returns true if **any** of the given glob `patterns` match the specified `string`.
+
+**Params**
+
+* `str` **{String|Array}**: The string to test.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.any(string, patterns[, options]);
+
+console.log(mm.any('a.a', ['b.*', '*.a']));
+//=> true
+console.log(mm.any('a.a', 'b.*'));
+//=> false
+```
+
+### [.all](index.js#L308)
+
+Returns true if **all** of the given `patterns` match the specified string.
+
+**Params**
+
+* `str` **{String|Array}**: The string to test.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if any patterns match `str`
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.all(string, patterns[, options]);
+
+console.log(mm.all('foo.js', ['foo.js']));
+// true
+
+console.log(mm.all('foo.js', ['*.js', '!foo.js']));
+// false
+
+console.log(mm.all('foo.js', ['*.js', 'foo.js']));
+// true
+
+console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
+// true
+```
+
+### [.not](index.js#L340)
+
+Returns a list of strings that _**do not match any**_ of the given `patterns`.
+
+**Params**
+
+* `list` **{Array}**: Array of strings to match.
+* `patterns` **{String|Array}**: One or more glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Array}**: Returns an array of strings that **do not match** the given patterns.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.not(list, patterns[, options]);
+
+console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
+//=> ['b.b', 'c.c']
+```
+
+### [.contains](index.js#L376)
+
+Returns true if the given `string` contains the given pattern. Similar to [.isMatch](#isMatch) but the pattern can match any part of the string.
+
+**Params**
+
+* `str` **{String}**: The string to match.
+* `patterns` **{String|Array}**: Glob pattern to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.contains(string, pattern[, options]);
+
+console.log(mm.contains('aa/bb/cc', '*b'));
+//=> true
+console.log(mm.contains('aa/bb/cc', '*d'));
+//=> false
+```
+
+### [.matchKeys](index.js#L432)
+
+Filter the keys of the given object with the given `glob` pattern and `options`. Does not attempt to match nested keys. If you need this feature, use [glob-object](https://github.com/jonschlinkert/glob-object) instead.
+
+**Params**
+
+* `object` **{Object}**: The object with keys to filter.
+* `patterns` **{String|Array}**: One or more glob patterns to use for matching.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Object}**: Returns an object with only keys that match the given patterns.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.matchKeys(object, patterns[, options]);
+
+var obj = { aa: 'a', ab: 'b', ac: 'c' };
+console.log(mm.matchKeys(obj, '*b'));
+//=> { ab: 'b' }
+```
+
+### [.matcher](index.js#L461)
+
+Returns a memoized matcher function from the given glob `pattern` and `options`. The returned function takes a string to match as its only argument and returns true if the string is a match.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed.
+* `returns` **{Function}**: Returns a matcher function.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.matcher(pattern[, options]);
+
+var isMatch = mm.matcher('*.!(*a)');
+console.log(isMatch('a.a'));
+//=> false
+console.log(isMatch('a.b'));
+//=> true
+```
+
+### [.capture](index.js#L536)
+
+Returns an array of matches captured by `pattern` in `string, or`null` if the pattern did not match.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `string` **{String}**: String to match
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.capture(pattern, string[, options]);
+
+console.log(mm.capture('test/*.js', 'test/foo.js'));
+//=> ['foo']
+console.log(mm.capture('test/*.js', 'foo/bar.css'));
+//=> null
+```
+
+### [.makeRe](index.js#L571)
+
+Create a regular expression from the given glob `pattern`.
+
+**Params**
+
+* `pattern` **{String}**: A glob pattern to convert to regex.
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed.
+* `returns` **{RegExp}**: Returns a regex created from the given pattern.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.makeRe(pattern[, options]);
+
+console.log(mm.makeRe('*.js'));
+//=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
+```
+
+### [.braces](index.js#L618)
+
+Expand the given brace `pattern`.
+
+**Params**
+
+* `pattern` **{String}**: String with brace pattern to expand.
+* `options` **{Object}**: Any [options](#options) to change how expansion is performed. See the [braces](https://github.com/micromatch/braces) library for all available options.
+* `returns` **{Array}**
+
+**Example**
+
+```js
+var mm = require('micromatch');
+console.log(mm.braces('foo/{a,b}/bar'));
+//=> ['foo/(a|b)/bar']
+
+console.log(mm.braces('foo/{a,b}/bar', {expand: true}));
+//=> ['foo/(a|b)/bar']
+```
+
+### [.create](index.js#L685)
+
+Parses the given glob `pattern` and returns an array of abstract syntax trees (ASTs), with the compiled `output` and optional source `map` on each AST.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern to parse and compile.
+* `options` **{Object}**: Any [options](#options) to change how parsing and compiling is performed.
+* `returns` **{Object}**: Returns an object with the parsed AST, compiled string and optional source map.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.create(pattern[, options]);
+
+console.log(mm.create('abc/*.js'));
+// [{ options: { source: 'string', sourcemap: true },
+// state: {},
+// compilers:
+// { ... },
+// output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js',
+// ast:
+// { type: 'root',
+// errors: [],
+// nodes:
+// [ ... ],
+// dot: false,
+// input: 'abc/*.js' },
+// parsingErrors: [],
+// map:
+// { version: 3,
+// sources: [ 'string' ],
+// names: [],
+// mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE',
+// sourcesContent: [ 'abc/*.js' ] },
+// position: { line: 1, column: 28 },
+// content: {},
+// files: {},
+// idx: 6 }]
+```
+
+### [.parse](index.js#L732)
+
+Parse the given `str` with the given `options`.
+
+**Params**
+
+* `str` **{String}**
+* `options` **{Object}**
+* `returns` **{Object}**: Returns an AST
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.parse(pattern[, options]);
+
+var ast = mm.parse('a/{b,c}/d');
+console.log(ast);
+// { type: 'root',
+// errors: [],
+// input: 'a/{b,c}/d',
+// nodes:
+// [ { type: 'bos', val: '' },
+// { type: 'text', val: 'a/' },
+// { type: 'brace',
+// nodes:
+// [ { type: 'brace.open', val: '{' },
+// { type: 'text', val: 'b,c' },
+// { type: 'brace.close', val: '}' } ] },
+// { type: 'text', val: '/d' },
+// { type: 'eos', val: '' } ] }
+```
+
+### [.compile](index.js#L780)
+
+Compile the given `ast` or string with the given `options`.
+
+**Params**
+
+* `ast` **{Object|String}**
+* `options` **{Object}**
+* `returns` **{Object}**: Returns an object that has an `output` property with the compiled string.
+
+**Example**
+
+```js
+var mm = require('micromatch');
+mm.compile(ast[, options]);
+
+var ast = mm.parse('a/{b,c}/d');
+console.log(mm.compile(ast));
+// { options: { source: 'string' },
+// state: {},
+// compilers:
+// { eos: [Function],
+// noop: [Function],
+// bos: [Function],
+// brace: [Function],
+// 'brace.open': [Function],
+// text: [Function],
+// 'brace.close': [Function] },
+// output: [ 'a/(b|c)/d' ],
+// ast:
+// { ... },
+// parsingErrors: [] }
+```
+
+### [.clearCache](index.js#L801)
+
+Clear the regex cache.
+
+**Example**
+
+```js
+mm.clearCache();
+```
+
+## Options
+
+* [basename](#optionsbasename)
+* [bash](#optionsbash)
+* [cache](#optionscache)
+* [dot](#optionsdot)
+* [failglob](#optionsfailglob)
+* [ignore](#optionsignore)
+* [matchBase](#optionsmatchBase)
+* [nobrace](#optionsnobrace)
+* [nocase](#optionsnocase)
+* [nodupes](#optionsnodupes)
+* [noext](#optionsnoext)
+* [noglobstar](#optionsnoglobstar)
+* [nonull](#optionsnonull)
+* [nullglob](#optionsnullglob)
+* [snapdragon](#optionssnapdragon)
+* [sourcemap](#optionssourcemap)
+* [unescape](#optionsunescape)
+* [unixify](#optionsunixify)
+
+### options.basename
+
+Allow glob patterns without slashes to match a file path based on its basename. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `matchBase`.
+
+**Type**: `Boolean`
+
+**Default**: `false`
+
+**Example**
+
+```js
+mm(['a/b.js', 'a/c.md'], '*.js');
+//=> []
+
+mm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true});
+//=> ['a/b.js']
+```
+
+### options.bash
+
+Enabled by default, this option enforces bash-like behavior with stars immediately following a bracket expression. Bash bracket expressions are similar to regex character classes, but unlike regex, a star following a bracket expression **does not repeat the bracketed characters**. Instead, the star is treated the same as an other star.
+
+**Type**: `Boolean`
+
+**Default**: `true`
+
+**Example**
+
+```js
+var files = ['abc', 'ajz'];
+console.log(mm(files, '[a-c]*'));
+//=> ['abc', 'ajz']
+
+console.log(mm(files, '[a-c]*', {bash: false}));
+```
+
+### options.cache
+
+Disable regex and function memoization.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.dot
+
+Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `dot`.
+
+**Type**: `Boolean`
+
+**Default**: `false`
+
+### options.failglob
+
+Similar to the `--failglob` behavior in Bash, throws an error when no matches are found.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.ignore
+
+String or array of glob patterns to match files to ignore.
+
+**Type**: `String|Array`
+
+**Default**: `undefined`
+
+### options.matchBase
+
+Alias for [options.basename](#options-basename).
+
+### options.nobrace
+
+Disable expansion of brace patterns. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nobrace`.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+See [braces](https://github.com/micromatch/braces) for more information about extended brace expansion.
+
+### options.nocase
+
+Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch).
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.nodupes
+
+Remove duplicate elements from the result array.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Example**
+
+Example of using the `unescape` and `nodupes` options together:
+
+```js
+mm.match(['a/b/c', 'a/b/c'], 'a/b/c');
+//=> ['a/b/c', 'a/b/c']
+
+mm.match(['a/b/c', 'a/b/c'], 'a/b/c', {nodupes: true});
+//=> ['abc']
+```
+
+### options.noext
+
+Disable extglob support, so that extglobs are regarded as literal characters.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Examples**
+
+```js
+mm(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)');
+//=> ['a/b', 'a/!(z)']
+
+mm(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)', {noext: true});
+//=> ['a/!(z)'] (matches only as literal characters)
+```
+
+### options.nonegate
+
+Disallow negation (`!`) patterns, and treat leading `!` as a literal character to match.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.noglobstar
+
+Disable matching with globstars (`**`).
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+```js
+mm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**');
+//=> ['a/b', 'a/b/c', 'a/b/c/d']
+
+mm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**', {noglobstar: true});
+//=> ['a/b']
+```
+
+### options.nonull
+
+Alias for [options.nullglob](#options-nullglob).
+
+### options.nullglob
+
+If `true`, when no matches are found the actual (arrayified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nonull`.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+### options.snapdragon
+
+Pass your own instance of [snapdragon](https://github.com/jonschlinkert/snapdragon), to customize parsers or compilers.
+
+**Type**: `Object`
+
+**Default**: `undefined`
+
+### options.sourcemap
+
+Generate a source map by enabling the `sourcemap` option with the `.parse`, `.compile`, or `.create` methods.
+
+_(Note that sourcemaps are currently not enabled for brace patterns)_
+
+**Examples**
+
+``` js
+var mm = require('micromatch');
+var pattern = '*(*(of*(a)x)z)';
+
+var res = mm.create('abc/*.js', {sourcemap: true});
+console.log(res.map);
+// { version: 3,
+// sources: [ 'string' ],
+// names: [],
+// mappings: 'AAAA,GAAG,EAAC,iBAAC,EAAC,EAAE',
+// sourcesContent: [ 'abc/*.js' ] }
+
+var ast = mm.parse('abc/**/*.js');
+var res = mm.compile(ast, {sourcemap: true});
+console.log(res.map);
+// { version: 3,
+// sources: [ 'string' ],
+// names: [],
+// mappings: 'AAAA,GAAG,EAAC,2BAAE,EAAC,iBAAC,EAAC,EAAE',
+// sourcesContent: [ 'abc/**/*.js' ] }
+
+var ast = mm.parse(pattern);
+var res = mm.compile(ast, {sourcemap: true});
+console.log(res.map);
+// { version: 3,
+// sources: [ 'string' ],
+// names: [],
+// mappings: 'AAAA,CAAE,CAAE,EAAE,CAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC',
+// sourcesContent: [ '*(*(of*(a)x)z)' ] }
+```
+
+### options.unescape
+
+Remove backslashes from returned matches.
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Example**
+
+In this example we want to match a literal `*`:
+
+```js
+mm.match(['abc', 'a\\*c'], 'a\\*c');
+//=> ['a\\*c']
+
+mm.match(['abc', 'a\\*c'], 'a\\*c', {unescape: true});
+//=> ['a*c']
+```
+
+### options.unixify
+
+Convert path separators on returned files to posix/unix-style forward slashes.
+
+**Type**: `Boolean`
+
+**Default**: `true` on windows, `false` everywhere else
+
+**Example**
+
+```js
+mm.match(['a\\b\\c'], 'a/**');
+//=> ['a/b/c']
+
+mm.match(['a\\b\\c'], {unixify: false});
+//=> ['a\\b\\c']
+```
+
+## Extended globbing
+
+Micromatch also supports extended globbing features.
+
+### extglobs
+
+Extended globbing, as described by the bash man page:
+
+| **pattern** | **regex equivalent** | **description** |
+| --- | --- | --- |
+| `?(pattern)` | `(pattern)?` | Matches zero or one occurrence of the given patterns |
+| `*(pattern)` | `(pattern)*` | Matches zero or more occurrences of the given patterns |
+| `+(pattern)` | `(pattern)+` | Matches one or more occurrences of the given patterns |
+| `@(pattern)` | `(pattern)` * | Matches one of the given patterns |
+| `!(pattern)` | N/A (equivalent regex is much more complicated) | Matches anything except one of the given patterns |
+
+* Note that `@` isn't a RegEx character.
+
+Powered by [extglob](https://github.com/micromatch/extglob). Visit that library for the full range of options or to report extglob related issues.
+
+### braces
+
+Brace patterns can be used to match specific ranges or sets of characters. For example, the pattern `*/{1..3}/*` would match any of following strings:
+
+```
+foo/1/bar
+foo/2/bar
+foo/3/bar
+baz/1/qux
+baz/2/qux
+baz/3/qux
+```
+
+Visit [braces](https://github.com/micromatch/braces) to see the full range of features and options related to brace expansion, or to create brace matching or expansion related issues.
+
+### regex character classes
+
+Given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:
+
+* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']`
+* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']`
+* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']`
+* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']`
+
+Learn about [regex character classes](http://www.regular-expressions.info/charclass.html).
+
+### regex groups
+
+Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:
+
+* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']`
+* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']`
+* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']`
+
+As with regex, parens can be nested, so patterns like `((a|b)|c)/b` will work. Although brace expansion might be friendlier to use, depending on preference.
+
+### POSIX bracket expressions
+
+POSIX brackets are intended to be more user-friendly than regex character classes. This of course is in the eye of the beholder.
+
+**Example**
+
+```js
+mm.isMatch('a1', '[[:alpha:][:digit:]]');
+//=> true
+
+mm.isMatch('a1', '[[:alpha:][:alpha:]]');
+//=> false
+```
+
+See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about bracket expressions.
+
+***
+
+## Notes
+
+### Bash 4.3 parity
+
+Whenever possible matching behavior is based on behavior Bash 4.3, which is mostly consistent with minimatch.
+
+However, it's suprising how many edge cases and rabbit holes there are with glob matching, and since there is no real glob specification, and micromatch is more accurate than both Bash and minimatch, there are cases where best-guesses were made for behavior. In a few cases where Bash had no answers, we used wildmatch (used by git) as a fallback.
+
+### Backslashes
+
+There is an important, notable difference between minimatch and micromatch _in regards to how backslashes are handled_ in glob patterns.
+
+* Micromatch exclusively and explicitly reserves backslashes for escaping characters in a glob pattern, even on windows. This is consistent with bash behavior.
+* Minimatch converts all backslashes to forward slashes, which means you can't use backslashes to escape any characters in your glob patterns.
+
+We made this decision for micromatch for a couple of reasons:
+
+* consistency with bash conventions.
+* glob patterns are not filepaths. They are a type of [regular language](https://en.wikipedia.org/wiki/Regular_language) that is converted to a JavaScript regular expression. Thus, when forward slashes are defined in a glob pattern, the resulting regular expression will match windows or POSIX path separators just fine.
+
+**A note about joining paths to globs**
+
+Note that when you pass something like `path.join('foo', '*')` to micromatch, you are creating a filepath and expecting it to still work as a glob pattern. This causes problems on windows, since the `path.sep` is `\\`.
+
+In other words, since `\\` is reserved as an escape character in globs, on windows `path.join('foo', '*')` would result in `foo\\*`, which tells micromatch to match `*` as a literal character. This is the same behavior as bash.
+
+## Contributing
+
+All contributions are welcome! Please read [the contributing guide](.github/contributing.md) to get started.
+
+**Bug reports**
+
+Please create an issue if you encounter a bug or matching behavior that doesn't seem correct. If you find a matching-related issue, please:
+
+* [research existing issues first](../../issues) (open and closed)
+* visit the [GNU Bash documentation](https://www.gnu.org/software/bash/manual/) to see how Bash deals with the pattern
+* visit the [minimatch](https://github.com/isaacs/minimatch) documentation to cross-check expected behavior in node.js
+* if all else fails, since there is no real specification for globs we will probably need to discuss expected behavior and decide how to resolve it. which means any detail you can provide to help with this discussion would be greatly appreciated.
+
+**Platform issues**
+
+It's important to us that micromatch work consistently on all platforms. If you encounter any platform-specific matching or path related issues, please let us know (pull requests are also greatly appreciated).
+
+## Benchmarks
+
+### Running benchmarks
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm run benchmark
+```
+
+### Latest results
+
+As of February 18, 2018 (longer bars are better):
+
+```sh
+# braces-globstar-large-list (485691 bytes)
+ micromatch ██████████████████████████████████████████████████ (517 ops/sec ±0.49%)
+ minimatch █ (18.92 ops/sec ±0.54%)
+ multimatch █ (18.94 ops/sec ±0.62%)
+
+ micromatch is faster by an avg. of 2,733%
+
+# braces-multiple (3362 bytes)
+ micromatch ██████████████████████████████████████████████████ (33,625 ops/sec ±0.45%)
+ minimatch (2.92 ops/sec ±3.26%)
+ multimatch (2.90 ops/sec ±2.76%)
+
+ micromatch is faster by an avg. of 1,156,935%
+
+# braces-range (727 bytes)
+ micromatch █████████████████████████████████████████████████ (155,220 ops/sec ±0.56%)
+ minimatch ██████ (20,186 ops/sec ±1.27%)
+ multimatch ██████ (19,809 ops/sec ±0.60%)
+
+ micromatch is faster by an avg. of 776%
+
+# braces-set (2858 bytes)
+ micromatch █████████████████████████████████████████████████ (24,354 ops/sec ±0.92%)
+ minimatch █████ (2,566 ops/sec ±0.56%)
+ multimatch ████ (2,431 ops/sec ±1.25%)
+
+ micromatch is faster by an avg. of 975%
+
+# globstar-large-list (485686 bytes)
+ micromatch █████████████████████████████████████████████████ (504 ops/sec ±0.45%)
+ minimatch ███ (33.36 ops/sec ±1.08%)
+ multimatch ███ (33.19 ops/sec ±1.35%)
+
+ micromatch is faster by an avg. of 1,514%
+
+# globstar-long-list (90647 bytes)
+ micromatch ██████████████████████████████████████████████████ (2,694 ops/sec ±1.08%)
+ minimatch ████████████████ (870 ops/sec ±1.09%)
+ multimatch ████████████████ (862 ops/sec ±0.84%)
+
+ micromatch is faster by an avg. of 311%
+
+# globstar-short-list (182 bytes)
+ micromatch ██████████████████████████████████████████████████ (328,921 ops/sec ±1.06%)
+ minimatch █████████ (64,808 ops/sec ±1.42%)
+ multimatch ████████ (57,991 ops/sec ±2.11%)
+
+ micromatch is faster by an avg. of 536%
+
+# no-glob (701 bytes)
+ micromatch █████████████████████████████████████████████████ (415,935 ops/sec ±0.36%)
+ minimatch ███████████ (92,730 ops/sec ±1.44%)
+ multimatch █████████ (81,958 ops/sec ±2.13%)
+
+ micromatch is faster by an avg. of 476%
+
+# star-basename-long (12339 bytes)
+ micromatch █████████████████████████████████████████████████ (7,963 ops/sec ±0.36%)
+ minimatch ███████████████████████████████ (5,072 ops/sec ±0.83%)
+ multimatch ███████████████████████████████ (5,028 ops/sec ±0.40%)
+
+ micromatch is faster by an avg. of 158%
+
+# star-basename-short (349 bytes)
+ micromatch ██████████████████████████████████████████████████ (269,552 ops/sec ±0.70%)
+ minimatch ██████████████████████ (122,457 ops/sec ±1.39%)
+ multimatch ████████████████████ (110,788 ops/sec ±1.99%)
+
+ micromatch is faster by an avg. of 231%
+
+# star-folder-long (19207 bytes)
+ micromatch █████████████████████████████████████████████████ (3,806 ops/sec ±0.38%)
+ minimatch ████████████████████████████ (2,204 ops/sec ±0.32%)
+ multimatch ██████████████████████████ (2,020 ops/sec ±1.07%)
+
+ micromatch is faster by an avg. of 180%
+
+# star-folder-short (551 bytes)
+ micromatch ██████████████████████████████████████████████████ (249,077 ops/sec ±0.40%)
+ minimatch ███████████ (59,431 ops/sec ±1.67%)
+ multimatch ███████████ (55,569 ops/sec ±1.43%)
+
+ micromatch is faster by an avg. of 433%
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.")
+* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.")
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
+* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/micromatch/nanomatch) | [homepage](https://github.com/micromatch/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 457 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 12 | [es128](https://github.com/es128) |
+| 8 | [doowb](https://github.com/doowb) |
+| 3 | [paulmillr](https://github.com/paulmillr) |
+| 2 | [TrySound](https://github.com/TrySound) |
+| 2 | [MartinKolarik](https://github.com/MartinKolarik) |
+| 2 | [charlike-old](https://github.com/charlike-old) |
+| 1 | [amilajack](https://github.com/amilajack) |
+| 1 | [mrmlnc](https://github.com/mrmlnc) |
+| 1 | [devongovett](https://github.com/devongovett) |
+| 1 | [DianeLooney](https://github.com/DianeLooney) |
+| 1 | [UltCombo](https://github.com/UltCombo) |
+| 1 | [tomByrer](https://github.com/tomByrer) |
+| 1 | [fidian](https://github.com/fidian) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on February 18, 2018._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/micromatch/index.js b/node_modules/anymatch/node_modules/micromatch/index.js
new file mode 100644
index 0000000000..fe02f2cb23
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/index.js
@@ -0,0 +1,877 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var util = require('util');
+var braces = require('braces');
+var toRegex = require('to-regex');
+var extend = require('extend-shallow');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./lib/compilers');
+var parsers = require('./lib/parsers');
+var cache = require('./lib/cache');
+var utils = require('./lib/utils');
+var MAX_LENGTH = 1024 * 64;
+
+/**
+ * The main function takes a list of strings and one or more
+ * glob patterns to use for matching.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm(list, patterns[, options]);
+ *
+ * console.log(mm(['a.js', 'a.txt'], ['*.js']));
+ * //=> [ 'a.js' ]
+ * ```
+ * @param {Array} `list` A list of strings to match
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Array} Returns an array of matches
+ * @summary false
+ * @api public
+ */
+
+function micromatch(list, patterns, options) {
+ patterns = utils.arrayify(patterns);
+ list = utils.arrayify(list);
+
+ var len = patterns.length;
+ if (list.length === 0 || len === 0) {
+ return [];
+ }
+
+ if (len === 1) {
+ return micromatch.match(list, patterns[0], options);
+ }
+
+ var omit = [];
+ var keep = [];
+ var idx = -1;
+
+ while (++idx < len) {
+ var pattern = patterns[idx];
+
+ if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 /* ! */) {
+ omit.push.apply(omit, micromatch.match(list, pattern.slice(1), options));
+ } else {
+ keep.push.apply(keep, micromatch.match(list, pattern, options));
+ }
+ }
+
+ var matches = utils.diff(keep, omit);
+ if (!options || options.nodupes !== false) {
+ return utils.unique(matches);
+ }
+
+ return matches;
+}
+
+/**
+ * Similar to the main function, but `pattern` must be a string.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.match(list, pattern[, options]);
+ *
+ * console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a'));
+ * //=> ['a.a', 'a.aa']
+ * ```
+ * @param {Array} `list` Array of strings to match
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Array} Returns an array of matches
+ * @api public
+ */
+
+micromatch.match = function(list, pattern, options) {
+ if (Array.isArray(pattern)) {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ var unixify = utils.unixify(options);
+ var isMatch = memoize('match', pattern, options, micromatch.matcher);
+ var matches = [];
+
+ list = utils.arrayify(list);
+ var len = list.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var ele = list[idx];
+ if (ele === pattern || isMatch(ele)) {
+ matches.push(utils.value(ele, unixify, options));
+ }
+ }
+
+ // if no options were passed, uniquify results and return
+ if (typeof options === 'undefined') {
+ return utils.unique(matches);
+ }
+
+ if (matches.length === 0) {
+ if (options.failglob === true) {
+ throw new Error('no matches found for "' + pattern + '"');
+ }
+ if (options.nonull === true || options.nullglob === true) {
+ return [options.unescape ? utils.unescape(pattern) : pattern];
+ }
+ }
+
+ // if `opts.ignore` was defined, diff ignored list
+ if (options.ignore) {
+ matches = micromatch.not(matches, options.ignore, options);
+ }
+
+ return options.nodupes !== false ? utils.unique(matches) : matches;
+};
+
+/**
+ * Returns true if the specified `string` matches the given glob `pattern`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.isMatch(string, pattern[, options]);
+ *
+ * console.log(mm.isMatch('a.a', '*.a'));
+ * //=> true
+ * console.log(mm.isMatch('a.b', '*.a'));
+ * //=> false
+ * ```
+ * @param {String} `string` String to match
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if the string matches the glob pattern.
+ * @api public
+ */
+
+micromatch.isMatch = function(str, pattern, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string: "' + util.inspect(str) + '"');
+ }
+
+ if (isEmptyString(str) || isEmptyString(pattern)) {
+ return false;
+ }
+
+ var equals = utils.equalsPattern(options);
+ if (equals(str)) {
+ return true;
+ }
+
+ var isMatch = memoize('isMatch', pattern, options, micromatch.matcher);
+ return isMatch(str);
+};
+
+/**
+ * Returns true if some of the strings in the given `list` match any of the
+ * given glob `patterns`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.some(list, patterns[, options]);
+ *
+ * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+ * // true
+ * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
+ * // false
+ * ```
+ * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.some = function(list, patterns, options) {
+ if (typeof list === 'string') {
+ list = [list];
+ }
+ for (var i = 0; i < list.length; i++) {
+ if (micromatch(list[i], patterns, options).length === 1) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Returns true if every string in the given `list` matches
+ * any of the given glob `patterns`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.every(list, patterns[, options]);
+ *
+ * console.log(mm.every('foo.js', ['foo.js']));
+ * // true
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
+ * // true
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
+ * // false
+ * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
+ * // false
+ * ```
+ * @param {String|Array} `list` The string or array of strings to test.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.every = function(list, patterns, options) {
+ if (typeof list === 'string') {
+ list = [list];
+ }
+ for (var i = 0; i < list.length; i++) {
+ if (micromatch(list[i], patterns, options).length !== 1) {
+ return false;
+ }
+ }
+ return true;
+};
+
+/**
+ * Returns true if **any** of the given glob `patterns`
+ * match the specified `string`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.any(string, patterns[, options]);
+ *
+ * console.log(mm.any('a.a', ['b.*', '*.a']));
+ * //=> true
+ * console.log(mm.any('a.a', 'b.*'));
+ * //=> false
+ * ```
+ * @param {String|Array} `str` The string to test.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.any = function(str, patterns, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string: "' + util.inspect(str) + '"');
+ }
+
+ if (isEmptyString(str) || isEmptyString(patterns)) {
+ return false;
+ }
+
+ if (typeof patterns === 'string') {
+ patterns = [patterns];
+ }
+
+ for (var i = 0; i < patterns.length; i++) {
+ if (micromatch.isMatch(str, patterns[i], options)) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Returns true if **all** of the given `patterns` match
+ * the specified string.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.all(string, patterns[, options]);
+ *
+ * console.log(mm.all('foo.js', ['foo.js']));
+ * // true
+ *
+ * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
+ * // false
+ *
+ * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
+ * // true
+ *
+ * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
+ * // true
+ * ```
+ * @param {String|Array} `str` The string to test.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+micromatch.all = function(str, patterns, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string: "' + util.inspect(str) + '"');
+ }
+ if (typeof patterns === 'string') {
+ patterns = [patterns];
+ }
+ for (var i = 0; i < patterns.length; i++) {
+ if (!micromatch.isMatch(str, patterns[i], options)) {
+ return false;
+ }
+ }
+ return true;
+};
+
+/**
+ * Returns a list of strings that _**do not match any**_ of the given `patterns`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.not(list, patterns[, options]);
+ *
+ * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
+ * //=> ['b.b', 'c.c']
+ * ```
+ * @param {Array} `list` Array of strings to match.
+ * @param {String|Array} `patterns` One or more glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Array} Returns an array of strings that **do not match** the given patterns.
+ * @api public
+ */
+
+micromatch.not = function(list, patterns, options) {
+ var opts = extend({}, options);
+ var ignore = opts.ignore;
+ delete opts.ignore;
+
+ var unixify = utils.unixify(opts);
+ list = utils.arrayify(list).map(unixify);
+
+ var matches = utils.diff(list, micromatch(list, patterns, opts));
+ if (ignore) {
+ matches = utils.diff(matches, micromatch(list, ignore));
+ }
+
+ return opts.nodupes !== false ? utils.unique(matches) : matches;
+};
+
+/**
+ * Returns true if the given `string` contains the given pattern. Similar
+ * to [.isMatch](#isMatch) but the pattern can match any part of the string.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.contains(string, pattern[, options]);
+ *
+ * console.log(mm.contains('aa/bb/cc', '*b'));
+ * //=> true
+ * console.log(mm.contains('aa/bb/cc', '*d'));
+ * //=> false
+ * ```
+ * @param {String} `str` The string to match.
+ * @param {String|Array} `patterns` Glob pattern to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns true if the patter matches any part of `str`.
+ * @api public
+ */
+
+micromatch.contains = function(str, patterns, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string: "' + util.inspect(str) + '"');
+ }
+
+ if (typeof patterns === 'string') {
+ if (isEmptyString(str) || isEmptyString(patterns)) {
+ return false;
+ }
+
+ var equals = utils.equalsPattern(patterns, options);
+ if (equals(str)) {
+ return true;
+ }
+ var contains = utils.containsPattern(patterns, options);
+ if (contains(str)) {
+ return true;
+ }
+ }
+
+ var opts = extend({}, options, {contains: true});
+ return micromatch.any(str, patterns, opts);
+};
+
+/**
+ * Returns true if the given pattern and options should enable
+ * the `matchBase` option.
+ * @return {Boolean}
+ * @api private
+ */
+
+micromatch.matchBase = function(pattern, options) {
+ if (pattern && pattern.indexOf('/') !== -1 || !options) return false;
+ return options.basename === true || options.matchBase === true;
+};
+
+/**
+ * Filter the keys of the given object with the given `glob` pattern
+ * and `options`. Does not attempt to match nested keys. If you need this feature,
+ * use [glob-object][] instead.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.matchKeys(object, patterns[, options]);
+ *
+ * var obj = { aa: 'a', ab: 'b', ac: 'c' };
+ * console.log(mm.matchKeys(obj, '*b'));
+ * //=> { ab: 'b' }
+ * ```
+ * @param {Object} `object` The object with keys to filter.
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Object} Returns an object with only keys that match the given patterns.
+ * @api public
+ */
+
+micromatch.matchKeys = function(obj, patterns, options) {
+ if (!utils.isObject(obj)) {
+ throw new TypeError('expected the first argument to be an object');
+ }
+ var keys = micromatch(Object.keys(obj), patterns, options);
+ return utils.pick(obj, keys);
+};
+
+/**
+ * Returns a memoized matcher function from the given glob `pattern` and `options`.
+ * The returned function takes a string to match as its only argument and returns
+ * true if the string is a match.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.matcher(pattern[, options]);
+ *
+ * var isMatch = mm.matcher('*.!(*a)');
+ * console.log(isMatch('a.a'));
+ * //=> false
+ * console.log(isMatch('a.b'));
+ * //=> true
+ * ```
+ * @param {String} `pattern` Glob pattern
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed.
+ * @return {Function} Returns a matcher function.
+ * @api public
+ */
+
+micromatch.matcher = function matcher(pattern, options) {
+ if (Array.isArray(pattern)) {
+ return compose(pattern, options, matcher);
+ }
+
+ // if pattern is a regex
+ if (pattern instanceof RegExp) {
+ return test(pattern);
+ }
+
+ // if pattern is invalid
+ if (!utils.isString(pattern)) {
+ throw new TypeError('expected pattern to be an array, string or regex');
+ }
+
+ // if pattern is a non-glob string
+ if (!utils.hasSpecialChars(pattern)) {
+ if (options && options.nocase === true) {
+ pattern = pattern.toLowerCase();
+ }
+ return utils.matchPath(pattern, options);
+ }
+
+ // if pattern is a glob string
+ var re = micromatch.makeRe(pattern, options);
+
+ // if `options.matchBase` or `options.basename` is defined
+ if (micromatch.matchBase(pattern, options)) {
+ return utils.matchBasename(re, options);
+ }
+
+ function test(regex) {
+ var equals = utils.equalsPattern(options);
+ var unixify = utils.unixify(options);
+
+ return function(str) {
+ if (equals(str)) {
+ return true;
+ }
+
+ if (regex.test(unixify(str))) {
+ return true;
+ }
+ return false;
+ };
+ }
+
+ var fn = test(re);
+ Object.defineProperty(fn, 'result', {
+ configurable: true,
+ enumerable: false,
+ value: re.result
+ });
+ return fn;
+};
+
+/**
+ * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.capture(pattern, string[, options]);
+ *
+ * console.log(mm.capture('test/*.js', 'test/foo.js'));
+ * //=> ['foo']
+ * console.log(mm.capture('test/*.js', 'foo/bar.css'));
+ * //=> null
+ * ```
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {String} `string` String to match
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+ * @api public
+ */
+
+micromatch.capture = function(pattern, str, options) {
+ var re = micromatch.makeRe(pattern, extend({capture: true}, options));
+ var unixify = utils.unixify(options);
+
+ function match() {
+ return function(string) {
+ var match = re.exec(unixify(string));
+ if (!match) {
+ return null;
+ }
+
+ return match.slice(1);
+ };
+ }
+
+ var capture = memoize('capture', pattern, options, match);
+ return capture(str);
+};
+
+/**
+ * Create a regular expression from the given glob `pattern`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.makeRe(pattern[, options]);
+ *
+ * console.log(mm.makeRe('*.js'));
+ * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
+ * ```
+ * @param {String} `pattern` A glob pattern to convert to regex.
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed.
+ * @return {RegExp} Returns a regex created from the given pattern.
+ * @api public
+ */
+
+micromatch.makeRe = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ if (pattern.length > MAX_LENGTH) {
+ throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters');
+ }
+
+ function makeRe() {
+ var result = micromatch.create(pattern, options);
+ var ast_array = [];
+ var output = result.map(function(obj) {
+ obj.ast.state = obj.state;
+ ast_array.push(obj.ast);
+ return obj.output;
+ });
+
+ var regex = toRegex(output.join('|'), options);
+ Object.defineProperty(regex, 'result', {
+ configurable: true,
+ enumerable: false,
+ value: ast_array
+ });
+ return regex;
+ }
+
+ return memoize('makeRe', pattern, options, makeRe);
+};
+
+/**
+ * Expand the given brace `pattern`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * console.log(mm.braces('foo/{a,b}/bar'));
+ * //=> ['foo/(a|b)/bar']
+ *
+ * console.log(mm.braces('foo/{a,b}/bar', {expand: true}));
+ * //=> ['foo/(a|b)/bar']
+ * ```
+ * @param {String} `pattern` String with brace pattern to expand.
+ * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
+ * @return {Array}
+ * @api public
+ */
+
+micromatch.braces = function(pattern, options) {
+ if (typeof pattern !== 'string' && !Array.isArray(pattern)) {
+ throw new TypeError('expected pattern to be an array or string');
+ }
+
+ function expand() {
+ if (options && options.nobrace === true || !/\{.*\}/.test(pattern)) {
+ return utils.arrayify(pattern);
+ }
+ return braces(pattern, options);
+ }
+
+ return memoize('braces', pattern, options, expand);
+};
+
+/**
+ * Proxy to the [micromatch.braces](#method), for parity with
+ * minimatch.
+ */
+
+micromatch.braceExpand = function(pattern, options) {
+ var opts = extend({}, options, {expand: true});
+ return micromatch.braces(pattern, opts);
+};
+
+/**
+ * Parses the given glob `pattern` and returns an array of abstract syntax
+ * trees (ASTs), with the compiled `output` and optional source `map` on
+ * each AST.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.create(pattern[, options]);
+ *
+ * console.log(mm.create('abc/*.js'));
+ * // [{ options: { source: 'string', sourcemap: true },
+ * // state: {},
+ * // compilers:
+ * // { ... },
+ * // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js',
+ * // ast:
+ * // { type: 'root',
+ * // errors: [],
+ * // nodes:
+ * // [ ... ],
+ * // dot: false,
+ * // input: 'abc/*.js' },
+ * // parsingErrors: [],
+ * // map:
+ * // { version: 3,
+ * // sources: [ 'string' ],
+ * // names: [],
+ * // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE',
+ * // sourcesContent: [ 'abc/*.js' ] },
+ * // position: { line: 1, column: 28 },
+ * // content: {},
+ * // files: {},
+ * // idx: 6 }]
+ * ```
+ * @param {String} `pattern` Glob pattern to parse and compile.
+ * @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed.
+ * @return {Object} Returns an object with the parsed AST, compiled string and optional source map.
+ * @api public
+ */
+
+micromatch.create = function(pattern, options) {
+ return memoize('create', pattern, options, function() {
+ function create(str, opts) {
+ return micromatch.compile(micromatch.parse(str, opts), opts);
+ }
+
+ pattern = micromatch.braces(pattern, options);
+ var len = pattern.length;
+ var idx = -1;
+ var res = [];
+
+ while (++idx < len) {
+ res.push(create(pattern[idx], options));
+ }
+ return res;
+ });
+};
+
+/**
+ * Parse the given `str` with the given `options`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.parse(pattern[, options]);
+ *
+ * var ast = mm.parse('a/{b,c}/d');
+ * console.log(ast);
+ * // { type: 'root',
+ * // errors: [],
+ * // input: 'a/{b,c}/d',
+ * // nodes:
+ * // [ { type: 'bos', val: '' },
+ * // { type: 'text', val: 'a/' },
+ * // { type: 'brace',
+ * // nodes:
+ * // [ { type: 'brace.open', val: '{' },
+ * // { type: 'text', val: 'b,c' },
+ * // { type: 'brace.close', val: '}' } ] },
+ * // { type: 'text', val: '/d' },
+ * // { type: 'eos', val: '' } ] }
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {Object} Returns an AST
+ * @api public
+ */
+
+micromatch.parse = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ function parse() {
+ var snapdragon = utils.instantiate(null, options);
+ parsers(snapdragon, options);
+
+ var ast = snapdragon.parse(pattern, options);
+ utils.define(ast, 'snapdragon', snapdragon);
+ ast.input = pattern;
+ return ast;
+ }
+
+ return memoize('parse', pattern, options, parse);
+};
+
+/**
+ * Compile the given `ast` or string with the given `options`.
+ *
+ * ```js
+ * var mm = require('micromatch');
+ * mm.compile(ast[, options]);
+ *
+ * var ast = mm.parse('a/{b,c}/d');
+ * console.log(mm.compile(ast));
+ * // { options: { source: 'string' },
+ * // state: {},
+ * // compilers:
+ * // { eos: [Function],
+ * // noop: [Function],
+ * // bos: [Function],
+ * // brace: [Function],
+ * // 'brace.open': [Function],
+ * // text: [Function],
+ * // 'brace.close': [Function] },
+ * // output: [ 'a/(b|c)/d' ],
+ * // ast:
+ * // { ... },
+ * // parsingErrors: [] }
+ * ```
+ * @param {Object|String} `ast`
+ * @param {Object} `options`
+ * @return {Object} Returns an object that has an `output` property with the compiled string.
+ * @api public
+ */
+
+micromatch.compile = function(ast, options) {
+ if (typeof ast === 'string') {
+ ast = micromatch.parse(ast, options);
+ }
+
+ return memoize('compile', ast.input, options, function() {
+ var snapdragon = utils.instantiate(ast, options);
+ compilers(snapdragon, options);
+ return snapdragon.compile(ast, options);
+ });
+};
+
+/**
+ * Clear the regex cache.
+ *
+ * ```js
+ * mm.clearCache();
+ * ```
+ * @api public
+ */
+
+micromatch.clearCache = function() {
+ micromatch.cache.caches = {};
+};
+
+/**
+ * Returns true if the given value is effectively an empty string
+ */
+
+function isEmptyString(val) {
+ return String(val) === '' || String(val) === './';
+}
+
+/**
+ * Compose a matcher function with the given patterns.
+ * This allows matcher functions to be compiled once and
+ * called multiple times.
+ */
+
+function compose(patterns, options, matcher) {
+ var matchers;
+
+ return memoize('compose', String(patterns), options, function() {
+ return function(file) {
+ // delay composition until it's invoked the first time,
+ // after that it won't be called again
+ if (!matchers) {
+ matchers = [];
+ for (var i = 0; i < patterns.length; i++) {
+ matchers.push(matcher(patterns[i], options));
+ }
+ }
+
+ var len = matchers.length;
+ while (len--) {
+ if (matchers[len](file) === true) {
+ return true;
+ }
+ }
+ return false;
+ };
+ });
+}
+
+/**
+ * Memoize a generated regex or function. A unique key is generated
+ * from the `type` (usually method name), the `pattern`, and
+ * user-defined options.
+ */
+
+function memoize(type, pattern, options, fn) {
+ var key = utils.createKey(type + '=' + pattern, options);
+
+ if (options && options.cache === false) {
+ return fn(pattern, options);
+ }
+
+ if (cache.has(type, key)) {
+ return cache.get(type, key);
+ }
+
+ var val = fn(pattern, options);
+ cache.set(type, key, val);
+ return val;
+}
+
+/**
+ * Expose compiler, parser and cache on `micromatch`
+ */
+
+micromatch.compilers = compilers;
+micromatch.parsers = parsers;
+micromatch.caches = cache.caches;
+
+/**
+ * Expose `micromatch`
+ * @type {Function}
+ */
+
+module.exports = micromatch;
diff --git a/node_modules/anymatch/node_modules/micromatch/lib/cache.js b/node_modules/anymatch/node_modules/micromatch/lib/cache.js
new file mode 100644
index 0000000000..fffc4c17a6
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/lib/cache.js
@@ -0,0 +1 @@
+module.exports = new (require('fragment-cache'))();
diff --git a/node_modules/anymatch/node_modules/micromatch/lib/compilers.js b/node_modules/anymatch/node_modules/micromatch/lib/compilers.js
new file mode 100644
index 0000000000..85cda4f88f
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/lib/compilers.js
@@ -0,0 +1,77 @@
+'use strict';
+
+var nanomatch = require('nanomatch');
+var extglob = require('extglob');
+
+module.exports = function(snapdragon) {
+ var compilers = snapdragon.compiler.compilers;
+ var opts = snapdragon.options;
+
+ // register nanomatch compilers
+ snapdragon.use(nanomatch.compilers);
+
+ // get references to some specific nanomatch compilers before they
+ // are overridden by the extglob and/or custom compilers
+ var escape = compilers.escape;
+ var qmark = compilers.qmark;
+ var slash = compilers.slash;
+ var star = compilers.star;
+ var text = compilers.text;
+ var plus = compilers.plus;
+ var dot = compilers.dot;
+
+ // register extglob compilers or escape exglobs if disabled
+ if (opts.extglob === false || opts.noext === true) {
+ snapdragon.compiler.use(escapeExtglobs);
+ } else {
+ snapdragon.use(extglob.compilers);
+ }
+
+ snapdragon.use(function() {
+ this.options.star = this.options.star || function(/*node*/) {
+ return '[^\\\\/]*?';
+ };
+ });
+
+ // custom micromatch compilers
+ snapdragon.compiler
+
+ // reset referenced compiler
+ .set('dot', dot)
+ .set('escape', escape)
+ .set('plus', plus)
+ .set('slash', slash)
+ .set('qmark', qmark)
+ .set('star', star)
+ .set('text', text);
+};
+
+function escapeExtglobs(compiler) {
+ compiler.set('paren', function(node) {
+ var val = '';
+ visit(node, function(tok) {
+ if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val;
+ });
+ return this.emit(val, node);
+ });
+
+ /**
+ * Visit `node` with the given `fn`
+ */
+
+ function visit(node, fn) {
+ return node.nodes ? mapVisit(node.nodes, fn) : fn(node);
+ }
+
+ /**
+ * Map visit over array of `nodes`.
+ */
+
+ function mapVisit(nodes, fn) {
+ var len = nodes.length;
+ var idx = -1;
+ while (++idx < len) {
+ visit(nodes[idx], fn);
+ }
+ }
+}
diff --git a/node_modules/anymatch/node_modules/micromatch/lib/parsers.js b/node_modules/anymatch/node_modules/micromatch/lib/parsers.js
new file mode 100644
index 0000000000..f80498ceef
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/lib/parsers.js
@@ -0,0 +1,83 @@
+'use strict';
+
+var extglob = require('extglob');
+var nanomatch = require('nanomatch');
+var regexNot = require('regex-not');
+var toRegex = require('to-regex');
+var not;
+
+/**
+ * Characters to use in negation regex (we want to "not" match
+ * characters that are matched by other parsers)
+ */
+
+var TEXT = '([!@*?+]?\\(|\\)|\\[:?(?=.*?:?\\])|:?\\]|[*+?!^$.\\\\/])+';
+var createNotRegex = function(opts) {
+ return not || (not = textRegex(TEXT));
+};
+
+/**
+ * Parsers
+ */
+
+module.exports = function(snapdragon) {
+ var parsers = snapdragon.parser.parsers;
+
+ // register nanomatch parsers
+ snapdragon.use(nanomatch.parsers);
+
+ // get references to some specific nanomatch parsers before they
+ // are overridden by the extglob and/or parsers
+ var escape = parsers.escape;
+ var slash = parsers.slash;
+ var qmark = parsers.qmark;
+ var plus = parsers.plus;
+ var star = parsers.star;
+ var dot = parsers.dot;
+
+ // register extglob parsers
+ snapdragon.use(extglob.parsers);
+
+ // custom micromatch parsers
+ snapdragon.parser
+ .use(function() {
+ // override "notRegex" created in nanomatch parser
+ this.notRegex = /^\!+(?!\()/;
+ })
+ // reset the referenced parsers
+ .capture('escape', escape)
+ .capture('slash', slash)
+ .capture('qmark', qmark)
+ .capture('star', star)
+ .capture('plus', plus)
+ .capture('dot', dot)
+
+ /**
+ * Override `text` parser
+ */
+
+ .capture('text', function() {
+ if (this.isInside('bracket')) return;
+ var pos = this.position();
+ var m = this.match(createNotRegex(this.options));
+ if (!m || !m[0]) return;
+
+ // escape regex boundary characters and simple brackets
+ var val = m[0].replace(/([[\]^$])/g, '\\$1');
+
+ return pos({
+ type: 'text',
+ val: val
+ });
+ });
+};
+
+/**
+ * Create text regex
+ */
+
+function textRegex(pattern) {
+ var notStr = regexNot.create(pattern, {contains: true, strictClose: false});
+ var prefix = '(?:[\\^]|\\\\|';
+ return toRegex(prefix + notStr + ')', {strictClose: false});
+}
diff --git a/node_modules/anymatch/node_modules/micromatch/lib/utils.js b/node_modules/anymatch/node_modules/micromatch/lib/utils.js
new file mode 100644
index 0000000000..f0ba9177a3
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/lib/utils.js
@@ -0,0 +1,309 @@
+'use strict';
+
+var utils = module.exports;
+var path = require('path');
+
+/**
+ * Module dependencies
+ */
+
+var Snapdragon = require('snapdragon');
+utils.define = require('define-property');
+utils.diff = require('arr-diff');
+utils.extend = require('extend-shallow');
+utils.pick = require('object.pick');
+utils.typeOf = require('kind-of');
+utils.unique = require('array-unique');
+
+/**
+ * Returns true if the platform is windows, or `path.sep` is `\\`.
+ * This is defined as a function to allow `path.sep` to be set in unit tests,
+ * or by the user, if there is a reason to do so.
+ * @return {Boolean}
+ */
+
+utils.isWindows = function() {
+ return path.sep === '\\' || process.platform === 'win32';
+};
+
+/**
+ * Get the `Snapdragon` instance to use
+ */
+
+utils.instantiate = function(ast, options) {
+ var snapdragon;
+ // if an instance was created by `.parse`, use that instance
+ if (utils.typeOf(ast) === 'object' && ast.snapdragon) {
+ snapdragon = ast.snapdragon;
+ // if the user supplies an instance on options, use that instance
+ } else if (utils.typeOf(options) === 'object' && options.snapdragon) {
+ snapdragon = options.snapdragon;
+ // create a new instance
+ } else {
+ snapdragon = new Snapdragon(options);
+ }
+
+ utils.define(snapdragon, 'parse', function(str, options) {
+ var parsed = Snapdragon.prototype.parse.apply(this, arguments);
+ parsed.input = str;
+
+ // escape unmatched brace/bracket/parens
+ var last = this.parser.stack.pop();
+ if (last && this.options.strictErrors !== true) {
+ var open = last.nodes[0];
+ var inner = last.nodes[1];
+ if (last.type === 'bracket') {
+ if (inner.val.charAt(0) === '[') {
+ inner.val = '\\' + inner.val;
+ }
+
+ } else {
+ open.val = '\\' + open.val;
+ var sibling = open.parent.nodes[1];
+ if (sibling.type === 'star') {
+ sibling.loose = true;
+ }
+ }
+ }
+
+ // add non-enumerable parser reference
+ utils.define(parsed, 'parser', this.parser);
+ return parsed;
+ });
+
+ return snapdragon;
+};
+
+/**
+ * Create the key to use for memoization. The key is generated
+ * by iterating over the options and concatenating key-value pairs
+ * to the pattern string.
+ */
+
+utils.createKey = function(pattern, options) {
+ if (utils.typeOf(options) !== 'object') {
+ return pattern;
+ }
+ var val = pattern;
+ var keys = Object.keys(options);
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ val += ';' + key + '=' + String(options[key]);
+ }
+ return val;
+};
+
+/**
+ * Cast `val` to an array
+ * @return {Array}
+ */
+
+utils.arrayify = function(val) {
+ if (typeof val === 'string') return [val];
+ return val ? (Array.isArray(val) ? val : [val]) : [];
+};
+
+/**
+ * Return true if `val` is a non-empty string
+ */
+
+utils.isString = function(val) {
+ return typeof val === 'string';
+};
+
+/**
+ * Return true if `val` is a non-empty string
+ */
+
+utils.isObject = function(val) {
+ return utils.typeOf(val) === 'object';
+};
+
+/**
+ * Returns true if the given `str` has special characters
+ */
+
+utils.hasSpecialChars = function(str) {
+ return /(?:(?:(^|\/)[!.])|[*?+()|\[\]{}]|[+@]\()/.test(str);
+};
+
+/**
+ * Escape regex characters in the given string
+ */
+
+utils.escapeRegex = function(str) {
+ return str.replace(/[-[\]{}()^$|*+?.\\\/\s]/g, '\\$&');
+};
+
+/**
+ * Normalize slashes in the given filepath.
+ *
+ * @param {String} `filepath`
+ * @return {String}
+ */
+
+utils.toPosixPath = function(str) {
+ return str.replace(/\\+/g, '/');
+};
+
+/**
+ * Strip backslashes before special characters in a string.
+ *
+ * @param {String} `str`
+ * @return {String}
+ */
+
+utils.unescape = function(str) {
+ return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, ''));
+};
+
+/**
+ * Strip the prefix from a filepath
+ * @param {String} `fp`
+ * @return {String}
+ */
+
+utils.stripPrefix = function(str) {
+ if (str.charAt(0) !== '.') {
+ return str;
+ }
+ var ch = str.charAt(1);
+ if (utils.isSlash(ch)) {
+ return str.slice(2);
+ }
+ return str;
+};
+
+/**
+ * Returns true if the given str is an escaped or
+ * unescaped path character
+ */
+
+utils.isSlash = function(str) {
+ return str === '/' || str === '\\/' || str === '\\' || str === '\\\\';
+};
+
+/**
+ * Returns a function that returns true if the given
+ * pattern matches or contains a `filepath`
+ *
+ * @param {String} `pattern`
+ * @return {Function}
+ */
+
+utils.matchPath = function(pattern, options) {
+ return (options && options.contains)
+ ? utils.containsPattern(pattern, options)
+ : utils.equalsPattern(pattern, options);
+};
+
+/**
+ * Returns true if the given (original) filepath or unixified path are equal
+ * to the given pattern.
+ */
+
+utils._equals = function(filepath, unixPath, pattern) {
+ return pattern === filepath || pattern === unixPath;
+};
+
+/**
+ * Returns true if the given (original) filepath or unixified path contain
+ * the given pattern.
+ */
+
+utils._contains = function(filepath, unixPath, pattern) {
+ return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1;
+};
+
+/**
+ * Returns a function that returns true if the given
+ * pattern is the same as a given `filepath`
+ *
+ * @param {String} `pattern`
+ * @return {Function}
+ */
+
+utils.equalsPattern = function(pattern, options) {
+ var unixify = utils.unixify(options);
+ options = options || {};
+
+ return function fn(filepath) {
+ var equal = utils._equals(filepath, unixify(filepath), pattern);
+ if (equal === true || options.nocase !== true) {
+ return equal;
+ }
+ var lower = filepath.toLowerCase();
+ return utils._equals(lower, unixify(lower), pattern);
+ };
+};
+
+/**
+ * Returns a function that returns true if the given
+ * pattern contains a `filepath`
+ *
+ * @param {String} `pattern`
+ * @return {Function}
+ */
+
+utils.containsPattern = function(pattern, options) {
+ var unixify = utils.unixify(options);
+ options = options || {};
+
+ return function(filepath) {
+ var contains = utils._contains(filepath, unixify(filepath), pattern);
+ if (contains === true || options.nocase !== true) {
+ return contains;
+ }
+ var lower = filepath.toLowerCase();
+ return utils._contains(lower, unixify(lower), pattern);
+ };
+};
+
+/**
+ * Returns a function that returns true if the given
+ * regex matches the `filename` of a file path.
+ *
+ * @param {RegExp} `re` Matching regex
+ * @return {Function}
+ */
+
+utils.matchBasename = function(re) {
+ return function(filepath) {
+ return re.test(path.basename(filepath));
+ };
+};
+
+/**
+ * Determines the filepath to return based on the provided options.
+ * @return {any}
+ */
+
+utils.value = function(str, unixify, options) {
+ if (options && options.unixify === false) {
+ return str;
+ }
+ return unixify(str);
+};
+
+/**
+ * Returns a function that normalizes slashes in a string to forward
+ * slashes, strips `./` from beginning of paths, and optionally unescapes
+ * special characters.
+ * @return {Function}
+ */
+
+utils.unixify = function(options) {
+ options = options || {};
+ return function(filepath) {
+ if (utils.isWindows() || options.unixify === true) {
+ filepath = utils.toPosixPath(filepath);
+ }
+ if (options.stripPrefix !== false) {
+ filepath = utils.stripPrefix(filepath);
+ }
+ if (options.unescape === true) {
+ filepath = utils.unescape(filepath);
+ }
+ return filepath;
+ };
+};
diff --git a/node_modules/anymatch/node_modules/micromatch/package.json b/node_modules/anymatch/node_modules/micromatch/package.json
new file mode 100644
index 0000000000..6e8e62fe14
--- /dev/null
+++ b/node_modules/anymatch/node_modules/micromatch/package.json
@@ -0,0 +1,216 @@
+{
+ "_from": "micromatch@^3.1.4",
+ "_id": "micromatch@3.1.10",
+ "_inBundle": false,
+ "_integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "_location": "/anymatch/micromatch",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "micromatch@^3.1.4",
+ "name": "micromatch",
+ "escapedName": "micromatch",
+ "rawSpec": "^3.1.4",
+ "saveSpec": null,
+ "fetchSpec": "^3.1.4"
+ },
+ "_requiredBy": [
+ "/anymatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "_shasum": "70859bc95c9840952f359a068a3fc49f9ecfac23",
+ "_spec": "micromatch@^3.1.4",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/micromatch/micromatch/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Amila Welihinda",
+ "url": "amilajack.com"
+ },
+ {
+ "name": "Bogdan Chadkin",
+ "url": "https://github.com/TrySound"
+ },
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Devon Govett",
+ "url": "http://badassjs.com"
+ },
+ {
+ "name": "Elan Shanker",
+ "url": "https://github.com/es128"
+ },
+ {
+ "name": "Fabrício Matté",
+ "url": "https://ultcombo.js.org"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Martin Kolárik",
+ "url": "https://kolarik.sk"
+ },
+ {
+ "name": "Olsten Larck",
+ "url": "https://i.am.charlike.online"
+ },
+ {
+ "name": "Paul Miller",
+ "url": "paulmillr.com"
+ },
+ {
+ "name": "Tom Byrer",
+ "url": "https://github.com/tomByrer"
+ },
+ {
+ "name": "Tyler Akins",
+ "url": "http://rumkin.com"
+ },
+ {
+ "url": "https://github.com/DianeLooney"
+ }
+ ],
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "deprecated": false,
+ "description": "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.",
+ "devDependencies": {
+ "bash-match": "^1.0.2",
+ "for-own": "^1.0.0",
+ "gulp": "^3.9.1",
+ "gulp-format-md": "^1.0.0",
+ "gulp-istanbul": "^1.1.3",
+ "gulp-mocha": "^5.0.0",
+ "gulp-unused": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "minimatch": "^3.0.4",
+ "minimist": "^1.2.0",
+ "mocha": "^3.5.3",
+ "multimatch": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "homepage": "https://github.com/micromatch/micromatch",
+ "keywords": [
+ "bash",
+ "expand",
+ "expansion",
+ "expression",
+ "file",
+ "files",
+ "filter",
+ "find",
+ "glob",
+ "globbing",
+ "globs",
+ "globstar",
+ "match",
+ "matcher",
+ "matches",
+ "matching",
+ "micromatch",
+ "minimatch",
+ "multimatch",
+ "path",
+ "pattern",
+ "patterns",
+ "regex",
+ "regexp",
+ "regular",
+ "shell",
+ "wildcard"
+ ],
+ "license": "MIT",
+ "lintDeps": {
+ "dependencies": {
+ "options": {
+ "lock": {
+ "snapdragon": "^0.8.1"
+ }
+ }
+ },
+ "devDependencies": {
+ "files": {
+ "options": {
+ "ignore": [
+ "benchmark/**"
+ ]
+ }
+ }
+ }
+ },
+ "main": "index.js",
+ "name": "micromatch",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/micromatch/micromatch.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": "collapsible",
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "helpers": [
+ "./benchmark/helper.js"
+ ],
+ "related": {
+ "list": [
+ "braces",
+ "expand-brackets",
+ "extglob",
+ "fill-range",
+ "nanomatch"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "expand-brackets",
+ "extglob",
+ "glob-object",
+ "minimatch",
+ "multimatch",
+ "snapdragon"
+ ]
+ },
+ "version": "3.1.10"
+}
diff --git a/node_modules/anymatch/package.json b/node_modules/anymatch/package.json
new file mode 100644
index 0000000000..d9ef9fa874
--- /dev/null
+++ b/node_modules/anymatch/package.json
@@ -0,0 +1,88 @@
+{
+ "_from": "anymatch@^2.0.0",
+ "_id": "anymatch@2.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "_location": "/anymatch",
+ "_phantomChildren": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-extendable": "0.1.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "anymatch@^2.0.0",
+ "name": "anymatch",
+ "escapedName": "anymatch",
+ "rawSpec": "^2.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.0"
+ },
+ "_requiredBy": [
+ "/chokidar",
+ "/glob-watcher"
+ ],
+ "_resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "_shasum": "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb",
+ "_spec": "anymatch@^2.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/glob-watcher",
+ "author": {
+ "name": "Elan Shanker",
+ "url": "http://github.com/es128"
+ },
+ "bugs": {
+ "url": "https://github.com/micromatch/anymatch/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "deprecated": false,
+ "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions",
+ "devDependencies": {
+ "coveralls": "^2.7.0",
+ "istanbul": "^0.4.5",
+ "mocha": "^3.0.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/micromatch/anymatch",
+ "keywords": [
+ "match",
+ "any",
+ "string",
+ "file",
+ "fs",
+ "list",
+ "glob",
+ "regex",
+ "regexp",
+ "regular",
+ "expression",
+ "function"
+ ],
+ "license": "ISC",
+ "name": "anymatch",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/micromatch/anymatch.git"
+ },
+ "scripts": {
+ "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls"
+ },
+ "version": "2.0.0"
+}
diff --git a/node_modules/append-buffer/LICENSE b/node_modules/append-buffer/LICENSE
new file mode 100644
index 0000000000..ffb7ec5909
--- /dev/null
+++ b/node_modules/append-buffer/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017, Brian Woodward.
+
+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.
\ No newline at end of file
diff --git a/node_modules/append-buffer/README.md b/node_modules/append-buffer/README.md
new file mode 100644
index 0000000000..681a3c36fc
--- /dev/null
+++ b/node_modules/append-buffer/README.md
@@ -0,0 +1,95 @@
+# append-buffer [![NPM version](https://img.shields.io/npm/v/append-buffer.svg?style=flat)](https://www.npmjs.com/package/append-buffer) [![NPM monthly downloads](https://img.shields.io/npm/dm/append-buffer.svg?style=flat)](https://npmjs.org/package/append-buffer) [![NPM total downloads](https://img.shields.io/npm/dt/append-buffer.svg?style=flat)](https://npmjs.org/package/append-buffer) [![Linux Build Status](https://img.shields.io/travis/doowb/append-buffer.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/append-buffer) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/append-buffer.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/append-buffer)
+
+> Append a buffer to another buffer ensuring to preserve line ending characters.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save append-buffer
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add append-buffer
+```
+
+## Usage
+
+```js
+var appendBuffer = require('append-buffer');
+```
+
+## API
+
+### [appendBuffer](index.js#L28)
+
+Append a buffer to another buffer ensuring to preserve line ending characters.
+
+**Params**
+
+* `buf` **{Buffer}**: Buffer that will be used to check for an existing line ending. The suffix is appended to this.
+* `suffix` **{Buffer}**: Buffer that will be appended to the buf.
+* `returns` **{Buffer}**: Final Buffer
+
+**Example**
+
+```js
+console.log([appendBuffer(new Buffer('abc\r\n'), new Buffer('def')).toString()]);
+//=> [ 'abc\r\ndef\r\n' ]
+
+console.log([appendBuffer(new Buffer('abc\n'), new Buffer('def')).toString()]);
+//=> [ 'abc\ndef\n' ]
+
+// uses os.EOL when a line ending is not found
+console.log([appendBuffer(new Buffer('abc'), new Buffer('def')).toString()]);
+//=> [ 'abc\ndef' ]
+```
+
+## Attribution
+
+The code in this module was originally added in a [PR](https://github.com/jonschlinkert/file-normalize/pull/3) to [file-normalize](https://github.com/jonschlinkert/file-normalize). It has been split out to allow for standalone use cases.
+
+## About
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2017, [Brian Woodward](https://doowb.com).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on August 01, 2017._
\ No newline at end of file
diff --git a/node_modules/append-buffer/index.js b/node_modules/append-buffer/index.js
new file mode 100644
index 0000000000..a385570bbd
--- /dev/null
+++ b/node_modules/append-buffer/index.js
@@ -0,0 +1,41 @@
+'use strict';
+
+var os = require('os');
+var equals = require('buffer-equal');
+var cr = new Buffer('\r\n');
+var nl = new Buffer('\n');
+
+/**
+ * Append a buffer to another buffer ensuring to preserve line ending characters.
+ *
+ * ```js
+ * console.log([appendBuffer(new Buffer('abc\r\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\r\ndef\r\n' ]
+ *
+ * console.log([appendBuffer(new Buffer('abc\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef\n' ]
+ *
+ * // uses os.EOL when a line ending is not found
+ * console.log([appendBuffer(new Buffer('abc'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef' ]
+ * * ```
+ * @param {Buffer} `buf` Buffer that will be used to check for an existing line ending. The suffix is appended to this.
+ * @param {Buffer} `suffix` Buffer that will be appended to the buf.
+ * @return {Buffer} Final Buffer
+ * @api public
+ */
+
+module.exports = function appendBuffer(buf, suffix) {
+ if (!suffix || !suffix.length) {
+ return buf;
+ }
+ var eol;
+ if (equals(buf.slice(-2), cr)) {
+ eol = cr;
+ } else if (equals(buf.slice(-1), nl)) {
+ eol = nl;
+ } else {
+ return Buffer.concat([buf, new Buffer(os.EOL), new Buffer(suffix)]);
+ }
+ return Buffer.concat([buf, new Buffer(suffix), eol]);
+};
diff --git a/node_modules/append-buffer/package.json b/node_modules/append-buffer/package.json
new file mode 100644
index 0000000000..f73ba00b9c
--- /dev/null
+++ b/node_modules/append-buffer/package.json
@@ -0,0 +1,84 @@
+{
+ "_from": "append-buffer@^1.0.2",
+ "_id": "append-buffer@1.0.2",
+ "_inBundle": false,
+ "_integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+ "_location": "/append-buffer",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "append-buffer@^1.0.2",
+ "name": "append-buffer",
+ "escapedName": "append-buffer",
+ "rawSpec": "^1.0.2",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.2"
+ },
+ "_requiredBy": [
+ "/vinyl-sourcemap"
+ ],
+ "_resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "_shasum": "d8220cf466081525efea50614f3de6514dfa58f1",
+ "_spec": "append-buffer@^1.0.2",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/vinyl-sourcemap",
+ "author": {
+ "name": "Brian Woodward",
+ "url": "https://doowb.com"
+ },
+ "bugs": {
+ "url": "https://github.com/doowb/append-buffer/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "buffer-equal": "^1.0.0"
+ },
+ "deprecated": false,
+ "description": "Append a buffer to another buffer ensuring to preserve line ending characters.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/doowb/append-buffer",
+ "keywords": [
+ "append",
+ "append-buffer",
+ "concat",
+ "concat-buffer",
+ "eol",
+ "join",
+ "join-buffer",
+ "normalize",
+ "buffer"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "append-buffer",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/doowb/append-buffer.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.2"
+}
diff --git a/node_modules/archy/.travis.yml b/node_modules/archy/.travis.yml
new file mode 100644
index 0000000000..895dbd3623
--- /dev/null
+++ b/node_modules/archy/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
diff --git a/node_modules/archy/LICENSE b/node_modules/archy/LICENSE
new file mode 100644
index 0000000000..ee27ba4b44
--- /dev/null
+++ b/node_modules/archy/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/archy/examples/beep.js b/node_modules/archy/examples/beep.js
new file mode 100644
index 0000000000..9c0704797c
--- /dev/null
+++ b/node_modules/archy/examples/beep.js
@@ -0,0 +1,24 @@
+var archy = require('../');
+var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/node_modules/archy/examples/multi_line.js b/node_modules/archy/examples/multi_line.js
new file mode 100644
index 0000000000..8afdfada91
--- /dev/null
+++ b/node_modules/archy/examples/multi_line.js
@@ -0,0 +1,25 @@
+var archy = require('../');
+
+var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/node_modules/archy/index.js b/node_modules/archy/index.js
new file mode 100644
index 0000000000..869d64e653
--- /dev/null
+++ b/node_modules/archy/index.js
@@ -0,0 +1,35 @@
+module.exports = function archy (obj, prefix, opts) {
+ if (prefix === undefined) prefix = '';
+ if (!opts) opts = {};
+ var chr = function (s) {
+ var chars = {
+ '│' : '|',
+ '└' : '`',
+ '├' : '+',
+ '─' : '-',
+ '┬' : '-'
+ };
+ return opts.unicode === false ? chars[s] : s;
+ };
+
+ if (typeof obj === 'string') obj = { label : obj };
+
+ var nodes = obj.nodes || [];
+ var lines = (obj.label || '').split('\n');
+ var splitter = '\n' + prefix + (nodes.length ? chr('│') : ' ') + ' ';
+
+ return prefix
+ + lines.join(splitter) + '\n'
+ + nodes.map(function (node, ix) {
+ var last = ix === nodes.length - 1;
+ var more = node.nodes && node.nodes.length;
+ var prefix_ = prefix + (last ? ' ' : chr('│')) + ' ';
+
+ return prefix
+ + (last ? chr('└') : chr('├')) + chr('─')
+ + (more ? chr('┬') : chr('─')) + ' '
+ + archy(node, prefix_, opts).slice(prefix.length + 2)
+ ;
+ }).join('')
+ ;
+};
diff --git a/node_modules/archy/package.json b/node_modules/archy/package.json
new file mode 100644
index 0000000000..ab7ec83430
--- /dev/null
+++ b/node_modules/archy/package.json
@@ -0,0 +1,83 @@
+{
+ "_from": "archy@^1.0.0",
+ "_id": "archy@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "_location": "/archy",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "archy@^1.0.0",
+ "name": "archy",
+ "escapedName": "archy",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/gulp/gulp-cli"
+ ],
+ "_resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "_shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+ "_spec": "archy@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/gulp/node_modules/gulp-cli",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-archy/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "render nested hierarchies `npm ls` style with unicode pipes",
+ "devDependencies": {
+ "tap": "~0.3.3",
+ "tape": "~0.1.1"
+ },
+ "homepage": "https://github.com/substack/node-archy#readme",
+ "keywords": [
+ "hierarchy",
+ "npm ls",
+ "unicode",
+ "pretty",
+ "print"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "archy",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/substack/node-archy.git"
+ },
+ "scripts": {
+ "test": "tap test"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": {
+ "iexplore": [
+ "6.0",
+ "7.0",
+ "8.0",
+ "9.0"
+ ],
+ "chrome": [
+ "20.0"
+ ],
+ "firefox": [
+ "10.0",
+ "15.0"
+ ],
+ "safari": [
+ "5.1"
+ ],
+ "opera": [
+ "12.0"
+ ]
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/archy/readme.markdown b/node_modules/archy/readme.markdown
new file mode 100644
index 0000000000..ef7a5cf34b
--- /dev/null
+++ b/node_modules/archy/readme.markdown
@@ -0,0 +1,88 @@
+# archy
+
+Render nested hierarchies `npm ls` style with unicode pipes.
+
+[![browser support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)
+
+[![build status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)
+
+# example
+
+``` js
+var archy = require('archy');
+var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
+```
+
+output
+
+```
+beep
+├── ity
+└─┬ boop
+ ├─┬ o_O
+ │ ├─┬ oh
+ │ │ ├── hello
+ │ │ └── puny
+ │ └── human
+ └── party
+ time!
+```
+
+# methods
+
+var archy = require('archy')
+
+## archy(obj, prefix='', opts={})
+
+Return a string representation of `obj` with unicode pipe characters like how
+`npm ls` looks.
+
+`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields.
+`'label'` is a string of text to display at a node level and `'nodes'` is an
+array of the descendents of the current node.
+
+If a node is a string, that string will be used as the `'label'` and an empty
+array of `'nodes'` will be used.
+
+`prefix` gets prepended to all the lines and is used by the algorithm to
+recursively update.
+
+If `'label'` has newlines they will be indented at the present indentation level
+with the current prefix.
+
+To disable unicode results in favor of all-ansi output set `opts.unicode` to
+`false`.
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install archy
+```
+
+# license
+
+MIT
diff --git a/node_modules/archy/test/beep.js b/node_modules/archy/test/beep.js
new file mode 100644
index 0000000000..4ea74f9cee
--- /dev/null
+++ b/node_modules/archy/test/beep.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ └── human',
+ ' └── party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/archy/test/multi_line.js b/node_modules/archy/test/multi_line.js
new file mode 100644
index 0000000000..2cf2154d8a
--- /dev/null
+++ b/node_modules/archy/test/multi_line.js
@@ -0,0 +1,45 @@
+var test = require('tape');
+var archy = require('../');
+
+test('multi-line', function (t) {
+ var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '│ one',
+ '│ two',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ │ wheee',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ │ meat',
+ ' │ └── creature',
+ ' └── party',
+ ' time!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/archy/test/non_unicode.js b/node_modules/archy/test/non_unicode.js
new file mode 100644
index 0000000000..7204d33271
--- /dev/null
+++ b/node_modules/archy/test/non_unicode.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ }, '', { unicode : false });
+ t.equal(s, [
+ 'beep',
+ '+-- ity',
+ '`-- boop',
+ ' +-- o_O',
+ ' | +-- oh',
+ ' | | +-- hello',
+ ' | | `-- puny',
+ ' | `-- human',
+ ' `-- party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/arr-diff/LICENSE b/node_modules/arr-diff/LICENSE
new file mode 100755
index 0000000000..d734237bde
--- /dev/null
+++ b/node_modules/arr-diff/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/arr-diff/README.md b/node_modules/arr-diff/README.md
new file mode 100644
index 0000000000..961f5c3f1b
--- /dev/null
+++ b/node_modules/arr-diff/README.md
@@ -0,0 +1,130 @@
+# arr-diff [![NPM version](https://img.shields.io/npm/v/arr-diff.svg?style=flat)](https://www.npmjs.com/package/arr-diff) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-diff.svg?style=flat)](https://npmjs.org/package/arr-diff) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-diff.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-diff)
+
+> Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-diff
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add arr-diff
+```
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install arr-diff --save
+```
+
+## Usage
+
+Returns the difference between the first array and additional arrays.
+
+```js
+var diff = require('arr-diff');
+
+var a = ['a', 'b', 'c', 'd'];
+var b = ['b', 'c'];
+
+console.log(diff(a, b))
+//=> ['a', 'd']
+```
+
+## Benchmarks
+
+This library versus [array-differ](https://github.com/sindresorhus/array-differ), on April 14, 2017:
+
+```
+Benchmarking: (4 of 4)
+ · long-dupes
+ · long
+ · med
+ · short
+
+# benchmark/fixtures/long-dupes.js (100804 bytes)
+ arr-diff-3.0.0 x 822 ops/sec ±0.67% (86 runs sampled)
+ arr-diff-4.0.0 x 2,141 ops/sec ±0.42% (89 runs sampled)
+ array-differ x 708 ops/sec ±0.70% (89 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/long.js (94529 bytes)
+ arr-diff-3.0.0 x 882 ops/sec ±0.60% (87 runs sampled)
+ arr-diff-4.0.0 x 2,329 ops/sec ±0.97% (83 runs sampled)
+ array-differ x 769 ops/sec ±0.61% (90 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/med.js (708 bytes)
+ arr-diff-3.0.0 x 856,150 ops/sec ±0.42% (89 runs sampled)
+ arr-diff-4.0.0 x 4,665,249 ops/sec ±1.06% (89 runs sampled)
+ array-differ x 653,888 ops/sec ±1.02% (86 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/short.js (60 bytes)
+ arr-diff-3.0.0 x 3,078,467 ops/sec ±0.77% (93 runs sampled)
+ arr-diff-4.0.0 x 9,213,296 ops/sec ±0.65% (89 runs sampled)
+ array-differ x 1,337,051 ops/sec ±0.91% (92 runs sampled)
+
+ fastest is arr-diff-4.0.0
+```
+
+## About
+
+### Related projects
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [array-filter](https://www.npmjs.com/package/array-filter): Array#filter for older browsers. | [homepage](https://github.com/juliangruber/array-filter "Array#filter for older browsers.")
+* [array-intersection](https://www.npmjs.com/package/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality… [more](https://github.com/jonschlinkert/array-intersection) | [homepage](https://github.com/jonschlinkert/array-intersection "Return an array with the unique values present in _all_ given arrays using strict equality for comparisons.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 33 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [paulmillr](https://github.com/paulmillr) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 14, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-diff/index.js b/node_modules/arr-diff/index.js
new file mode 100644
index 0000000000..90f280772a
--- /dev/null
+++ b/node_modules/arr-diff/index.js
@@ -0,0 +1,47 @@
+/*!
+ * arr-diff
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function diff(arr/*, arrays*/) {
+ var len = arguments.length;
+ var idx = 0;
+ while (++idx < len) {
+ arr = diffArray(arr, arguments[idx]);
+ }
+ return arr;
+};
+
+function diffArray(one, two) {
+ if (!Array.isArray(two)) {
+ return one.slice();
+ }
+
+ var tlen = two.length
+ var olen = one.length;
+ var idx = -1;
+ var arr = [];
+
+ while (++idx < olen) {
+ var ele = one[idx];
+
+ var hasEle = false;
+ for (var i = 0; i < tlen; i++) {
+ var val = two[i];
+
+ if (ele === val) {
+ hasEle = true;
+ break;
+ }
+ }
+
+ if (hasEle === false) {
+ arr.push(ele);
+ }
+ }
+ return arr;
+}
diff --git a/node_modules/arr-diff/package.json b/node_modules/arr-diff/package.json
new file mode 100644
index 0000000000..46bbda56ed
--- /dev/null
+++ b/node_modules/arr-diff/package.json
@@ -0,0 +1,112 @@
+{
+ "_from": "arr-diff@^4.0.0",
+ "_id": "arr-diff@4.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "_location": "/arr-diff",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arr-diff@^4.0.0",
+ "name": "arr-diff",
+ "escapedName": "arr-diff",
+ "rawSpec": "^4.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.0.0"
+ },
+ "_requiredBy": [
+ "/anymatch/micromatch",
+ "/chokidar/micromatch",
+ "/findup-sync/micromatch",
+ "/matchdep/micromatch",
+ "/nanomatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "_shasum": "d6461074febfec71e7e15235761a329a5dc7c520",
+ "_spec": "arr-diff@^4.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-diff/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "email": "jon.schlinkert@sellside.com",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Paul Miller",
+ "email": "paul+gh@paulmillr.com",
+ "url": "paulmillr.com"
+ }
+ ],
+ "dependencies": {},
+ "deprecated": false,
+ "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "arr-flatten": "^1.0.1",
+ "array-differ": "^1.0.0",
+ "benchmarked": "^0.2.4",
+ "gulp-format-md": "^0.1.9",
+ "minimist": "^1.2.0",
+ "mocha": "^2.4.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/arr-diff",
+ "keywords": [
+ "arr",
+ "array",
+ "array differ",
+ "array-differ",
+ "diff",
+ "differ",
+ "difference"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "arr-diff",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/arr-diff.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "array-filter",
+ "array-intersection"
+ ]
+ },
+ "reflinks": [
+ "array-differ",
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "4.0.0"
+}
diff --git a/node_modules/arr-filter/LICENSE b/node_modules/arr-filter/LICENSE
new file mode 100755
index 0000000000..d290fe00b2
--- /dev/null
+++ b/node_modules/arr-filter/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, 2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/arr-filter/README.md b/node_modules/arr-filter/README.md
new file mode 100755
index 0000000000..96435ae842
--- /dev/null
+++ b/node_modules/arr-filter/README.md
@@ -0,0 +1,72 @@
+# arr-filter [![NPM version](https://img.shields.io/npm/v/arr-filter.svg?style=flat)](https://www.npmjs.com/package/arr-filter) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-filter.svg?style=flat)](https://npmjs.org/package/arr-filter) [![NPM total downloads](https://img.shields.io/npm/dt/arr-filter.svg?style=flat)](https://npmjs.org/package/arr-filter) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-filter.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-filter)
+
+> Faster alternative to javascript's native filter method.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-filter
+```
+
+## Usage
+
+```js
+var filter = require('arr-filter');
+
+filter(['a', {a: 'b'}, 1, 'b', 2, {c: 'd'}, 'c'], function (ele) {
+ return typeof ele === 'string';
+});
+//=> ['a', 'b', 'c']
+```
+
+## Why another array filter?
+
+[array-filter](https://github.com/juliangruber/array-filter) is pretty popular, but it's tuned to be used in older browsers and it falls back on native `.filter()` when available, which is much slower. See [jsperf results](http://jsperf.com/array-filter-while-vs-for/2). The functions used in the benchmarks are the top performers from a dozen or so other functions.
+
+## About
+
+### Related projects
+
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-filter/index.js b/node_modules/arr-filter/index.js
new file mode 100755
index 0000000000..29b8c3cd3b
--- /dev/null
+++ b/node_modules/arr-filter/index.js
@@ -0,0 +1,33 @@
+/*!
+ * arr-filter
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var makeIterator = require('make-iterator');
+
+module.exports = function filter(arr, fn, thisArg) {
+ if (arr == null) {
+ return [];
+ }
+
+ if (typeof fn !== 'function') {
+ throw new TypeError('expected callback to be a function');
+ }
+
+ var iterator = makeIterator(fn, thisArg);
+ var len = arr.length;
+ var res = arr.slice();
+ var i = -1;
+
+ while (len--) {
+ if (!iterator(arr[len], i++)) {
+ res.splice(len, 1);
+ }
+ }
+ return res;
+};
+
diff --git a/node_modules/arr-filter/package.json b/node_modules/arr-filter/package.json
new file mode 100644
index 0000000000..d5bb85df12
--- /dev/null
+++ b/node_modules/arr-filter/package.json
@@ -0,0 +1,92 @@
+{
+ "_from": "arr-filter@^1.1.1",
+ "_id": "arr-filter@1.1.2",
+ "_inBundle": false,
+ "_integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
+ "_location": "/arr-filter",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arr-filter@^1.1.1",
+ "name": "arr-filter",
+ "escapedName": "arr-filter",
+ "rawSpec": "^1.1.1",
+ "saveSpec": null,
+ "fetchSpec": "^1.1.1"
+ },
+ "_requiredBy": [
+ "/bach"
+ ],
+ "_resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
+ "_shasum": "43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee",
+ "_spec": "arr-filter@^1.1.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/bach",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-filter/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "deprecated": false,
+ "description": "Faster alternative to javascript's native filter method.",
+ "devDependencies": {
+ "array-filter": "^1.0.0",
+ "benchmarked": "^0.2.5",
+ "chalk": "^1.1.3",
+ "gulp-format-md": "^0.1.11",
+ "micromatch": "^2.3.11",
+ "minimist": "^1.2.0",
+ "mocha": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/arr-filter",
+ "keywords": [
+ "arr",
+ "array",
+ "collection",
+ "filter",
+ "util"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "arr-filter",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/arr-filter.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "collection-map",
+ "arr-map",
+ "array-each"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.1.2"
+}
diff --git a/node_modules/arr-flatten/LICENSE b/node_modules/arr-flatten/LICENSE
new file mode 100755
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/arr-flatten/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/arr-flatten/README.md b/node_modules/arr-flatten/README.md
new file mode 100755
index 0000000000..7dc7a9746b
--- /dev/null
+++ b/node_modules/arr-flatten/README.md
@@ -0,0 +1,86 @@
+# arr-flatten [![NPM version](https://img.shields.io/npm/v/arr-flatten.svg?style=flat)](https://www.npmjs.com/package/arr-flatten) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![NPM total downloads](https://img.shields.io/npm/dt/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-flatten.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-flatten) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/arr-flatten.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/arr-flatten)
+
+> Recursively flatten an array or arrays.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-flatten
+```
+
+## Install
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install arr-flatten --save
+```
+
+## Usage
+
+```js
+var flatten = require('arr-flatten');
+
+flatten(['a', ['b', ['c']], 'd', ['e']]);
+//=> ['a', 'b', 'c', 'd', 'e']
+```
+
+## Why another flatten utility?
+
+I wanted the fastest implementation I could find, with implementation choices that should work for 95% of use cases, but no cruft to cover the other 5%.
+
+## About
+
+### Related projects
+
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.")
+* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.")
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 20 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [lukeed](https://github.com/lukeed) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 05, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-flatten/index.js b/node_modules/arr-flatten/index.js
new file mode 100644
index 0000000000..0cb4ea4ece
--- /dev/null
+++ b/node_modules/arr-flatten/index.js
@@ -0,0 +1,22 @@
+/*!
+ * arr-flatten
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function (arr) {
+ return flat(arr, []);
+};
+
+function flat(arr, res) {
+ var i = 0, cur;
+ var len = arr.length;
+ for (; i < len; i++) {
+ cur = arr[i];
+ Array.isArray(cur) ? flat(cur, res) : res.push(cur);
+ }
+ return res;
+}
diff --git a/node_modules/arr-flatten/package.json b/node_modules/arr-flatten/package.json
new file mode 100644
index 0000000000..c00b8b7d1e
--- /dev/null
+++ b/node_modules/arr-flatten/package.json
@@ -0,0 +1,115 @@
+{
+ "_from": "arr-flatten@^1.1.0",
+ "_id": "arr-flatten@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "_location": "/arr-flatten",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arr-flatten@^1.1.0",
+ "name": "arr-flatten",
+ "escapedName": "arr-flatten",
+ "rawSpec": "^1.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.1.0"
+ },
+ "_requiredBy": [
+ "/bach",
+ "/braces",
+ "/undertaker"
+ ],
+ "_resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "_shasum": "36048bbff4e7b47e136644316c99669ea5ae91f1",
+ "_spec": "arr-flatten@^1.1.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/braces",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-flatten/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Luke Edwards",
+ "url": "https://lukeed.com"
+ }
+ ],
+ "deprecated": false,
+ "description": "Recursively flatten an array or arrays.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-flatten": "^2.1.1",
+ "array-slice": "^1.0.0",
+ "benchmarked": "^1.0.0",
+ "compute-flatten": "^1.0.0",
+ "flatit": "^1.1.1",
+ "flatten": "^1.0.2",
+ "flatten-array": "^1.0.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "just-flatten-it": "^1.1.23",
+ "lodash.flattendeep": "^4.4.0",
+ "m_flattened": "^1.0.1",
+ "mocha": "^3.2.0",
+ "utils-flatten": "^1.0.0",
+ "write": "^0.3.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/arr-flatten",
+ "keywords": [
+ "arr",
+ "array",
+ "elements",
+ "flat",
+ "flatten",
+ "nested",
+ "recurse",
+ "recursive",
+ "recursively"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "arr-flatten",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/arr-flatten.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-filter",
+ "arr-union",
+ "array-each",
+ "array-unique"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/arr-map/LICENSE b/node_modules/arr-map/LICENSE
new file mode 100644
index 0000000000..ec85897eb1
--- /dev/null
+++ b/node_modules/arr-map/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/arr-map/README.md b/node_modules/arr-map/README.md
new file mode 100644
index 0000000000..04e9910c50
--- /dev/null
+++ b/node_modules/arr-map/README.md
@@ -0,0 +1,78 @@
+# arr-map [![NPM version](https://img.shields.io/npm/v/arr-map.svg?style=flat)](https://www.npmjs.com/package/arr-map) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-map.svg?style=flat)](https://npmjs.org/package/arr-map) [![NPM total downloads](https://img.shields.io/npm/dt/arr-map.svg?style=flat)](https://npmjs.org/package/arr-map) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-map.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-map)
+
+> Faster, node.js focused alternative to JavaScript's native array map.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-map
+```
+
+## Why use this?
+
+JavaScript's native `Array.map()` is slow, and other popular array map libraries are focused on browser compatibility, which makes them bloated or less than idea for non-browser usage. This implementation is focused on node.js usage keeping it light and fast.
+
+## Usage
+
+```js
+var map = require('arr-map');
+
+map(['a', 'b', 'c'], function(ele) {
+ return ele + ele;
+});
+//=> ['aa', 'bb', 'cc']
+
+map(['a', 'b', 'c'], function(ele, i) {
+ return i + ele;
+});
+//=> ['0a', '1b', '2c']
+```
+
+## About
+
+### Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.")
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 28, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-map/index.js b/node_modules/arr-map/index.js
new file mode 100644
index 0000000000..8bfb3604e9
--- /dev/null
+++ b/node_modules/arr-map/index.js
@@ -0,0 +1,23 @@
+/*!
+ * arr-map
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var iterator = require('make-iterator');
+
+module.exports = function map(arr, fn, thisArg) {
+ if (arr == null) return [];
+ fn = iterator(fn, thisArg);
+
+ var len = arr.length;
+ var res = new Array(len);
+
+ for (var i = 0; i < len; i++) {
+ res[i] = fn(arr[i], i, arr);
+ }
+ return res;
+};
diff --git a/node_modules/arr-map/package.json b/node_modules/arr-map/package.json
new file mode 100644
index 0000000000..14b36fd287
--- /dev/null
+++ b/node_modules/arr-map/package.json
@@ -0,0 +1,95 @@
+{
+ "_from": "arr-map@^2.0.0",
+ "_id": "arr-map@2.0.2",
+ "_inBundle": false,
+ "_integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+ "_location": "/arr-map",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arr-map@^2.0.0",
+ "name": "arr-map",
+ "escapedName": "arr-map",
+ "rawSpec": "^2.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.0"
+ },
+ "_requiredBy": [
+ "/bach",
+ "/collection-map",
+ "/undertaker"
+ ],
+ "_resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "_shasum": "3a77345ffc1cf35e2a91825601f9e58f2e24cac4",
+ "_spec": "arr-map@^2.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/undertaker",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-map/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "deprecated": false,
+ "description": "Faster, node.js focused alternative to JavaScript's native array map.",
+ "devDependencies": {
+ "array-map": "^0.0.0",
+ "benchmarked": "^0.2.5",
+ "braces": "^2.0.3",
+ "chalk": "^1.1.3",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.11",
+ "micromatch": "^2.3.11",
+ "mocha": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/arr-map",
+ "keywords": [
+ "arr",
+ "array",
+ "map"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "arr-map",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/arr-map.git"
+ },
+ "scripts": {
+ "benchmark": "node benchmark",
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-filter",
+ "arr-flatten",
+ "arr-reduce"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "2.0.2"
+}
diff --git a/node_modules/arr-union/LICENSE b/node_modules/arr-union/LICENSE
new file mode 100644
index 0000000000..39245ac1c6
--- /dev/null
+++ b/node_modules/arr-union/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/arr-union/README.md b/node_modules/arr-union/README.md
new file mode 100644
index 0000000000..b3cd4f48d5
--- /dev/null
+++ b/node_modules/arr-union/README.md
@@ -0,0 +1,99 @@
+# arr-union [![NPM version](https://img.shields.io/npm/v/arr-union.svg)](https://www.npmjs.com/package/arr-union) [![Build Status](https://img.shields.io/travis/jonschlinkert/arr-union.svg)](https://travis-ci.org/jonschlinkert/arr-union)
+
+> Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm i arr-union --save
+```
+
+## Benchmarks
+
+This library is **10-20 times faster** and more performant than [array-union](https://github.com/sindresorhus/array-union).
+
+See the [benchmarks](./benchmark).
+
+```sh
+#1: five-arrays
+ array-union x 511,121 ops/sec ±0.80% (96 runs sampled)
+ arr-union x 5,716,039 ops/sec ±0.86% (93 runs sampled)
+
+#2: ten-arrays
+ array-union x 245,196 ops/sec ±0.69% (94 runs sampled)
+ arr-union x 1,850,786 ops/sec ±0.84% (97 runs sampled)
+
+#3: two-arrays
+ array-union x 563,869 ops/sec ±0.97% (94 runs sampled)
+ arr-union x 9,602,852 ops/sec ±0.87% (92 runs sampled)
+```
+
+## Usage
+
+```js
+var union = require('arr-union');
+
+union(['a'], ['b', 'c'], ['d', 'e', 'f']);
+//=> ['a', 'b', 'c', 'd', 'e', 'f']
+```
+
+Returns only unique elements:
+
+```js
+union(['a', 'a'], ['b', 'c']);
+//=> ['a', 'b', 'c']
+```
+
+## Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://www.npmjs.com/package/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff)
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter)
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten)
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map)
+* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck)
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce)
+* [array-unique](https://www.npmjs.com/package/array-unique): Return an array free of duplicate values. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/arr-union/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm i verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016 [Jon Schlinkert](https://github.com/jonschlinkert)
+Released under the [MIT license](https://github.com/jonschlinkert/arr-union/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on February 23, 2016._
\ No newline at end of file
diff --git a/node_modules/arr-union/index.js b/node_modules/arr-union/index.js
new file mode 100644
index 0000000000..5ae6c4a08b
--- /dev/null
+++ b/node_modules/arr-union/index.js
@@ -0,0 +1,29 @@
+'use strict';
+
+module.exports = function union(init) {
+ if (!Array.isArray(init)) {
+ throw new TypeError('arr-union expects the first argument to be an array.');
+ }
+
+ var len = arguments.length;
+ var i = 0;
+
+ while (++i < len) {
+ var arg = arguments[i];
+ if (!arg) continue;
+
+ if (!Array.isArray(arg)) {
+ arg = [arg];
+ }
+
+ for (var j = 0; j < arg.length; j++) {
+ var ele = arg[j];
+
+ if (init.indexOf(ele) >= 0) {
+ continue;
+ }
+ init.push(ele);
+ }
+ }
+ return init;
+};
diff --git a/node_modules/arr-union/package.json b/node_modules/arr-union/package.json
new file mode 100644
index 0000000000..9bff5072da
--- /dev/null
+++ b/node_modules/arr-union/package.json
@@ -0,0 +1,108 @@
+{
+ "_from": "arr-union@^3.1.0",
+ "_id": "arr-union@3.1.0",
+ "_inBundle": false,
+ "_integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "_location": "/arr-union",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arr-union@^3.1.0",
+ "name": "arr-union",
+ "escapedName": "arr-union",
+ "rawSpec": "^3.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^3.1.0"
+ },
+ "_requiredBy": [
+ "/class-utils",
+ "/union-value"
+ ],
+ "_resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "_shasum": "e39b09aea9def866a8f206e288af63919bae39c4",
+ "_spec": "arr-union@^3.1.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/union-value",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-union/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-union": "^1.0.1",
+ "array-unique": "^0.2.1",
+ "benchmarked": "^0.1.4",
+ "gulp-format-md": "^0.1.7",
+ "minimist": "^1.1.1",
+ "mocha": "*",
+ "should": "*"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/arr-union",
+ "keywords": [
+ "add",
+ "append",
+ "array",
+ "arrays",
+ "combine",
+ "concat",
+ "extend",
+ "union",
+ "uniq",
+ "unique",
+ "util",
+ "utility",
+ "utils"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "arr-union",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/arr-union.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-flatten",
+ "arr-filter",
+ "arr-map",
+ "arr-pluck",
+ "arr-reduce",
+ "array-unique"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "array-union"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "3.1.0"
+}
diff --git a/node_modules/array-each/LICENSE b/node_modules/array-each/LICENSE
new file mode 100644
index 0000000000..ec85897eb1
--- /dev/null
+++ b/node_modules/array-each/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-each/README.md b/node_modules/array-each/README.md
new file mode 100644
index 0000000000..e8602a1a35
--- /dev/null
+++ b/node_modules/array-each/README.md
@@ -0,0 +1,84 @@
+# array-each [![NPM version](https://img.shields.io/npm/v/array-each.svg?style=flat)](https://www.npmjs.com/package/array-each) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-each.svg?style=flat)](https://npmjs.org/package/array-each) [![NPM total downloads](https://img.shields.io/npm/dt/array-each.svg?style=flat)](https://npmjs.org/package/array-each) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-each.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-each)
+
+> Loop over each item in an array and call the given function on every element.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-each
+```
+
+## Usage
+
+### [each](index.js#L34)
+
+Loop over each item in an array and call the given function on every element.
+
+**Params**
+
+* `array` **{Array}**
+* `fn` **{Function}**
+* `thisArg` **{Object}**: (optional) pass a `thisArg` to be used as the context in which to call the function.
+* `returns` **{undefined}**
+
+**Example**
+
+```js
+each(['a', 'b', 'c'], function(ele) {
+ return ele + ele;
+});
+//=> ['aa', 'bb', 'cc']
+
+each(['a', 'b', 'c'], function(ele, i) {
+ return i + ele;
+});
+//=> ['0a', '1b', '2c']
+```
+
+## About
+
+### Related projects
+
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._
\ No newline at end of file
diff --git a/node_modules/array-each/index.js b/node_modules/array-each/index.js
new file mode 100644
index 0000000000..12afef4d34
--- /dev/null
+++ b/node_modules/array-each/index.js
@@ -0,0 +1,46 @@
+/*!
+ * array-each
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Loop over each item in an array and call the given function on every element.
+ *
+ * ```js
+ * each(['a', 'b', 'c'], function(ele) {
+ * return ele + ele;
+ * });
+ * //=> ['aa', 'bb', 'cc']
+ *
+ * each(['a', 'b', 'c'], function(ele, i) {
+ * return i + ele;
+ * });
+ * //=> ['0a', '1b', '2c']
+ * ```
+ *
+ * @name each
+ * @alias forEach
+ * @param {Array} `array`
+ * @param {Function} `fn`
+ * @param {Object} `thisArg` (optional) pass a `thisArg` to be used as the context in which to call the function.
+ * @return {undefined}
+ * @api public
+ */
+
+module.exports = function each(arr, cb, thisArg) {
+ if (arr == null) return;
+
+ var len = arr.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var ele = arr[idx];
+ if (cb.call(thisArg, ele, idx, arr) === false) {
+ break;
+ }
+ }
+};
diff --git a/node_modules/array-each/package.json b/node_modules/array-each/package.json
new file mode 100644
index 0000000000..4a412876d0
--- /dev/null
+++ b/node_modules/array-each/package.json
@@ -0,0 +1,82 @@
+{
+ "_from": "array-each@^1.0.1",
+ "_id": "array-each@1.0.1",
+ "_inBundle": false,
+ "_integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "_location": "/array-each",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-each@^1.0.1",
+ "name": "array-each",
+ "escapedName": "array-each",
+ "rawSpec": "^1.0.1",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.1"
+ },
+ "_requiredBy": [
+ "/bach",
+ "/object.defaults"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "_shasum": "a794af0c05ab1752846ee753a1f211a05ba0c44f",
+ "_spec": "array-each@^1.0.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/object.defaults",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-each/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Loop over each item in an array and call the given function on every element.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/array-each",
+ "keywords": [
+ "array",
+ "each"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-each",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/array-each.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "collection-map",
+ "arr-filter",
+ "arr-map"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.1"
+}
diff --git a/node_modules/array-initial/.jshintrc b/node_modules/array-initial/.jshintrc
new file mode 100644
index 0000000000..ffd6173e98
--- /dev/null
+++ b/node_modules/array-initial/.jshintrc
@@ -0,0 +1,17 @@
+{
+ "esnext": true,
+ "boss": true,
+ "curly": true,
+ "eqeqeq": true,
+ "eqnull": true,
+ "immed": true,
+ "indent": 2,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "node": true,
+ "sub": true,
+ "undef": true,
+ "unused": true,
+ "mocha": true
+}
diff --git a/node_modules/array-initial/.npmignore b/node_modules/array-initial/.npmignore
new file mode 100644
index 0000000000..cbe37ae037
--- /dev/null
+++ b/node_modules/array-initial/.npmignore
@@ -0,0 +1,59 @@
+# Numerous always-ignore extensions
+*.csv
+*.dat
+*.diff
+*.err
+*.gz
+*.log
+*.orig
+*.out
+*.pid
+*.rar
+*.rej
+*.seed
+*.swo
+*.swp
+*.vi
+*.yo-rc.json
+*.zip
+*~
+.ruby-version
+lib-cov
+npm-debug.log
+
+# Always-ignore dirs
+/bower_components/
+/node_modules/
+/temp/
+/tmp/
+/vendor/
+_gh_pages
+
+# OS or Editor folders
+*.esproj
+*.komodoproject
+.komodotools
+*.sublime-*
+._*
+.cache
+.DS_Store
+.idea
+.project
+.settings
+.tmproj
+nbproject
+Thumbs.db
+
+# grunt-html-validation
+validation-status.json
+validation-report.json
+
+# misc
+TODO.md
+
+# npmignore
+test
+test.js
+.verb.md
+.gitattributes
+.editorconfig
diff --git a/node_modules/array-initial/.travis.yml b/node_modules/array-initial/.travis.yml
new file mode 100644
index 0000000000..67decb245a
--- /dev/null
+++ b/node_modules/array-initial/.travis.yml
@@ -0,0 +1,14 @@
+sudo: false
+os:
+ - linux
+ - osx
+language: node_js
+node_js:
+ - node
+ - '8'
+ - '7'
+ - '6'
+ - '5'
+ - '4'
+ - '0.12'
+ - '0.10'
diff --git a/node_modules/array-initial/LICENSE-MIT b/node_modules/array-initial/LICENSE-MIT
new file mode 100644
index 0000000000..f8c06dfe7a
--- /dev/null
+++ b/node_modules/array-initial/LICENSE-MIT
@@ -0,0 +1,24 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Jon Schlinkert, 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.
diff --git a/node_modules/array-initial/README.md b/node_modules/array-initial/README.md
new file mode 100644
index 0000000000..5b95675baf
--- /dev/null
+++ b/node_modules/array-initial/README.md
@@ -0,0 +1,39 @@
+# array-initial [![NPM version](https://badge.fury.io/js/array-initial.svg)](http://badge.fury.io/js/array-initial)
+
+> Get all but the last element or last n elements of an array.
+
+## Install with [npm](npmjs.org)
+
+```bash
+npm i array-initial --save
+```
+
+## Usage
+
+```js
+var initial = require('array-initial');
+
+initial(['a', 'b', 'c', 'd', 'e', 'f']);
+//=> ['a', 'b', 'c', 'd', 'e']
+
+initial(['a', 'b', 'c', 'd', 'e', 'f'], 1);
+//=> ['a', 'b', 'c', 'd', 'e']
+
+initial(['a', 'b', 'c', 'd', 'e', 'f'], 2);
+//=> ['a', 'b', 'c', 'd']
+```
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+Copyright (c) 2014 Jon Schlinkert
+Released under the MIT license
+
+***
+
+_This file was generated by [verb](https://github.com/assemble/verb) on December 12, 2014. To update, run `npm i -g verb && verb`._
diff --git a/node_modules/array-initial/index.js b/node_modules/array-initial/index.js
new file mode 100644
index 0000000000..239e8c6bea
--- /dev/null
+++ b/node_modules/array-initial/index.js
@@ -0,0 +1,21 @@
+/*!
+ * array-initial
+ *
+ * Copyright (c) 2014 Jon Schlinkert, contributors.
+ * Licensed under the MIT license.
+ */
+
+var isNumber = require('is-number');
+var slice = require('array-slice');
+
+module.exports = function arrayInitial(arr, num) {
+ if (!Array.isArray(arr)) {
+ throw new Error('array-initial expects an array as the first argument.');
+ }
+
+ if (arr.length === 0) {
+ return null;
+ }
+
+ return slice(arr, 0, arr.length - (isNumber(num) ? num : 1));
+};
diff --git a/node_modules/array-initial/node_modules/is-number/LICENSE b/node_modules/array-initial/node_modules/is-number/LICENSE
new file mode 100644
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-initial/node_modules/is-number/README.md b/node_modules/array-initial/node_modules/is-number/README.md
new file mode 100644
index 0000000000..6436992dcc
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/README.md
@@ -0,0 +1,135 @@
+# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number)
+
+> Returns true if the value is a number. comprehensive tests.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-number
+```
+
+## Usage
+
+To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81).
+
+```js
+var isNumber = require('is-number');
+```
+
+### true
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber(5e3) //=> 'true'
+isNumber(0xff) //=> 'true'
+isNumber(-1.1) //=> 'true'
+isNumber(0) //=> 'true'
+isNumber(1) //=> 'true'
+isNumber(1.1) //=> 'true'
+isNumber(10) //=> 'true'
+isNumber(10.10) //=> 'true'
+isNumber(100) //=> 'true'
+isNumber('-1.1') //=> 'true'
+isNumber('0') //=> 'true'
+isNumber('012') //=> 'true'
+isNumber('0xff') //=> 'true'
+isNumber('1') //=> 'true'
+isNumber('1.1') //=> 'true'
+isNumber('10') //=> 'true'
+isNumber('10.10') //=> 'true'
+isNumber('100') //=> 'true'
+isNumber('5e3') //=> 'true'
+isNumber(parseInt('012')) //=> 'true'
+isNumber(parseFloat('012')) //=> 'true'
+```
+
+### False
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber('foo') //=> 'false'
+isNumber([1]) //=> 'false'
+isNumber([]) //=> 'false'
+isNumber(function () {}) //=> 'false'
+isNumber(Infinity) //=> 'false'
+isNumber(NaN) //=> 'false'
+isNumber(new Array('abc')) //=> 'false'
+isNumber(new Array(2)) //=> 'false'
+isNumber(new Buffer('abc')) //=> 'false'
+isNumber(null) //=> 'false'
+isNumber(undefined) //=> 'false'
+isNumber({abc: 'abc'}) //=> 'false'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even "Get the even numbered items from an array.")
+* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even "Return true if the given number is even.")
+* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd "Returns true if the given number is odd.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd "Get the odd numbered items from an array.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 38 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 5 | [charlike](https://github.com/charlike) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 17, 2017._
\ No newline at end of file
diff --git a/node_modules/array-initial/node_modules/is-number/index.js b/node_modules/array-initial/node_modules/is-number/index.js
new file mode 100644
index 0000000000..5221f4056f
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/index.js
@@ -0,0 +1,21 @@
+/*!
+ * is-number
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function isNumber(num) {
+ var type = typeof num;
+
+ if (type === 'string' || num instanceof String) {
+ // an empty string would be coerced to true with the below logic
+ if (!num.trim()) return false;
+ } else if (type !== 'number' && !(num instanceof Number)) {
+ return false;
+ }
+
+ return (num - num + 1) >= 0;
+};
diff --git a/node_modules/array-initial/node_modules/is-number/package.json b/node_modules/array-initial/node_modules/is-number/package.json
new file mode 100644
index 0000000000..0325a6583f
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/package.json
@@ -0,0 +1,113 @@
+{
+ "_from": "is-number@^4.0.0",
+ "_id": "is-number@4.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "_location": "/array-initial/is-number",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "is-number@^4.0.0",
+ "name": "is-number",
+ "escapedName": "is-number",
+ "rawSpec": "^4.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.0.0"
+ },
+ "_requiredBy": [
+ "/array-initial"
+ ],
+ "_resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "_shasum": "0026e37f5454d73e356dfe6564699867c6a7f0ff",
+ "_spec": "is-number@^4.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/array-initial",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-number/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "tunnckoCore",
+ "url": "https://i.am.charlike.online"
+ }
+ ],
+ "deprecated": false,
+ "description": "Returns true if the value is a number. comprehensive tests.",
+ "devDependencies": {
+ "benchmarked": "^2.0.0",
+ "chalk": "^2.1.0",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/is-number",
+ "keywords": [
+ "check",
+ "coerce",
+ "coercion",
+ "integer",
+ "is",
+ "is-nan",
+ "is-num",
+ "is-number",
+ "istype",
+ "kind",
+ "math",
+ "nan",
+ "num",
+ "number",
+ "numeric",
+ "test",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-number",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/is-number.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "even",
+ "is-even",
+ "is-odd",
+ "is-primitive",
+ "kind-of",
+ "odd"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "4.0.0"
+}
diff --git a/node_modules/array-initial/package.json b/node_modules/array-initial/package.json
new file mode 100644
index 0000000000..6aaa6a883c
--- /dev/null
+++ b/node_modules/array-initial/package.json
@@ -0,0 +1,71 @@
+{
+ "_from": "array-initial@^1.0.0",
+ "_id": "array-initial@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
+ "_location": "/array-initial",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-initial@^1.0.0",
+ "name": "array-initial",
+ "escapedName": "array-initial",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/bach"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
+ "_shasum": "2fa74b26739371c3947bd7a7adc73be334b3d795",
+ "_spec": "array-initial@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/bach",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-initial/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "deprecated": false,
+ "description": "Get all but the last element or last n elements of an array.",
+ "devDependencies": {
+ "mocha": "^2.0.0",
+ "should": "^11.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "homepage": "https://github.com/jonschlinkert/array-initial",
+ "keywords": [
+ "array",
+ "fast",
+ "first",
+ "initial",
+ "javascript",
+ "js",
+ "last",
+ "rest",
+ "util",
+ "utility",
+ "utils"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-initial",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jonschlinkert/array-initial.git"
+ },
+ "scripts": {
+ "test": "mocha -R spec"
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/array-last/LICENSE b/node_modules/array-last/LICENSE
new file mode 100644
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/array-last/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-last/README.md b/node_modules/array-last/README.md
new file mode 100755
index 0000000000..d976c93ed7
--- /dev/null
+++ b/node_modules/array-last/README.md
@@ -0,0 +1,94 @@
+# array-last [![NPM version](https://img.shields.io/npm/v/array-last.svg?style=flat)](https://www.npmjs.com/package/array-last) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-last.svg?style=flat)](https://npmjs.org/package/array-last) [![NPM total downloads](https://img.shields.io/npm/dt/array-last.svg?style=flat)](https://npmjs.org/package/array-last) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-last.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-last)
+
+> Get the last or last n elements in an array.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-last
+```
+
+## Usage
+
+```js
+var last = require('array-last');
+
+last(['a', 'b', 'c', 'd', 'e', 'f']);
+//=> 'f'
+
+last(['a', 'b', 'c', 'd', 'e', 'f'], 1);
+//=> 'f'
+
+last(['a', 'b', 'c', 'd', 'e', 'f'], 3);
+//=> ['d', 'e', 'f']
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union)
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique)
+* [array-xor](https://www.npmjs.com/package/array-xor): Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in… [more](https://github.com/jonschlinkert/array-xor) | [homepage](https://github.com/jonschlinkert/array-xor)
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 19 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 3 | [SpyMaster356](https://github.com/SpyMaster356) |
+| 2 | [bendrucker](https://github.com/bendrucker) |
+| 2 | [phated](https://github.com/phated) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 30, 2017._
\ No newline at end of file
diff --git a/node_modules/array-last/index.js b/node_modules/array-last/index.js
new file mode 100644
index 0000000000..5b02f18141
--- /dev/null
+++ b/node_modules/array-last/index.js
@@ -0,0 +1,30 @@
+/*!
+ * array-last
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var isNumber = require('is-number');
+
+module.exports = function last(arr, n) {
+ if (!Array.isArray(arr)) {
+ throw new Error('expected the first argument to be an array');
+ }
+
+ var len = arr.length;
+ if (len === 0) {
+ return null;
+ }
+
+ n = isNumber(n) ? +n : 1;
+ if (n === 1) {
+ return arr[len - 1];
+ }
+
+ var res = new Array(n);
+ while (n--) {
+ res[n] = arr[--len];
+ }
+ return res;
+};
diff --git a/node_modules/array-last/node_modules/is-number/LICENSE b/node_modules/array-last/node_modules/is-number/LICENSE
new file mode 100644
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-last/node_modules/is-number/README.md b/node_modules/array-last/node_modules/is-number/README.md
new file mode 100644
index 0000000000..6436992dcc
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/README.md
@@ -0,0 +1,135 @@
+# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number)
+
+> Returns true if the value is a number. comprehensive tests.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-number
+```
+
+## Usage
+
+To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81).
+
+```js
+var isNumber = require('is-number');
+```
+
+### true
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber(5e3) //=> 'true'
+isNumber(0xff) //=> 'true'
+isNumber(-1.1) //=> 'true'
+isNumber(0) //=> 'true'
+isNumber(1) //=> 'true'
+isNumber(1.1) //=> 'true'
+isNumber(10) //=> 'true'
+isNumber(10.10) //=> 'true'
+isNumber(100) //=> 'true'
+isNumber('-1.1') //=> 'true'
+isNumber('0') //=> 'true'
+isNumber('012') //=> 'true'
+isNumber('0xff') //=> 'true'
+isNumber('1') //=> 'true'
+isNumber('1.1') //=> 'true'
+isNumber('10') //=> 'true'
+isNumber('10.10') //=> 'true'
+isNumber('100') //=> 'true'
+isNumber('5e3') //=> 'true'
+isNumber(parseInt('012')) //=> 'true'
+isNumber(parseFloat('012')) //=> 'true'
+```
+
+### False
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber('foo') //=> 'false'
+isNumber([1]) //=> 'false'
+isNumber([]) //=> 'false'
+isNumber(function () {}) //=> 'false'
+isNumber(Infinity) //=> 'false'
+isNumber(NaN) //=> 'false'
+isNumber(new Array('abc')) //=> 'false'
+isNumber(new Array(2)) //=> 'false'
+isNumber(new Buffer('abc')) //=> 'false'
+isNumber(null) //=> 'false'
+isNumber(undefined) //=> 'false'
+isNumber({abc: 'abc'}) //=> 'false'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even "Get the even numbered items from an array.")
+* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even "Return true if the given number is even.")
+* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd "Returns true if the given number is odd.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd "Get the odd numbered items from an array.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 38 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 5 | [charlike](https://github.com/charlike) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 17, 2017._
\ No newline at end of file
diff --git a/node_modules/array-last/node_modules/is-number/index.js b/node_modules/array-last/node_modules/is-number/index.js
new file mode 100644
index 0000000000..5221f4056f
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/index.js
@@ -0,0 +1,21 @@
+/*!
+ * is-number
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function isNumber(num) {
+ var type = typeof num;
+
+ if (type === 'string' || num instanceof String) {
+ // an empty string would be coerced to true with the below logic
+ if (!num.trim()) return false;
+ } else if (type !== 'number' && !(num instanceof Number)) {
+ return false;
+ }
+
+ return (num - num + 1) >= 0;
+};
diff --git a/node_modules/array-last/node_modules/is-number/package.json b/node_modules/array-last/node_modules/is-number/package.json
new file mode 100644
index 0000000000..6f4e612ace
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/package.json
@@ -0,0 +1,113 @@
+{
+ "_from": "is-number@^4.0.0",
+ "_id": "is-number@4.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "_location": "/array-last/is-number",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "is-number@^4.0.0",
+ "name": "is-number",
+ "escapedName": "is-number",
+ "rawSpec": "^4.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.0.0"
+ },
+ "_requiredBy": [
+ "/array-last"
+ ],
+ "_resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "_shasum": "0026e37f5454d73e356dfe6564699867c6a7f0ff",
+ "_spec": "is-number@^4.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/array-last",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-number/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "tunnckoCore",
+ "url": "https://i.am.charlike.online"
+ }
+ ],
+ "deprecated": false,
+ "description": "Returns true if the value is a number. comprehensive tests.",
+ "devDependencies": {
+ "benchmarked": "^2.0.0",
+ "chalk": "^2.1.0",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/is-number",
+ "keywords": [
+ "check",
+ "coerce",
+ "coercion",
+ "integer",
+ "is",
+ "is-nan",
+ "is-num",
+ "is-number",
+ "istype",
+ "kind",
+ "math",
+ "nan",
+ "num",
+ "number",
+ "numeric",
+ "test",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "is-number",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/is-number.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "even",
+ "is-even",
+ "is-odd",
+ "is-primitive",
+ "kind-of",
+ "odd"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "4.0.0"
+}
diff --git a/node_modules/array-last/package.json b/node_modules/array-last/package.json
new file mode 100644
index 0000000000..267203bd0c
--- /dev/null
+++ b/node_modules/array-last/package.json
@@ -0,0 +1,119 @@
+{
+ "_from": "array-last@^1.1.1",
+ "_id": "array-last@1.3.0",
+ "_inBundle": false,
+ "_integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+ "_location": "/array-last",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-last@^1.1.1",
+ "name": "array-last",
+ "escapedName": "array-last",
+ "rawSpec": "^1.1.1",
+ "saveSpec": null,
+ "fetchSpec": "^1.1.1"
+ },
+ "_requiredBy": [
+ "/bach"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
+ "_shasum": "7aa77073fec565ddab2493f5f88185f404a9d336",
+ "_spec": "array-last@^1.1.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/bach",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-last/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Ben Drucker",
+ "url": "http://www.bendrucker.me"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "url": "https://twitter.com/BlaineBublitz"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Stephen A. Wilson",
+ "url": "https://github.com/SpyMaster356"
+ }
+ ],
+ "dependencies": {
+ "is-number": "^4.0.0"
+ },
+ "deprecated": false,
+ "description": "Get the last or last n elements in an array.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-slice": "^1.0.0",
+ "benchmarked": "^1.1.1",
+ "gulp-format-md": "^1.0.0",
+ "matched": "^1.0.2",
+ "mocha": "^3.5.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/array-last",
+ "keywords": [
+ "array",
+ "fast",
+ "first",
+ "initial",
+ "javascript",
+ "js",
+ "last",
+ "rest",
+ "util",
+ "utility",
+ "utils"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-last",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/array-last.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-union",
+ "array-unique",
+ "array-xor"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.3.0"
+}
diff --git a/node_modules/array-slice/LICENSE b/node_modules/array-slice/LICENSE
new file mode 100755
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/array-slice/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-slice/README.md b/node_modules/array-slice/README.md
new file mode 100755
index 0000000000..e175ca033d
--- /dev/null
+++ b/node_modules/array-slice/README.md
@@ -0,0 +1,82 @@
+# array-slice [![NPM version](https://img.shields.io/npm/v/array-slice.svg?style=flat)](https://www.npmjs.com/package/array-slice) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-slice.svg?style=flat)](https://npmjs.org/package/array-slice) [![NPM total downloads](https://img.shields.io/npm/dt/array-slice.svg?style=flat)](https://npmjs.org/package/array-slice) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-slice.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-slice)
+
+> Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-slice
+```
+
+This function is used instead of `Array#slice` to support node lists in IE < 9 and to ensure dense arrays are returned. This is also faster than native slice in some cases.
+
+## Usage
+
+```js
+var slice = require('array-slice');
+var arr = ['a', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
+
+slice(arr, 3, 6);
+//=> ['e', 'f', 'g']
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays.")
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.")
+* [array-xor](https://www.npmjs.com/package/array-xor): Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in… [more](https://github.com/jonschlinkert/array-xor) | [homepage](https://github.com/jonschlinkert/array-xor "Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in all given arrays and not in their intersections).")
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 30, 2017._
\ No newline at end of file
diff --git a/node_modules/array-slice/index.js b/node_modules/array-slice/index.js
new file mode 100644
index 0000000000..15cdb7773b
--- /dev/null
+++ b/node_modules/array-slice/index.js
@@ -0,0 +1,33 @@
+/*!
+ * array-slice
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function slice(arr, start, end) {
+ var len = arr.length;
+ var range = [];
+
+ start = idx(len, start);
+ end = idx(len, end, len);
+
+ while (start < end) {
+ range.push(arr[start++]);
+ }
+ return range;
+};
+
+function idx(len, pos, end) {
+ if (pos == null) {
+ pos = end || 0;
+ } else if (pos < 0) {
+ pos = Math.max(len + pos, 0);
+ } else {
+ pos = Math.min(pos, len);
+ }
+
+ return pos;
+}
diff --git a/node_modules/array-slice/package.json b/node_modules/array-slice/package.json
new file mode 100644
index 0000000000..366976db77
--- /dev/null
+++ b/node_modules/array-slice/package.json
@@ -0,0 +1,86 @@
+{
+ "_from": "array-slice@^1.0.0",
+ "_id": "array-slice@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "_location": "/array-slice",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-slice@^1.0.0",
+ "name": "array-slice",
+ "escapedName": "array-slice",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/array-initial",
+ "/object.defaults"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "_shasum": "e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4",
+ "_spec": "array-slice@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/object.defaults",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-slice/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index.",
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/array-slice",
+ "keywords": [
+ "array",
+ "javascript",
+ "js",
+ "slice",
+ "util",
+ "utils"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-slice",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/array-slice.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "array-unique",
+ "array-xor"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/array-sort/LICENSE b/node_modules/array-sort/LICENSE
new file mode 100644
index 0000000000..c0d7f13627
--- /dev/null
+++ b/node_modules/array-sort/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/array-sort/README.md b/node_modules/array-sort/README.md
new file mode 100644
index 0000000000..94d9ba7f79
--- /dev/null
+++ b/node_modules/array-sort/README.md
@@ -0,0 +1,203 @@
+# array-sort [![NPM version](https://img.shields.io/npm/v/array-sort.svg?style=flat)](https://www.npmjs.com/package/array-sort) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-sort.svg?style=flat)](https://npmjs.org/package/array-sort) [![NPM total downloads](https://img.shields.io/npm/dt/array-sort.svg?style=flat)](https://npmjs.org/package/array-sort) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-sort.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-sort) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/array-sort.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/array-sort)
+
+> Fast and powerful array sorting. Sort an array of objects by one or more properties. Any number of nested properties or custom comparison functions may be used.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-sort
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add array-sort
+```
+
+## Usage
+
+Sort an array by the given object property:
+
+```js
+var arraySort = require('array-sort');
+
+arraySort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}], 'foo');
+//=> [{foo: 'x'}, {foo: 'y'}, {foo: 'z'}]
+```
+
+**Reverse order**
+
+```js
+arraySort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}], 'foo', {reverse: true});
+//=> [{foo: 'z'}, {foo: 'y'}, {foo: 'x'}]
+```
+
+## Params
+
+```js
+arraySort(array, comparisonArgs);
+```
+
+* `array`: **{Array}** The array to sort
+* `comparisonArgs`: **{Function|String|Array}**: One or more functions or object paths to use for sorting.
+
+## Examples
+
+**[Sort blog posts](examples/blog-posts.js)**
+
+```js
+var arraySort = require('array-sort');
+
+var posts = [
+ { path: 'c.md', locals: { date: '2014-01-09' } },
+ { path: 'a.md', locals: { date: '2014-01-02' } },
+ { path: 'b.md', locals: { date: '2013-05-06' } },
+];
+
+// sort by `locals.date`
+console.log(arraySort(posts, 'locals.date'));
+
+// sort by `path`
+console.log(arraySort(posts, 'path'));
+```
+
+**[Sort by multiple properties](examples/multiple-props.js)**
+
+```js
+var arraySort = require('array-sort');
+
+var posts = [
+ { locals: { foo: 'bbb', date: '2013-05-06' }},
+ { locals: { foo: 'aaa', date: '2012-01-02' }},
+ { locals: { foo: 'ccc', date: '2014-01-02' }},
+ { locals: { foo: 'ccc', date: '2015-01-02' }},
+ { locals: { foo: 'bbb', date: '2014-06-01' }},
+ { locals: { foo: 'aaa', date: '2014-02-02' }},
+];
+
+// sort by `locals.foo`, then `locals.date`
+var result = arraySort(posts, ['locals.foo', 'locals.date']);
+
+console.log(result);
+// [ { locals: { foo: 'aaa', date: '2012-01-02' } },
+// { locals: { foo: 'aaa', date: '2014-02-02' } },
+// { locals: { foo: 'bbb', date: '2013-05-06' } },
+// { locals: { foo: 'bbb', date: '2014-06-01' } },
+// { locals: { foo: 'ccc', date: '2014-01-02' } },
+// { locals: { foo: 'ccc', date: '2015-01-02' } } ]
+```
+
+**[Custom function](examples/custom-function.js)**
+
+If custom functions are supplied, array elements are sorted according to the return value of the compare function. See the [docs for ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)`Array.sort()` for more details.
+
+```js
+var arr = [
+ {one: 'w', two: 'b'},
+ {one: 'z', two: 'a'},
+ {one: 'x', two: 'c'},
+ {one: 'y', two: 'd'},
+];
+
+function compare(prop) {
+ return function (a, b) {
+ return a[prop].localeCompare(b[prop]);
+ };
+}
+
+var result = arraySort(arr, function (a, b) {
+ return a.two.localeCompare(b.two);
+});
+
+console.log(result);
+// [ { one: 'z', two: 'a' },
+// { one: 'w', two: 'b' },
+// { one: 'x', two: 'c' },
+// { one: 'y', two: 'd' } ]
+```
+
+**[Multiple custom functions](examples/custom-functions.js)**
+
+```js
+var arr = [
+ {foo: 'w', bar: 'y', baz: 'w'},
+ {foo: 'x', bar: 'y', baz: 'w'},
+ {foo: 'x', bar: 'y', baz: 'z'},
+ {foo: 'x', bar: 'x', baz: 'w'},
+];
+
+// reusable compare function
+function compare(prop) {
+ return function (a, b) {
+ return a[prop].localeCompare(b[prop]);
+ };
+}
+
+// the `compare` functions can be a list or array
+var result = arraySort(arr, compare('foo'), compare('bar'), compare('baz'));
+
+console.log(result);
+// [ { foo: 'w', bar: 'y', baz: 'w' },
+// { foo: 'x', bar: 'x', baz: 'w' },
+// { foo: 'x', bar: 'y', baz: 'w' },
+// { foo: 'x', bar: 'y', baz: 'z' } ]
+```
+
+## About
+
+### Related projects
+
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [sort-asc](https://www.npmjs.com/package/sort-asc): Sort array elements in ascending order. | [homepage](https://github.com/jonschlinkert/sort-asc "Sort array elements in ascending order.")
+* [sort-desc](https://www.npmjs.com/package/sort-desc): Sort array elements in descending order. | [homepage](https://github.com/jonschlinkert/sort-desc "Sort array elements in descending order.")
+* [sort-object](https://www.npmjs.com/package/sort-object): Sort the keys in an object. | [homepage](https://github.com/doowb/sort-object "Sort the keys in an object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 10 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 4 | [doowb](https://github.com/doowb) |
+| 1 | [iamstolis](https://github.com/iamstolis) |
+| 1 | [wkevina](https://github.com/wkevina) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on September 11, 2017._
\ No newline at end of file
diff --git a/node_modules/array-sort/index.js b/node_modules/array-sort/index.js
new file mode 100644
index 0000000000..01880e1a21
--- /dev/null
+++ b/node_modules/array-sort/index.js
@@ -0,0 +1,105 @@
+/*!
+ * array-sort
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var defaultCompare = require('default-compare');
+var typeOf = require('kind-of');
+var get = require('get-value');
+
+/**
+ * Sort an array of objects by one or more properties.
+ *
+ * @param {Array} `arr` The Array to sort.
+ * @param {String|Array|Function} `props` One or more object paths or comparison functions.
+ * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.
+ * @return {Array} Returns a sorted array.
+ * @api public
+ */
+
+function arraySort(arr, props, opts) {
+ if (arr == null) {
+ return [];
+ }
+
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-sort expects an array.');
+ }
+
+ if (arguments.length === 1) {
+ return arr.sort();
+ }
+
+ var args = flatten([].slice.call(arguments, 1));
+
+ // if the last argument appears to be a plain object,
+ // it's not a valid `compare` arg, so it must be options.
+ if (typeOf(args[args.length - 1]) === 'object') {
+ opts = args.pop();
+ }
+ return arr.sort(sortBy(args, opts));
+}
+
+/**
+ * Iterate over each comparison property or function until `1` or `-1`
+ * is returned.
+ *
+ * @param {String|Array|Function} `props` One or more object paths or comparison functions.
+ * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.
+ * @return {Array}
+ */
+
+function sortBy(props, opts) {
+ opts = opts || {};
+
+ return function compareFn(a, b) {
+ var len = props.length, i = -1;
+ var result;
+
+ while (++i < len) {
+ result = compare(props[i], a, b);
+ if (result !== 0) {
+ break;
+ }
+ }
+ if (opts.reverse === true) {
+ return result * -1;
+ }
+ return result;
+ };
+}
+
+/**
+ * Compare `a` to `b`. If an object `prop` is passed, then
+ * `a[prop]` is compared to `b[prop]`
+ */
+
+function compare(prop, a, b) {
+ if (typeof prop === 'function') {
+ // expose `compare` to custom function
+ return prop(a, b, compare.bind(null, null));
+ }
+ // compare object values
+ if (prop && typeof a === 'object' && typeof b === 'object') {
+ return compare(null, get(a, prop), get(b, prop));
+ }
+ return defaultCompare(a, b);
+}
+
+/**
+ * Flatten the given array.
+ */
+
+function flatten(arr) {
+ return [].concat.apply([], arr);
+}
+
+/**
+ * Expose `arraySort`
+ */
+
+module.exports = arraySort;
diff --git a/node_modules/array-sort/node_modules/kind-of/LICENSE b/node_modules/array-sort/node_modules/kind-of/LICENSE
new file mode 100644
index 0000000000..3f2eca18f1
--- /dev/null
+++ b/node_modules/array-sort/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-sort/node_modules/kind-of/README.md b/node_modules/array-sort/node_modules/kind-of/README.md
new file mode 100644
index 0000000000..170bf30498
--- /dev/null
+++ b/node_modules/array-sort/node_modules/kind-of/README.md
@@ -0,0 +1,342 @@
+# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Why use this?
+
+1. [it's fast](#benchmarks) | [optimizations](#optimizations)
+2. [better type checking](#better-type-checking)
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Release history
+
+### v4.0.0
+
+**Added**
+
+* `promise` support
+
+### v5.0.0
+
+**Added**
+
+* `Set Iterator` and `Map Iterator` support
+
+**Fixed**
+
+* Now returns `generatorfunction` for generator functions
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+
+```
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written.
+
+## Better type checking
+
+kind-of is more correct than other type checking libs I've looked at. For example, here are some differing results from other popular libs:
+
+### [typeof](https://github.com/CodingFu/typeof) lib
+
+Incorrectly tests instances of custom constructors (pretty common):
+
+```js
+var typeOf = require('typeof');
+function Test() {}
+console.log(typeOf(new Test()));
+//=> 'test'
+```
+
+Returns `object` instead of `arguments`:
+
+```js
+function foo() {
+ console.log(typeOf(arguments)) //=> 'object'
+}
+foo();
+```
+
+### [type-of](https://github.com/ForbesLindesay/type-of) lib
+
+Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`:
+
+```js
+function * foo() {}
+console.log(typeOf(foo));
+//=> 'object'
+console.log(typeOf(new Buffer('')));
+//=> 'object'
+console.log(typeOf(new Map()));
+//=> 'object'
+console.log(typeOf(new Set()));
+//=> 'object'
+console.log(typeOf(new WeakMap()));
+//=> 'object'
+console.log(typeOf(new WeakSet()));
+//=> 'object'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 82 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 3 | [aretecode](https://github.com/aretecode) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [ksheedlo](https://github.com/ksheedlo) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+| 1 | [laggingreflex](https://github.com/laggingreflex) |
+| 1 | [charlike](https://github.com/charlike) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 13, 2017._
\ No newline at end of file
diff --git a/node_modules/array-sort/node_modules/kind-of/index.js b/node_modules/array-sort/node_modules/kind-of/index.js
new file mode 100644
index 0000000000..fc5cde96ec
--- /dev/null
+++ b/node_modules/array-sort/node_modules/kind-of/index.js
@@ -0,0 +1,147 @@
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ var type = typeof val;
+
+ // primitivies
+ if (type === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (type === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (type === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (type === 'function' || val instanceof Function) {
+ if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {
+ return 'generatorfunction';
+ }
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+ if (type === '[object Promise]') {
+ return 'promise';
+ }
+
+ // buffer
+ if (isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ if (type === '[object Map Iterator]') {
+ return 'mapiterator';
+ }
+ if (type === '[object Set Iterator]') {
+ return 'setiterator';
+ }
+ if (type === '[object String Iterator]') {
+ return 'stringiterator';
+ }
+ if (type === '[object Array Iterator]') {
+ return 'arrayiterator';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
+
+/**
+ * If you need to support Safari 5-7 (8-10 yr-old browser),
+ * take a look at https://github.com/feross/is-buffer
+ */
+
+function isBuffer(val) {
+ return val.constructor
+ && typeof val.constructor.isBuffer === 'function'
+ && val.constructor.isBuffer(val);
+}
diff --git a/node_modules/array-sort/node_modules/kind-of/package.json b/node_modules/array-sort/node_modules/kind-of/package.json
new file mode 100644
index 0000000000..cd38808b6a
--- /dev/null
+++ b/node_modules/array-sort/node_modules/kind-of/package.json
@@ -0,0 +1,146 @@
+{
+ "_from": "kind-of@^5.0.2",
+ "_id": "kind-of@5.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "_location": "/array-sort/kind-of",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "kind-of@^5.0.2",
+ "name": "kind-of",
+ "escapedName": "kind-of",
+ "rawSpec": "^5.0.2",
+ "saveSpec": null,
+ "fetchSpec": "^5.0.2"
+ },
+ "_requiredBy": [
+ "/array-sort"
+ ],
+ "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "_shasum": "729c91e2d857b7a419a1f9aa65685c4c33f5845d",
+ "_spec": "kind-of@^5.0.2",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/array-sort",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "David Fox-Powell",
+ "url": "https://dtothefp.github.io/me"
+ },
+ {
+ "name": "James",
+ "url": "https://twitter.com/aretecode"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Ken Sheedlo",
+ "url": "kensheedlo.com"
+ },
+ {
+ "name": "laggingreflex",
+ "url": "https://github.com/laggingreflex"
+ },
+ {
+ "name": "Miguel Mota",
+ "url": "https://miguelmota.com"
+ },
+ {
+ "name": "Peter deHaan",
+ "url": "http://about.me/peterdehaan"
+ },
+ {
+ "name": "tunnckoCore",
+ "url": "https://i.am.charlike.online"
+ }
+ ],
+ "deprecated": false,
+ "description": "Get the native type of a value.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^1.1.1",
+ "browserify": "^14.4.0",
+ "gulp-format-md": "^0.1.12",
+ "matched": "^0.4.4",
+ "mocha": "^3.4.2",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "kind-of",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/kind-of.git"
+ },
+ "scripts": {
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare",
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "type-of",
+ "typeof",
+ "verb"
+ ]
+ },
+ "version": "5.1.0"
+}
diff --git a/node_modules/array-sort/package.json b/node_modules/array-sort/package.json
new file mode 100644
index 0000000000..39fcdb677f
--- /dev/null
+++ b/node_modules/array-sort/package.json
@@ -0,0 +1,137 @@
+{
+ "_from": "array-sort@^1.0.0",
+ "_id": "array-sort@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+ "_location": "/array-sort",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-sort@^1.0.0",
+ "name": "array-sort",
+ "escapedName": "array-sort",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/gulp/gulp-cli"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+ "_shasum": "e4c05356453f56f53512a7d1d6123f2c54c0a88a",
+ "_spec": "array-sort@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/gulp/node_modules/gulp-cli",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-sort/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "url": "https://twitter.com/doowb"
+ },
+ {
+ "name": "Jan Stola",
+ "url": "https://github.com/iamstolis"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Kevin Ward",
+ "url": "https://github.com/wkevina"
+ }
+ ],
+ "dependencies": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "deprecated": false,
+ "description": "Fast and powerful array sorting. Sort an array of objects by one or more properties. Any number of nested properties or custom comparison functions may be used.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^0.1.5",
+ "glob": "^7.0.3",
+ "gulp-format-md": "^0.1.8",
+ "lodash.sortbyorder": "^3.4.4",
+ "mocha": "^2.4.5",
+ "should": "^8.3.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/array-sort",
+ "keywords": [
+ "arr",
+ "array",
+ "asc",
+ "ascend",
+ "ascending",
+ "desc",
+ "descend",
+ "descending",
+ "dot",
+ "element",
+ "elements",
+ "get",
+ "multiple",
+ "nested",
+ "obj",
+ "object",
+ "order",
+ "ordered",
+ "path",
+ "prop",
+ "properties",
+ "property",
+ "sort",
+ "sorted",
+ "sorting"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-sort",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/array-sort.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "reflinks": [
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "get-value",
+ "set-value",
+ "sort-asc",
+ "sort-desc",
+ "sort-object"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/array-unique/LICENSE b/node_modules/array-unique/LICENSE
new file mode 100755
index 0000000000..842218cf09
--- /dev/null
+++ b/node_modules/array-unique/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-unique/README.md b/node_modules/array-unique/README.md
new file mode 100755
index 0000000000..41c8c904ef
--- /dev/null
+++ b/node_modules/array-unique/README.md
@@ -0,0 +1,77 @@
+# array-unique [![NPM version](https://img.shields.io/npm/v/array-unique.svg?style=flat)](https://www.npmjs.com/package/array-unique) [![NPM downloads](https://img.shields.io/npm/dm/array-unique.svg?style=flat)](https://npmjs.org/package/array-unique) [![Build Status](https://img.shields.io/travis/jonschlinkert/array-unique.svg?style=flat)](https://travis-ci.org/jonschlinkert/array-unique)
+
+Remove duplicate values from an array. Fastest ES5 implementation.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-unique
+```
+
+## Usage
+
+```js
+var unique = require('array-unique');
+
+var arr = ['a', 'b', 'c', 'c'];
+console.log(unique(arr)) //=> ['a', 'b', 'c']
+console.log(arr) //=> ['a', 'b', 'c']
+
+/* The above modifies the input array. To prevent that at a slight performance cost: */
+var unique = require("array-unique").immutable;
+
+var arr = ['a', 'b', 'c', 'c'];
+console.log(unique(arr)) //=> ['a', 'b', 'c']
+console.log(arr) //=> ['a', 'b', 'c', 'c']
+```
+
+## About
+
+### Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.")
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck "Retrieves the value of a specified property from all elements in the collection.")
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.")
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/array-unique/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 31, 2016._
\ No newline at end of file
diff --git a/node_modules/array-unique/index.js b/node_modules/array-unique/index.js
new file mode 100644
index 0000000000..7e481e0724
--- /dev/null
+++ b/node_modules/array-unique/index.js
@@ -0,0 +1,43 @@
+/*!
+ * array-unique
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function unique(arr) {
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-unique expects an array.');
+ }
+
+ var len = arr.length;
+ var i = -1;
+
+ while (i++ < len) {
+ var j = i + 1;
+
+ for (; j < arr.length; ++j) {
+ if (arr[i] === arr[j]) {
+ arr.splice(j--, 1);
+ }
+ }
+ }
+ return arr;
+};
+
+module.exports.immutable = function uniqueImmutable(arr) {
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-unique expects an array.');
+ }
+
+ var arrLen = arr.length;
+ var newArr = new Array(arrLen);
+
+ for (var i = 0; i < arrLen; i++) {
+ newArr[i] = arr[i];
+ }
+
+ return module.exports(newArr);
+};
diff --git a/node_modules/array-unique/package.json b/node_modules/array-unique/package.json
new file mode 100644
index 0000000000..a827e5c262
--- /dev/null
+++ b/node_modules/array-unique/package.json
@@ -0,0 +1,102 @@
+{
+ "_from": "array-unique@^0.3.2",
+ "_id": "array-unique@0.3.2",
+ "_inBundle": false,
+ "_integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "_location": "/array-unique",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "array-unique@^0.3.2",
+ "name": "array-unique",
+ "escapedName": "array-unique",
+ "rawSpec": "^0.3.2",
+ "saveSpec": null,
+ "fetchSpec": "^0.3.2"
+ },
+ "_requiredBy": [
+ "/anymatch/extglob",
+ "/anymatch/micromatch",
+ "/braces",
+ "/chokidar/extglob",
+ "/chokidar/micromatch",
+ "/findup-sync/extglob",
+ "/findup-sync/micromatch",
+ "/matchdep/extglob",
+ "/matchdep/micromatch",
+ "/nanomatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "_shasum": "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428",
+ "_spec": "array-unique@^0.3.2",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/anymatch/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-unique/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Remove duplicate values from an array. Fastest ES5 implementation.",
+ "devDependencies": {
+ "array-uniq": "^1.0.2",
+ "benchmarked": "^0.1.3",
+ "gulp-format-md": "^0.1.9",
+ "mocha": "^2.5.3",
+ "should": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "LICENSE",
+ "README.md"
+ ],
+ "homepage": "https://github.com/jonschlinkert/array-unique",
+ "keywords": [
+ "array",
+ "unique"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "array-unique",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/array-unique.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-union",
+ "arr-flatten",
+ "arr-reduce",
+ "arr-map",
+ "arr-pluck"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "0.3.2"
+}
diff --git a/node_modules/arraybuffer.slice/.npmignore b/node_modules/arraybuffer.slice/.npmignore
new file mode 100644
index 0000000000..cfbee8d8bd
--- /dev/null
+++ b/node_modules/arraybuffer.slice/.npmignore
@@ -0,0 +1,17 @@
+lib-cov
+lcov.info
+*.seed
+*.log
+*.csv
+*.dat
+*.out
+*.pid
+*.gz
+
+pids
+logs
+results
+build
+.grunt
+
+node_modules
diff --git a/node_modules/arraybuffer.slice/LICENCE b/node_modules/arraybuffer.slice/LICENCE
new file mode 100644
index 0000000000..35fa37590d
--- /dev/null
+++ b/node_modules/arraybuffer.slice/LICENCE
@@ -0,0 +1,18 @@
+Copyright (C) 2013 Rase-
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/arraybuffer.slice/Makefile b/node_modules/arraybuffer.slice/Makefile
new file mode 100644
index 0000000000..849887f7fa
--- /dev/null
+++ b/node_modules/arraybuffer.slice/Makefile
@@ -0,0 +1,8 @@
+
+REPORTER = dot
+
+test:
+ @./node_modules/.bin/mocha \
+ --reporter $(REPORTER)
+
+.PHONY: test
diff --git a/node_modules/arraybuffer.slice/README.md b/node_modules/arraybuffer.slice/README.md
new file mode 100644
index 0000000000..15e465efca
--- /dev/null
+++ b/node_modules/arraybuffer.slice/README.md
@@ -0,0 +1,17 @@
+# How to
+```javascript
+var sliceBuffer = require('arraybuffer.slice');
+var ab = (new Int8Array(5)).buffer;
+var sliced = sliceBuffer(ab, 1, 3);
+sliced = sliceBuffer(ab, 1);
+```
+
+# Licence (MIT)
+Copyright (C) 2013 Rase-
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/arraybuffer.slice/index.js b/node_modules/arraybuffer.slice/index.js
new file mode 100644
index 0000000000..11ac556e9a
--- /dev/null
+++ b/node_modules/arraybuffer.slice/index.js
@@ -0,0 +1,29 @@
+/**
+ * An abstraction for slicing an arraybuffer even when
+ * ArrayBuffer.prototype.slice is not supported
+ *
+ * @api public
+ */
+
+module.exports = function(arraybuffer, start, end) {
+ var bytes = arraybuffer.byteLength;
+ start = start || 0;
+ end = end || bytes;
+
+ if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
+
+ if (start < 0) { start += bytes; }
+ if (end < 0) { end += bytes; }
+ if (end > bytes) { end = bytes; }
+
+ if (start >= bytes || start >= end || bytes === 0) {
+ return new ArrayBuffer(0);
+ }
+
+ var abv = new Uint8Array(arraybuffer);
+ var result = new Uint8Array(end - start);
+ for (var i = start, ii = 0; i < end; i++, ii++) {
+ result[ii] = abv[i];
+ }
+ return result.buffer;
+};
diff --git a/node_modules/arraybuffer.slice/package.json b/node_modules/arraybuffer.slice/package.json
new file mode 100644
index 0000000000..0f66dcad57
--- /dev/null
+++ b/node_modules/arraybuffer.slice/package.json
@@ -0,0 +1,44 @@
+{
+ "_from": "arraybuffer.slice@~0.0.7",
+ "_id": "arraybuffer.slice@0.0.7",
+ "_inBundle": false,
+ "_integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "_location": "/arraybuffer.slice",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "arraybuffer.slice@~0.0.7",
+ "name": "arraybuffer.slice",
+ "escapedName": "arraybuffer.slice",
+ "rawSpec": "~0.0.7",
+ "saveSpec": null,
+ "fetchSpec": "~0.0.7"
+ },
+ "_requiredBy": [
+ "/engine.io-parser"
+ ],
+ "_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "_shasum": "3bbc4275dd584cc1b10809b89d4e8b63a69e7675",
+ "_spec": "arraybuffer.slice@~0.0.7",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/engine.io-parser",
+ "bugs": {
+ "url": "https://github.com/rase-/arraybuffer.slice/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {},
+ "deprecated": false,
+ "description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
+ "devDependencies": {
+ "expect.js": "0.2.0",
+ "mocha": "1.17.1"
+ },
+ "homepage": "https://github.com/rase-/arraybuffer.slice",
+ "license": "MIT",
+ "name": "arraybuffer.slice",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/rase-/arraybuffer.slice.git"
+ },
+ "version": "0.0.7"
+}
diff --git a/node_modules/arraybuffer.slice/test/slice-buffer.js b/node_modules/arraybuffer.slice/test/slice-buffer.js
new file mode 100644
index 0000000000..4778da67da
--- /dev/null
+++ b/node_modules/arraybuffer.slice/test/slice-buffer.js
@@ -0,0 +1,227 @@
+/*
+ * Test dependencies
+ */
+
+var sliceBuffer = require('../index.js');
+var expect = require('expect.js');
+
+/**
+ * Tests
+ */
+
+describe('sliceBuffer', function() {
+ describe('using standard slice', function() {
+ it('should slice correctly with only start provided', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with start and end provided', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 3, 8);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative start', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 0, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative start and end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, -6, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with equal start and end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 1, 1);
+ expect(sliced.byteLength).to.equal(0);
+ });
+
+ it('should slice correctly when end larger than buffer', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 0, 100);
+ expect(new Uint8Array(sliced)).to.eql(abv);
+ });
+
+ it('shoud slice correctly when start larger than end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+
+ var sliced = sliceBuffer(abv.buffer, 6, 5);
+ expect(sliced.byteLength).to.equal(0);
+ });
+ });
+
+ describe('using fallback', function() {
+ it('should slice correctly with only start provided', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, 3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with start and end provided', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+
+ var sliced = sliceBuffer(ab, 3, 8);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative start', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+
+ var sliced = sliceBuffer(ab, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, 0, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with negative start and end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, -6, -3);
+ var sabv = new Uint8Array(sliced);
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
+ expect(abv[i]).to.equal(sabv[ii]);
+ }
+ });
+
+ it('should slice correctly with equal start and end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, 1, 1);
+ expect(sliced.byteLength).to.equal(0);
+ });
+
+ it('should slice correctly when end larger than buffer', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, 0, 100);
+ var sabv = new Uint8Array(sliced);
+ for (var i = 0; i < abv.length; i++) {
+ expect(abv[i]).to.equal(sabv[i]);
+ }
+ });
+
+ it('shoud slice correctly when start larger than end', function() {
+ var abv = new Uint8Array(10);
+ for (var i = 0; i < abv.length; i++) {
+ abv[i] = i;
+ }
+ var ab = abv.buffer;
+ ab.slice = undefined;
+
+ var sliced = sliceBuffer(ab, 6, 5);
+ expect(sliced.byteLength).to.equal(0);
+ });
+ });
+});
diff --git a/node_modules/assign-symbols/LICENSE b/node_modules/assign-symbols/LICENSE
new file mode 100644
index 0000000000..65f90aca8c
--- /dev/null
+++ b/node_modules/assign-symbols/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/assign-symbols/README.md b/node_modules/assign-symbols/README.md
new file mode 100644
index 0000000000..422729d45e
--- /dev/null
+++ b/node_modules/assign-symbols/README.md
@@ -0,0 +1,73 @@
+# assign-symbols [![NPM version](https://badge.fury.io/js/assign-symbols.svg)](http://badge.fury.io/js/assign-symbols)
+
+> Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method.
+
+From the [Mozilla Developer docs for Symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol):
+
+> A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i assign-symbols --save
+```
+
+## Usage
+
+```js
+var assignSymbols = require('assign-symbols');
+var obj = {};
+
+var one = {};
+var symbolOne = Symbol('aaa');
+one[symbolOne] = 'bbb';
+
+var two = {};
+var symbolTwo = Symbol('ccc');
+two[symbolTwo] = 'ddd';
+
+assignSymbols(obj, one, two);
+
+console.log(obj[symbolOne]);
+//=> 'bbb'
+console.log(obj[symbolTwo]);
+//=> 'ddd'
+```
+
+## Similar projects
+
+* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. | [homepage](https://github.com/jonschlinkert/assign-deep)
+* [clone-deep](https://www.npmjs.com/package/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. | [homepage](https://github.com/jonschlinkert/clone-deep)
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow)
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep)
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/assign-symbols/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 06, 2015._
\ No newline at end of file
diff --git a/node_modules/assign-symbols/index.js b/node_modules/assign-symbols/index.js
new file mode 100644
index 0000000000..c08a232b7f
--- /dev/null
+++ b/node_modules/assign-symbols/index.js
@@ -0,0 +1,40 @@
+/*!
+ * assign-symbols
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function(receiver, objects) {
+ if (receiver === null || typeof receiver === 'undefined') {
+ throw new TypeError('expected first argument to be an object.');
+ }
+
+ if (typeof objects === 'undefined' || typeof Symbol === 'undefined') {
+ return receiver;
+ }
+
+ if (typeof Object.getOwnPropertySymbols !== 'function') {
+ return receiver;
+ }
+
+ var isEnumerable = Object.prototype.propertyIsEnumerable;
+ var target = Object(receiver);
+ var len = arguments.length, i = 0;
+
+ while (++i < len) {
+ var provider = Object(arguments[i]);
+ var names = Object.getOwnPropertySymbols(provider);
+
+ for (var j = 0; j < names.length; j++) {
+ var key = names[j];
+
+ if (isEnumerable.call(provider, key)) {
+ target[key] = provider[key];
+ }
+ }
+ }
+ return target;
+};
diff --git a/node_modules/assign-symbols/package.json b/node_modules/assign-symbols/package.json
new file mode 100644
index 0000000000..3dfeb5d441
--- /dev/null
+++ b/node_modules/assign-symbols/package.json
@@ -0,0 +1,71 @@
+{
+ "_from": "assign-symbols@^1.0.0",
+ "_id": "assign-symbols@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "_location": "/assign-symbols",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "assign-symbols@^1.0.0",
+ "name": "assign-symbols",
+ "escapedName": "assign-symbols",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/extend-shallow"
+ ],
+ "_resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "_shasum": "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367",
+ "_spec": "assign-symbols@^1.0.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/extend-shallow",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/assign-symbols/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method.",
+ "devDependencies": {
+ "mocha": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jonschlinkert/assign-symbols",
+ "keywords": [
+ "assign",
+ "symbols"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "assign-symbols",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/assign-symbols.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "assign-deep",
+ "mixin-deep",
+ "merge-deep",
+ "extend-shallow",
+ "clone-deep"
+ ]
+ }
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/async-done/LICENSE b/node_modules/async-done/LICENSE
new file mode 100644
index 0000000000..9aedc0d725
--- /dev/null
+++ b/node_modules/async-done/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other 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.
diff --git a/node_modules/async-done/README.md b/node_modules/async-done/README.md
new file mode 100644
index 0000000000..93545c27ae
--- /dev/null
+++ b/node_modules/async-done/README.md
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+# async-done
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Allows libraries to handle various caller provided asynchronous functions uniformly. Maps promises, observables, child processes and streams, and callbacks to callback style.
+
+As async conventions evolve, it is useful to be able to deal with several different *styles* of async completion uniformly. With this module you can handle completion using a node-style callback, regardless of a return value that's a promise, observable, child process or stream.
+
+## Usage
+
+### Successful completion
+
+```js
+var asyncDone = require('async-done');
+
+asyncDone(function(done){
+ // do async things
+ done(null, 2);
+}, function(error, result){
+ // `error` will be null on successful execution of the first function.
+ // `result` will be the result from the first function.
+});
+```
+
+### Failed completion
+
+```js
+var asyncDone = require('async-done');
+
+asyncDone(function(done){
+ // do async things
+ done(new Error('Some Error Occurred'));
+}, function(error, result){
+ // `error` will be an error from the first function.
+ // `result` will be undefined on failed execution of the first function.
+});
+```
+
+## API
+
+### `asyncDone(fn, callback)`
+
+Takes a function to execute (`fn`) and a function to call on completion (`callback`).
+
+#### `fn([done])`
+
+Optionally takes a callback to call when async tasks are complete.
+
+#### Completion and Error Resolution
+
+* `Callback` (`done`) called
+ - Completion: called with null error
+ - Error: called with non-null error
+* `Stream` or `EventEmitter` returned
+ - Completion: [end-of-stream][end-of-stream] module
+ - Error: [domains][domains]
+ - __Note:__ Only actual streams are supported, not faux-streams; Therefore, modules like [`event-stream`][event-stream] are not supported.
+* `Child Process` returned
+ - Completion [end-of-stream][end-of-stream] module
+ - Error: [domains][domains]
+* `Promise` returned
+ - Completion: [onFulfilled][promise-onfulfilled] method called
+ - Error: [onRejected][promise-onrejected] method called
+* `Observable` (e.g. from [RxJS v5][rxjs5-observable] or [RxJS v4][rxjs5-observable]) returned
+ - Completion: [complete][rxjs5-observer-complete] method called
+ - Error: [error][rxjs5-observer-error] method called
+
+__Warning:__ Sync tasks are __not supported__ and your function will never complete if the one of the above strategies is not used to signal completion. However, thrown errors will be caught by the domain.
+
+#### `callback(error, result)`
+
+If an error doesn't occur in the execution of the `fn` function, the `callback` method will receive the results as its second argument. Note: Some streams don't received any results.
+
+If an error occurred in the execution of the `fn` function, The `callback` method will receive an error as its first argument.
+
+Errors can be caused by:
+
+* A thrown error
+* An error passed to a `done` callback
+* An `error` event emitted on a returned `Stream`, `EventEmitter` or `Child Process`
+* A rejection of a returned `Promise` - If the `Promise` is not rejected with a value, we generate a new `Error`
+* The `onError` handler being called on an `Observable`
+
+## License
+
+MIT
+
+[downloads-image]: https://img.shields.io/npm/dm/async-done.svg
+[npm-url]: https://www.npmjs.com/package/async-done
+[npm-image]: https://img.shields.io/npm/v/async-done.svg
+
+[azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=6&branchName=master
+[azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/async-done?branchName=master
+
+[travis-url]: https://travis-ci.org/gulpjs/async-done
+[travis-image]: https://img.shields.io/travis/gulpjs/async-done.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/async-done
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/async-done.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/async-done
+[coveralls-image]: https://img.shields.io/coveralls/gulpjs/async-done/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
+
+[end-of-stream]: https://www.npmjs.com/package/end-of-stream
+[domains]: http://nodejs.org/api/domain.html
+[event-stream]: https://github.com/dominictarr/event-stream
+[promise-onfulfilled]: http://promisesaplus.com/#point-26
+[promise-onrejected]: http://promisesaplus.com/#point-30
+[rx4-observable]: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md
+[rxjs5-observable]: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html
+[rxjs5-observer-complete]: http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObserverDoc.html#instance-method-complete
+[rxjs5-observer-error]: http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObserverDoc.html#instance-method-error
diff --git a/node_modules/async-done/index.d.ts b/node_modules/async-done/index.d.ts
new file mode 100644
index 0000000000..2c4ab9360e
--- /dev/null
+++ b/node_modules/async-done/index.d.ts
@@ -0,0 +1,101 @@
+/**
+ * Notes about these type definitions:
+ *
+ * - Callbacks returning multiple completion values using multiple arguments are not supported by these types.
+ * Prefer to use Node's style by grouping your values in a single object or array.
+ * Support for this kind of callback is blocked by Microsoft/TypeScript#5453
+ *
+ * - For ease of use, `asyncDone` lets you pass callback functions with a result type `T` instead of `T | undefined`.
+ * This matches Node's types but can lead to unsound code being typechecked.
+ *
+ * The following code typechecks but fails at runtime:
+ * ```typescript
+ * async function getString(): Promise {
+ * return "Hello, World!";
+ * }
+ *
+ * async function evilGetString(): Promise {
+ * throw new Error("Hello, World!");
+ * }
+ *
+ * function cb(err: Error | null, result: string): void {
+ * // This is unsound because `result` is `undefined` when `err` is not `null`.
+ * console.log(result.toLowerCase());
+ * }
+ *
+ * asyncDone(getString, cb); // Prints `hello, world!`
+ * asyncDone(evilGetString, cb); // Runtime error: `TypeError: Cannot read property 'toLowerCase' of undefined`
+ * ```
+ *
+ * Enforcing stricter callbacks would require developers to use `result?: string` and assert the existence
+ * of the result either by checking it directly or using the `!` assertion operator after testing for errors.
+ * ```typescript
+ * function stricterCb1(err: Error | null, result?: string): void {
+ * if (err !== null) {
+ * console.error(err);
+ * return;
+ * }
+ * console.log(result!.toLowerCase());
+ * }
+ *
+ * function stricterCb2(err: Error | null, result?: string): void {
+ * if (result === undefined) {
+ * console.error("Undefined result. Error:);
+ * console.error(err);
+ * return;
+ * }
+ * console.log(result.toLowerCase());
+ * }
+ * ```
+ */
+import { ChildProcess } from "child_process";
+import { EventEmitter } from "events";
+import { Stream } from "stream";
+
+declare namespace asyncDone {
+
+ /**
+ * Represents a callback function used to signal the completion of a
+ * task without any result value.
+ */
+ type VoidCallback = (err: Error | null) => void;
+
+ /**
+ * Represents a callback function used to signal the completion of a
+ * task with a single result value.
+ */
+ interface Callback {
+ (err: null, result: T): void;
+
+ // Use `result?: T` or `result: undefined` to require the consumer to assert the existence of the result
+ // (even in case of success). See comment at the top of the file.
+ (err: Error, result?: any): void;
+ }
+
+ /**
+ * Minimal `Observable` interface compatible with `async-done`.
+ *
+ * @see https://github.com/ReactiveX/rxjs/blob/c3c56867eaf93f302ac7cd588034c7d8712f2834/src/internal/Observable.ts#L77
+ */
+ interface Observable {
+ subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): any;
+ }
+
+ /**
+ * Represents an async operation.
+ */
+ export type AsyncTask =
+ ((done: VoidCallback) => void)
+ | ((done: Callback) => void)
+ | (() => ChildProcess | EventEmitter | Observable | PromiseLike | Stream);
+}
+
+/**
+ * Takes a function to execute (`fn`) and a function to call on completion (`callback`).
+ *
+ * @param fn Function to execute.
+ * @param callback Function to call on completion.
+ */
+declare function asyncDone(fn: asyncDone.AsyncTask, callback: asyncDone.Callback): void;
+
+export = asyncDone;
diff --git a/node_modules/async-done/index.js b/node_modules/async-done/index.js
new file mode 100644
index 0000000000..e5be989387
--- /dev/null
+++ b/node_modules/async-done/index.js
@@ -0,0 +1,88 @@
+'use strict';
+
+var domain = require('domain');
+
+var eos = require('end-of-stream');
+var p = require('process-nextick-args');
+var once = require('once');
+var exhaust = require('stream-exhaust');
+
+var eosConfig = {
+ error: false,
+};
+
+function rethrowAsync(err) {
+ process.nextTick(rethrow);
+
+ function rethrow() {
+ throw err;
+ }
+}
+
+function tryCatch(fn, args) {
+ try {
+ return fn.apply(null, args);
+ } catch (err) {
+ rethrowAsync(err);
+ }
+}
+
+function asyncDone(fn, cb) {
+ cb = once(cb);
+
+ var d = domain.create();
+ d.once('error', onError);
+ var domainBoundFn = d.bind(fn);
+
+ function done() {
+ d.removeListener('error', onError);
+ d.exit();
+ return tryCatch(cb, arguments);
+ }
+
+ function onSuccess(result) {
+ done(null, result);
+ }
+
+ function onError(error) {
+ if (!error) {
+ error = new Error('Promise rejected without Error');
+ }
+ done(error);
+ }
+
+ function asyncRunner() {
+ var result = domainBoundFn(done);
+
+ function onNext(state) {
+ onNext.state = state;
+ }
+
+ function onCompleted() {
+ onSuccess(onNext.state);
+ }
+
+ if (result && typeof result.on === 'function') {
+ // Assume node stream
+ d.add(result);
+ eos(exhaust(result), eosConfig, done);
+ return;
+ }
+
+ if (result && typeof result.subscribe === 'function') {
+ // Assume RxJS observable
+ result.subscribe(onNext, onError, onCompleted);
+ return;
+ }
+
+ if (result && typeof result.then === 'function') {
+ // Assume promise
+ result.then(onSuccess, onError);
+ return;
+ }
+ }
+
+ p.nextTick(asyncRunner);
+}
+
+module.exports = asyncDone;
diff --git a/node_modules/async-done/package.json b/node_modules/async-done/package.json
new file mode 100644
index 0000000000..369d002a04
--- /dev/null
+++ b/node_modules/async-done/package.json
@@ -0,0 +1,115 @@
+{
+ "_from": "async-done@^1.2.0",
+ "_id": "async-done@1.3.2",
+ "_inBundle": false,
+ "_integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
+ "_location": "/async-done",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "async-done@^1.2.0",
+ "name": "async-done",
+ "escapedName": "async-done",
+ "rawSpec": "^1.2.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.2.0"
+ },
+ "_requiredBy": [
+ "/async-settle",
+ "/bach",
+ "/glob-watcher"
+ ],
+ "_resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
+ "_shasum": "5e15aa729962a4b07414f528a88cdf18e0b290a2",
+ "_spec": "async-done@^1.2.0",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/glob-watcher",
+ "author": {
+ "name": "Gulp Team",
+ "email": "team@gulpjs.com",
+ "url": "https://gulpjs.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/gulpjs/async-done/issues"
+ },
+ "bundleDependencies": false,
+ "contributors": [
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com"
+ },
+ {
+ "name": "Pawel Kozlowski",
+ "email": "pkozlowski.opensource@gmail.com"
+ },
+ {
+ "name": "Matthew Podwysocki",
+ "email": "matthew.podwysocki@gmail.com"
+ },
+ {
+ "name": "Charles Samborski",
+ "email": "demurgos@demurgos.net"
+ }
+ ],
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "deprecated": false,
+ "description": "Allows libraries to handle various caller provided asynchronous functions uniformly. Maps promises, observables, child processes and streams, and callbacks to callback style.",
+ "devDependencies": {
+ "@types/node": "^9.3.0",
+ "coveralls": "github:phated/node-coveralls#2.x",
+ "eslint": "^2.13.1",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "mocha": "^3.0.0",
+ "nyc": "^10.3.2",
+ "pumpify": "^1.3.6",
+ "rxjs": "^5.5.6",
+ "through2": "^2.0.0",
+ "typescript": "^2.6.2",
+ "when": "^3.7.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts",
+ "LICENSE"
+ ],
+ "homepage": "https://github.com/gulpjs/async-done#readme",
+ "keywords": [
+ "promises",
+ "callbacks",
+ "observables",
+ "streams",
+ "end",
+ "completion",
+ "complete",
+ "finish",
+ "done",
+ "async",
+ "error handling"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "async-done",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gulpjs/async-done.git"
+ },
+ "scripts": {
+ "azure-pipelines": "nyc mocha --async-only --reporter xunit -O output=test.xunit",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls",
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "nyc mocha --async-only",
+ "test-types": "tsc -p test/types"
+ },
+ "types": "index.d.ts",
+ "version": "1.3.2"
+}
diff --git a/node_modules/async-each-series/Readme.md b/node_modules/async-each-series/Readme.md
new file mode 100644
index 0000000000..d49279cdc0
--- /dev/null
+++ b/node_modules/async-each-series/Readme.md
@@ -0,0 +1,65 @@
+# async-each-series
+
+ Apply an async function to each Array element in series
+
+ [![Build Status](https://travis-ci.org/jb55/async-each-series.svg)](https://travis-ci.org/jb55/async-each-series)
+
+ [![browser support](https://ci.testling.com/jb55/async-each-series.png)](https://ci.testling.com/jb55/async-each-series)
+
+## Installation
+
+ Install with [npm](https://www.npmjs.org):
+
+ $ npm install async-each-series
+
+ Install with [component(1)](http://component.io):
+
+ $ component install jb55/async-each-series
+
+## Examples
+
+### Node.js
+
+```javascript
+var each = require('async-each-series');
+each(['foo','bar','baz'], function(el, next) {
+ setTimeout(function () {
+ console.log(el);
+ next();
+ }, Math.random() * 5000);
+}, function (err) {
+ console.log('finished');
+});
+//=> foo
+//=> bar
+//=> baz
+//=> finished
+```
+
+## API
+
+### eachSeries(array, iterator(elem, cb(err, elem)), finishedCb(err))
+
+## License
+
+ The MIT License (MIT)
+
+ Copyright (c) 2014 William Casarin
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
diff --git a/node_modules/async-each-series/index.js b/node_modules/async-each-series/index.js
new file mode 100644
index 0000000000..4d796c8457
--- /dev/null
+++ b/node_modules/async-each-series/index.js
@@ -0,0 +1,21 @@
+module.exports = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!Array.isArray(arr) || !arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ var iterate = function () {
+ iterator(arr[completed], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ ++completed;
+ if (completed >= arr.length) { callback(); }
+ else { iterate(); }
+ }
+ });
+ };
+ iterate();
+};
diff --git a/node_modules/async-each-series/package.json b/node_modules/async-each-series/package.json
new file mode 100644
index 0000000000..d648f36987
--- /dev/null
+++ b/node_modules/async-each-series/package.json
@@ -0,0 +1,76 @@
+{
+ "_from": "async-each-series@0.1.1",
+ "_id": "async-each-series@0.1.1",
+ "_inBundle": false,
+ "_integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
+ "_location": "/async-each-series",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "version",
+ "registry": true,
+ "raw": "async-each-series@0.1.1",
+ "name": "async-each-series",
+ "escapedName": "async-each-series",
+ "rawSpec": "0.1.1",
+ "saveSpec": null,
+ "fetchSpec": "0.1.1"
+ },
+ "_requiredBy": [
+ "/browser-sync-ui"
+ ],
+ "_resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+ "_shasum": "7617c1917401fd8ca4a28aadce3dbae98afeb432",
+ "_spec": "async-each-series@0.1.1",
+ "_where": "/Users/edenk/Documents/Product/Repositories/developers-community/node_modules/browser-sync-ui",
+ "author": {
+ "name": "jb55"
+ },
+ "bugs": {
+ "url": "https://github.com/jb55/async-each-series/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Apply an async function to each Array element in series.",
+ "devDependencies": {
+ "expect.js": "^0.3.1",
+ "mocha": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/jb55/async-each-series#readme",
+ "keywords": [
+ "async",
+ "asyncEachSeries",
+ "eachSeries",
+ "each",
+ "asyncEach"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "async-each-series",
+ "repository": {
+ "url": "git+ssh://git@github.com/jb55/async-each-series.git"
+ },
+ "scripts": {
+ "test": "mocha -R spec"
+ },
+ "testling": {
+ "harness": "mocha-bdd",
+ "files": "test.js",
+ "browsers": [
+ "ie/8..latest",
+ "chrome/28..latest",
+ "firefox/latest",
+ "safari/latest",
+ "opera/latest",
+ "iphone/6",
+ "ipad/6",
+ "android-browser/latest"
+ ]
+ },
+ "version": "0.1.1"
+}
diff --git a/node_modules/async-each/README.md b/node_modules/async-each/README.md
new file mode 100644
index 0000000000..6444d95429
--- /dev/null
+++ b/node_modules/async-each/README.md
@@ -0,0 +1,52 @@
+# async-each
+
+No-bullshit, ultra-simple, 35-lines-of-code async parallel forEach function for JavaScript.
+
+We don't need junky 30K async libs. Really.
+
+For browsers and node.js.
+
+## Installation
+* Just include async-each before your scripts.
+* `npm install async-each` if you’re using node.js.
+
+## Usage
+
+* `each(array, iterator, callback);` — `Array`, `Function`, `(optional) Function`
+* `iterator(item, next)` receives current item and a callback that will mark the item as done. `next` callback receives optional `error, transformedItem` arguments.
+* `callback(error, transformedArray)` optionally receives first error and transformed result `Array`.
+
+```javascript
+var each = require('async-each');
+each(['a.js', 'b.js', 'c.js'], fs.readFile, function(error, contents) {
+ if (error) console.error(error);
+ console.log('Contents for a, b and c:', contents);
+});
+
+// Alternatively in browser:
+asyncEach(list, fn, callback);
+```
+
+## License
+
+The MIT License (MIT)
+
+Copyright (c) 2016 Paul Miller [(paulmillr.com)](http://paulmillr.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the “Software”), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/async-each/index.js b/node_modules/async-each/index.js
new file mode 100644
index 0000000000..277217df3a
--- /dev/null
+++ b/node_modules/async-each/index.js
@@ -0,0 +1,38 @@
+// async-each MIT license (by Paul Miller from https://paulmillr.com).
+(function(globals) {
+ 'use strict';
+ var each = function(items, next, callback) {
+ if (!Array.isArray(items)) throw new TypeError('each() expects array as first argument');
+ if (typeof next !== 'function') throw new TypeError('each() expects function as second argument');
+ if (typeof callback !== 'function') callback = Function.prototype; // no-op
+
+ if (items.length === 0) return callback(undefined, items);
+
+ var transformed = new Array(items.length);
+ var count = 0;
+ var returned = false;
+
+ items.forEach(function(item, index) {
+ next(item, function(error, transformedItem) {
+ if (returned) return;
+ if (error) {
+ returned = true;
+ return callback(error);
+ }
+ transformed[index] = transformedItem;
+ count += 1;
+ if (count === items.length) return callback(undefined, transformed);
+ });
+ });
+ };
+
+ if (typeof define !== 'undefined' && define.amd) {
+ define([], function() {
+ return each;
+ }); // RequireJS
+ } else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = each; // CommonJS
+ } else {
+ globals.asyncEach = each; //
+
+
+