From cbf36de8f121b75ef525d5b2467518f0966ab30a Mon Sep 17 00:00:00 2001
From: Rebecca Turner Install package(s) and run tests This command runs an npm install-test
SYNOPSIS
+npm install-test (with no args, in package dir)
+npm install-test [<@scope>/]<name>
+npm install-test [<@scope>/]<name>@<tag>
+npm install-test [<@scope>/]<name>@<version>
+npm install-test [<@scope>/]<name>@<version range>
+npm install-test <tarball file>
+npm install-test <tarball url>
+npm install-test <folder>
+
+alias: npm it
+common options: [--save|--save-dev|--save-optional] [--save-exact] [--dry-run]
+
DESCRIPTION
+npm install
followed immediately by an npm test
. It
+takes exactly the same arguments as npm install
.SEE ALSO
+
+
+
+
+
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
index 52ffa24fb4f9bc..56f15253062e95 100644
--- a/deps/npm/html/doc/cli/npm-install.html
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -28,11 +28,11 @@
+
+
+
+
+
+
+ SYNOPSIS
by that. See npm-shrinkwrap(1).
A package
is:
package.json(5)
file<name>@<version>
that is published on the registry (see npm-registry(7)
) with (c)<name>@<tag>
that points to (d)<name>@<tag>
(see npm-dist-tag(1)
) that points to (d)<name>
that has a "latest" tag satisfying (e)<git remote url>
that resolves to (a) In global mode (ie, with -g
or --global
appended to the command),
it installs the current package context (ie, the current working
directory) as a global package.
By default, npm install
will install all modules listed as dependencies.
- With the --production
flag (or when the NODE_ENV
environment variable
+
By default, npm install
will install all modules listed as dependencies
+ in package.json(5)
.
With the --production
flag (or when the NODE_ENV
environment variable
is set to production
), npm will not install modules listed in
devDependencies
.
npm install [<@scope>/]<name> [-S|--save|-D|--save-dev|-O|--save-optional]
:
Do a <name>@<tag>
install, where <tag>
is the "tag" config. (See
- npm-config(7)
.)
npm-config(7)
. The config's default value is latest
.)
In most cases, this will install the latest version of the module published on npm.
Example:
@@ -206,6 +207,14 @@npm install sax --force
The -g
or --global
argument will cause npm to install the package globally
rather than locally. See npm-folders(5)
.
The --global-style
argument will cause npm to install the package into
+your local node_modules
folder with the same layout it uses with the
+global node_modules
folder. Only your direct dependencies will show in
+node_modules
and everything they depend on will be flattened in their
+node_modules
folders. This obviously will elminate some deduping.
The --legacy-bundling
argument will cause npm to install the package such
+that versions of npm prior to 1.4, such as the one included with node 0.8,
+can install the package. This eliminates all automatic deduping.
The --link
argument will cause npm to link global installs into the
local space in some cases.
The --no-bin-links
argument will prevent npm from creating symlinks for
@@ -280,8 +289,9 @@
Default: http://registry.npmjs.org/
+Default: https://registry.npmjs.org/
The base URL of the npm package registry. If scope
is also specified,
it takes precedence.
npm ls promzard
in npm's source tree will show:
-npm@3.3.12 /path/to/npm
+npm@3.6.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
It will print out extraneous, missing, and invalid packages.
@@ -104,5 +104,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
index 69513a8d7bc156..0c007aa4b1e500 100644
--- a/deps/npm/html/doc/cli/npm-outdated.html
+++ b/deps/npm/html/doc/cli/npm-outdated.html
@@ -15,9 +15,56 @@ SYNOPSIS
This command will check the registry to see if any (or, specific) installed packages are currently outdated.
-The resulting field 'wanted' shows the latest version according to the -version specified in the package.json, the field 'latest' the very latest -version of the package.
+In the output:
+wanted
is the maximum version of the package that satisfies the semver
+range specified in package.json
. If there's no available semver range (i.e.
+you're running npm outdated --global
, or the package isn't included in
+package.json
), then wanted
shows the currently-installed version.latest
is the version of the package tagged as latest in the registry.
+Running npm publish
with no special configuration will publish the package
+with a dist-tag of latest
. This may or may not be the maximum version of
+the package, or the most-recently published version of the package, depending
+on how the package's developer manages the latest dist-tag(1).location
is where in the dependency tree the package is located. Note that
+npm outdated
defaults to a depth of 0, so unless you override that, you'll
+always be seeing only top-level dependencies that are outdated.package type
(when using --long
/ -l
) tells you whether this package is
+a dependency
or a devDependency
. Packages not included in package.json
+are always marked dependencies
.$ npm outdated
+Package Current Wanted Latest Location
+glob 5.0.15 5.0.15 6.0.1 test-outdated-output
+nothingness 0.0.3 git git test-outdated-output
+npm 3.5.1 3.5.2 3.5.1 test-outdated-output
+local-dev 0.0.3 linked linked test-outdated-output
+once 1.3.2 1.3.3 1.3.3 test-outdated-output
+
With these dependencies
:
{
+ "glob": "^5.0.15",
+ "nothingness": "github:othiym23/nothingness#master",
+ "npm": "^3.5.1",
+ "once": "^1.3.1"
+}
+
+A few things to note:
+glob
requires ^5
, which prevents npm from installing glob@6
, which is
+outside the semver range.npm outdated
and
+npm update
have to fetch Git repos to check. This is why currently doing a
+reinstall of a Git dependency always forces a new clone and install.npm@3.5.2
is marked as "wanted", but "latest" is npm@3.5.1
because npm
+uses dist-tags to manage its latest
and next
release channels. npm update
+will install the newest version, but npm install npm
(with no semver range)
+will install whatever's tagged as latest
.once
is just plain out of date. Reinstalling node_modules
from scratch or
+running npm update
will bring it up to spec.Max depth for checking dependency tree.
NODE_ENV
being set to production
.
Publishes a package to the registry so that it can be installed by name. See
-npm-developers(7)
for details on what's included in the published package, as
-well as details on how the package is built.
Publishes a package to the registry so that it can be installed by name. All
+files in the package directory are included if no local .gitignore
or
+.npmignore
file exists. If both files exist and a file is ignored by
+.gitignore
but not by .npmignore
then it will be included. See
+npm-developers(7)
for full details on what's included in the published
+package, as well as details on how the package is built.
By default npm will publish to the public registry. This can be overridden by
specifying a different default registry or using a npm-scope(7)
in the name
(see package.json(5)
).
[--tag <tag>]
Registers the published package with the given tag, such that npm install
<name>@<tag>
will install this version. By default, npm publish
updates
-and npm install
installs the latest
tag.
npm install
installs the latest
tag. See npm-dist-tag(1)
for
+details about tags.
[--access <public|restricted>]
Tells the registry whether this package should be published as public or
@@ -68,5 +72,5 @@
"scripts": {"test": "tap test/\*.js"}
instead of "scripts": {"test": "node_modules/.bin/tap test/\*.js"}
to run your tests.
If you try to run a script without having a node_modules
directory and it fails,
+you will be given a warning to run npm install
, just in case you've forgotten.
Start a package
npm start [-- <args>]
This runs a package's "start" script, if one was provided.
+This runs an arbitrary command specified in the package's "start"
property of
+its "scripts"
object. If no "start"
property is specified on the
+"scripts"
object, it will run node server.js
.
As of npm@2.0.0
, you can
+use custom arguments when executing scripts. Refer to npm-run-script(1) for
+more details.
Teams must always be fully qualified with the organization/scope they belong to
when operating on them, separated by a colon (:
). That is, if you have a
developers
team on a foo
organization, you must always refer to that team as
-developers:foo
in these commands.
foo:developers
in these commands.
create / destroy: Create a new team, or destroy an existing one.
@@ -67,4 +67,4 @@Remove a package
+Remove a package
npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]
@@ -60,5 +60,5 @@ SYNOPSIS
-
+
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
index da50613ed6c6be..4b6d4daddd8489 100644
--- a/deps/npm/html/doc/cli/npm-unpublish.html
+++ b/deps/npm/html/doc/cli/npm-unpublish.html
@@ -47,5 +47,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
index fe4e3c178f2184..fb5333422ed0d1 100644
--- a/deps/npm/html/doc/cli/npm-update.html
+++ b/deps/npm/html/doc/cli/npm-update.html
@@ -24,7 +24,7 @@ SYNOPSIS
or local) will be updated.
As of npm@2.6.1
, the npm update
will only inspect top-level packages.
Prior versions of npm
would also recursively inspect all dependencies.
-To get the old behavior, use npm --depth 9999 update
, but be warned that
+To get the old behavior, use npm --depth Infinity update
, but be warned that
simultaneous asynchronous update of all packages, including npm
itself
and packages that npm
depends on, often causes problems up to and including
the uninstallation of npm
itself.
@@ -120,5 +120,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
index bc3cf3b5d64297..5e9a7ee32639c8 100644
--- a/deps/npm/html/doc/cli/npm-version.html
+++ b/deps/npm/html/doc/cli/npm-version.html
@@ -11,7 +11,7 @@
npm-version
Bump a package version
SYNOPSIS
-npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease]
+npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
'npm [-v | --version]' to print npm version
'npm view <pkg> version' to view a package's published version
@@ -19,10 +19,11 @@ SYNOPSIS
DESCRIPTION
Run this in a package directory to bump the version and write the new
data back to package.json
and, if present, npm-shrinkwrap.json
.
-The newversion
argument should be a valid semver string, or a
-valid second argument to semver.inc (one of patch
, minor
, major
,
-prepatch
, preminor
, premajor
, prerelease
). In the second case,
-the existing version will be incremented by 1 in the specified field.
+The newversion
argument should be a valid semver string, a
+valid second argument to semver.inc (one of patch
, minor
, major
,
+prepatch
, preminor
, premajor
, prerelease
), or from-git
. In the second case,
+the existing version will be incremented by 1 in the specified field.
+from-git
will try to read the latest git tag, and use that as the new npm version.
If run in a git repo, it will also create a version commit and tag.
This behavior is controlled by git-tag-version
(see below), and can
be disabled on the command line by running npm --no-git-tag-version version
.
@@ -99,5 +100,5 @@
SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
index 965b3504e26229..0e3f034be30677 100644
--- a/deps/npm/html/doc/cli/npm-view.html
+++ b/deps/npm/html/doc/cli/npm-view.html
@@ -83,5 +83,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
index 1b954c864b7b19..dd98b1af77c85a 100644
--- a/deps/npm/html/doc/cli/npm-whoami.html
+++ b/deps/npm/html/doc/cli/npm-whoami.html
@@ -33,5 +33,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
index b43ccda47f7d7b..09836480beefb0 100644
--- a/deps/npm/html/doc/cli/npm.html
+++ b/deps/npm/html/doc/cli/npm.html
@@ -13,7 +13,7 @@ npm
javascript package manager
SYNOPSIS
npm <command> [args]
VERSION
-3.3.12
+3.6.0
DESCRIPTION
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@@ -109,16 +109,16 @@
CONTRIBUTIONS
If you would like to contribute, but don't know what to work on, check
the issues list or ask on the mailing list.
-- http://github.com/npm/npm/issues
-- npm-@googlegroups.com
+- https://github.com/npm/npm/issues
+- npm-@googlegroups.com
BUGS
When you find issues, please report them:
- web:
-http://github.com/npm/npm/issues
+https://github.com/npm/npm/issues
- email:
-npm-@googlegroups.com
+npm-@googlegroups.com
Be sure to include all of the output from the npm command that didn't work
as expected. The npm-debug.log
file is also helpful to provide.
@@ -128,7 +128,7 @@ AUTHOR
Isaac Z. Schlueter ::
isaacs ::
@izs ::
-i@izs.me
+i@izs.me
SEE ALSO
- npm-help(1)
@@ -140,7 +140,6 @@ SEE ALSO
- npm-config(7)
- npmrc(5)
- npm-index(7)
-- npm(3)
The prefix
config defaults to the location where node is installed.
-On most systems, this is /usr/local
, and most of the time is the same
-as node's process.installPrefix
.
On windows, this is the exact location of the node.exe binary. On Unix
-systems, it's one level up, since node is typically installed at
-{prefix}/bin/node
rather than {prefix}/node.exe
.
/usr/local
. On windows, this is the exact
+location of the node.exe binary. On Unix systems, it's one level up,
+since node is typically installed at {prefix}/bin/node
rather than
+{prefix}/node.exe
.
When the global
flag is set, npm installs things into this prefix.
When it is not set, it uses the root of the current package, or the
current working directory if not in a package already.
Scoped packages are installed the same way, except they are grouped together
in a sub-folder of the relevant node_modules
folder with the name of that
scope prefix by the @ symbol, e.g. npm install @myorg/package
would place
-the package in {prefix}/node_modules/@myorg/package
. See scopes(7)
for
+the package in {prefix}/node_modules/@myorg/package
. See scope(7)
for
more details.
If you wish to require()
a package, then install it locally.
The prefix
config defaults to the location where node is installed.
-On most systems, this is /usr/local
, and most of the time is the same
-as node's process.installPrefix
.
On windows, this is the exact location of the node.exe binary. On Unix
-systems, it's one level up, since node is typically installed at
-{prefix}/bin/node
rather than {prefix}/node.exe
.
/usr/local
. On windows, this is the exact
+location of the node.exe binary. On Unix systems, it's one level up,
+since node is typically installed at {prefix}/bin/node
rather than
+{prefix}/node.exe
.
When the global
flag is set, npm installs things into this prefix.
When it is not set, it uses the root of the current package, or the
current working directory if not in a package already.
Scoped packages are installed the same way, except they are grouped together
in a sub-folder of the relevant node_modules
folder with the name of that
scope prefix by the @ symbol, e.g. npm install @myorg/package
would place
-the package in {prefix}/node_modules/@myorg/package
. See scopes(7)
for
+the package in {prefix}/node_modules/@myorg/package
. See scope(7)
for
more details.
If you wish to require()
a package, then install it locally.
The name is what your thing is called.
Some rules:
{ "license" : "BSD-3-Clause" }
You can check the full list of SPDX license IDs. Ideally you should pick one that is -OSI approved.
-If your package is licensed under multiple common licenses, use an SPDX license +OSI approved.
+If your package is licensed under multiple common licenses, use an SPDX license expression syntax version 2.0 string, like this:
{ "license" : "(ISC OR GPL-3.0)" }
If you are using a license that hasn't been assigned an SPDX identifier, or if @@ -309,7 +309,7 @@
git...
See 'Git URLs as Dependencies' belowuser/repo
See 'GitHub URLs' belowtag
A specific version tagged and published as tag
See npm-tag(1)
path/path/path
See Local Paths belowpath/path/path
See Local Paths belowFor example, these are all valid:
{ "dependencies" :
@@ -545,7 +545,7 @@ SEE ALSO
npm-faq(7)
npm-install(1)
npm-publish(1)
-npm-rm(1)
+npm-uninstall(1)
@@ -559,5 +559,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
index dc50a18c8174d7..7ce572a4e7a228 100644
--- a/deps/npm/html/doc/files/npmrc.html
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -83,5 +83,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 92d14ba6c56be1..9c2bb70c63b8c7 100644
--- a/deps/npm/html/doc/files/package.json.html
+++ b/deps/npm/html/doc/files/package.json.html
@@ -24,7 +24,7 @@ name
The name is what your thing is called.
Some rules:
-- The name must be shorter than 214 characters. This includes the scope for
+
- The name must be less than or equal to 214 characters. This includes the scope for
scoped packages.
- The name can't start with a dot or an underscore.
- New packages must not have uppercase letters in the name.
@@ -85,8 +85,8 @@ license
{ "license" : "BSD-3-Clause" }
You can check the full list of SPDX license IDs.
Ideally you should pick one that is
-OSI approved.
-If your package is licensed under multiple common licenses, use an SPDX license
+OSI approved.
+If your package is licensed under multiple common licenses, use an SPDX license
expression syntax version 2.0 string, like this:
{ "license" : "(ISC OR GPL-3.0)" }
If you are using a license that hasn't been assigned an SPDX identifier, or if
@@ -309,7 +309,7 @@
dependencies
git...
See 'Git URLs as Dependencies' below
user/repo
See 'GitHub URLs' below
tag
A specific version tagged and published as tag
See npm-tag(1)
-path/path/path
See Local Paths below
+path/path/path
See Local Paths below
For example, these are all valid:
{ "dependencies" :
@@ -545,7 +545,7 @@ SEE ALSO
npm-faq(7)
npm-install(1)
npm-publish(1)
-npm-rm(1)
+npm-uninstall(1)
@@ -559,5 +559,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 36fcbe74c35f98..b00cd30c96b157 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -52,6 +52,8 @@ npm-help(1)
Get help on npm
npm-init(1)
Interactively create a package.json file
+npm-install-test(1)
+Install package(s) and run tests
npm-install(1)
Install a package
npm-link(1)
@@ -134,8 +136,6 @@ npm-developers(7)<
Developer Guide
npm-disputes(7)
Handling Module Name Disputes
-npm-faq(7)
-Frequently Asked Questions
npm-index(7)
Index of all npm documentation
npm-orgs(7)
@@ -162,5 +162,5 @@ semver(7)
-
+
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
index 757272863d748e..b65041aca60674 100644
--- a/deps/npm/html/doc/misc/npm-coding-style.html
+++ b/deps/npm/html/doc/misc/npm-coding-style.html
@@ -154,5 +154,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
index 74b3c7bfc65c59..20e92a3981735d 100644
--- a/deps/npm/html/doc/misc/npm-config.html
+++ b/deps/npm/html/doc/misc/npm-config.html
@@ -203,7 +203,7 @@ cert
A client certificate to pass when accessing the registry.
color
-- Default: true on Posix, false on Windows
+- Default: true
- Type: Boolean or
"always"
If false, never shows colors. If "always"
then always shows colors.
@@ -332,6 +332,17 @@
globalconfig
Type: path
The config file to read for global config options.
+global-style
+
+- Default: false
+- Type: Boolean
+
+Causes npm to install the package into your local node_modules
folder with
+the same layout it uses with the global node_modules
folder. Only your
+direct dependencies will show in node_modules
and everything they depend
+on will be flattened in their node_modules
folders. This obviously will
+elminate some deduping. If used with legacy-bundling
, legacy-bundling
will be
+preferred.
group
- Default: GID of the current process
@@ -424,6 +435,15 @@ key
- Type: String
A client key to pass when accessing the registry.
+legacy-bundling
+
+- Default: false
+- Type: Boolean
+
+Causes npm to install the package such that versions of npm prior to 1.4,
+such as the one included with node 0.8, can install the package. This
+eliminates all automatic deduping. If used with global-style
this option
+will be preferred.
link
- Default: false
@@ -739,7 +759,7 @@ tmp
on success, but left behind on failure for forensic purposes.
unicode
-- Default: true on windows and mac/unix systems with a unicode locale
+- Default: false on windows, true on mac/unix systems with a unicode locale
- Type: Boolean
When set to true, npm uses unicode characters in the tree output. When
@@ -829,5 +849,5 @@
SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
index 3da7d9162186b1..d509c6edbc019d 100644
--- a/deps/npm/html/doc/misc/npm-developers.html
+++ b/deps/npm/html/doc/misc/npm-developers.html
@@ -96,7 +96,7 @@ Keeping files out of your pa
create an empty .npmignore
file to override it. Like git
, npm
looks
for .npmignore
and .gitignore
files in all subdirectories of your
package, not only the root directory.
-
.npmignore
files follow the same pattern rules
+
.npmignore
files follow the same pattern rules
as .gitignore
files:
- Blank lines or lines starting with
#
are ignored.
@@ -161,7 +161,7 @@ Create a User Account
and then follow the prompts.
This is documented better in npm-adduser(1).
Publish your package
-This part's easy. IN the root of your folder, do this:
+This part's easy. In the root of your folder, do this:
npm publish
You can give publish a url to a tarball, or a filename of a tarball,
or a path to a folder.
@@ -195,5 +195,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
index 0962b39b5a998c..948cdbc973f3ce 100644
--- a/deps/npm/html/doc/misc/npm-disputes.html
+++ b/deps/npm/html/doc/misc/npm-disputes.html
@@ -13,7 +13,7 @@ npm-disputes
Handling Module
SYNOPSIS
- Get the author email with
npm owner ls <pkgname>
-- Email the author, CC support@npmjs.com
+- Email the author, CC support@npmjs.com
- After a few weeks, if there's no resolution, we'll sort it out.
Don't squat on package names. Publish code or move out of the way.
@@ -51,12 +51,12 @@ DESCRIPTION
owner (Bob).
Joe emails Bob, explaining the situation as respectfully as
possible, and what he would like to do with the module name. He
-adds the npm support staff support@npmjs.com to the CC list of
+adds the npm support staff support@npmjs.com to the CC list of
the email. Mention in the email that Bob can run npm owner add
joe foo
to add Joe as an owner of the foo
package.
After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-support@npmjs.com and we'll sort it out. ("Reasonable" is
+support@npmjs.com and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)
@@ -112,5 +112,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
deleted file mode 100644
index fa0cc22eff9ce8..00000000000000
--- a/deps/npm/html/doc/misc/npm-faq.html
+++ /dev/null
@@ -1,312 +0,0 @@
-
-
- npm-faq
-
-
-
-
-
-
-
-
-npm-faq
Frequently Asked Questions
-Where can I find these docs in HTML?
-https://docs.npmjs.com/, or run:
-npm config set viewer browser
-
This command will set the npm docs to open in your default web browser rather than man
.
-It didn't work.
-Please provide a little more detail, search for the error via Google or StackOverflow npm to see if another developer has encountered a similar problem.
-Why didn't it work?
-I don't know yet.
-Try reading the error output first, ensure this is a true npm issue and not a package issue. If you are having an issue with a package dependency, please submit your error to that particular package maintainer.
-For any npm issues, try following the instructions, or even retracing your steps. If the issue continues to persist, submit a bug with the steps to reproduce, please include the operating system you are working on, along with the error you recieve.
-Where does npm put stuff?
-See npm-folders(5)
-tl;dr:
-
-- Use the
npm root
command to see where modules go, and the npm bin
-command to see where executables go
-- Global installs are different from local installs. If you install
-something with the
-g
flag, then its executables go in npm bin -g
-and its modules go in npm root -g
.
-
-How do I install something on my computer in a central location?
-Install it globally by tacking -g
or --global
to the command. (This
-is especially important for command line utilities that need to add
-their bins to the global system PATH
.)
-I installed something globally, but I can't require()
it
-Install it locally.
-The global install location is a place for command-line utilities
-to put their bins in the system PATH
. It's not for use with require()
.
-If you require()
a module in your code, then that means it's a
-dependency, and a part of your program. You need to install it locally
-in your program.
-Why can't npm just put everything in one place, like other package managers?
-Not every change is an improvement, but every improvement is a change.
-This would be like asking git to do network IO for every commit. It's
-not going to happen, because it's a terrible idea that causes more
-problems than it solves.
-It is much harder to avoid dependency conflicts without nesting
-dependencies. This is fundamental to the way that npm works, and has
-proven to be an extremely successful approach. See npm-folders(5)
for
-more details.
-If you want a package to be installed in one place, and have all your
-programs reference the same copy of it, then use the npm link
command.
-That's what it's for. Install it globally, then link it into each
-program that uses it.
-Whatever, I really want the old style 'everything global' style.
-Write your own package manager. You could probably even wrap up npm
-in a shell script if you really wanted to.
-npm will not help you do something that is known to be a bad idea.
-Should I check my node_modules
folder into git?
-Usually, no. Allow npm to resolve dependencies for your packages.
-For packages you deploy, such as websites and apps,
-you should use npm shrinkwrap to lock down your full dependency tree:
-https://docs.npmjs.com/cli/shrinkwrap
-If you are paranoid about depending on the npm ecosystem,
-you should run a private npm mirror or a private cache.
-If you want 100% confidence in being able to reproduce the specific bytes
-included in a deployment, you should use an additional mechanism that can
-verify contents rather than versions. For example,
-Amazon machine images, DigitalOcean snapshots, Heroku slugs, or simple tarballs.
-Is it 'npm' or 'NPM' or 'Npm'?
-npm should never be capitalized unless it is being displayed in a
-location that is customarily all-caps (such as the title of man pages.)
-If 'npm' is an acronym, why is it never capitalized?
-Contrary to the belief of many, "npm" is not in fact an abbreviation for
-"Node Package Manager". It is a recursive bacronymic abbreviation for
-"npm is not an acronym". (If it was "ninaa", then it would be an
-acronym, and thus incorrectly named.)
-"NPM", however, is an acronym (more precisely, a capitonym) for the
-National Association of Pastoral Musicians. You can learn more
-about them at http://npm.org/.
-In software, "NPM" is a Non-Parametric Mapping utility written by
-Chris Rorden. You can analyze pictures of brains with it. Learn more
-about the (capitalized) NPM program at http://www.cabiatl.com/mricro/npm/.
-The first seed that eventually grew into this flower was a bash utility
-named "pm", which was a shortened descendent of "pkgmakeinst", a
-bash function that was used to install various different things on different
-platforms, most often using Yahoo's yinst
. If npm
was ever an
-acronym for anything, it was node pm
or maybe new pm
.
-So, in all seriousness, the "npm" project is named after its command-line
-utility, which was organically selected to be easily typed by a right-handed
-programmer using a US QWERTY keyboard layout, ending with the
-right-ring-finger in a postition to type the -
key for flags and
-other command-line arguments. That command-line utility is always
-lower-case, though it starts most sentences it is a part of.
-How do I list installed packages?
-npm ls
-How do I search for packages?
-npm search
-Arguments are greps. npm search jsdom
shows jsdom packages.
-How do I update npm?
-npm install npm -g
-
You can also update all outdated local packages by doing npm update
without
-any arguments, or global packages by doing npm update -g
.
-Occasionally, the version of npm will progress such that the current
-version cannot be properly installed with the version that you have
-installed already. (Consider, if there is ever a bug in the update
-command.)
-In those cases, you can do this:
-curl https://www.npmjs.com/install.sh | sh
-
What is a package
?
-A package is:
-
-- a) a folder containing a program described by a package.json file
-- b) a gzipped tarball containing (a)
-- c) a url that resolves to (b)
-- d) a
<name>@<version>
that is published on the registry with (c)
-- e) a
<name>@<tag>
that points to (d)
-- f) a
<name>
that has a "latest" tag satisfying (e)
-- g) a
git
url that, when cloned, results in (a).
-
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).
-Git urls can be of the form:
-git://github.com/user/project.git#commit-ish
-git+ssh://user@hostname:project.git#commit-ish
-git+http://user@hostname/project/blah.git#commit-ish
-git+https://user@hostname/project/blah.git#commit-ish
-
The commit-ish
can be any tag, sha, or branch which can be supplied as
-an argument to git checkout
. The default is master
.
-What is a module
?
-A module is anything that can be loaded with require()
in a Node.js
-program. The following things are all examples of things that can be
-loaded as modules:
-
-- A folder with a
package.json
file containing a main
field.
-- A folder with an
index.js
file in it.
-- A JavaScript file.
-
-Most npm packages are modules, because they are libraries that you
-load with require
. However, there's no requirement that an npm
-package be a module! Some only contain an executable command-line
-interface, and don't provide a main
field for use in Node programs.
-Almost all npm packages (at least, those that are Node programs)
-contain many modules within them (because every file they load with
-require()
is a module).
-In the context of a Node program, the module
is also the thing that
-was loaded from a file. For example, in the following program:
-var req = require('request')
-
we might say that "The variable req
refers to the request
module".
-So, why is it the "node_modules
" folder, but "package.json
" file? Why not node_packages
or module.json
?
-The package.json
file defines the package. (See "What is a
-package?" above.)
-The node_modules
folder is the place Node.js looks for modules.
-(See "What is a module?" above.)
-For example, if you create a file at node_modules/foo.js
and then
-had a program that did var f = require('foo.js')
then it would load
-the module. However, foo.js
is not a "package" in this case,
-because it does not have a package.json.
-Alternatively, if you create a package which does not have an
-index.js
or a "main"
field in the package.json
file, then it is
-not a module. Even if it's installed in node_modules
, it can't be
-an argument to require()
.
-"node_modules"
is the name of my deity's arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?
-No. This will never happen. This question comes up sometimes,
-because it seems silly from the outside that npm couldn't just be
-configured to put stuff somewhere else, and then npm could load them
-from there. It's an arbitrary spelling choice, right? What's the big
-deal?
-At the time of this writing, the string 'node_modules'
appears 151
-times in 53 separate files in npm and node core (excluding tests and
-documentation).
-Some of these references are in node's built-in module loader. Since
-npm is not involved at all at run-time, node itself would have to
-be configured to know where you've decided to stick stuff. Complexity
-hurdle #1. Since the Node module system is locked, this cannot be
-changed, and is enough to kill this request. But I'll continue, in
-deference to your deity's delicate feelings regarding spelling.
-Many of the others are in dependencies that npm uses, which are not
-necessarily tightly coupled to npm (in the sense that they do not read
-npm's configuration files, etc.) Each of these would have to be
-configured to take the name of the node_modules
folder as a
-parameter. Complexity hurdle #2.
-Furthermore, npm has the ability to "bundle" dependencies by adding
-the dep names to the "bundledDependencies"
list in package.json,
-which causes the folder to be included in the package tarball. What
-if the author of a module bundles its dependencies, and they use a
-different spelling for node_modules
? npm would have to rename the
-folder at publish time, and then be smart enough to unpack it using
-your locally configured name. Complexity hurdle #3.
-Furthermore, what happens when you change this name? Fine, it's
-easy enough the first time, just rename the node_modules
folders to
-./blergyblerp/
or whatever name you choose. But what about when you
-change it again? npm doesn't currently track any state about past
-configuration settings, so this would be rather difficult to do
-properly. It would have to track every previous value for this
-config, and always accept any of them, or else yesterday's install may
-be broken tomorrow. Complexity hurdle #4.
-Never going to happen. The folder is named node_modules
. It is
-written indelibly in the Node Way, handed down from the ancient times
-of Node 0.3.
-How do I install node with npm?
-You don't. Try one of these node version managers:
-Unix:
-
-Windows:
-
-- http://github.com/marcelklehr/nodist
-- https://github.com/coreybutler/nvm-windows
-- https://github.com/hakobera/nvmw
-- https://github.com/nanjingboy/nvmw
-
-How can I use npm for development?
-See npm-developers(7)
and package.json(5)
.
-You'll most likely want to npm link
your development folder. That's
-awesomely handy.
-To set up your own private registry, check out npm-registry(7)
.
-Can I list a url as a dependency?
-Yes. It should be a url to a gzipped tarball containing a single folder
-that has a package.json in its root, or a git url.
-(See "what is a package?" above.)
-How do I symlink to a dev folder so I don't have to keep re-installing?
-See npm-link(1)
-The package registry website. What is that exactly?
-See npm-registry(7)
.
-I forgot my password, and can't publish. How do I reset it?
-Go to https://npmjs.com/forgot.
-I get ECONNREFUSED a lot. What's up?
-Either the registry is down, or node's DNS isn't able to reach out.
-To check if the registry is down, open up
-https://registry.npmjs.org/ in a web browser. This will also tell
-you if you are just unable to access the internet for some reason.
-If the registry IS down, let us know by emailing support@npmjs.com
-or posting an issue at https://github.com/npm/npm/issues. If it's
-down for the world (and not just on your local network) then we're
-probably already being pinged about it.
-You can also often get a faster response by visiting the #npm channel
-on Freenode IRC.
-Why no namespaces?
-npm has only one global namespace. If you want to namespace your own packages,
-you may: simply use the -
character to separate the names or use scoped
-packages. npm is a mostly anarchic system. There is not sufficient need to
-impose namespace rules on everyone.
-As of 2.0, npm supports scoped packages, which allow you to publish a group of
-related modules without worrying about name collisions.
-Every npm user owns the scope associated with their username. For example, the
-user named npm
owns the scope @npm
. Scoped packages are published inside a
-scope by naming them as if they were files under the scope directory, e.g., by
-setting name
in package.json
to @npm/npm
.
-Scoped packages are supported by the public npm registry. The npm client is
-backwards-compatible with un-scoped registries, so it can be used to work with
-scoped and un-scoped registries at the same time.
-Unscoped packages can only depend on other unscoped packages. Scoped packages
-can depend on packages from their own scope, a different scope, or the public
-registry (unscoped).
-For the current documentation of scoped packages, see
-https://docs.npmjs.com/misc/scope
-References:
-
-For the reasoning behind the "one global namespace", please see this
-discussion: https://github.com/npm/npm/issues/798 (TL;DR: It doesn't
-actually make things better, and can make them worse.)
-
-For the pre-implementation discussion of the scoped package feature, see
-this discussion: https://github.com/npm/npm/issues/5239
-
-
-Who does npm?
-npm was originally written by Isaac Z. Schlueter, and many others have
-contributed to it, some of them quite substantially.
-The npm open source project, The npm Registry, and the community
-website are maintained and operated by the
-good folks at npm, Inc.
-I have a question or request not addressed here. Where should I put it?
-Post an issue on the github project:
-
-Why does npm hate me?
-npm is not capable of hatred. It loves everyone, especially you.
-SEE ALSO
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
index ae0950efd7ebcf..2342f319d6ebdf 100644
--- a/deps/npm/html/doc/misc/npm-index.html
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -52,6 +52,8 @@ npm-help(1)
Get help on npm
npm-init(1)
Interactively create a package.json file
+npm-install-test(1)
+Install package(s) and run tests
npm-install(1)
Install a package
npm-link(1)
@@ -134,8 +136,6 @@ npm-developers(
Developer Guide
npm-disputes(7)
Handling Module Name Disputes
-npm-faq(7)
-Frequently Asked Questions
npm-index(7)
Index of all npm documentation
npm-orgs(7)
@@ -162,4 +162,4 @@ semver(7)
-
+
diff --git a/deps/npm/html/doc/misc/npm-orgs.html b/deps/npm/html/doc/misc/npm-orgs.html
index a42a4863f8141a..07a766ed892863 100644
--- a/deps/npm/html/doc/misc/npm-orgs.html
+++ b/deps/npm/html/doc/misc/npm-orgs.html
@@ -86,4 +86,4 @@ Team Admins create teams
-
+
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
index 9068310aef2015..881a2bbae00837 100644
--- a/deps/npm/html/doc/misc/npm-registry.html
+++ b/deps/npm/html/doc/misc/npm-registry.html
@@ -17,10 +17,10 @@ DESCRIPTION
Additionally, npm's package registry implementation supports several
write APIs as well, to allow for publishing packages and managing user
account information.
-The official public npm registry is at http://registry.npmjs.org/. It
+
The official public npm registry is at https://registry.npmjs.org/. It
is powered by a CouchDB database, of which there is a public mirror at
-http://skimdb.npmjs.com/registry. The code for the couchapp is
-available at http://github.com/npm/npm-registry-couchapp.
+https://skimdb.npmjs.com/registry. The code for the couchapp is
+available at https://github.com/npm/npm-registry-couchapp.
The registry URL used is determined by the scope of the package (see
npm-scope(7)
). If no scope is specified, the default registry is used, which is
supplied by the registry
config parameter. See npm-config(1)
,
@@ -70,5 +70,5 @@
SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html
index 2aac1b177dd8cc..dd2895914d02ea 100644
--- a/deps/npm/html/doc/misc/npm-scope.html
+++ b/deps/npm/html/doc/misc/npm-scope.html
@@ -91,5 +91,5 @@ SEE ALSO
-
+
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index ed50c1caf8a9d7..50a5c2f578b3d8 100644
--- a/deps/npm/html/doc/misc/npm-scripts.html
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -134,10 +134,10 @@ Special: package.json "config&q
, "uninstall" : "scripts/uninstall.js"
}
}
-
then the scripts/install.js
will be called for the install,
-post-install, stages of the lifecycle, and the scripts/uninstall.js
-would be called when the package is uninstalled. Since
-scripts/install.js
is running for three different phases, it would
+
then scripts/install.js
will be called for the install
+and post-install stages of the lifecycle, and scripts/uninstall.js
+will be called when the package is uninstalled. Since
+scripts/install.js
is running for two different phases, it would
be wise in this case to look at the npm_lifecycle_event
environment
variable.
If you want to run a make command, you can do so. This works just @@ -176,7 +176,7 @@
npm_config_binroot
environ is set to /home/user/bin
, then
+the npm_config_binroot
environment variable is set to /home/user/bin
, then
don't try to install executables into /usr/local/bin
. The user
probably set it up that way for a reason.The method .inc
takes an additional identifier
string argument that
will append the value of the string as a prerelease identifier:
> semver.inc('1.2.3', 'pre', 'beta')
+> semver.inc('1.2.3', 'prerelease', 'beta')
'1.2.4-beta.0'
command-line example:
@@ -199,6 +199,26 @@ Caret Ranges ^1.2.3
^1.x
:= >=1.0.0 <2.0.0
^0.x
:= >=0.0.0 <1.0.0
+Range Grammar
+Putting all this together, here is a Backus-Naur grammar for ranges,
+for the benefit of parser authors:
+range-set ::= range ( logical-or range ) *
+logical-or ::= ( ' ' ) * '||' ( ' ' ) *
+range ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen ::= partial ' - ' partial
+simple ::= primitive | partial | tilde | caret
+primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
+partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
+xr ::= 'x' | 'X' | '*' | nr
+nr ::= '0' | ['1'-'9']['0'-'9']+
+tilde ::= '~' partial
+caret ::= '^' partial
+qualifier ::= ( '-' pre )? ( '+' build )?
+pre ::= parts
+build ::= parts
+parts ::= part ( '.' part ) *
+part ::= nr | [-0-9A-Za-z]+
+
Functions
All methods and classes take a final loose
boolean argument that, if
true, will be more forgiving about not-quite-valid semver strings.
@@ -282,5 +302,5 @@
Ranges
-
+
diff --git a/deps/npm/html/index.html b/deps/npm/html/index.html
index 06ca14ba4ac9b7..0d3c128b794d0e 100644
--- a/deps/npm/html/index.html
+++ b/deps/npm/html/index.html
@@ -86,7 +86,7 @@ Other Cool Stuff
README
Help Documentation
FAQ
- Search for Packages
+ Search for Packages
Mailing List
Bugs
diff --git a/deps/npm/lib/access.js b/deps/npm/lib/access.js
index 25a482a20e3cdb..158ce50544f1c4 100644
--- a/deps/npm/lib/access.js
+++ b/deps/npm/lib/access.js
@@ -73,7 +73,9 @@ function access (args, cb) {
}
function parseParams (cmd, args, cb) {
- var params = {}
+ // mapToRegistry will complain if package is undefined,
+ // but it's not needed for ls-packages
+ var params = { 'package': '' }
if (cmd === 'grant') {
params.permissions = args.shift()
}
@@ -82,22 +84,25 @@ function parseParams (cmd, args, cb) {
params.scope = entity[0]
params.team = entity[1]
}
- getPackage(args.shift(), function (err, pkg) {
- if (err) { return cb(err) }
- params.package = pkg
- if (!params.scope && cmd === 'ls-packages') {
+ if (cmd === 'ls-packages') {
+ if (!params.scope) {
whoami([], true, function (err, scope) {
params.scope = scope
cb(err, params)
})
} else {
- if (cmd === 'ls-collaborators') {
- params.user = args.shift()
- }
cb(null, params)
}
- })
+ } else {
+ getPackage(args.shift(), function (err, pkg) {
+ if (err) return cb(err)
+ params.package = pkg
+
+ if (cmd === 'ls-collaborators') params.user = args.shift()
+ cb(null, params)
+ })
+ }
}
function getPackage (name, cb) {
@@ -106,6 +111,17 @@ function getPackage (name, cb) {
} else {
readPackageJson(
resolve(npm.prefix, 'package.json'),
- function (err, data) { cb(err, data.name) })
+ function (err, data) {
+ if (err) {
+ if (err.code === 'ENOENT') {
+ cb(new Error('no package name passed to command and no package.json found'))
+ } else {
+ cb(err)
+ }
+ } else {
+ cb(null, data.name)
+ }
+ }
+ )
}
}
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index 630a2c5e6f1797..b012371b339ad3 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -168,6 +168,8 @@ function save (c, u, cb) {
}
log.info('adduser', 'Authorized user %s', u.u)
+ var scopeMessage = scope ? ' to scope ' + scope : ''
+ console.log('Logged in as %s%s on %s.', u.u, scopeMessage, uri)
npm.config.save('user', cb)
})
}
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index eb5a1e413771dc..057972c03d3474 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -348,6 +348,7 @@ function afterAdd (cb) {
// Save the resolved, shasum, etc. into the data so that the next
// time we load from this cached data, we have all the same info.
+ // Ignore if it fails.
var pj = path.join(cachedPackageRoot(data), 'package', 'package.json')
var done = inflight(pj, cb)
@@ -358,7 +359,7 @@ function afterAdd (cb) {
if (er) return done(er)
writeFileAtomic(pj, JSON.stringify(data), { chown: cs }, function (er) {
if (!er) log.verbose('afterAdd', pj, 'written')
- return done(er, data)
+ return done(null, data)
})
})
}
diff --git a/deps/npm/lib/cache/add-local-tarball.js b/deps/npm/lib/cache/add-local-tarball.js
index 7d747ea80444c5..d0952b64ef9a60 100644
--- a/deps/npm/lib/cache/add-local-tarball.js
+++ b/deps/npm/lib/cache/add-local-tarball.js
@@ -13,7 +13,7 @@ var cachedPackageRoot = require('./cached-package-root.js')
var chownr = require('chownr')
var inflight = require('inflight')
var once = require('once')
-var writeStream = require('fs-write-stream-atomic')
+var writeStreamAtomic = require('fs-write-stream-atomic')
var tempFilename = require('../utils/temp-filename.js')
var rimraf = require('rimraf')
var packageId = require('../utils/package-id.js')
@@ -162,7 +162,7 @@ function addTmpTarball_ (tgz, data, shasum, cb) {
if (er) return cb(er)
var read = fs.createReadStream(tgz)
- var write = writeStream(target, { mode: npm.modes.file })
+ var write = writeStreamAtomic(target, { mode: npm.modes.file })
var fin = cs.uid && cs.gid ? chown : done
read.on('error', cb).pipe(write).on('error', cb).on('close', fin)
})
diff --git a/deps/npm/lib/cache/add-remote-tarball.js b/deps/npm/lib/cache/add-remote-tarball.js
index aaa768acbd07b9..90296c111fcf5a 100644
--- a/deps/npm/lib/cache/add-remote-tarball.js
+++ b/deps/npm/lib/cache/add-remote-tarball.js
@@ -4,7 +4,8 @@ var log = require('npmlog')
var path = require('path')
var sha = require('sha')
var retry = require('retry')
-var createWriteStream = require('fs-write-stream-atomic')
+var writeStreamAtomic = require('fs-write-stream-atomic')
+var PassThrough = require('readable-stream').PassThrough
var npm = require('../npm.js')
var inflight = require('inflight')
var addLocalTarball = require('./add-local-tarball.js')
@@ -90,7 +91,7 @@ function fetchAndShaCheck (u, tmp, shasum, auth, cb) {
return cb(er, response)
}
- var tarball = createWriteStream(tmp, { mode: npm.modes.file })
+ var tarball = writeStreamAtomic(tmp, { mode: npm.modes.file })
tarball.on('error', function (er) {
cb(er)
tarball.destroy()
@@ -117,6 +118,15 @@ function fetchAndShaCheck (u, tmp, shasum, auth, cb) {
})
})
- response.pipe(tarball)
+ // 0.8 http streams have a bug, where if they're paused with data in
+ // their buffers when the socket closes, they call `end` before emptying
+ // those buffers, which results in the entire pipeline ending and thus
+ // the point that applied backpressure never being able to trigger a
+ // `resume`.
+ // We work around this by piping into a pass through stream that has
+ // unlimited buffering. The pass through stream is from readable-stream
+ // and is thus a current streams3 implementation that is free of these
+ // bugs even on 0.8.
+ response.pipe(PassThrough({highWaterMark: Infinity})).pipe(tarball)
})
}
diff --git a/deps/npm/lib/completion.js b/deps/npm/lib/completion.js
index 4aa3ae13a7cf28..96f4c3ee55f021 100644
--- a/deps/npm/lib/completion.js
+++ b/deps/npm/lib/completion.js
@@ -45,8 +45,8 @@ completion.completion = function (opts, cb) {
}
function completion (args, cb) {
- if (process.platform === 'win32') {
- var e = new Error('npm completion not supported on windows')
+ if (process.platform === 'win32' && !(/^MINGW(32|64)$/.test(process.env.MSYSTEM))) {
+ var e = new Error('npm completion supported only in MINGW / Git bash on Windows')
e.code = 'ENOTSUP'
e.errno = require('constants').ENOTSUP
return cb(e)
diff --git a/deps/npm/lib/config/defaults.js b/deps/npm/lib/config/defaults.js
index ff56cb8e4e7bda..ee1e73851eb398 100644
--- a/deps/npm/lib/config/defaults.js
+++ b/deps/npm/lib/config/defaults.js
@@ -145,6 +145,7 @@ Object.defineProperty(exports, 'defaults', {get: function () {
global: false,
globalconfig: path.resolve(globalPrefix, 'etc', 'npmrc'),
+ 'global-style': false,
group: process.platform === 'win32' ? 0
: process.env.SUDO_GID || (process.getgid && process.getgid()),
heading: 'npm',
@@ -158,6 +159,7 @@ Object.defineProperty(exports, 'defaults', {get: function () {
'init-license': 'ISC',
json: false,
key: null,
+ 'legacy-bundling': false,
link: false,
'local-address': undefined,
loglevel: 'warn',
@@ -251,6 +253,7 @@ exports.types = {
'git-tag-version': Boolean,
global: Boolean,
globalconfig: path,
+ 'global-style': Boolean,
group: [Number, String],
'https-proxy': [null, url],
'user-agent': String,
@@ -265,6 +268,7 @@ exports.types = {
'init-version': semver,
json: Boolean,
key: [null, String],
+ 'legacy-bundling': Boolean,
link: Boolean,
// local-address must be listed as an IP for a local network interface
// must be IPv4 due to node bug
diff --git a/deps/npm/lib/dedupe.js b/deps/npm/lib/dedupe.js
index 2cb85990ce5ff1..3159d41391197d 100644
--- a/deps/npm/lib/dedupe.js
+++ b/deps/npm/lib/dedupe.js
@@ -23,7 +23,7 @@ var childPath = require('./utils/child-path.js')
module.exports = dedupe
module.exports.Deduper = Deduper
-dedupe.usage = 'npm dedupe [package names...]'
+dedupe.usage = 'npm dedupe'
function dedupe (args, cb) {
validate('AF', arguments)
diff --git a/deps/npm/lib/install-test.js b/deps/npm/lib/install-test.js
new file mode 100644
index 00000000000000..feadb25d695e67
--- /dev/null
+++ b/deps/npm/lib/install-test.js
@@ -0,0 +1,23 @@
+'use strict'
+
+// npm install-test
+// Runs `npm install` and then runs `npm test`
+
+module.exports = installTest
+var install = require('./install.js')
+var test = require('./test.js')
+
+installTest.usage = '\nnpm install-test [args]' +
+ '\nSame args as `npm install`' +
+ '\n\nalias: npm it'
+
+installTest.completion = install.completion
+
+function installTest (args, cb) {
+ install(args, function (er) {
+ if (er) {
+ return cb(er)
+ }
+ test([], cb)
+ })
+}
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index 773ed5405e9bf1..759535e1024ec7 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -134,6 +134,7 @@ var doParallelActions = require('./install/actions.js').doParallel
var doOneAction = require('./install/actions.js').doOne
var packageId = require('./utils/package-id.js')
var moduleName = require('./utils/module-name.js')
+var errorMessage = require('./utils/error-message.js')
function unlockCB (lockPath, name, cb) {
validate('SSF', arguments)
@@ -282,12 +283,19 @@ Installer.prototype.run = function (cb) {
self.idealTree.warnings.forEach(function (warning) {
if (warning.code === 'EPACKAGEJSON' && self.global) return
if (warning.code === 'ENOTDIR') return
- log.warn(warning.code, warning.message)
+ errorMessage(warning).summary.forEach(function (logline) {
+ log.warn.apply(log, logline)
+ })
})
}
if (installEr && postInstallEr) {
- log.warn('error', postInstallEr.message)
- log.verbose('error', postInstallEr.stack)
+ var msg = errorMessage(postInstallEr)
+ msg.summary.forEach(function (logline) {
+ log.warn.apply(log, logline)
+ })
+ msg.detail.forEach(function (logline) {
+ log.verbose.apply(log, logline)
+ })
}
cb(installEr || postInstallEr, self.getInstalledModules(), self.idealTree)
})
@@ -462,12 +470,6 @@ Installer.prototype.executeActions = function (cb) {
[doParallelActions, 'extract', staging, todo, cg.newGroup('extract', 10)],
[doParallelActions, 'preinstall', staging, todo, trackLifecycle.newGroup('preinstall')],
[doReverseSerialActions, 'remove', staging, todo, cg.newGroup('remove')],
- // FIXME: We do this here to commit the removes prior to trying to move
- // anything into place. Once we can rollback removes we should find
- // a better solution for this.
- // This is to protect against cruft in the node_modules folder (like dot files)
- // that stop it from being removed.
- [this, this.commit, staging, this.todo],
[doSerialActions, 'move', staging, todo, cg.newGroup('move')],
[doSerialActions, 'finalize', staging, todo, cg.newGroup('finalize')],
[doSerialActions, 'build', staging, todo, trackLifecycle.newGroup('build')],
diff --git a/deps/npm/lib/install/action/extract.js b/deps/npm/lib/install/action/extract.js
index b427768498461e..4b627a5c3054fd 100644
--- a/deps/npm/lib/install/action/extract.js
+++ b/deps/npm/lib/install/action/extract.js
@@ -1,19 +1,84 @@
'use strict'
+var path = require('path')
+var iferr = require('iferr')
+var asyncMap = require('slide').asyncMap
+var fs = require('graceful-fs')
+var rename = require('../../utils/rename.js')
+var gentlyRm = require('../../utils/gently-rm.js')
var updatePackageJson = require('../update-package-json')
var npm = require('../../npm.js')
+var moduleName = require('../../utils/module-name.js')
var packageId = require('../../utils/package-id.js')
var cache = require('../../cache.js')
+var buildPath = require('../build-path.js')
module.exports = function (top, buildpath, pkg, log, next) {
log.silly('extract', packageId(pkg))
var up = npm.config.get('unsafe-perm')
var user = up ? null : npm.config.get('user')
var group = up ? null : npm.config.get('group')
- cache.unpack(pkg.package.name, pkg.package.version
- , buildpath
- , null, null, user, group,
- function (er) {
- if (er) return next(er)
- updatePackageJson(pkg, buildpath, next)
- })
+ cache.unpack(pkg.package.name, pkg.package.version, buildpath, null, null, user, group,
+ andUpdatePackageJson(pkg, buildpath, andStageBundledChildren(pkg, buildpath, log, next)))
+}
+
+function andUpdatePackageJson (pkg, buildpath, next) {
+ return iferr(next, function () {
+ updatePackageJson(pkg, buildpath, next)
+ })
+}
+
+function andStageBundledChildren (pkg, buildpath, log, next) {
+ var staging = path.resolve(buildpath, '..')
+ return iferr(next, function () {
+ asyncMap(pkg.children, andStageBundledModule(pkg, staging, buildpath), cleanupBundled)
+ })
+ function cleanupBundled () {
+ gentlyRm(path.join(buildpath, 'node_modules'), next)
+ }
+}
+
+function andStageBundledModule (bundler, staging, parentPath) {
+ return function (child, next) {
+ stageBundledModule(bundler, child, staging, parentPath, next)
+ }
+}
+
+function getTree (pkg) {
+ while (pkg.parent) pkg = pkg.parent
+ return pkg
+}
+
+function warn (pkg, code, msg) {
+ var tree = getTree(pkg)
+ var err = new Error(msg)
+ err.code = code
+ tree.warnings.push(err)
+}
+
+function stageBundledModule (bundler, child, staging, parentPath, next) {
+ var stageFrom = path.join(parentPath, 'node_modules', child.package.name)
+ var stageTo = buildPath(staging, child)
+
+ asyncMap(child.children, andStageBundledModule(bundler, staging, stageFrom), iferr(next, moveModule))
+
+ function moveModule () {
+ if (child.fromBundle) {
+ return rename(stageFrom, stageTo, iferr(next, updateMovedPackageJson))
+ } else {
+ return fs.stat(stageFrom, function (notExists, exists) {
+ if (exists) {
+ warn(bundler, 'EBUNDLEOVERRIDE', 'In ' + packageId(bundler) +
+ ' replacing bundled version of ' + moduleName(child) +
+ ' with ' + packageId(child))
+ return gentlyRm(stageFrom, next)
+ } else {
+ return next()
+ }
+ })
+ }
+ }
+
+ function updateMovedPackageJson () {
+ updatePackageJson(child, stageTo, next)
+ }
}
diff --git a/deps/npm/lib/install/action/finalize.js b/deps/npm/lib/install/action/finalize.js
index 08e9c149c46349..ad278df20f5979 100644
--- a/deps/npm/lib/install/action/finalize.js
+++ b/deps/npm/lib/install/action/finalize.js
@@ -4,23 +4,7 @@ var rimraf = require('rimraf')
var fs = require('graceful-fs')
var mkdirp = require('mkdirp')
var asyncMap = require('slide').asyncMap
-var iferr = require('iferr')
-
-function getTree (pkg) {
- while (pkg.parent) pkg = pkg.parent
- return pkg
-}
-
-function warn (pkg, code, msg) {
- var tree = getTree(pkg)
- var err = new Error(msg)
- err.code = code
- tree.warnings.push(err)
-}
-
-function pathToShortname (modpath) {
- return modpath.replace(/node_modules[/]/g, '').replace(/[/]/g, ' > ')
-}
+var rename = require('../../utils/rename.js')
module.exports = function (top, buildpath, pkg, log, next) {
log.silly('finalize', pkg.path)
@@ -33,12 +17,12 @@ module.exports = function (top, buildpath, pkg, log, next) {
if (mkdirEr) return next(mkdirEr)
// We stat first, because we can't rely on ENOTEMPTY from Windows.
// Windows, by contrast, gives the generic EPERM of a folder already exists.
- fs.lstat(pkg.path, destStated)
+ fs.lstat(pkg.path, destStatted)
}
- function destStated (doesNotExist) {
+ function destStatted (doesNotExist) {
if (doesNotExist) {
- fs.rename(buildpath, pkg.path, whenMoved)
+ rename(buildpath, pkg.path, whenMoved)
} else {
moveAway()
}
@@ -51,18 +35,18 @@ module.exports = function (top, buildpath, pkg, log, next) {
}
function moveAway () {
- fs.rename(pkg.path, delpath, whenOldMovedAway)
+ rename(pkg.path, delpath, whenOldMovedAway)
}
function whenOldMovedAway (renameEr) {
if (renameEr) return next(renameEr)
- fs.rename(buildpath, pkg.path, whenConflictMoved)
+ rename(buildpath, pkg.path, whenConflictMoved)
}
function whenConflictMoved (renameEr) {
// if we got an error we'll try to put back the original module back,
// succeed or fail though we want the original error that caused this
- if (renameEr) return fs.rename(delpath, pkg.path, function () { next(renameEr) })
+ if (renameEr) return rename(delpath, pkg.path, function () { next(renameEr) })
fs.readdir(path.join(delpath, 'node_modules'), makeTarget)
}
@@ -75,21 +59,9 @@ module.exports = function (top, buildpath, pkg, log, next) {
function moveModules (mkdirEr, files) {
if (mkdirEr) return next(mkdirEr)
asyncMap(files, function (file, done) {
- // `from` wins over `to`, because if `from` was there it's because the
- // module installer wanted it to be there. By contrast, `to` is just
- // whatever was bundled in this module. And the intentions of npm's
- // installer should always beat out random module contents.
var from = path.join(delpath, 'node_modules', file)
var to = path.join(pkg.path, 'node_modules', file)
- fs.stat(to, function (er, info) {
- if (er) return fs.rename(from, to, done)
-
- var shortname = pathToShortname(path.relative(getTree(pkg).path, to))
- warn(pkg, 'EBUNDLEOVERRIDE', 'Replacing bundled ' + shortname + ' with new installed version')
- rimraf(to, iferr(done, function () {
- fs.rename(from, to, done)
- }))
- })
+ rename(from, to, done)
}, cleanup)
}
diff --git a/deps/npm/lib/install/action/move.js b/deps/npm/lib/install/action/move.js
index 9bdfbc7bf25577..ee6bdb95257713 100644
--- a/deps/npm/lib/install/action/move.js
+++ b/deps/npm/lib/install/action/move.js
@@ -7,7 +7,14 @@ var rimraf = require('rimraf')
var mkdirp = require('mkdirp')
var rmStuff = require('../../unbuild.js').rmStuff
var lifecycle = require('../../utils/lifecycle.js')
-var updatePackageJson = require('../update-package-json')
+var updatePackageJson = require('../update-package-json.js')
+var rename = require('../../utils/rename.js')
+
+/*
+ Move a module from one point in the node_modules tree to another.
+ Do not disturb either the source or target location's node_modules
+ folders.
+*/
module.exports = function (top, buildpath, pkg, log, next) {
log.silly('move', pkg.fromPath, pkg.path)
@@ -16,7 +23,7 @@ module.exports = function (top, buildpath, pkg, log, next) {
[lifecycle, pkg.package, 'uninstall', pkg.fromPath, false, true],
[rmStuff, pkg.package, pkg.fromPath],
[lifecycle, pkg.package, 'postuninstall', pkg.fromPath, false, true],
- [moveModuleOnly, pkg.fromPath, pkg.path],
+ [moveModuleOnly, pkg.fromPath, pkg.path, log],
[lifecycle, pkg.package, 'preinstall', pkg.path, false, true],
[removeEmptyParents, path.resolve(pkg.fromPath, '..')],
[updatePackageJson, pkg, pkg.path]
@@ -31,29 +38,61 @@ function removeEmptyParents (pkgdir, next) {
})
}
-function moveModuleOnly (from, to, done) {
- var from_modules = path.join(from, 'node_modules')
- var temp_modules = from + '.node_modules'
+function moveModuleOnly (from, to, log, done) {
+ var fromModules = path.join(from, 'node_modules')
+ var tempFromModules = from + '.node_modules'
+ var toModules = path.join(to, 'node_modules')
+ var tempToModules = to + '.node_modules'
+
+ log.silly('move', 'move existing destination node_modules away', toModules)
+
+ rename(toModules, tempToModules, removeDestination(done))
- rimraf(to, iferr(done, makeDestination))
+ function removeDestination (next) {
+ return function (er) {
+ log.silly('move', 'remove existing destination', to)
+ if (er) {
+ rimraf(to, iferr(next, makeDestination(next)))
+ } else {
+ rimraf(to, iferr(next, makeDestination(iferr(next, moveToModulesBack(next)))))
+ }
+ }
+ }
+
+ function moveToModulesBack (next) {
+ return function () {
+ log.silly('move', 'move existing destination node_modules back', toModules)
+ rename(tempToModules, toModules, iferr(done, next))
+ }
+ }
- function makeDestination () {
- mkdirp(path.resolve(to, '..'), iferr(done, moveNodeModules))
+ function makeDestination (next) {
+ return function () {
+ log.silly('move', 'make sure destination parent exists', path.resolve(to, '..'))
+ mkdirp(path.resolve(to, '..'), iferr(done, moveNodeModules(next)))
+ }
}
- function moveNodeModules () {
- fs.rename(from_modules, temp_modules, function (er) {
- doMove(er ? done : moveNodeModulesBack)
- })
+ function moveNodeModules (next) {
+ return function () {
+ log.silly('move', 'move source node_modules away', fromModules)
+ rename(fromModules, tempFromModules, iferr(doMove(next), doMove(moveNodeModulesBack(next))))
+ }
}
function doMove (next) {
- fs.rename(from, to, iferr(done, next))
+ return function () {
+ log.silly('move', 'move module dir to final dest', from, to)
+ rename(from, to, iferr(done, next))
+ }
}
- function moveNodeModulesBack () {
- mkdirp(from, iferr(done, function () {
- fs.rename(temp_modules, from_modules, done)
- }))
+ function moveNodeModulesBack (next) {
+ return function () {
+ mkdirp(from, iferr(done, function () {
+ log.silly('move', 'put source node_modules back', fromModules)
+ rename(tempFromModules, fromModules, iferr(done, next))
+ }))
+ }
}
}
diff --git a/deps/npm/lib/install/action/remove.js b/deps/npm/lib/install/action/remove.js
index b3126a58005394..7b05a81b6d5e68 100644
--- a/deps/npm/lib/install/action/remove.js
+++ b/deps/npm/lib/install/action/remove.js
@@ -6,6 +6,7 @@ var asyncMap = require('slide').asyncMap
var mkdirp = require('mkdirp')
var npm = require('../../npm.js')
var andIgnoreErrors = require('../and-ignore-errors.js')
+var rename = require('../../utils/rename.js')
// This is weird because we want to remove the module but not it's node_modules folder
// allowing for this allows us to not worry about the order of operations
@@ -25,10 +26,12 @@ function removeLink (pkg, next) {
function removeDir (pkg, log, next) {
var modpath = path.join(path.dirname(pkg.path), '.' + path.basename(pkg.path) + '.MODULES')
- fs.rename(path.join(pkg.path, 'node_modules'), modpath, unbuildPackage)
+ rename(path.join(pkg.path, 'node_modules'), modpath, unbuildPackage)
function unbuildPackage (renameEr) {
- npm.commands.unbuild(pkg.path, true, renameEr ? andRemoveEmptyParents(pkg.path) : moveModulesBack)
+ npm.commands.unbuild(pkg.path, true, function () {
+ rimraf(pkg.path, renameEr ? andRemoveEmptyParents(pkg.path) : moveModulesBack)
+ })
}
function andRemoveEmptyParents (path) {
@@ -55,7 +58,7 @@ function removeDir (pkg, log, next) {
var to = path.join(pkg.path, 'node_modules', file)
// we ignore errors here, because they can legitimately happen, for instance,
// bundled modules will be in both node_modules folders
- fs.rename(from, to, andIgnoreErrors(done))
+ rename(from, to, andIgnoreErrors(done))
}, cleanup)
}
@@ -64,7 +67,7 @@ function removeDir (pkg, log, next) {
}
function afterCleanup (rimrafEr) {
- if (rimrafEr) log.warn('finalize', rimrafEr)
+ if (rimrafEr) log.warn('remove', rimrafEr)
removeEmptyParents(path.resolve(pkg.path, '..'))
}
@@ -76,7 +79,3 @@ function removeDir (pkg, log, next) {
})
}
}
-
-module.exports.commit = function (staging, pkg, next) {
- rimraf(pkg.path, next)
-}
diff --git a/deps/npm/lib/install/actions.js b/deps/npm/lib/install/actions.js
index face4b457bced4..5d162f86d0a511 100644
--- a/deps/npm/lib/install/actions.js
+++ b/deps/npm/lib/install/actions.js
@@ -3,13 +3,13 @@ var path = require('path')
var validate = require('aproba')
var chain = require('slide').chain
var asyncMap = require('slide').asyncMap
-var uniqueFilename = require('unique-filename')
var log = require('npmlog')
var andFinishTracker = require('./and-finish-tracker.js')
var andAddParentToErrors = require('./and-add-parent-to-errors.js')
var failedDependency = require('./deps.js').failedDependency
var packageId = require('../utils/package-id.js')
var moduleName = require('../utils/module-name.js')
+var buildPath = require('./build-path.js')
var actions = {}
@@ -63,7 +63,7 @@ function andHandleOptionalDepErrors (pkg, next) {
return function (er) {
if (!er) return next.apply(null, arguments)
markAsFailed(pkg)
- var anyFatal = pkg.directlyRequested || !pkg.parent
+ var anyFatal = pkg.userRequired || !pkg.parent
for (var ii = 0; ii < pkg.requiredBy.length; ++ii) {
var parent = pkg.requiredBy[ii]
var isFatal = failedDependency(parent, pkg)
@@ -83,8 +83,8 @@ function prepareAction (staging, log) {
var cmd = action[0]
var pkg = action[1]
if (!actions[cmd]) throw new Error('Unknown decomposed command "' + cmd + '" (is it new?)')
- var buildpath = uniqueFilename(staging, moduleName(pkg), pkg.realpath)
var top = path.resolve(staging, '../..')
+ var buildpath = buildPath(staging, pkg)
return [actions[cmd], top, buildpath, pkg, log.newGroup(cmd + ':' + moduleName(pkg))]
}
}
diff --git a/deps/npm/lib/install/build-path.js b/deps/npm/lib/install/build-path.js
new file mode 100644
index 00000000000000..ebef544f80059e
--- /dev/null
+++ b/deps/npm/lib/install/build-path.js
@@ -0,0 +1,8 @@
+'use strict'
+var uniqueFilename = require('unique-filename')
+var moduleName = require('../utils/module-name.js')
+
+module.exports = buildPath
+function buildPath (staging, pkg) {
+ return uniqueFilename(staging, moduleName(pkg), pkg.realpath)
+}
diff --git a/deps/npm/lib/install/decompose-actions.js b/deps/npm/lib/install/decompose-actions.js
index b5390c0b22644b..d91c952f5aa452 100644
--- a/deps/npm/lib/install/decompose-actions.js
+++ b/deps/npm/lib/install/decompose-actions.js
@@ -1,6 +1,7 @@
'use strict'
var validate = require('aproba')
var asyncMap = require('slide').asyncMap
+var npm = require('../npm.js')
module.exports = function (differences, decomposed, next) {
validate('AAF', arguments)
@@ -15,9 +16,6 @@ module.exports = function (differences, decomposed, next) {
case 'move':
moveSteps(decomposed, pkg, done)
break
- case 'rebuild':
- rebuildSteps(decomposed, pkg, done)
- break
case 'remove':
case 'update-linked':
default:
@@ -27,13 +25,17 @@ module.exports = function (differences, decomposed, next) {
}
function addSteps (decomposed, pkg, done) {
- decomposed.push(['fetch', pkg])
- decomposed.push(['extract', pkg])
- decomposed.push(['preinstall', pkg])
- decomposed.push(['build', pkg])
- decomposed.push(['install', pkg])
- decomposed.push(['postinstall', pkg])
- decomposed.push(['test', pkg])
+ if (!pkg.fromBundle) {
+ decomposed.push(['fetch', pkg])
+ decomposed.push(['extract', pkg])
+ decomposed.push(['test', pkg])
+ }
+ if (!pkg.fromBundle || npm.config.get('rebuild-bundle')) {
+ decomposed.push(['preinstall', pkg])
+ decomposed.push(['build', pkg])
+ decomposed.push(['install', pkg])
+ decomposed.push(['postinstall', pkg])
+ }
decomposed.push(['finalize', pkg])
done()
}
@@ -47,14 +49,6 @@ function moveSteps (decomposed, pkg, done) {
done()
}
-function rebuildSteps (decomposed, pkg, done) {
- decomposed.push(['preinstall', pkg])
- decomposed.push(['build', pkg])
- decomposed.push(['install', pkg])
- decomposed.push(['postinstall', pkg])
- done()
-}
-
function defaultSteps (decomposed, cmd, pkg, done) {
decomposed.push([cmd, pkg])
done()
diff --git a/deps/npm/lib/install/deps.js b/deps/npm/lib/install/deps.js
index 3afe8af012f7f1..e7153c2966cd83 100644
--- a/deps/npm/lib/install/deps.js
+++ b/deps/npm/lib/install/deps.js
@@ -28,8 +28,6 @@ var isInstallable = require('./validate-args.js').isInstallable
var packageId = require('../utils/package-id.js')
var moduleName = require('../utils/module-name.js')
-exports.test = {} // used to hold functions for testing by unit tests
-
// The export functions in this module mutate a dependency tree, adding
// items to them.
@@ -117,8 +115,8 @@ function recalculateMetadata (tree, log, seen, next) {
[asyncMap, tomark, markDeps],
[asyncMap, tree.children, function (child, done) { recalculateMetadata(child, log, seen, done) }]
], function () {
- tree.userRequired = tree.package._requiredBy.some(function (req) { req === '#USER' })
- tree.existing = tree.package._requiredBy.some(function (req) { req === '#EXISTING' })
+ tree.userRequired = tree.package._requiredBy.some(function (req) { return req === '#USER' })
+ tree.existing = tree.package._requiredBy.some(function (req) { return req === '#EXISTING' })
tree.package._location = flatNameFromTree(tree)
next(null, tree)
})
@@ -133,12 +131,13 @@ function addRequiredDep (tree, child) {
return true
}
+exports._removeObsoleteDep = removeObsoleteDep
function removeObsoleteDep (child) {
if (child.removed) return
child.removed = true
var requires = child.requires || []
requires.forEach(function (requirement) {
- requirement.requiredBy = requirement.requiredBy.filter(function (reqBy) { reqBy !== child })
+ requirement.requiredBy = requirement.requiredBy.filter(function (reqBy) { return reqBy !== child })
if (requirement.requiredBy.length === 0) removeObsoleteDep(requirement)
})
}
@@ -202,7 +201,7 @@ exports.loadRequestedDeps = function (args, tree, saveToDependencies, log, next)
tree.package.dependencies[childName] =
child.package._requested.rawSpec || child.package._requested.spec
}
- child.directlyRequested = true
+ child.userRequired = true
child.save = saveToDependencies
// For things the user asked to install, that aren't a dependency (or
@@ -210,7 +209,6 @@ exports.loadRequestedDeps = function (args, tree, saveToDependencies, log, next)
// themselves, so we don't remove it as a dep that no longer exists
if (!addRequiredDep(tree, child)) {
replaceModuleName(child.package, '_requiredBy', '#USER')
- child.directlyRequested = true
}
depLoaded(null, child, tracker)
}))
@@ -290,6 +288,8 @@ var failedDependency = exports.failedDependency = function (tree, name_pkg) {
if (!tree.parent) return true
+ if (tree.userRequired) return true
+
for (var ii = 0; ii < tree.requiredBy.length; ++ii) {
var requireParent = tree.requiredBy[ii]
if (failedDependency(requireParent, tree.package)) {
@@ -299,6 +299,18 @@ var failedDependency = exports.failedDependency = function (tree, name_pkg) {
return false
}
+function top (tree) {
+ if (tree.parent) return top(tree.parent)
+ return tree
+}
+
+function treeWarn (tree, what, error) {
+ var topTree = top(tree)
+ if (!topTree.warnings) topTree.warnings = []
+ error.optional = flatNameFromTree(tree) + '/' + what
+ topTree.warnings.push(error)
+}
+
function andHandleOptionalErrors (log, tree, name, done) {
validate('OOSF', arguments)
return function (er, child, childLog) {
@@ -307,8 +319,7 @@ function andHandleOptionalErrors (log, tree, name, done) {
var isFatal = failedDependency(tree, name)
if (er && !isFatal) {
tree.children = tree.children.filter(noModuleNameMatches(name))
- log.warn('install', "Couldn't install optional dependency:", er.message)
- log.verbose('install', er.stack)
+ treeWarn(tree, name, er)
return done()
} else {
return done(er, child, childLog)
@@ -416,13 +427,13 @@ function flatNameFromTree (tree) {
return flatName(path, tree)
}
-exports.test.replaceModuleName = replaceModuleName
+exports._replaceModuleName = replaceModuleName
function replaceModuleName (obj, key, name) {
validate('OSS', arguments)
obj[key] = union(obj[key] || [], [name])
}
-exports.test.replaceModule = replaceModule
+exports._replaceModule = replaceModule
function replaceModule (obj, key, child) {
validate('OSO', arguments)
if (!obj[key]) obj[key] = []
@@ -578,5 +589,8 @@ var earliestInstallable = exports.earliestInstallable = function (requiredBy, tr
if (!tree.parent) return tree
if (tree.isGlobal) return tree
+ if (npm.config.get('global-style') && !tree.parent.parent) return tree
+ if (npm.config.get('legacy-bundling')) return tree
+
return (earliestInstallable(requiredBy, tree.parent, pkg) || tree)
}
diff --git a/deps/npm/lib/install/diff-trees.js b/deps/npm/lib/install/diff-trees.js
index 59567bf3193be1..8000124604e272 100644
--- a/deps/npm/lib/install/diff-trees.js
+++ b/deps/npm/lib/install/diff-trees.js
@@ -1,7 +1,6 @@
'use strict'
var validate = require('aproba')
var npa = require('npm-package-arg')
-var npm = require('../npm.js')
var flattenTree = require('./flatten-tree.js')
function nonRegistrySource (pkg) {
@@ -130,11 +129,8 @@ function diffTrees (oldTree, newTree) {
pkg.isInLink = (pkg.oldPkg && isLink(pkg.oldPkg.parent)) ||
(pkg.parent && isLink(pkg.parent)) ||
requiredByAllLinked(pkg)
- if (pkg.fromBundle) {
- if (npm.config.get('rebuild-bundle')) differences.push(['rebuild', pkg])
- if (pkg.oldPkg) differences.push(['remove', pkg])
- } else if (pkg.oldPkg) {
- if (!pkg.directlyRequested && pkgAreEquiv(pkg.oldPkg.package, pkg.package)) return
+ if (pkg.oldPkg) {
+ if (!pkg.userRequired && pkgAreEquiv(pkg.oldPkg.package, pkg.package)) return
if (!pkg.isInLink && (isLink(pkg.oldPkg) || isLink(pkg))) {
differences.push(['update-linked', pkg])
} else {
@@ -142,7 +138,7 @@ function diffTrees (oldTree, newTree) {
}
} else {
var vername = getNameAndVersion(pkg.package)
- if (toRemoveByNameAndVer[vername] && toRemoveByNameAndVer[vername].length) {
+ if (toRemoveByNameAndVer[vername] && toRemoveByNameAndVer[vername].length && !pkg.fromBundle) {
var flatname = toRemoveByNameAndVer[vername].shift()
pkg.fromPath = toRemove[flatname].path
differences.push(['move', pkg])
diff --git a/deps/npm/lib/install/validate-args.js b/deps/npm/lib/install/validate-args.js
index 653dc1b4aeb570..02c0558e4c5319 100644
--- a/deps/npm/lib/install/validate-args.js
+++ b/deps/npm/lib/install/validate-args.js
@@ -3,6 +3,7 @@ var validate = require('aproba')
var asyncMap = require('slide').asyncMap
var chain = require('slide').chain
var npmInstallChecks = require('npm-install-checks')
+var iferr = require('iferr')
var checkEngine = npmInstallChecks.checkEngine
var checkPlatform = npmInstallChecks.checkPlatform
var npm = require('../npm.js')
@@ -19,14 +20,26 @@ module.exports = function (idealTree, args, next) {
}, next)
}
+function getWarnings (pkg) {
+ while (pkg.parent) pkg = pkg.parent
+ if (!pkg.warnings) pkg.warnings = []
+ return pkg.warnings
+}
+
var isInstallable = module.exports.isInstallable = function (pkg, next) {
var force = npm.config.get('force')
var nodeVersion = npm.config.get('node-version')
+ if (/-/.test(nodeVersion)) {
+ // for the purposes of validation, if the node version is a prerelease,
+ // strip that. We check and warn about this sceanrio over in validate-tree.
+ nodeVersion = nodeVersion.replace(/-.*/, '')
+ }
var strict = npm.config.get('engine-strict')
- chain([
- [checkEngine, pkg, npm.version, nodeVersion, force, strict],
- [checkPlatform, pkg, force]
- ], next)
+ checkEngine(pkg, npm.version, nodeVersion, force, strict, iferr(next, thenWarnEngineIssues))
+ function thenWarnEngineIssues (warn) {
+ if (warn) getWarnings(pkg).push(warn)
+ checkPlatform(pkg, force, next)
+ }
}
function checkSelf (idealTree, pkg, force, next) {
diff --git a/deps/npm/lib/install/validate-tree.js b/deps/npm/lib/install/validate-tree.js
index b3caefb55617f2..e89cd6fdd2db45 100644
--- a/deps/npm/lib/install/validate-tree.js
+++ b/deps/npm/lib/install/validate-tree.js
@@ -65,5 +65,13 @@ function thenCheckTop (idealTree, next) {
er.code = 'EPACKAGEJSON'
idealTree.warnings.push(er)
}
+
+ var nodeVersion = npm.config.get('node-version')
+ if (/-/.test(nodeVersion)) {
+ // if this is a prerelease node…
+ var warnObj = new Error('You are using a pre-release version of node and things may not work as expected')
+ warnObj.code = 'ENODEPRE'
+ idealTree.warnings.push(warnObj)
+ }
next()
}
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js
index 51f0b51550085a..1c9292082808cc 100644
--- a/deps/npm/lib/ls.js
+++ b/deps/npm/lib/ls.js
@@ -139,13 +139,14 @@ function isCruft (data) {
return data.extraneous && data.error && data.error.code === 'ENOTDIR'
}
-function getLite (data, noname) {
+function getLite (data, noname, depth) {
var lite = {}
if (isCruft(data)) return lite
var maxDepth = npm.config.get('depth')
+ if (typeof depth === 'undefined') depth = 0
if (!noname && data.name) lite.name = data.name
if (data.version) lite.version = data.version
if (data.extraneous) {
@@ -213,6 +214,9 @@ function getLite (data, noname) {
lite.problems.push(pdm)
})
return [d, { required: dep, peerMissing: true }]
+ } else if (npm.config.get('json')) {
+ if (depth === maxDepth) delete dep.dependencies
+ return [d, getLite(dep, true, depth + 1)]
}
return [d, getLite(dep, true)]
}).reduce(function (deps, d) {
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index b714a82481ec64..145b4b3665da08 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -70,6 +70,7 @@
'ln': 'link',
'i': 'install',
'isntall': 'install',
+ 'it': 'install-test',
'up': 'update',
'upgrade': 'update',
'c': 'config',
@@ -99,6 +100,7 @@
// these are filenames in .
var cmdList = [
'install',
+ 'install-test',
'uninstall',
'cache',
'config',
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index 44dd8bf0067252..efd79ecc4a6946 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -333,6 +333,9 @@ function shouldUpdate (args, tree, dep, has, req, depth, pkgpath, cb, type) {
if (args.length && args.indexOf(dep) === -1) return skip()
var parsed = npa(dep + '@' + req)
+ if (tree.isLink && (tree.parent !== null && tree.parent.parent === null)) {
+ return doIt('linked', 'linked')
+ }
if (parsed.type === 'git' || parsed.type === 'hosted') {
return doIt('git', 'git')
}
diff --git a/deps/npm/lib/pack.js b/deps/npm/lib/pack.js
index d596dd034b9b39..c98f5f202016b8 100644
--- a/deps/npm/lib/pack.js
+++ b/deps/npm/lib/pack.js
@@ -10,7 +10,7 @@ var fs = require('graceful-fs')
var chain = require('slide').chain
var path = require('path')
var cwd = process.cwd()
-var writeStream = require('fs-write-stream-atomic')
+var writeStreamAtomic = require('fs-write-stream-atomic')
var cachedPackageRoot = require('./cache/cached-package-root.js')
pack.usage = 'npm pack [[<@scope>/]...]'
@@ -55,7 +55,7 @@ function pack_ (pkg, cb) {
var cached = path.join(cachedPackageRoot(data), 'package.tgz')
var from = fs.createReadStream(cached)
- var to = writeStream(fname)
+ var to = writeStreamAtomic(fname)
var errState = null
from.on('error', cb_)
diff --git a/deps/npm/lib/unbuild.js b/deps/npm/lib/unbuild.js
index e6605939de36ab..9bb8d7b6658bac 100644
--- a/deps/npm/lib/unbuild.js
+++ b/deps/npm/lib/unbuild.js
@@ -80,7 +80,12 @@ function rmBins (pkg, folder, parent, top, cb) {
} else {
gentlyRm(path.resolve(binRoot, b), true, folder, cb)
}
- }, cb)
+ }, gentlyRmBinRoot)
+
+ function gentlyRmBinRoot (err) {
+ if (err || top) return cb(err)
+ return gentlyRm(binRoot, true, parent, cb)
+ }
}
function rmMans (pkg, folder, parent, top, cb) {
diff --git a/deps/npm/lib/utils/correct-mkdir.js b/deps/npm/lib/utils/correct-mkdir.js
index 650c56fb17deb7..c0a31bdc58a10a 100644
--- a/deps/npm/lib/utils/correct-mkdir.js
+++ b/deps/npm/lib/utils/correct-mkdir.js
@@ -10,6 +10,13 @@ var stats = {}
var effectiveOwner
module.exports = function correctMkdir (path, cb) {
cb = dezalgo(cb)
+ cb = inflight('correctMkdir:' + path, cb)
+ if (!cb) {
+ return log.verbose('correctMkdir', path, 'correctMkdir already in flight; waiting')
+ } else {
+ log.verbose('correctMkdir', path, 'correctMkdir not in flight; initializing')
+ }
+
if (stats[path]) return cb(null, stats[path])
fs.stat(path, function (er, st) {
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index 8a7b1c06daa4fc..91b180e1b305a1 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -11,8 +11,8 @@ var wroteLogFile = false
var exitCode = 0
var rollbacks = npm.rollbacks
var chain = require('slide').chain
-var writeStream = require('fs-write-stream-atomic')
-var nameValidator = require('validate-npm-package-name')
+var writeStreamAtomic = require('fs-write-stream-atomic')
+var errorMessage = require('./error-message.js')
process.on('exit', function (code) {
log.disableProgress()
@@ -170,319 +170,10 @@ function errorHandler (er) {
// just a line break
if (log.levels[log.level] <= log.levels.error) console.error('')
- switch (er.code) {
- case 'ECONNREFUSED':
- log.error('', er)
- log.error(
- '',
- [
- '\nIf you are behind a proxy, please make sure that the',
- "'proxy' config is set properly. See: 'npm help config'"
- ].join('\n')
- )
- break
-
- case 'EACCES':
- case 'EPERM':
- log.error('', er)
- log.error('', ['\nPlease try running this command again as root/Administrator.'
- ].join('\n'))
- break
-
- case 'ELIFECYCLE':
- log.error('', er.message)
- log.error(
- '',
- [
- '',
- 'Failed at the ' + er.pkgid + ' ' + er.stage + " script '" + er.script + "'.",
- 'Make sure you have the latest version of node.js and npm installed.',
- 'If you do, this is most likely a problem with the ' + er.pkgname + ' package,',
- 'not with npm itself.',
- 'Tell the author that this fails on your system:',
- ' ' + er.script,
- 'You can get their info via:',
- ' npm owner ls ' + er.pkgname,
- 'There is likely additional logging output above.'
- ].join('\n')
- )
- break
-
- case 'ENOGIT':
- log.error('', er.message)
- log.error(
- '',
- [
- '',
- 'Failed using git.',
- 'This is most likely not a problem with npm itself.',
- 'Please check if you have git installed and in your PATH.'
- ].join('\n')
- )
- break
-
- case 'EJSONPARSE':
- log.error('', er.message)
- log.error('', 'File: ' + er.file)
- log.error(
- '',
- [
- 'Failed to parse package.json data.',
- 'package.json must be actual JSON, not just JavaScript.',
- '',
- 'This is not a bug in npm.',
- 'Tell the package author to fix their package.json file.'
- ].join('\n'),
- 'JSON.parse'
- )
- break
-
- // TODO(isaacs)
- // Add a special case here for E401 and E403 explaining auth issues?
-
- case 'E404':
- var msg = [er.message]
- if (er.pkgid && er.pkgid !== '-') {
- msg.push('', "'" + er.pkgid + "' is not in the npm registry.")
-
- var valResult = nameValidator(er.pkgid)
-
- if (valResult.validForNewPackages) {
- msg.push('You should bug the author to publish it (or use the name yourself!)')
- } else {
- msg.push('Your package name is not valid, because', '')
-
- var errorsArray = (valResult.errors || []).concat(valResult.warnings || [])
- errorsArray.forEach(function (item, idx) {
- msg.push(' ' + (idx + 1) + '. ' + item)
- })
- }
-
- if (er.parent) {
- msg.push("It was specified as a dependency of '" + er.parent + "'")
- }
- msg.push(
- '\nNote that you can also install from a',
- 'tarball, folder, http url, or git url.'
- )
- }
- // There's no need to have 404 in the message as well.
- msg[0] = msg[0].replace(/^404\s+/, '')
- log.error('404', msg.join('\n'))
- break
-
- case 'EPUBLISHCONFLICT':
- log.error(
- 'publish fail',
- [
- 'Cannot publish over existing version.',
- "Update the 'version' field in package.json and try again.",
- '',
- 'To automatically increment version numbers, see:',
- ' npm help version'
- ].join('\n')
- )
- break
-
- case 'EISGIT':
- log.error(
- 'git',
- [
- er.message,
- ' ' + er.path,
- 'Refusing to remove it. Update manually,',
- 'or move it out of the way first.'
- ].join('\n')
- )
- break
-
- case 'ECYCLE':
- log.error(
- 'cycle',
- [
- er.message,
- 'While installing: ' + er.pkgid,
- 'Found a pathological dependency case that npm cannot solve.',
- 'Please report this to the package author.'
- ].join('\n')
- )
- break
-
- case 'EBADPLATFORM':
- log.error(
- 'notsup',
- [
- er.message,
- 'Not compatible with your operating system or architecture: ' + er.pkgid,
- 'Valid OS: ' + er.os.join(','),
- 'Valid Arch: ' + er.cpu.join(','),
- 'Actual OS: ' + process.platform,
- 'Actual Arch: ' + process.arch
- ].join('\n')
- )
- break
-
- case 'EEXIST':
- log.error(
- [
- er.message,
- 'File exists: ' + er.path,
- 'Move it away, and try again.'
- ].join('\n')
- )
- break
-
- case 'ENEEDAUTH':
- log.error(
- 'need auth',
- [
- er.message,
- 'You need to authorize this machine using `npm adduser`'
- ].join('\n')
- )
- break
-
- case 'EPEERINVALID':
- var peerErrors = Object.keys(er.peersDepending).map(function (peer) {
- return 'Peer ' + peer + ' wants ' +
- er.packageName + '@' + er.peersDepending[peer]
- })
- log.error('peerinvalid', [er.message].concat(peerErrors).join('\n'))
- break
-
- case 'ECONNRESET':
- case 'ENOTFOUND':
- case 'ETIMEDOUT':
- case 'EAI_FAIL':
- log.error(
- 'network',
- [
- er.message,
- 'This is most likely not a problem with npm itself',
- 'and is related to network connectivity.',
- 'In most cases you are behind a proxy or have bad network settings.',
- '\nIf you are behind a proxy, please make sure that the',
- "'proxy' config is set properly. See: 'npm help config'"
- ].join('\n')
- )
- break
-
- case 'ENOPACKAGEJSON':
- log.error(
- 'package.json',
- [
- er.message,
- 'This is most likely not a problem with npm itself.',
- "npm can't find a package.json file in your current directory."
- ].join('\n')
- )
- break
-
- case 'ETARGET':
- msg = [
- er.message,
- 'This is most likely not a problem with npm itself.',
- 'In most cases you or one of your dependencies are requesting',
- "a package version that doesn't exist."
- ]
- if (er.parent) {
- msg.push("\nIt was specified as a dependency of '" + er.parent + "'\n")
- }
- log.error('notarget', msg.join('\n'))
- break
-
- case 'ENOTSUP':
- if (er.required) {
- log.error(
- 'notsup',
- [
- er.message,
- 'Not compatible with your version of node/npm: ' + er.pkgid,
- 'Required: ' + JSON.stringify(er.required),
- 'Actual: ' + JSON.stringify({
- npm: npm.version,
- node: npm.config.get('node-version')
- })
- ].join('\n')
- )
- break
- } // else passthrough
- /*eslint no-fallthrough:0*/
-
- case 'ENOSPC':
- log.error(
- 'nospc',
- [
- er.message,
- 'This is most likely not a problem with npm itself',
- 'and is related to insufficient space on your system.'
- ].join('\n')
- )
- break
-
- case 'EROFS':
- log.error(
- 'rofs',
- [
- er.message,
- 'This is most likely not a problem with npm itself',
- 'and is related to the file system being read-only.',
- '\nOften virtualized file systems, or other file systems',
- "that don't support symlinks, give this error."
- ].join('\n')
- )
- break
-
- case 'ENOENT':
- log.error(
- 'enoent',
- [
- er.message,
- 'This is most likely not a problem with npm itself',
- 'and is related to npm not being able to find a file.',
- er.file ? "\nCheck if the file '" + er.file + "' is present." : ''
- ].join('\n')
- )
- break
-
- case 'EMISSINGARG':
- case 'EUNKNOWNTYPE':
- case 'EINVALIDTYPE':
- case 'ETOOMANYARGS':
- log.error(
- 'typeerror',
- [
- er.stack,
- 'This is an error with npm itself. Please report this error at:',
- ' '
- ].join('\n')
- )
- break
-
- case 'EISDIR':
- log.error(
- 'eisdir',
- [
- er.message,
- 'This is most likely not a problem with npm itself',
- 'and is related to npm not being able to find a package.json in',
- 'a package you are trying to install.'
- ].join('\n')
- )
- break
-
- default:
- log.error('', er.message || er)
- log.error(
- '',
- [
- '',
- 'If you need help, you may report this error at:',
- ' '
- ].join('\n')
- )
- break
- }
+ var msg = errorMessage(er)
+ msg.summary.concat(msg.detail).forEach(function (errline) {
+ log.error.apply(log, errline)
+ })
exit(typeof er.errno === 'number' ? er.errno : 1)
}
@@ -493,7 +184,7 @@ function writeLogFile (cb) {
writingLogFile = true
wroteLogFile = true
- var fstr = writeStream('npm-debug.log')
+ var fstr = writeStreamAtomic('npm-debug.log')
var os = require('os')
var out = ''
diff --git a/deps/npm/lib/utils/error-message.js b/deps/npm/lib/utils/error-message.js
new file mode 100644
index 00000000000000..fca92ee4cb5358
--- /dev/null
+++ b/deps/npm/lib/utils/error-message.js
@@ -0,0 +1,317 @@
+'use strict'
+var npm = require('../npm.js')
+var util = require('util')
+var nameValidator = require('validate-npm-package-name')
+
+module.exports = errorMessage
+
+function errorMessage (er) {
+ var short = []
+ var detail = []
+ if (er.optional) {
+ short.push(['optional', 'Skipping failed optional dependency ' + er.optional + ':'])
+ }
+ switch (er.code) {
+ case 'ECONNREFUSED':
+ short.push(['', er])
+ detail.push([
+ '',
+ [
+ '\nIf you are behind a proxy, please make sure that the',
+ "'proxy' config is set properly. See: 'npm help config'"
+ ].join('\n')
+ ])
+ break
+
+ case 'EACCES':
+ case 'EPERM':
+ short.push(['', er])
+ detail.push(['', ['\nPlease try running this command again as root/Administrator.'
+ ].join('\n')])
+ break
+
+ case 'ELIFECYCLE':
+ short.push(['', er.message])
+ detail.push([
+ '',
+ [
+ '',
+ 'Failed at the ' + er.pkgid + ' ' + er.stage + " script '" + er.script + "'.",
+ 'Make sure you have the latest version of node.js and npm installed.',
+ 'If you do, this is most likely a problem with the ' + er.pkgname + ' package,',
+ 'not with npm itself.',
+ 'Tell the author that this fails on your system:',
+ ' ' + er.script,
+ 'You can get information on how to open an issue for this project with:',
+ ' npm bugs ' + er.pkgname,
+ 'Or if that isn\'t available, you can get their info via:',
+ ' npm owner ls ' + er.pkgname,
+ 'There is likely additional logging output above.'
+ ].join('\n')]
+ )
+ break
+
+ case 'ENOGIT':
+ short.push(['', er.message])
+ detail.push([
+ '',
+ [
+ '',
+ 'Failed using git.',
+ 'This is most likely not a problem with npm itself.',
+ 'Please check if you have git installed and in your PATH.'
+ ].join('\n')
+ ])
+ break
+
+ case 'EJSONPARSE':
+ short.push(['', er.message])
+ short.push(['', 'File: ' + er.file])
+ detail.push([
+ '',
+ [
+ 'Failed to parse package.json data.',
+ 'package.json must be actual JSON, not just JavaScript.',
+ '',
+ 'This is not a bug in npm.',
+ 'Tell the package author to fix their package.json file.'
+ ].join('\n'),
+ 'JSON.parse'
+ ])
+ break
+
+ // TODO(isaacs)
+ // Add a special case here for E401 and E403 explaining auth issues?
+
+ case 'E404':
+ // There's no need to have 404 in the message as well.
+ var msg = er.message.replace(/^404\s+/, '')
+ short.push(['404', msg])
+ if (er.pkgid && er.pkgid !== '-') {
+ detail.push(['404', ''])
+ detail.push(['404', '', "'" + er.pkgid + "' is not in the npm registry."])
+
+ var valResult = nameValidator(er.pkgid)
+
+ if (valResult.validForNewPackages) {
+ detail.push(['404', 'You should bug the author to publish it (or use the name yourself!)'])
+ } else {
+ detail.push(['404', 'Your package name is not valid, because', ''])
+
+ var errorsArray = (valResult.errors || []).concat(valResult.warnings || [])
+ errorsArray.forEach(function (item, idx) {
+ detail.push(['404', ' ' + (idx + 1) + '. ' + item])
+ })
+ }
+
+ if (er.parent) {
+ detail.push(['404', "It was specified as a dependency of '" + er.parent + "'"])
+ }
+ detail.push(['404', '\nNote that you can also install from a'])
+ detail.push(['404', 'tarball, folder, http url, or git url.'])
+ }
+ break
+
+ case 'EPUBLISHCONFLICT':
+ short.push(['publish fail', 'Cannot publish over existing version.'])
+ detail.push(['publish fail', "Update the 'version' field in package.json and try again."])
+ detail.push(['publish fail', ''])
+ detail.push(['publish fail', 'To automatically increment version numbers, see:'])
+ detail.push(['publish fail', ' npm help version'])
+ break
+
+ case 'EISGIT':
+ short.push(['git', er.message])
+ short.push(['git', ' ' + er.path])
+ detail.push([
+ 'git',
+ [
+ 'Refusing to remove it. Update manually,',
+ 'or move it out of the way first.'
+ ].join('\n')
+ ])
+ break
+
+ case 'ECYCLE':
+ short.push([
+ 'cycle',
+ [
+ er.message,
+ 'While installing: ' + er.pkgid
+ ].join('\n')
+ ])
+ detail.push([
+ 'cycle',
+ [
+ 'Found a pathological dependency case that npm cannot solve.',
+ 'Please report this to the package author.'
+ ].join('\n')
+ ])
+ break
+
+ case 'EBADPLATFORM':
+ short.push([
+ 'notsup',
+ [
+ 'Not compatible with your operating system or architecture: ' + er.pkgid
+ ].join('\n')
+ ])
+ detail.push([
+ 'notsup',
+ [
+ 'Valid OS: ' + (er.os.join ? er.os.join(',') : util.inspect(er.os)),
+ 'Valid Arch: ' + (er.cpu.join ? er.cpu.join(',') : util.inspect(er.cpu)),
+ 'Actual OS: ' + process.platform,
+ 'Actual Arch: ' + process.arch
+ ].join('\n')
+ ])
+ break
+
+ case 'EEXIST':
+ short.push(['', er.message])
+ short.push(['', 'File exists: ' + er.path])
+ detail.push(['', 'Move it away, and try again.'])
+ break
+
+ case 'ENEEDAUTH':
+ short.push(['need auth', er.message])
+ detail.push(['need auth', 'You need to authorize this machine using `npm adduser`'])
+ break
+
+ case 'ECONNRESET':
+ case 'ENOTFOUND':
+ case 'ETIMEDOUT':
+ case 'EAI_FAIL':
+ short.push(['network', er.message])
+ detail.push([
+ 'network',
+ [
+ 'This is most likely not a problem with npm itself',
+ 'and is related to network connectivity.',
+ 'In most cases you are behind a proxy or have bad network settings.',
+ '\nIf you are behind a proxy, please make sure that the',
+ "'proxy' config is set properly. See: 'npm help config'"
+ ].join('\n')
+ ])
+ break
+
+ case 'ENOPACKAGEJSON':
+ short.push(['package.json', er.message])
+ detail.push([
+ 'package.json',
+ [
+ 'This is most likely not a problem with npm itself.',
+ "npm can't find a package.json file in your current directory."
+ ].join('\n')
+ ])
+ break
+
+ case 'ETARGET':
+ short.push(['notarget', er.message])
+ msg = [
+ 'This is most likely not a problem with npm itself.',
+ 'In most cases you or one of your dependencies are requesting',
+ "a package version that doesn't exist."
+ ]
+ if (er.parent) {
+ msg.push("\nIt was specified as a dependency of '" + er.parent + "'\n")
+ }
+ detail.push(['notarget', msg.join('\n')])
+ break
+
+ case 'ENOTSUP':
+ if (er.required) {
+ short.push(['notsup', er.message])
+ short.push(['notsup', 'Not compatible with your version of node/npm: ' + er.pkgid])
+ detail.push([
+ 'notsup',
+ [
+ 'Not compatible with your version of node/npm: ' + er.pkgid,
+ 'Required: ' + JSON.stringify(er.required),
+ 'Actual: ' + JSON.stringify({
+ npm: npm.version,
+ node: npm.config.get('node-version')
+ })
+ ].join('\n')
+ ])
+ break
+ } // else passthrough
+ /*eslint no-fallthrough:0*/
+
+ case 'ENOSPC':
+ short.push(['nospc', er.message])
+ detail.push([
+ 'nospc',
+ [
+ 'This is most likely not a problem with npm itself',
+ 'and is related to insufficient space on your system.'
+ ].join('\n')
+ ])
+ break
+
+ case 'EROFS':
+ short.push(['rofs', er.message])
+ detail.push([
+ 'rofs',
+ [
+ 'This is most likely not a problem with npm itself',
+ 'and is related to the file system being read-only.',
+ '\nOften virtualized file systems, or other file systems',
+ "that don't support symlinks, give this error."
+ ].join('\n')
+ ])
+ break
+
+ case 'ENOENT':
+ short.push(['enoent', er.message])
+ detail.push([
+ 'enoent',
+ [
+ er.message,
+ 'This is most likely not a problem with npm itself',
+ 'and is related to npm not being able to find a file.',
+ er.file ? "\nCheck if the file '" + er.file + "' is present." : ''
+ ].join('\n')
+ ])
+ break
+
+ case 'EMISSINGARG':
+ case 'EUNKNOWNTYPE':
+ case 'EINVALIDTYPE':
+ case 'ETOOMANYARGS':
+ short.push(['typeerror', er.stack])
+ detail.push([
+ 'typeerror',
+ [
+ 'This is an error with npm itself. Please report this error at:',
+ ' '
+ ].join('\n')
+ ])
+ break
+
+ case 'EISDIR':
+ short.push(['eisdir', er.message])
+ detail.push([
+ 'eisdir',
+ [
+ 'This is most likely not a problem with npm itself',
+ 'and is related to npm not being able to find a package.json in',
+ 'a package you are trying to install.'
+ ].join('\n')
+ ])
+ break
+
+ default:
+ short.push(['', er.message || er])
+ detail.push([
+ '',
+ [
+ '',
+ 'If you need help, you may report this error at:',
+ ' '
+ ].join('\n')
+ ])
+ break
+ }
+ return {summary: short, detail: detail}
+}
diff --git a/deps/npm/lib/utils/gently-rm.js b/deps/npm/lib/utils/gently-rm.js
index c73bb1bfc0ca56..634bf94fcc5df0 100644
--- a/deps/npm/lib/utils/gently-rm.js
+++ b/deps/npm/lib/utils/gently-rm.js
@@ -1,21 +1,22 @@
-// only remove the thing if it's a symlink into a specific folder.
-// This is a very common use-case of npm's, but not so common elsewhere.
+// only remove the thing if it's a symlink into a specific folder. This is
+// a very common use-case of npm's, but not so common elsewhere.
-module.exports = gentlyRm
+exports = module.exports = gentlyRm
-var npm = require('../npm.js')
-var log = require('npmlog')
var resolve = require('path').resolve
var dirname = require('path').dirname
+var normalize = require('path').normalize
+var validate = require('aproba')
+var log = require('npmlog')
var lstat = require('graceful-fs').lstat
var readlink = require('graceful-fs').readlink
var isInside = require('path-is-inside')
var vacuum = require('fs-vacuum')
-var some = require('async-some')
+var chain = require('slide').chain
var asyncMap = require('slide').asyncMap
-var normalize = require('path').normalize
var readCmdShim = require('read-cmd-shim')
var iferr = require('iferr')
+var npm = require('../npm.js')
function gentlyRm (target, gently, base, cb) {
if (!cb) {
@@ -37,8 +38,9 @@ function gentlyRm (target, gently, base, cb) {
// never rm the root, prefix, or bin dirs
//
- // globals included because of `npm link` -- as far as the package requesting
- // the link is concerned, the linked package is always installed globally
+ // globals included because of `npm link` -- as far as the package
+ // requesting the link is concerned, the linked package is always
+ // installed globally
var prefixes = [
npm.prefix,
npm.globalPrefix,
@@ -49,153 +51,234 @@ function gentlyRm (target, gently, base, cb) {
npm.globalBin
]
- var resolved = normalize(resolve(npm.prefix, target))
- if (prefixes.indexOf(resolved) !== -1) {
- log.verbose('gentlyRm', resolved, "is part of npm and can't be removed")
- return cb(new Error('May not delete: ' + resolved))
+ var targetPath = normalize(resolve(npm.prefix, target))
+ if (prefixes.indexOf(targetPath) !== -1) {
+ log.verbose('gentlyRm', targetPath, "is part of npm and can't be removed")
+ return cb(new Error('May not delete: ' + targetPath))
}
+ var options = { log: log.silly.bind(log, 'vacuum-fs') }
+ if (npm.config.get('force') || !gently) options.purge = true
+ if (base) options.base = normalize(resolve(npm.prefix, base))
- follow(resolved, function (realpath) {
- var options = { log: log.silly.bind(log, 'vacuum-fs') }
- if (npm.config.get('force') || !gently) options.purge = true
- if (base) options.base = normalize(resolve(npm.prefix, base))
+ if (!gently) {
+ log.verbose('gentlyRm', "don't care about contents; nuking", targetPath)
+ return vacuum(targetPath, options, cb)
+ }
- if (!gently) {
- log.verbose('gentlyRm', "don't care about contents; nuking", resolved)
- return vacuum(resolved, options, cb)
+ var parent = options.base = options.base || normalize(npm.prefix)
+
+ // Do all the async work we'll need to do in order to tell if this is a
+ // safe operation
+ chain([
+ [isEverInside, parent, prefixes],
+ [readLinkOrShim, targetPath],
+ [isEverInside, targetPath, prefixes],
+ [isEverInside, targetPath, [parent]]
+ ], function (er, results) {
+ if (er) {
+ if (er.code === 'ENOENT') return cb()
+ return cb(er)
+ }
+ var parentInfo = {
+ path: parent,
+ managed: results[0]
+ }
+ var targetInfo = {
+ path: targetPath,
+ symlink: results[1],
+ managed: results[2],
+ inParent: results[3]
}
- var parent = options.base = normalize(base ? resolve(npm.prefix, base) : npm.prefix)
-
- // is the parent directory managed by npm?
- log.silly('gentlyRm', 'verifying', parent, 'is an npm working directory')
- some(prefixes, isManaged(parent), function (er, matched) {
- if (er) return cb(er)
+ isSafeToRm(parentInfo, targetInfo, iferr(cb, thenRemove))
- if (!matched) {
- log.error('gentlyRm', 'containing path', parent, "isn't under npm's control")
- return clobberFail(resolved, parent, cb)
- }
- log.silly('gentlyRm', 'containing path', parent, "is under npm's control, in", matched)
-
- // is the target directly contained within the (now known to be
- // managed) parent?
- if (isInside(resolved, parent)) {
- log.silly('gentlyRm', 'deletion target', resolved, 'is under', parent)
- log.verbose('gentlyRm', 'vacuuming from', resolved, 'up to', parent)
- options.base = parent
- return vacuum(resolved, options, cb)
- }
- log.silly('gentlyRm', realpath, 'is not under', parent)
-
- // the target isn't directly within the parent, but is it itself managed?
- log.silly('gentlyRm', 'verifying', realpath, 'is an npm working directory')
- some(prefixes, isManaged(realpath), function (er, matched) {
- if (er) return cb(er)
-
- if (matched) {
- log.silly('gentlyRm', resolved, "is under npm's control, in", matched)
- if (isInside(realpath, parent)) {
- log.silly('gentlyRm', realpath, 'is controlled by', parent)
- options.base = matched
- log.verbose('gentlyRm', 'removing', resolved, 'with base', options.base)
- return vacuum(resolved, options, cb)
- } else if (resolved !== realpath) {
- log.warn('gentlyRm', 'not removing', resolved, "as it wasn't installed by", parent)
- return cb()
- }
- }
- log.verbose('gentlyRm', resolved, "is not under npm's control")
-
- // the target isn't managed directly, but maybe it's a link...
- log.silly('gentlyRm', 'checking to see if', resolved, 'is a link')
- readLinkOrShim(resolved, function (er, link) {
- if (er) {
- // race conditions are common when unbuilding
- if (er.code === 'ENOENT') return cb(null)
- return cb(er)
- }
-
- if (!link) {
- log.error('gentlyRm', resolved, 'is outside', parent, 'and not a link')
- return clobberFail(resolved, parent, cb)
- }
-
- // ...and maybe the link source, when read...
- log.silly('gentlyRm', resolved, 'is a link')
- // ...is inside the managed parent
- var source = resolve(dirname(resolved), link)
- if (isInside(source, parent)) {
- log.silly('gentlyRm', source, 'symlink target', resolved, 'is inside', parent)
- log.verbose('gentlyRm', 'vacuuming', resolved)
- return vacuum(resolved, options, cb)
- }
-
- log.error('gentlyRm', source, 'symlink target', resolved, 'is not controlled by npm', parent)
- return clobberFail(target, parent, cb)
- })
- })
- })
+ function thenRemove (toRemove, removeBase) {
+ if (!toRemove) return cb()
+ if (removeBase) options.base = removeBase
+ log.verbose('gentlyRm', options.purge ? 'Purging' : 'Vacuuming',
+ toRemove, 'up to', options.base)
+ return vacuum(toRemove, options, cb)
+ }
})
}
-var resolvedPaths = {}
-function isManaged (target) {
- return function predicate (path, cb) {
- if (!path) {
- log.verbose('isManaged', 'no path passed for target', target)
- return cb(null, false)
+exports._isSafeToRm = isSafeToRm
+function isSafeToRm (parent, target, cb) {
+ log.silly('gentlyRm', 'parent.path =', parent.path)
+ log.silly('gentlyRm', 'parent.managed =',
+ parent.managed && parent.managed.target + ' is in ' + parent.managed.path)
+ log.silly('gentlyRm', 'target.path = ', target.path)
+ log.silly('gentlyRm', 'target.symlink =', target.symlink)
+ log.silly('gentlyRm', 'target.managed =',
+ target.managed && target.managed.target + ' is in ' + target.managed.path)
+ log.silly('gentlyRm', 'target.inParent = ', target.inParent)
+
+ // The parent directory or something it symlinks to must eventually be in
+ // a folder that npm maintains.
+ if (!parent.managed) {
+ log.verbose('gentlyRm', parent.path,
+ 'is not contained in any diretory npm is known to control or ' +
+ 'any place they link to')
+ return cb(clobberFail(target.path, 'containing path ' + parent.path +
+ " isn't under npm's control"))
+ }
+
+ // The target or something it symlinks to must eventually be in the parent
+ // or something the parent symlinks to
+ if (target.inParent) {
+ var actualTarget = target.inParent.target
+ var targetsParent = target.inParent.path
+ // if the target.path was what we found in some version of parent, remove
+ // using that parent as the base
+ if (target.path === actualTarget) {
+ return cb(null, target.path, targetsParent)
+ } else {
+ // If something the target.path links to was what was found, just
+ // remove target.path in the location it was found.
+ return cb(null, target.path, dirname(target.path))
}
+ }
- asyncMap([path, target], resolveSymlink, function (er, results) {
- if (er) {
- if (er.code === 'ENOENT') return cb(null, false)
+ // If the target is in a managed directory and is in a symlink, but was
+ // not in our parent that usually means someone else installed a bin file
+ // with the same name as one of our bin files.
+ if (target.managed && target.symlink) {
+ log.warn('gentlyRm', 'not removing', target.path,
+ "as it wasn't installed by", parent.path)
+ return cb()
+ }
- return cb(er)
- }
+ if (target.symlink) {
+ return cb(clobberFail(target.path, target.symlink +
+ ' symlink target is not controlled by npm ' + parent.path))
+ } else {
+ return cb(clobberFail(target.path, 'is outside ' + parent.path +
+ ' and not a link'))
+ }
+}
- var path = results[0]
- var target = results[1]
- var inside = isInside(target, path)
- if (!inside) log.silly('isManaged', target, 'is not inside', path)
+function clobberFail (target, msg) {
+ validate('SS', arguments)
+ var er = new Error('Refusing to delete ' + target + ': ' + msg)
+ er.code = 'EEXIST'
+ er.path = target
+ return er
+}
- return cb(null, inside && path)
- })
- }
+function isENOENT (err) {
+ return err && err.code === 'ENOENT'
+}
- function resolveSymlink (toResolve, cb) {
- var resolved = resolve(npm.prefix, toResolve)
+function notENOENT (err) {
+ return !isENOENT(err)
+}
- // if the path has already been memoized, return immediately
- var cached = resolvedPaths[resolved]
- if (cached) return cb(null, cached)
+function skipENOENT (cb) {
+ return function (err, value) {
+ if (isENOENT(err)) {
+ return cb(null, false)
+ } else {
+ return cb(err, value)
+ }
+ }
+}
- // otherwise, check the path
- readLinkOrShim(resolved, function (er, source) {
- if (er) return cb(er)
+function errorsToValues (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments)
+ var cb = args.pop()
+ args.push(function (err, value) {
+ if (err) {
+ return cb(null, err)
+ } else {
+ return cb(null, value)
+ }
+ })
+ fn.apply(null, args)
+ }
+}
- // if it's not a link, cache & return the path itself
- if (!source) {
- resolvedPaths[resolved] = resolved
- return cb(null, resolved)
+function isNotError (value) {
+ return !(value instanceof Error)
+}
+
+exports._isEverInside = isEverInside
+// return the first of path, where target (or anything it symlinks to)
+// isInside the path (or anything it symlinks to)
+function isEverInside (target, paths, cb) {
+ validate('SAF', arguments)
+ asyncMap(paths, errorsToValues(readAllLinks), iferr(cb, function (resolvedPaths) {
+ var errorFree = resolvedPaths.filter(isNotError)
+ if (errorFree.length === 0) {
+ var badErrors = resolvedPaths.filter(notENOENT)
+ if (badErrors.length === 0) {
+ return cb(null, false)
+ } else {
+ return cb(badErrors[0])
}
+ }
+ readAllLinks(target, iferr(skipENOENT(cb), function (targets) {
+ cb(null, areAnyInsideAny(targets, errorFree))
+ }))
+ }))
+}
- // otherwise, cache & return the link's source
- resolved = resolve(resolved, source)
- resolvedPaths[resolved] = resolved
- cb(null, resolved)
+exports._areAnyInsideAny = areAnyInsideAny
+// Return the first path found that any target is inside
+function areAnyInsideAny (targets, paths) {
+ validate('AA', arguments)
+ var toCheck = []
+ paths.forEach(function (path) {
+ targets.forEach(function (target) {
+ toCheck.push([target, path])
})
+ })
+ for (var ii = 0; ii < toCheck.length; ++ii) {
+ var target = toCheck[ii][0]
+ var path = toCheck[ii][1]
+ var inside = isInside(target, path)
+ if (!inside) log.silly('isEverInside', target, 'is not inside', path)
+ if (inside && path) return inside && path && {target: target, path: path}
}
+ return false
}
-function clobberFail (target, root, cb) {
- var er = new Error('Refusing to delete: ' + target + ' not in ' + root)
- er.code = 'EEXIST'
- er.path = target
- return cb(er)
+exports._readAllLinks = readAllLinks
+// resolves chains of symlinks of unlimited depth, returning a list of paths
+// it's seen in the process when it hits either a symlink cycle or a
+// non-symlink
+function readAllLinks (path, cb) {
+ validate('SF', arguments)
+ var seen = {}
+ _readAllLinks(path)
+
+ function _readAllLinks (path) {
+ if (seen[path]) return cb(null, Object.keys(seen))
+ seen[path] = true
+ resolveSymlink(path, iferr(cb, _readAllLinks))
+ }
}
+exports._resolveSymlink = resolveSymlink
+var resolvedPaths = {}
+function resolveSymlink (symlink, cb) {
+ validate('SF', arguments)
+ var cached = resolvedPaths[symlink]
+ if (cached) return cb(null, cached)
+
+ readLinkOrShim(symlink, iferr(cb, function (symlinkTarget) {
+ if (symlinkTarget) {
+ resolvedPaths[symlink] = resolve(dirname(symlink), symlinkTarget)
+ } else {
+ resolvedPaths[symlink] = symlink
+ }
+ return cb(null, resolvedPaths[symlink])
+ }))
+}
+
+exports._readLinkOrShim = readLinkOrShim
function readLinkOrShim (path, cb) {
+ validate('SF', arguments)
lstat(path, iferr(cb, function (stat) {
if (stat.isSymbolicLink()) {
readlink(path, cb)
@@ -212,10 +295,3 @@ function readLinkOrShim (path, cb) {
}
}))
}
-
-function follow (path, cb) {
- readLinkOrShim(path, function (er, source) {
- if (!source) return cb(path)
- cb(normalize(resolve(dirname(path), source)))
- })
-}
diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js
index e2ec37c24114ac..7c93cdfada61d8 100644
--- a/deps/npm/lib/utils/lifecycle.js
+++ b/deps/npm/lib/utils/lifecycle.js
@@ -243,6 +243,11 @@ function runCmd_ (cmd, pkg, env, wd, stage, unsafe, uid, gid, cb_) {
if (er.code !== 'EPERM') {
er.code = 'ELIFECYCLE'
}
+ fs.stat(npm.dir, function (statError, d) {
+ if (statError && statError.code === 'ENOENT' && npm.dir.split(path.sep).slice(-1)[0] === 'node_modules') {
+ log.warn('', 'Local package.json exists, but node_modules missing, did you mean to install?')
+ }
+ })
er.pkgid = pkg._id
er.stage = stage
er.script = cmd
diff --git a/deps/npm/lib/utils/rename.js b/deps/npm/lib/utils/rename.js
new file mode 100644
index 00000000000000..8a444289844b10
--- /dev/null
+++ b/deps/npm/lib/utils/rename.js
@@ -0,0 +1,16 @@
+'use strict'
+var fs = require('graceful-fs')
+var SaveStack = require('./save-stack.js')
+
+module.exports = rename
+
+function rename (from, to, cb) {
+ var saved = new SaveStack(rename)
+ fs.rename(from, to, function (er) {
+ if (er) {
+ return cb(saved.completeWith(er))
+ } else {
+ return cb()
+ }
+ })
+}
diff --git a/deps/npm/lib/utils/save-stack.js b/deps/npm/lib/utils/save-stack.js
new file mode 100644
index 00000000000000..42c4aab5f94483
--- /dev/null
+++ b/deps/npm/lib/utils/save-stack.js
@@ -0,0 +1,16 @@
+'use strict'
+var inherits = require('inherits')
+
+module.exports = SaveStack
+
+function SaveStack (fn) {
+ Error.call(this)
+ Error.captureStackTrace(this, fn || SaveStack)
+}
+inherits(SaveStack, Error)
+
+SaveStack.prototype.completeWith = function (er) {
+ this['__' + 'proto' + '__'] = er
+ this.stack = this.stack + '\n\n' + er.stack
+ return this
+}
diff --git a/deps/npm/lib/version.js b/deps/npm/lib/version.js
index 455bcc2dbadb55..448c7713cedbca 100644
--- a/deps/npm/lib/version.js
+++ b/deps/npm/lib/version.js
@@ -14,7 +14,7 @@ var assert = require('assert')
var lifecycle = require('./utils/lifecycle.js')
var parseJSON = require('./utils/parse-json.js')
-version.usage = 'npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease]' +
+version.usage = 'npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]' +
'\n(run in package dir)\n' +
"'npm -v' or 'npm --version' to print npm version " +
'(' + npm.version + ')\n' +
@@ -29,16 +29,7 @@ function version (args, silent, cb_) {
}
if (args.length > 1) return cb_(version.usage)
- var packagePath = path.join(npm.localPrefix, 'package.json')
- fs.readFile(packagePath, function (er, data) {
- if (data) data = data.toString()
- try {
- data = parseJSON(data)
- } catch (e) {
- er = e
- data = null
- }
-
+ readPackage(function (er, data) {
if (!args.length) return dump(data, cb_)
if (er) {
@@ -46,27 +37,73 @@ function version (args, silent, cb_) {
return cb_(er)
}
- var newVersion = semver.valid(args[0])
- if (!newVersion) newVersion = semver.inc(data.version, args[0])
- if (!newVersion) return cb_(version.usage)
- if (data.version === newVersion) return cb_(new Error('Version not changed'))
- data.version = newVersion
- var lifecycleData = Object.create(data)
- lifecycleData._id = data.name + '@' + newVersion
- var localData = {}
-
- var where = npm.prefix
- chain([
- [checkGit, localData],
- [lifecycle, lifecycleData, 'preversion', where],
- [updatePackage, newVersion, silent],
- [lifecycle, lifecycleData, 'version', where],
- [commit, localData, newVersion],
- [lifecycle, lifecycleData, 'postversion', where] ],
- cb_)
+ if (args[0] === 'from-git') {
+ retrieveTagVersion(silent, data, cb_)
+ } else {
+ var newVersion = semver.valid(args[0])
+ if (!newVersion) newVersion = semver.inc(data.version, args[0])
+ if (!newVersion) return cb_(version.usage)
+ persistVersion(newVersion, silent, data, cb_)
+ }
})
}
+function retrieveTagVersion (silent, data, cb_) {
+ chain([
+ verifyGit,
+ parseLastGitTag
+ ], function (er, results) {
+ if (er) return cb_(er)
+ var localData = {
+ hasGit: true,
+ existingTag: true
+ }
+
+ var version = results[results.length - 1]
+ persistVersion(version, silent, data, localData, cb_)
+ })
+}
+
+function parseLastGitTag (cb) {
+ var options = { env: process.env }
+ git.whichAndExec(['describe', '--abbrev=0'], options, function (er, stdout) {
+ if (er) {
+ if (er.message.indexOf('No names found') !== -1) return cb(new Error('No tags found'))
+ return cb(er)
+ }
+
+ var tag = stdout.trim()
+ var prefix = npm.config.get('tag-version-prefix')
+ // Strip the prefix from the start of the tag:
+ if (tag.indexOf(prefix) === 0) tag = tag.slice(prefix.length)
+ var version = semver.valid(tag)
+ if (!version) return cb(new Error(tag + ' is not a valid version'))
+ cb(null, version)
+ })
+}
+
+function persistVersion (newVersion, silent, data, localData, cb_) {
+ if (typeof localData === 'function') {
+ cb_ = localData
+ localData = {}
+ }
+
+ if (data.version === newVersion) return cb_(new Error('Version not changed'))
+ data.version = newVersion
+ var lifecycleData = Object.create(data)
+ lifecycleData._id = data.name + '@' + newVersion
+
+ var where = npm.prefix
+ chain([
+ !localData.hasGit && [checkGit, localData],
+ [lifecycle, lifecycleData, 'preversion', where],
+ [updatePackage, newVersion, silent],
+ [lifecycle, lifecycleData, 'version', where],
+ [commit, localData, newVersion],
+ [lifecycle, lifecycleData, 'postversion', where]
+ ], cb_)
+}
+
function readPackage (cb) {
var packagePath = path.join(npm.localPrefix, 'package.json')
fs.readFile(packagePath, function (er, data) {
@@ -98,7 +135,8 @@ function updatePackage (newVersion, silent, cb_) {
function commit (localData, newVersion, cb) {
updateShrinkwrap(newVersion, function (er, hasShrinkwrap) {
if (er || !localData.hasGit) return cb(er)
- _commit(newVersion, hasShrinkwrap, cb)
+ localData.hasShrinkwrap = hasShrinkwrap
+ _commit(newVersion, localData, cb)
})
}
@@ -140,8 +178,51 @@ function dump (data, cb) {
cb()
}
+function statGitFolder (cb) {
+ fs.stat(path.join(npm.localPrefix, '.git'), cb)
+}
+
+function callGitStatus (cb) {
+ git.whichAndExec(
+ [ 'status', '--porcelain' ],
+ { env: process.env },
+ cb
+ )
+}
+
+function cleanStatusLines (stdout) {
+ var lines = stdout.trim().split('\n').filter(function (line) {
+ return line.trim() && !line.match(/^\?\? /)
+ }).map(function (line) {
+ return line.trim()
+ })
+
+ return lines
+}
+
+function verifyGit (cb) {
+ function checkStatus (er) {
+ if (er) return cb(er)
+ callGitStatus(checkStdout)
+ }
+
+ function checkStdout (er, stdout) {
+ if (er) return cb(er)
+ var lines = cleanStatusLines(stdout)
+ if (lines.length > 0) {
+ return cb(new Error(
+ 'Git working directory not clean.\n' + lines.join('\n')
+ ))
+ }
+
+ cb()
+ }
+
+ statGitFolder(checkStatus)
+}
+
function checkGit (localData, cb) {
- fs.stat(path.join(npm.localPrefix, '.git'), function (er, s) {
+ statGitFolder(function (er) {
var doGit = !er && npm.config.get('git-tag-version')
if (!doGit) {
if (er) log.verbose('version', 'error checking for .git', er)
@@ -150,47 +231,45 @@ function checkGit (localData, cb) {
}
// check for git
- git.whichAndExec(
- [ 'status', '--porcelain' ],
- { env: process.env },
- function (er, stdout) {
- if (er && er.code === 'ENOGIT') {
- log.warn(
- 'version',
- 'This is a Git checkout, but the git command was not found.',
- 'npm could not create a Git tag for this release!'
- )
- return cb(null, false)
- }
-
- var lines = stdout.trim().split('\n').filter(function (line) {
- return line.trim() && !line.match(/^\?\? /)
- }).map(function (line) {
- return line.trim()
- })
- if (lines.length && !npm.config.get('force')) {
- return cb(new Error(
- 'Git working directory not clean.\n' + lines.join('\n')
- ))
- }
- localData.hasGit = true
- cb(null, true)
+ callGitStatus(function (er, stdout) {
+ if (er && er.code === 'ENOGIT') {
+ log.warn(
+ 'version',
+ 'This is a Git checkout, but the git command was not found.',
+ 'npm could not create a Git tag for this release!'
+ )
+ return cb(null, false)
+ }
+
+ var lines = cleanStatusLines(stdout)
+ if (lines.length && !npm.config.get('force')) {
+ return cb(new Error(
+ 'Git working directory not clean.\n' + lines.join('\n')
+ ))
}
- )
+ localData.hasGit = true
+ cb(null, true)
+ })
})
}
-function _commit (version, hasShrinkwrap, cb) {
+function _commit (version, localData, cb) {
+ var packagePath = path.join(npm.localPrefix, 'package.json')
var options = { env: process.env }
var message = npm.config.get('message').replace(/%s/g, version)
var sign = npm.config.get('sign-git-tag')
var flag = sign ? '-sm' : '-am'
chain(
[
- git.chainableExec([ 'add', 'package.json' ], options),
- hasShrinkwrap && git.chainableExec([ 'add', 'npm-shrinkwrap.json' ], options),
+ git.chainableExec([ 'add', packagePath ], options),
+ localData.hasShrinkwrap && git.chainableExec([ 'add', 'npm-shrinkwrap.json' ], options),
git.chainableExec([ 'commit', '-m', message ], options),
- git.chainableExec([ 'tag', npm.config.get('tag-version-prefix') + version, flag, message ], options)
+ !localData.existingTag && git.chainableExec([
+ 'tag',
+ npm.config.get('tag-version-prefix') + version,
+ flag,
+ message
+ ], options)
],
cb
)
diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1
index ea9e7b1c078d05..7cf7be7dd7bd53 100644
--- a/deps/npm/man/man1/npm-README.1
+++ b/deps/npm/man/man1/npm-README.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "November 2015" "" ""
+.TH "NPM" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm\fR \- a JavaScript package manager
.P
@@ -14,6 +14,17 @@ Much more info available via \fBnpm help\fP once it's installed\.
.P
To install an old \fBand unsupported\fR version of npm that works on node 0\.3
and prior, clone the git repo and dig through the old tags and branches\.
+.P
+\fBnpm is configured to use npm, Inc\.'s public package registry at
+https://registry\.npmjs\.org by default\.\fR
+.P
+You can configure npm to use any compatible registry you
+like, and even run your own registry\. Check out the doc on
+registries \fIhttps://docs\.npmjs\.com/misc/registry\fR\|\.
+.P
+Use of someone else's registry may be governed by terms of use\. The
+terms of use for the default public registry are available at
+https://www\.npmjs\.com\|\.
.SH Super Easy Install
.P
npm is bundled with node \fIhttp://nodejs\.org/download/\fR\|\.
@@ -131,53 +142,6 @@ Uninstalling npm does not remove configuration files by default\. You
must remove them yourself manually if you want them gone\. Note that
this means that future npm installs will not remember the settings that
you have chosen\.
-.SH Using npm Programmatically
-.P
-Although npm can be used programmatically, its API is meant for use by the CLI
-\fIonly\fR, and no guarantees are made regarding its fitness for any other purpose\.
-If you want to use npm to reliably perform some task, the safest thing to do is
-to invoke the desired \fBnpm\fP command with appropriate arguments\.
-.P
-The semantic version of npm refers to the CLI itself, rather than the
-underlying API\. \fIThe internal API is not guaranteed to remain stable even when
-npm's version indicates no breaking changes have been made according to
-semver\.\fR
-.P
-If you \fIstill\fR would like to use npm programmatically, it's \fIpossible\fR\|\. The API
-isn't very well documented, but it \fIis\fR rather simple\.
-.P
-Eventually, npm will be just a thin CLI wrapper around the modules that it
-depends on, but for now, there are some things that only the CLI can do\. You
-should try using one of npm's dependencies first, and only use the API if what
-you're trying to do is only supported by npm itself\.
-.P
-.RS 2
-.nf
-var npm = require("npm")
-npm\.load(myConfigObject, function (er) {
- if (er) return handlError(er)
- npm\.commands\.install(["some", "args"], function (er, data) {
- if (er) return commandFailed(er)
- // command succeeded, and data might have some info
- })
- npm\.registry\.log\.on("log", function (message) { \.\.\.\. })
-})
-.fi
-.RE
-.P
-The \fBload\fP function takes an object hash of the command\-line configs\.
-The various \fBnpm\.commands\.\fP functions take an \fBarray\fR of
-positional argument \fBstrings\fR\|\. The last argument to any
-\fBnpm\.commands\.\fP function is a callback\. Some commands take other
-optional arguments\. Read the source\.
-.P
-You cannot set configs individually for any single npm function at this
-time\. Since \fBnpm\fP is a singleton, any call to \fBnpm\.config\.set\fP will
-change the value for \fIall\fR npm commands in that process\.
-.P
-See \fB\|\./bin/npm\-cli\.js\fP for an example of pulling config values off of the
-command line arguments using nopt\. You may also want to check out \fBnpm
-help config\fP to learn about all the options you can set there\.
.SH More Docs
.P
Check out the docs \fIhttps://docs\.npmjs\.com/\fR,
@@ -187,45 +151,6 @@ You can use the \fBnpm help\fP command to read any of them\.
.P
If you're a developer, and you want to use npm to publish your program,
you should read this \fIhttps://docs\.npmjs\.com/misc/developers\fR
-.SH Legal Stuff
-.P
-"npm" and "The npm Registry" are owned by npm, Inc\.
-All rights reserved\. See the included LICENSE file for more details\.
-.P
-"Node\.js" and "node" are trademarks owned by Joyent, Inc\.
-.P
-Modules published on the npm registry are not officially endorsed by
-npm, Inc\. or the Node\.js project\.
-.P
-Data published to the npm registry is not part of npm itself, and is
-the sole property of the publisher\. While every effort is made to
-ensure accountability, there is absolutely no guarantee, warranty, or
-assertion expressed or implied as to the quality, fitness for a
-specific purpose, or lack of malice in any given npm package\.
-.P
-If you have a complaint about a package in the public npm registry,
-and cannot resolve it with the package
-owner \fIhttps://docs\.npmjs\.com/misc/disputes\fR, please email
-support@npmjs\.com and explain the situation\.
-.P
-Any data published to The npm Registry (including user account
-information) may be removed or modified at the sole discretion of the
-npm server administrators\.
-.SS In plainer English
-.P
-npm is the property of npm, Inc\.
-.P
-If you publish something, it's yours, and you are solely accountable
-for it\.
-.P
-If other people publish something, it's theirs\.
-.P
-Users can publish Bad Stuff\. It will be removed promptly if reported\.
-But there is no vetting process for published modules, and you use
-them at your own risk\. Please inspect the source\.
-.P
-If you publish Bad Stuff, we may delete it from the registry, or even
-ban your account in extreme cases\. So don't do that\.
.SH BUGS
.P
When you find issues, please report them:
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index f1b8bc0e316dd0..cda8c58af373bc 100644
--- a/deps/npm/man/man1/npm-access.1
+++ b/deps/npm/man/man1/npm-access.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ACCESS" "1" "November 2015" "" ""
+.TH "NPM\-ACCESS" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-access\fR \- Set access level on published packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index f96eae96bce363..5db95ed23785b2 100644
--- a/deps/npm/man/man1/npm-adduser.1
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ADDUSER" "1" "November 2015" "" ""
+.TH "NPM\-ADDUSER" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-adduser\fR \- Add a registry user account
.SH SYNOPSIS
@@ -29,7 +29,7 @@ your existing record\.
.SH CONFIGURATION
.SS registry
.P
-Default: http://registry\.npmjs\.org/
+Default: https://registry\.npmjs\.org/
.P
The base URL of the npm package registry\. If \fBscope\fP is also specified,
this registry will only be used for packages with that scope\. See npm help 7 \fBnpm\-scope\fP\|\.
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
index 42b2b17d140fa1..a2d588a021146f 100644
--- a/deps/npm/man/man1/npm-bin.1
+++ b/deps/npm/man/man1/npm-bin.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BIN" "1" "November 2015" "" ""
+.TH "NPM\-BIN" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-bin\fR \- Display npm bin folder
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index 0d0bf21688ab33..2a0a753ed9c5f9 100644
--- a/deps/npm/man/man1/npm-bugs.1
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUGS" "1" "November 2015" "" ""
+.TH "NPM\-BUGS" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-bugs\fR \- Bugs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1
index 1bac97e926e4e3..51b4bc90cd568d 100644
--- a/deps/npm/man/man1/npm-build.1
+++ b/deps/npm/man/man1/npm-build.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUILD" "1" "November 2015" "" ""
+.TH "NPM\-BUILD" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-build\fR \- Build a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1
index fa54e083415a82..341e5485ca5884 100644
--- a/deps/npm/man/man1/npm-bundle.1
+++ b/deps/npm/man/man1/npm-bundle.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUNDLE" "1" "November 2015" "" ""
+.TH "NPM\-BUNDLE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-bundle\fR \- REMOVED
.SH DESCRIPTION
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index c4bca767c4496a..e9fa3a254f8bcb 100644
--- a/deps/npm/man/man1/npm-cache.1
+++ b/deps/npm/man/man1/npm-cache.1
@@ -1,4 +1,4 @@
-.TH "NPM\-CACHE" "1" "November 2015" "" ""
+.TH "NPM\-CACHE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-cache\fR \- Manipulates packages cache
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index ba8d7dd802fefc..14ffb07c779973 100644
--- a/deps/npm/man/man1/npm-completion.1
+++ b/deps/npm/man/man1/npm-completion.1
@@ -1,4 +1,4 @@
-.TH "NPM\-COMPLETION" "1" "November 2015" "" ""
+.TH "NPM\-COMPLETION" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-completion\fR \- Tab Completion for npm
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index f3030154303c90..1231de24b7e710 100644
--- a/deps/npm/man/man1/npm-config.1
+++ b/deps/npm/man/man1/npm-config.1
@@ -1,4 +1,4 @@
-.TH "NPM\-CONFIG" "1" "November 2015" "" ""
+.TH "NPM\-CONFIG" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-config\fR \- Manage the npm configuration files
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index 145e27dd49108d..fac1bff7c9f358 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,12 +1,12 @@
-.TH "NPM\-DEDUPE" "1" "November 2015" "" ""
+.TH "NPM\-DEDUPE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-dedupe\fR \- Reduce duplication
.SH SYNOPSIS
.P
.RS 2
.nf
-npm dedupe [package names\.\.\.]
-npm ddp [package names\.\.\.]
+npm dedupe
+npm ddp
.fi
.RE
.SH DESCRIPTION
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index a3992ac1bb6459..0ebfb3a1a6d8de 100644
--- a/deps/npm/man/man1/npm-deprecate.1
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DEPRECATE" "1" "November 2015" "" ""
+.TH "NPM\-DEPRECATE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-deprecate\fR \- Deprecate a version of a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1
index 8b30e986a4f78b..3c17975c4ea4e3 100644
--- a/deps/npm/man/man1/npm-dist-tag.1
+++ b/deps/npm/man/man1/npm-dist-tag.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DIST\-TAG" "1" "November 2015" "" ""
+.TH "NPM\-DIST\-TAG" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-dist-tag\fR \- Modify package distribution tags
.SH SYNOPSIS
@@ -47,16 +47,29 @@ npm install \-\-tag
.P
This also applies to \fBnpm dedupe\fP\|\.
.P
-Publishing a package sets the "latest" tag to the published version unless the
+Publishing a package sets the \fBlatest\fP tag to the published version unless the
\fB\-\-tag\fP option is used\. For example, \fBnpm publish \-\-tag=beta\fP\|\.
+.P
+By default, \fBnpm install \fP (without any \fB@\fP or \fB@\fP
+specifier) installs the \fBlatest\fP tag\.
.SH PURPOSE
.P
-Tags can be used to provide an alias instead of version numbers\. For
-example, \fBnpm\fP currently uses the tag "next" to identify the upcoming
-version, and the tag "latest" to identify the current version\.
+Tags can be used to provide an alias instead of version numbers\.
+.P
+For example, a project might choose to have multiple streams of development
+and use a different tag for each stream,
+e\.g\., \fBstable\fP, \fBbeta\fP, \fBdev\fP, \fBcanary\fP\|\.
+.P
+By default, the \fBlatest\fP tag is used by npm to identify the current version of
+a package, and \fBnpm install \fP (without any \fB@\fP or \fB@\fP
+specifier) installs the \fBlatest\fP tag\. Typically, projects only use the \fBlatest\fP
+tag for stable release versions, and use other tags for unstable versions such
+as prereleases\.
.P
-A project might choose to have multiple streams of development, e\.g\.,
-"stable", "canary"\.
+The \fBnext\fP tag is used by some projects to identify the upcoming version\.
+.P
+By default, other than \fBlatest\fP, no tag has any special significance to npm
+itself\.
.SH CAVEATS
.P
This command used to be known as \fBnpm tag\fP, which only created new tags, and so
@@ -88,8 +101,6 @@ npm help config
.IP \(bu 2
npm help 7 config
.IP \(bu 2
-npm apihelp tag
-.IP \(bu 2
npm help 5 npmrc
.RE
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index d6690800c465d0..cdd9db71d76605 100644
--- a/deps/npm/man/man1/npm-docs.1
+++ b/deps/npm/man/man1/npm-docs.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DOCS" "1" "November 2015" "" ""
+.TH "NPM\-DOCS" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-docs\fR \- Docs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index dd757fe87817ca..96e6e0171aecc7 100644
--- a/deps/npm/man/man1/npm-edit.1
+++ b/deps/npm/man/man1/npm-edit.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EDIT" "1" "November 2015" "" ""
+.TH "NPM\-EDIT" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-edit\fR \- Edit an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index 797c84d737bd7d..ec7a1507bfadaf 100644
--- a/deps/npm/man/man1/npm-explore.1
+++ b/deps/npm/man/man1/npm-explore.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EXPLORE" "1" "November 2015" "" ""
+.TH "NPM\-EXPLORE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-explore\fR \- Browse an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index 88654a1da3ad92..91aa5722497d07 100644
--- a/deps/npm/man/man1/npm-help-search.1
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -1,4 +1,4 @@
-.TH "NPM\-HELP\-SEARCH" "1" "November 2015" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-help-search\fR \- Search npm help documentation
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index 8022867ef46a22..d34aa175fe71b1 100644
--- a/deps/npm/man/man1/npm-help.1
+++ b/deps/npm/man/man1/npm-help.1
@@ -1,4 +1,4 @@
-.TH "NPM\-HELP" "1" "November 2015" "" ""
+.TH "NPM\-HELP" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-help\fR \- Get help on npm
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index 8c6bf0397482eb..8d6ac74f59b3c8 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,4 +1,4 @@
-.TH "NPM\-INIT" "1" "November 2015" "" ""
+.TH "NPM\-INIT" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-init\fR \- Interactively create a package\.json file
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-install-test.1 b/deps/npm/man/man1/npm-install-test.1
index e2edecfc03a3bc..6b4f8adec740a8 100644
--- a/deps/npm/man/man1/npm-install-test.1
+++ b/deps/npm/man/man1/npm-install-test.1
@@ -1,4 +1,4 @@
-.TH "NPM" "" "November 2015" "" ""
+.TH "NPM" "" "January 2016" "" ""
.SH "NAME"
\fBnpm\fR
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index 9219b7a024ce9a..ea85578e0a2d47 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -1,4 +1,4 @@
-.TH "NPM\-INSTALL" "1" "November 2015" "" ""
+.TH "NPM\-INSTALL" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-install\fR \- Install a package
.SH SYNOPSIS
@@ -27,7 +27,7 @@ by that\. See npm help shrinkwrap\.
A \fBpackage\fP is:
.RS 0
.IP \(bu 2
-a) a folder containing a program described by a package\.json file
+a) a folder containing a program described by a npm help 5 \fBpackage\.json\fP file
.IP \(bu 2
b) a gzipped tarball containing (a)
.IP \(bu 2
@@ -35,7 +35,7 @@ c) a url that resolves to (b)
.IP \(bu 2
d) a \fB@\fP that is published on the registry (see npm help 7 \fBnpm\-registry\fP) with (c)
.IP \(bu 2
-e) a \fB@\fP that points to (d)
+e) a \fB@\fP (see npm help \fBnpm\-dist\-tag\fP) that points to (d)
.IP \(bu 2
f) a \fB\fP that has a "latest" tag satisfying (e)
.IP \(bu 2
@@ -54,7 +54,8 @@ after packing it up into a tarball (b)\.
In global mode (ie, with \fB\-g\fP or \fB\-\-global\fP appended to the command),
it installs the current package context (ie, the current working
directory) as a global package\.
- By default, \fBnpm install\fP will install all modules listed as dependencies\.
+ By default, \fBnpm install\fP will install all modules listed as dependencies
+ in npm help 5 \fBpackage\.json\fP\|\.
With the \fB\-\-production\fP flag (or when the \fBNODE_ENV\fP environment variable
is set to \fBproduction\fP), npm will not install modules listed in
\fBdevDependencies\fP\|\.
@@ -87,7 +88,7 @@ after packing it up into a tarball (b)\.
.IP \(bu 2
\fBnpm install [<@scope>/] [\-S|\-\-save|\-D|\-\-save\-dev|\-O|\-\-save\-optional]\fP:
Do a \fB@\fP install, where \fB\fP is the "tag" config\. (See
- npm help 7 \fBnpm\-config\fP\|\.)
+ npm help 7 \fBnpm\-config\fP\|\. The config's default value is \fBlatest\fP\|\.)
In most cases, this will install the latest version
of the module published on npm\.
Example:
@@ -308,6 +309,16 @@ npm install sax \-\-force
The \fB\-g\fP or \fB\-\-global\fP argument will cause npm to install the package globally
rather than locally\. See npm help 5 \fBnpm\-folders\fP\|\.
.P
+The \fB\-\-global\-style\fP argument will cause npm to install the package into
+your local \fBnode_modules\fP folder with the same layout it uses with the
+global \fBnode_modules\fP folder\. Only your direct dependencies will show in
+\fBnode_modules\fP and everything they depend on will be flattened in their
+\fBnode_modules\fP folders\. This obviously will elminate some deduping\.
+.P
+The \fB\-\-legacy\-bundling\fP argument will cause npm to install the package such
+that versions of npm prior to 1\.4, such as the one included with node 0\.8,
+can install the package\. This eliminates all automatic deduping\.
+.P
The \fB\-\-link\fP argument will cause npm to link global installs into the
local space in some cases\.
.P
@@ -429,9 +440,11 @@ npm help 7 registry
.IP \(bu 2
npm help tag
.IP \(bu 2
-npm help rm
+npm help uninstall
.IP \(bu 2
npm help shrinkwrap
+.IP \(bu 2
+npm help 5 package\.json
.RE
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 9d0ea8f47c5ff7..d39e9dd0e39413 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -1,4 +1,4 @@
-.TH "NPM\-LINK" "1" "November 2015" "" ""
+.TH "NPM\-LINK" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-link\fR \- Symlink a package folder
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-logout.1 b/deps/npm/man/man1/npm-logout.1
index c194188ad64b89..9428fe9a525946 100644
--- a/deps/npm/man/man1/npm-logout.1
+++ b/deps/npm/man/man1/npm-logout.1
@@ -1,4 +1,4 @@
-.TH "NPM\-LOGOUT" "1" "November 2015" "" ""
+.TH "NPM\-LOGOUT" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-logout\fR \- Log out of the registry
.SH SYNOPSIS
@@ -23,7 +23,7 @@ connected to that scope, if set\.
.SH CONFIGURATION
.SS registry
.P
-Default: http://registry\.npmjs\.org/
+Default: https://registry\.npmjs\.org/
.P
The base URL of the npm package registry\. If \fBscope\fP is also specified,
it takes precedence\.
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 10dea443864242..f438a237604916 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -1,4 +1,4 @@
-.TH "NPM\-LS" "1" "November 2015" "" ""
+.TH "NPM\-LS" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-ls\fR \- List installed packages
.SH SYNOPSIS
@@ -22,7 +22,7 @@ For example, running \fBnpm ls promzard\fP in npm's source tree will show:
.P
.RS 2
.nf
-npm@3.3.12 /path/to/npm
+npm@3.6.0 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.fi
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index b7ba130cb5e4b1..f8e2e9dbbfe58d 100644
--- a/deps/npm/man/man1/npm-outdated.1
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -1,4 +1,4 @@
-.TH "NPM\-OUTDATED" "1" "November 2015" "" ""
+.TH "NPM\-OUTDATED" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-outdated\fR \- Check for outdated packages
.SH SYNOPSIS
@@ -13,9 +13,77 @@ npm outdated [[<@scope>/] \.\.\.]
This command will check the registry to see if any (or, specific) installed
packages are currently outdated\.
.P
-The resulting field 'wanted' shows the latest version according to the
-version specified in the package\.json, the field 'latest' the very latest
-version of the package\.
+In the output:
+.RS 0
+.IP \(bu 2
+\fBwanted\fP is the maximum version of the package that satisfies the semver
+range specified in \fBpackage\.json\fP\|\. If there's no available semver range (i\.e\.
+you're running \fBnpm outdated \-\-global\fP, or the package isn't included in
+\fBpackage\.json\fP), then \fBwanted\fP shows the currently\-installed version\.
+.IP \(bu 2
+\fBlatest\fP is the version of the package tagged as latest in the registry\.
+Running \fBnpm publish\fP with no special configuration will publish the package
+with a dist\-tag of \fBlatest\fP\|\. This may or may not be the maximum version of
+the package, or the most\-recently published version of the package, depending
+on how the package's developer manages the latest npm help dist\-tag\.
+.IP \(bu 2
+\fBlocation\fP is where in the dependency tree the package is located\. Note that
+\fBnpm outdated\fP defaults to a depth of 0, so unless you override that, you'll
+always be seeing only top\-level dependencies that are outdated\.
+.IP \(bu 2
+\fBpackage type\fP (when using \fB\-\-long\fP / \fB\-l\fP) tells you whether this package is
+a \fBdependency\fP or a \fBdevDependency\fP\|\. Packages not included in \fBpackage\.json\fP
+are always marked \fBdependencies\fP\|\.
+
+.RE
+.SS An example
+.P
+.RS 2
+.nf
+$ npm outdated
+Package Current Wanted Latest Location
+glob 5\.0\.15 5\.0\.15 6\.0\.1 test\-outdated\-output
+nothingness 0\.0\.3 git git test\-outdated\-output
+npm 3\.5\.1 3\.5\.2 3\.5\.1 test\-outdated\-output
+local\-dev 0\.0\.3 linked linked test\-outdated\-output
+once 1\.3\.2 1\.3\.3 1\.3\.3 test\-outdated\-output
+.fi
+.RE
+.P
+With these \fBdependencies\fP:
+.P
+.RS 2
+.nf
+{
+ "glob": "^5\.0\.15",
+ "nothingness": "github:othiym23/nothingness#master",
+ "npm": "^3\.5\.1",
+ "once": "^1\.3\.1"
+}
+.fi
+.RE
+.P
+A few things to note:
+.RS 0
+.IP \(bu 2
+\fBglob\fP requires \fB^5\fP, which prevents npm from installing \fBglob@6\fP, which is
+outside the semver range\.
+.IP \(bu 2
+Git dependencies will always be reinstalled, because of how they're specified\.
+The installed committish might satisfy the dependency specifier (if it's
+something immutable, like a commit SHA), or it might not, so \fBnpm outdated\fP and
+\fBnpm update\fP have to fetch Git repos to check\. This is why currently doing a
+reinstall of a Git dependency always forces a new clone and install\.
+.IP \(bu 2
+\fBnpm@3\.5\.2\fP is marked as "wanted", but "latest" is \fBnpm@3\.5\.1\fP because npm
+uses dist\-tags to manage its \fBlatest\fP and \fBnext\fP release channels\. \fBnpm update\fP
+will install the \fInewest\fR version, but \fBnpm install npm\fP (with no semver range)
+will install whatever's tagged as \fBlatest\fP\|\.
+.IP \(bu 2
+\fBonce\fP is just plain out of date\. Reinstalling \fBnode_modules\fP from scratch or
+running \fBnpm update\fP will bring it up to spec\.
+
+.RE
.SH CONFIGURATION
.SS json
.RS 0
@@ -61,6 +129,8 @@ project\.
.SS depth
.RS 0
.IP \(bu 2
+Default: 0
+.IP \(bu 2
Type: Int
.RE
@@ -71,6 +141,8 @@ Max depth for checking dependency tree\.
.IP \(bu 2
npm help update
.IP \(bu 2
+npm help dist\-tag
+.IP \(bu 2
npm help 7 registry
.IP \(bu 2
npm help 5 folders
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index 1ce148d3fade74..f529198042e189 100644
--- a/deps/npm/man/man1/npm-owner.1
+++ b/deps/npm/man/man1/npm-owner.1
@@ -1,4 +1,4 @@
-.TH "NPM\-OWNER" "1" "November 2015" "" ""
+.TH "NPM\-OWNER" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-owner\fR \- Manage package owners
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index 9bb591cdfe82f2..e1154052cf5083 100644
--- a/deps/npm/man/man1/npm-pack.1
+++ b/deps/npm/man/man1/npm-pack.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PACK" "1" "November 2015" "" ""
+.TH "NPM\-PACK" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-pack\fR \- Create a tarball from a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-ping.1 b/deps/npm/man/man1/npm-ping.1
index 4d2b9a78bf0fcb..a51570bcf9f39c 100644
--- a/deps/npm/man/man1/npm-ping.1
+++ b/deps/npm/man/man1/npm-ping.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PING" "1" "November 2015" "" ""
+.TH "NPM\-PING" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-ping\fR \- Ping npm registry
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index c6ea5f6fdfa75e..ca5cfbabc6656f 100644
--- a/deps/npm/man/man1/npm-prefix.1
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PREFIX" "1" "November 2015" "" ""
+.TH "NPM\-PREFIX" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-prefix\fR \- Display prefix
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index 22c831d338dc1f..042fa62374c095 100644
--- a/deps/npm/man/man1/npm-prune.1
+++ b/deps/npm/man/man1/npm-prune.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PRUNE" "1" "November 2015" "" ""
+.TH "NPM\-PRUNE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-prune\fR \- Remove extraneous packages
.SH SYNOPSIS
@@ -24,7 +24,7 @@ negate \fBNODE_ENV\fP being set to \fBproduction\fP\|\.
.SH SEE ALSO
.RS 0
.IP \(bu 2
-npm help rm
+npm help uninstall
.IP \(bu 2
npm help 5 folders
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
index cd249e4fe9263e..8357efb794a6ff 100644
--- a/deps/npm/man/man1/npm-publish.1
+++ b/deps/npm/man/man1/npm-publish.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PUBLISH" "1" "November 2015" "" ""
+.TH "NPM\-PUBLISH" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-publish\fR \- Publish a package
.SH SYNOPSIS
@@ -13,9 +13,12 @@ Sets tag 'latest' if no \-\-tag specified
.RE
.SH DESCRIPTION
.P
-Publishes a package to the registry so that it can be installed by name\. See
-npm help 7 \fBnpm\-developers\fP for details on what's included in the published package, as
-well as details on how the package is built\.
+Publishes a package to the registry so that it can be installed by name\. All
+files in the package directory are included if no local \fB\|\.gitignore\fP or
+\fB\|\.npmignore\fP file exists\. If both files exist and a file is ignored by
+\fB\|\.gitignore\fP but not by \fB\|\.npmignore\fP then it will be included\. See
+npm help 7 \fBnpm\-developers\fP for full details on what's included in the published
+package, as well as details on how the package is built\.
.P
By default npm will publish to the public registry\. This can be overridden by
specifying a different default registry or using a npm help 7 \fBnpm\-scope\fP in the name
@@ -32,7 +35,8 @@ with a package\.json file inside\.
\fB[\-\-tag ]\fP
Registers the published package with the given tag, such that \fBnpm install
@\fP will install this version\. By default, \fBnpm publish\fP updates
-and \fBnpm install\fP installs the \fBlatest\fP tag\.
+and \fBnpm install\fP installs the \fBlatest\fP tag\. See npm help \fBnpm\-dist\-tag\fP for
+details about tags\.
.IP \(bu 2
\fB[\-\-access ]\fP
Tells the registry whether this package should be published as public or
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index e850fa647fcf1a..8f57aa50c547c2 100644
--- a/deps/npm/man/man1/npm-rebuild.1
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -1,4 +1,4 @@
-.TH "NPM\-REBUILD" "1" "November 2015" "" ""
+.TH "NPM\-REBUILD" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-rebuild\fR \- Rebuild a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index 7ee7d95f8f7831..ec8acb8cc28efd 100644
--- a/deps/npm/man/man1/npm-repo.1
+++ b/deps/npm/man/man1/npm-repo.1
@@ -1,4 +1,4 @@
-.TH "NPM\-REPO" "1" "November 2015" "" ""
+.TH "NPM\-REPO" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-repo\fR \- Open package repository page in the browser
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index 0bc7541ccf80c6..5cdda9eff80295 100644
--- a/deps/npm/man/man1/npm-restart.1
+++ b/deps/npm/man/man1/npm-restart.1
@@ -1,4 +1,4 @@
-.TH "NPM\-RESTART" "1" "November 2015" "" ""
+.TH "NPM\-RESTART" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-restart\fR \- Restart a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1
deleted file mode 100644
index ec0271980a4bee..00000000000000
--- a/deps/npm/man/man1/npm-rm.1
+++ /dev/null
@@ -1,33 +0,0 @@
-.TH "NPM\-RM" "1" "October 2015" "" ""
-.SH "NAME"
-\fBnpm-rm\fR \- Remove a package
-.SH SYNOPSIS
-.P
-.RS 2
-.nf
-npm rm
-npm r
-npm uninstall
-npm un
-.fi
-.RE
-.SH DESCRIPTION
-.P
-This uninstalls a package, completely removing everything npm installed
-on its behalf\.
-.SH SEE ALSO
-.RS 0
-.IP \(bu 2
-npm help prune
-.IP \(bu 2
-npm help install
-.IP \(bu 2
-npm help 5 folders
-.IP \(bu 2
-npm help config
-.IP \(bu 2
-npm help 7 config
-.IP \(bu 2
-npm help 5 npmrc
-
-.RE
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index bacb6ffb7de987..dea35d12fd0c13 100644
--- a/deps/npm/man/man1/npm-root.1
+++ b/deps/npm/man/man1/npm-root.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ROOT" "1" "November 2015" "" ""
+.TH "NPM\-ROOT" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-root\fR \- Display npm root
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index ded6145a1f3480..86ef6b6c5678f2 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -1,4 +1,4 @@
-.TH "NPM\-RUN\-SCRIPT" "1" "November 2015" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-run-script\fR \- Run arbitrary package scripts
.SH SYNOPSIS
@@ -50,6 +50,9 @@ you should write:
.RE
.P
instead of \fB"scripts": {"test": "node_modules/\.bin/tap test/\\*\.js"}\fP to run your tests\.
+.P
+If you try to run a script without having a \fBnode_modules\fP directory and it fails,
+you will be given a warning to run \fBnpm install\fP, just in case you've forgotten\.
.SH SEE ALSO
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 6307a345aa3a6e..abfc09989d6def 100644
--- a/deps/npm/man/man1/npm-search.1
+++ b/deps/npm/man/man1/npm-search.1
@@ -1,4 +1,4 @@
-.TH "NPM\-SEARCH" "1" "November 2015" "" ""
+.TH "NPM\-SEARCH" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-search\fR \- Search for packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 39784dfe6f6359..a18b510f925870 100644
--- a/deps/npm/man/man1/npm-shrinkwrap.1
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -1,4 +1,4 @@
-.TH "NPM\-SHRINKWRAP" "1" "November 2015" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-shrinkwrap\fR \- Lock down dependency versions
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index e12124fd5d3dab..08918444d03cda 100644
--- a/deps/npm/man/man1/npm-star.1
+++ b/deps/npm/man/man1/npm-star.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STAR" "1" "November 2015" "" ""
+.TH "NPM\-STAR" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-star\fR \- Mark your favorite packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index c80a0f8a3ea586..c256004ce3d82f 100644
--- a/deps/npm/man/man1/npm-stars.1
+++ b/deps/npm/man/man1/npm-stars.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STARS" "1" "November 2015" "" ""
+.TH "NPM\-STARS" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-stars\fR \- View packages marked as favorites
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index 9f027a9ffb9adf..344d8a4ce5395d 100644
--- a/deps/npm/man/man1/npm-start.1
+++ b/deps/npm/man/man1/npm-start.1
@@ -1,4 +1,4 @@
-.TH "NPM\-START" "1" "November 2015" "" ""
+.TH "NPM\-START" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-start\fR \- Start a package
.SH SYNOPSIS
@@ -10,7 +10,13 @@ npm start [\-\- ]
.RE
.SH DESCRIPTION
.P
-This runs a package's "start" script, if one was provided\.
+This runs an arbitrary command specified in the package's \fB"start"\fP property of
+its \fB"scripts"\fP object\. If no \fB"start"\fP property is specified on the
+\fB"scripts"\fP object, it will run \fBnode server\.js\fP\|\.
+.P
+As of \fBnpm@2\.0\.0\fP \fIhttp://blog\.npmjs\.org/post/98131109725/npm\-2\-0\-0\fR, you can
+use custom arguments when executing scripts\. Refer to npm help run\-script for
+more details\.
.SH SEE ALSO
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index 044bbc066ac905..5c9c5376527d45 100644
--- a/deps/npm/man/man1/npm-stop.1
+++ b/deps/npm/man/man1/npm-stop.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STOP" "1" "November 2015" "" ""
+.TH "NPM\-STOP" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-stop\fR \- Stop a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1
index e70976e800779f..952500e5b6de9a 100644
--- a/deps/npm/man/man1/npm-tag.1
+++ b/deps/npm/man/man1/npm-tag.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TAG" "1" "November 2015" "" ""
+.TH "NPM\-TAG" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-tag\fR \- Tag a published version
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-team.1 b/deps/npm/man/man1/npm-team.1
index 69f03d6df160bf..541ff90348b854 100644
--- a/deps/npm/man/man1/npm-team.1
+++ b/deps/npm/man/man1/npm-team.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TEAM" "1" "November 2015" "" ""
+.TH "NPM\-TEAM" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-team\fR \- Manage organization teams and team memberships
.SH SYNOPSIS
@@ -24,7 +24,7 @@ handle permissions for packages\.
Teams must always be fully qualified with the organization/scope they belong to
when operating on them, separated by a colon (\fB:\fP)\. That is, if you have a
\fBdevelopers\fP team on a \fBfoo\fP organization, you must always refer to that team as
-\fBdevelopers:foo\fP in these commands\.
+\fBfoo:developers\fP in these commands\.
.RS 0
.IP \(bu 2
create / destroy:
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index c36e7f42adeeb9..ee076c79b969f7 100644
--- a/deps/npm/man/man1/npm-test.1
+++ b/deps/npm/man/man1/npm-test.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TEST" "1" "November 2015" "" ""
+.TH "NPM\-TEST" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-test\fR \- Test a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index 6bac5b55d0bb5a..88ef9ead20a25c 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,6 +1,6 @@
-.TH "NPM\-RM" "1" "November 2015" "" ""
+.TH "NPM\-UNINSTALL" "1" "January 2016" "" ""
.SH "NAME"
-\fBnpm-rm\fR \- Remove a package
+\fBnpm-uninstall\fR \- Remove a package
.SH SYNOPSIS
.P
.RS 2
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index daa61e3a293e3f..cf24af9fb2d1d1 100644
--- a/deps/npm/man/man1/npm-unpublish.1
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UNPUBLISH" "1" "November 2015" "" ""
+.TH "NPM\-UNPUBLISH" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-unpublish\fR \- Remove a package from the registry
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index 62b3adc4afcdc0..0aaa0487b9cd69 100644
--- a/deps/npm/man/man1/npm-update.1
+++ b/deps/npm/man/man1/npm-update.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UPDATE" "1" "November 2015" "" ""
+.TH "NPM\-UPDATE" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-update\fR \- Update a package
.SH SYNOPSIS
@@ -25,7 +25,7 @@ or local) will be updated\.
.P
As of \fBnpm@2\.6\.1\fP, the \fBnpm update\fP will only inspect top\-level packages\.
Prior versions of \fBnpm\fP would also recursively inspect all dependencies\.
-To get the old behavior, use \fBnpm \-\-depth 9999 update\fP, but be warned that
+To get the old behavior, use \fBnpm \-\-depth Infinity update\fP, but be warned that
simultaneous asynchronous update of all packages, including \fBnpm\fP itself
and packages that \fBnpm\fP depends on, often causes problems up to and including
the uninstallation of \fBnpm\fP itself\.
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index f799cd9111584d..9d17a93871a380 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,11 +1,11 @@
-.TH "NPM\-VERSION" "1" "November 2015" "" ""
+.TH "NPM\-VERSION" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-version\fR \- Bump a package version
.SH SYNOPSIS
.P
.RS 2
.nf
-npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease]
+npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease | from\-git]
\|'npm [\-v | \-\-version]' to print npm version
\|'npm view version' to view a package's published version
@@ -17,10 +17,11 @@ npm version [ | major | minor | patch | premajor | preminor | prepat
Run this in a package directory to bump the version and write the new
data back to \fBpackage\.json\fP and, if present, \fBnpm\-shrinkwrap\.json\fP\|\.
.P
-The \fBnewversion\fP argument should be a valid semver string, \fIor\fR a
-valid second argument to semver\.inc (one of \fBpatch\fP, \fBminor\fP, \fBmajor\fP,
-\fBprepatch\fP, \fBpreminor\fP, \fBpremajor\fP, \fBprerelease\fP)\. In the second case,
+The \fBnewversion\fP argument should be a valid semver string, a
+valid second argument to semver\.inc \fIhttps://github\.com/npm/node\-semver#functions\fR (one of \fBpatch\fP, \fBminor\fP, \fBmajor\fP,
+\fBprepatch\fP, \fBpreminor\fP, \fBpremajor\fP, \fBprerelease\fP), or \fBfrom\-git\fP\|\. In the second case,
the existing version will be incremented by 1 in the specified field\.
+\fBfrom\-git\fP will try to read the latest git tag, and use that as the new npm version\.
.P
If run in a git repo, it will also create a version commit and tag\.
This behavior is controlled by \fBgit\-tag\-version\fP (see below), and can
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 9e3e44ff538a94..081b773c509f59 100644
--- a/deps/npm/man/man1/npm-view.1
+++ b/deps/npm/man/man1/npm-view.1
@@ -1,4 +1,4 @@
-.TH "NPM\-VIEW" "1" "November 2015" "" ""
+.TH "NPM\-VIEW" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-view\fR \- View registry info
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index d356fe402373ec..8f013c985d4f23 100644
--- a/deps/npm/man/man1/npm-whoami.1
+++ b/deps/npm/man/man1/npm-whoami.1
@@ -1,4 +1,4 @@
-.TH "NPM\-WHOAMI" "1" "November 2015" "" ""
+.TH "NPM\-WHOAMI" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-whoami\fR \- Display npm username
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index 16c974e0edf9ff..59380364c19227 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "November 2015" "" ""
+.TH "NPM" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm\fR \- javascript package manager
.SH SYNOPSIS
@@ -10,7 +10,7 @@ npm [args]
.RE
.SH VERSION
.P
-3.3.12
+3.6.0
.SH DESCRIPTION
.P
npm is the package manager for the Node JavaScript platform\. It puts
@@ -156,7 +156,7 @@ If you would like to contribute, but don't know what to work on, check
the issues list or ask on the mailing list\.
.RS 0
.IP \(bu 2
-http://github\.com/npm/npm/issues
+https://github\.com/npm/npm/issues
.IP \(bu 2
npm\-@googlegroups\.com
@@ -167,7 +167,7 @@ When you find issues, please report them:
.RS 0
.IP \(bu 2
web:
-http://github\.com/npm/npm/issues
+https://github\.com/npm/npm/issues
.IP \(bu 2
email:
npm\-@googlegroups\.com
@@ -205,8 +205,6 @@ npm help 7 config
npm help 5 npmrc
.IP \(bu 2
npm help 7 index
-.IP \(bu 2
-npm apihelp npm
.RE
diff --git a/deps/npm/man/man5/npm-folders.5 b/deps/npm/man/man5/npm-folders.5
index e52857ec548c45..a95cd885ff2403 100644
--- a/deps/npm/man/man5/npm-folders.5
+++ b/deps/npm/man/man5/npm-folders.5
@@ -1,4 +1,4 @@
-.TH "NPM\-FOLDERS" "5" "November 2015" "" ""
+.TH "NPM\-FOLDERS" "5" "January 2016" "" ""
.SH "NAME"
\fBnpm-folders\fR \- Folder Structures Used by npm
.SH DESCRIPTION
@@ -25,12 +25,10 @@ If you need both, then install it in both places, or use \fBnpm link\fP\|\.
.SS prefix Configuration
.P
The \fBprefix\fP config defaults to the location where node is installed\.
-On most systems, this is \fB/usr/local\fP, and most of the time is the same
-as node's \fBprocess\.installPrefix\fP\|\.
-.P
-On windows, this is the exact location of the node\.exe binary\. On Unix
-systems, it's one level up, since node is typically installed at
-\fB{prefix}/bin/node\fP rather than \fB{prefix}/node\.exe\fP\|\.
+On most systems, this is \fB/usr/local\fP\|\. On windows, this is the exact
+location of the node\.exe binary\. On Unix systems, it's one level up,
+since node is typically installed at \fB{prefix}/bin/node\fP rather than
+\fB{prefix}/node\.exe\fP\|\.
.P
When the \fBglobal\fP flag is set, npm installs things into this prefix\.
When it is not set, it uses the root of the current package, or the
@@ -49,7 +47,7 @@ Global installs on Windows go to \fB{prefix}/node_modules\fP (that is, no
Scoped packages are installed the same way, except they are grouped together
in a sub\-folder of the relevant \fBnode_modules\fP folder with the name of that
scope prefix by the @ symbol, e\.g\. \fBnpm install @myorg/package\fP would place
-the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscopes\fP for
+the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscope\fP for
more details\.
.P
If you wish to \fBrequire()\fP a package, then install it locally\.
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index e52857ec548c45..a95cd885ff2403 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "NPM\-FOLDERS" "5" "November 2015" "" ""
+.TH "NPM\-FOLDERS" "5" "January 2016" "" ""
.SH "NAME"
\fBnpm-folders\fR \- Folder Structures Used by npm
.SH DESCRIPTION
@@ -25,12 +25,10 @@ If you need both, then install it in both places, or use \fBnpm link\fP\|\.
.SS prefix Configuration
.P
The \fBprefix\fP config defaults to the location where node is installed\.
-On most systems, this is \fB/usr/local\fP, and most of the time is the same
-as node's \fBprocess\.installPrefix\fP\|\.
-.P
-On windows, this is the exact location of the node\.exe binary\. On Unix
-systems, it's one level up, since node is typically installed at
-\fB{prefix}/bin/node\fP rather than \fB{prefix}/node\.exe\fP\|\.
+On most systems, this is \fB/usr/local\fP\|\. On windows, this is the exact
+location of the node\.exe binary\. On Unix systems, it's one level up,
+since node is typically installed at \fB{prefix}/bin/node\fP rather than
+\fB{prefix}/node\.exe\fP\|\.
.P
When the \fBglobal\fP flag is set, npm installs things into this prefix\.
When it is not set, it uses the root of the current package, or the
@@ -49,7 +47,7 @@ Global installs on Windows go to \fB{prefix}/node_modules\fP (that is, no
Scoped packages are installed the same way, except they are grouped together
in a sub\-folder of the relevant \fBnode_modules\fP folder with the name of that
scope prefix by the @ symbol, e\.g\. \fBnpm install @myorg/package\fP would place
-the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscopes\fP for
+the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscope\fP for
more details\.
.P
If you wish to \fBrequire()\fP a package, then install it locally\.
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index ed8bd82a9fdba8..b9d6fabf9b4cb4 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE\.JSON" "5" "November 2015" "" ""
+.TH "PACKAGE\.JSON" "5" "January 2016" "" ""
.SH "NAME"
\fBpackage.json\fR \- Specifics of npm's package\.json handling
.SH DESCRIPTION
@@ -21,7 +21,7 @@ The name is what your thing is called\.
Some rules:
.RS 0
.IP \(bu 2
-The name must be shorter than 214 characters\. This includes the scope for
+The name must be less than or equal to 214 characters\. This includes the scope for
scoped packages\.
.IP \(bu 2
The name can't start with a dot or an underscore\.
@@ -118,10 +118,10 @@ current SPDX license identifier for the license you're using, like this:
.P
You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
Ideally you should pick one that is
-OSI \fIhttp://opensource\.org/licenses/alphabetical\fR approved\.
+OSI \fIhttps://opensource\.org/licenses/alphabetical\fR approved\.
.P
If your package is licensed under multiple common licenses, use an SPDX license
-expression syntax version 2\.0 string \fIhttp://npmjs\.com/package/spdx\fR, like this:
+expression syntax version 2\.0 string \fIhttps://npmjs\.com/package/spdx\fR, like this:
.P
.RS 2
.nf
@@ -506,7 +506,7 @@ See npm help 7 semver for more details about specifying version ranges\.
.IP \(bu 2
\fBtag\fP A specific version tagged and published as \fBtag\fP See npm help \fBnpm\-tag\fP
.IP \(bu 2
-\fBpath/path/path\fP See Local Paths below
+\fBpath/path/path\fP See Local Paths \fI#local\-paths\fR below
.RE
.P
@@ -877,7 +877,7 @@ npm help install
.IP \(bu 2
npm help publish
.IP \(bu 2
-npm help rm
+npm help uninstall
.RE
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
index ed6ee372d33622..396504f96835f4 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "November 2015" "" ""
+.TH "NPMRC" "5" "January 2016" "" ""
.SH "NAME"
\fBnpmrc\fR \- The npm config files
.SH DESCRIPTION
diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5
index ed8bd82a9fdba8..b9d6fabf9b4cb4 100644
--- a/deps/npm/man/man5/package.json.5
+++ b/deps/npm/man/man5/package.json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE\.JSON" "5" "November 2015" "" ""
+.TH "PACKAGE\.JSON" "5" "January 2016" "" ""
.SH "NAME"
\fBpackage.json\fR \- Specifics of npm's package\.json handling
.SH DESCRIPTION
@@ -21,7 +21,7 @@ The name is what your thing is called\.
Some rules:
.RS 0
.IP \(bu 2
-The name must be shorter than 214 characters\. This includes the scope for
+The name must be less than or equal to 214 characters\. This includes the scope for
scoped packages\.
.IP \(bu 2
The name can't start with a dot or an underscore\.
@@ -118,10 +118,10 @@ current SPDX license identifier for the license you're using, like this:
.P
You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
Ideally you should pick one that is
-OSI \fIhttp://opensource\.org/licenses/alphabetical\fR approved\.
+OSI \fIhttps://opensource\.org/licenses/alphabetical\fR approved\.
.P
If your package is licensed under multiple common licenses, use an SPDX license
-expression syntax version 2\.0 string \fIhttp://npmjs\.com/package/spdx\fR, like this:
+expression syntax version 2\.0 string \fIhttps://npmjs\.com/package/spdx\fR, like this:
.P
.RS 2
.nf
@@ -506,7 +506,7 @@ See npm help 7 semver for more details about specifying version ranges\.
.IP \(bu 2
\fBtag\fP A specific version tagged and published as \fBtag\fP See npm help \fBnpm\-tag\fP
.IP \(bu 2
-\fBpath/path/path\fP See Local Paths below
+\fBpath/path/path\fP See Local Paths \fI#local\-paths\fR below
.RE
.P
@@ -877,7 +877,7 @@ npm help install
.IP \(bu 2
npm help publish
.IP \(bu 2
-npm help rm
+npm help uninstall
.RE
diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7
index 839806a670a4e8..c6e46d25df3858 100644
--- a/deps/npm/man/man7/npm-coding-style.7
+++ b/deps/npm/man/man7/npm-coding-style.7
@@ -1,4 +1,4 @@
-.TH "NPM\-CODING\-STYLE" "7" "November 2015" "" ""
+.TH "NPM\-CODING\-STYLE" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-coding-style\fR \- npm's "funny" coding style
.SH DESCRIPTION
diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7
index c0d3b2c1373b61..244acc7206c680 100644
--- a/deps/npm/man/man7/npm-config.7
+++ b/deps/npm/man/man7/npm-config.7
@@ -1,4 +1,4 @@
-.TH "NPM\-CONFIG" "7" "November 2015" "" ""
+.TH "NPM\-CONFIG" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-config\fR \- More than you probably want to know about npm configuration
.SH DESCRIPTION
@@ -334,7 +334,7 @@ A client certificate to pass when accessing the registry\.
.SS color
.RS 0
.IP \(bu 2
-Default: true on Posix, false on Windows
+Default: true
.IP \(bu 2
Type: Boolean or \fB"always"\fP
@@ -537,6 +537,21 @@ Type: path
.RE
.P
The config file to read for global config options\.
+.SS global\-style
+.RS 0
+.IP \(bu 2
+Default: false
+.IP \(bu 2
+Type: Boolean
+
+.RE
+.P
+Causes npm to install the package into your local \fBnode_modules\fP folder with
+the same layout it uses with the global \fBnode_modules\fP folder\. Only your
+direct dependencies will show in \fBnode_modules\fP and everything they depend
+on will be flattened in their \fBnode_modules\fP folders\. This obviously will
+elminate some deduping\. If used with \fBlegacy\-bundling\fP, \fBlegacy\-bundling\fP will be
+preferred\.
.SS group
.RS 0
.IP \(bu 2
@@ -682,6 +697,19 @@ Type: String
.RE
.P
A client key to pass when accessing the registry\.
+.SS legacy\-bundling
+.RS 0
+.IP \(bu 2
+Default: false
+.IP \(bu 2
+Type: Boolean
+
+.RE
+.P
+Causes npm to install the package such that versions of npm prior to 1\.4,
+such as the one included with node 0\.8, can install the package\. This
+eliminates all automatic deduping\. If used with \fBglobal\-style\fP this option
+will be preferred\.
.SS link
.RS 0
.IP \(bu 2
@@ -1176,7 +1204,7 @@ on success, but left behind on failure for forensic purposes\.
.SS unicode
.RS 0
.IP \(bu 2
-Default: true on windows and mac/unix systems with a unicode locale
+Default: false on windows, true on mac/unix systems with a unicode locale
.IP \(bu 2
Type: Boolean
diff --git a/deps/npm/man/man7/npm-developers.7 b/deps/npm/man/man7/npm-developers.7
index 703fac404cad66..77fbb0360d8669 100644
--- a/deps/npm/man/man7/npm-developers.7
+++ b/deps/npm/man/man7/npm-developers.7
@@ -1,4 +1,4 @@
-.TH "NPM\-DEVELOPERS" "7" "November 2015" "" ""
+.TH "NPM\-DEVELOPERS" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-developers\fR \- Developer Guide
.SH DESCRIPTION
@@ -114,7 +114,7 @@ create an empty \fB\|\.npmignore\fP file to override it\. Like \fBgit\fP, \fBnpm
for \fB\|\.npmignore\fP and \fB\|\.gitignore\fP files in all subdirectories of your
package, not only the root directory\.
.P
-\fB\|\.npmignore\fP files follow the same pattern rules \fIhttp://git\-scm\.com/book/en/v2/Git\-Basics\-Recording\-Changes\-to\-the\-Repository#Ignoring\-Files\fR
+\fB\|\.npmignore\fP files follow the same pattern rules \fIhttps://git\-scm\.com/book/en/v2/Git\-Basics\-Recording\-Changes\-to\-the\-Repository#Ignoring\-Files\fR
as \fB\|\.gitignore\fP files:
.RS 0
.IP \(bu 2
@@ -239,7 +239,7 @@ and then follow the prompts\.
This is documented better in npm help adduser\.
.SH Publish your package
.P
-This part's easy\. IN the root of your folder, do this:
+This part's easy\. In the root of your folder, do this:
.P
.RS 2
.nf
diff --git a/deps/npm/man/man7/npm-disputes.7 b/deps/npm/man/man7/npm-disputes.7
index ae17206bcc6d12..888159cb8a7b38 100644
--- a/deps/npm/man/man7/npm-disputes.7
+++ b/deps/npm/man/man7/npm-disputes.7
@@ -1,4 +1,4 @@
-.TH "NPM\-DISPUTES" "7" "November 2015" "" ""
+.TH "NPM\-DISPUTES" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-disputes\fR \- Handling Module Name Disputes
.SH SYNOPSIS
diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7
deleted file mode 100644
index 98f7f0ac04517b..00000000000000
--- a/deps/npm/man/man7/npm-faq.7
+++ /dev/null
@@ -1,430 +0,0 @@
-.TH "NPM\-FAQ" "7" "November 2015" "" ""
-.SH "NAME"
-\fBnpm-faq\fR \- Frequently Asked Questions
-.SH Where can I find these docs in HTML?
-.P
-https://docs\.npmjs\.com/, or run:
-.P
-.RS 2
-.nf
-npm config set viewer browser
-.fi
-.RE
-.P
-This command will set the npm docs to open in your default web browser rather than \fBman\fP\|\.
-.SH It didn't work\.
-.P
-Please provide a little more detail, search for the error via Google \fIhttps://google\.com\fR or StackOverflow npm \fIhttp://stackoverflow\.com/search?q=npm\fR to see if another developer has encountered a similar problem\.
-.SH Why didn't it work?
-.P
-I don't know yet\.
-.P
-Try reading the error output first, ensure this is a true npm issue and not a package issue\. If you are having an issue with a package dependency, please submit your error to that particular package maintainer\.
-.P
-For any npm issues, try following the instructions, or even retracing your steps\. If the issue continues to persist, submit a bug with the steps to reproduce, please include the operating system you are working on, along with the error you recieve\.
-.SH Where does npm put stuff?
-.P
-See npm help 5 \fBnpm\-folders\fP
-.P
-tl;dr:
-.RS 0
-.IP \(bu 2
-Use the \fBnpm root\fP command to see where modules go, and the \fBnpm bin\fP
-command to see where executables go
-.IP \(bu 2
-Global installs are different from local installs\. If you install
-something with the \fB\-g\fP flag, then its executables go in \fBnpm bin \-g\fP
-and its modules go in \fBnpm root \-g\fP\|\.
-
-.RE
-.SH How do I install something on my computer in a central location?
-.P
-Install it globally by tacking \fB\-g\fP or \fB\-\-global\fP to the command\. (This
-is especially important for command line utilities that need to add
-their bins to the global system \fBPATH\fP\|\.)
-.SH I installed something globally, but I can't \fBrequire()\fP it
-.P
-Install it locally\.
-.P
-The global install location is a place for command\-line utilities
-to put their bins in the system \fBPATH\fP\|\. It's not for use with \fBrequire()\fP\|\.
-.P
-If you \fBrequire()\fP a module in your code, then that means it's a
-dependency, and a part of your program\. You need to install it locally
-in your program\.
-.SH Why can't npm just put everything in one place, like other package managers?
-.P
-Not every change is an improvement, but every improvement is a change\.
-This would be like asking git to do network IO for every commit\. It's
-not going to happen, because it's a terrible idea that causes more
-problems than it solves\.
-.P
-It is much harder to avoid dependency conflicts without nesting
-dependencies\. This is fundamental to the way that npm works, and has
-proven to be an extremely successful approach\. See npm help 5 \fBnpm\-folders\fP for
-more details\.
-.P
-If you want a package to be installed in one place, and have all your
-programs reference the same copy of it, then use the \fBnpm link\fP command\.
-That's what it's for\. Install it globally, then link it into each
-program that uses it\.
-.SH Whatever, I really want the old style 'everything global' style\.
-.P
-Write your own package manager\. You could probably even wrap up \fBnpm\fP
-in a shell script if you really wanted to\.
-.P
-npm will not help you do something that is known to be a bad idea\.
-.SH Should I check my \fBnode_modules\fP folder into git?
-.P
-Usually, no\. Allow npm to resolve dependencies for your packages\.
-.P
-For packages you \fBdeploy\fR, such as websites and apps,
-you should use npm shrinkwrap to lock down your full dependency tree:
-.P
-https://docs\.npmjs\.com/cli/shrinkwrap
-.P
-If you are paranoid about depending on the npm ecosystem,
-you should run a private npm mirror or a private cache\.
-.P
-If you want 100% confidence in being able to reproduce the specific bytes
-included in a deployment, you should use an additional mechanism that can
-verify contents rather than versions\. For example,
-Amazon machine images, DigitalOcean snapshots, Heroku slugs, or simple tarballs\.
-.SH Is it 'npm' or 'NPM' or 'Npm'?
-.P
-npm should never be capitalized unless it is being displayed in a
-location that is customarily all\-caps (such as the title of man pages\.)
-.SH If 'npm' is an acronym, why is it never capitalized?
-.P
-Contrary to the belief of many, "npm" is not in fact an abbreviation for
-"Node Package Manager"\. It is a recursive bacronymic abbreviation for
-"npm is not an acronym"\. (If it was "ninaa", then it would be an
-acronym, and thus incorrectly named\.)
-.P
-"NPM", however, \fIis\fR an acronym (more precisely, a capitonym) for the
-National Association of Pastoral Musicians\. You can learn more
-about them at http://npm\.org/\|\.
-.P
-In software, "NPM" is a Non\-Parametric Mapping utility written by
-Chris Rorden\. You can analyze pictures of brains with it\. Learn more
-about the (capitalized) NPM program at http://www\.cabiatl\.com/mricro/npm/\|\.
-.P
-The first seed that eventually grew into this flower was a bash utility
-named "pm", which was a shortened descendent of "pkgmakeinst", a
-bash function that was used to install various different things on different
-platforms, most often using Yahoo's \fByinst\fP\|\. If \fBnpm\fP was ever an
-acronym for anything, it was \fBnode pm\fP or maybe \fBnew pm\fP\|\.
-.P
-So, in all seriousness, the "npm" project is named after its command\-line
-utility, which was organically selected to be easily typed by a right\-handed
-programmer using a US QWERTY keyboard layout, ending with the
-right\-ring\-finger in a postition to type the \fB\-\fP key for flags and
-other command\-line arguments\. That command\-line utility is always
-lower\-case, though it starts most sentences it is a part of\.
-.SH How do I list installed packages?
-.P
-\fBnpm ls\fP
-.SH How do I search for packages?
-.P
-\fBnpm search\fP
-.P
-Arguments are greps\. \fBnpm search jsdom\fP shows jsdom packages\.
-.SH How do I update npm?
-.P
-.RS 2
-.nf
-npm install npm \-g
-.fi
-.RE
-.P
-You can also update all outdated local packages by doing \fBnpm update\fP without
-any arguments, or global packages by doing \fBnpm update \-g\fP\|\.
-.P
-Occasionally, the version of npm will progress such that the current
-version cannot be properly installed with the version that you have
-installed already\. (Consider, if there is ever a bug in the \fBupdate\fP
-command\.)
-.P
-In those cases, you can do this:
-.P
-.RS 2
-.nf
-curl https://www\.npmjs\.com/install\.sh | sh
-.fi
-.RE
-.SH What is a \fBpackage\fP?
-.P
-A package is:
-.RS 0
-.IP \(bu 2
-a) a folder containing a program described by a package\.json file
-.IP \(bu 2
-b) a gzipped tarball containing (a)
-.IP \(bu 2
-c) a url that resolves to (b)
-.IP \(bu 2
-d) a \fB@\fP that is published on the registry with (c)
-.IP \(bu 2
-e) a \fB@\fP that points to (d)
-.IP \(bu 2
-f) a \fB\fP that has a "latest" tag satisfying (e)
-.IP \(bu 2
-g) a \fBgit\fP url that, when cloned, results in (a)\.
-
-.RE
-.P
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b)\.
-.P
-Git urls can be of the form:
-.P
-.RS 2
-.nf
-git://github\.com/user/project\.git#commit\-ish
-git+ssh://user@hostname:project\.git#commit\-ish
-git+http://user@hostname/project/blah\.git#commit\-ish
-git+https://user@hostname/project/blah\.git#commit\-ish
-.fi
-.RE
-.P
-The \fBcommit\-ish\fP can be any tag, sha, or branch which can be supplied as
-an argument to \fBgit checkout\fP\|\. The default is \fBmaster\fP\|\.
-.SH What is a \fBmodule\fP?
-.P
-A module is anything that can be loaded with \fBrequire()\fP in a Node\.js
-program\. The following things are all examples of things that can be
-loaded as modules:
-.RS 0
-.IP \(bu 2
-A folder with a \fBpackage\.json\fP file containing a \fBmain\fP field\.
-.IP \(bu 2
-A folder with an \fBindex\.js\fP file in it\.
-.IP \(bu 2
-A JavaScript file\.
-
-.RE
-.P
-Most npm packages are modules, because they are libraries that you
-load with \fBrequire\fP\|\. However, there's no requirement that an npm
-package be a module! Some only contain an executable command\-line
-interface, and don't provide a \fBmain\fP field for use in Node programs\.
-.P
-Almost all npm packages (at least, those that are Node programs)
-\fIcontain\fR many modules within them (because every file they load with
-\fBrequire()\fP is a module)\.
-.P
-In the context of a Node program, the \fBmodule\fP is also the thing that
-was loaded \fIfrom\fR a file\. For example, in the following program:
-.P
-.RS 2
-.nf
-var req = require('request')
-.fi
-.RE
-.P
-we might say that "The variable \fBreq\fP refers to the \fBrequest\fP module"\.
-.SH So, why is it the "\fBnode_modules\fP" folder, but "\fBpackage\.json\fP" file? Why not \fBnode_packages\fP or \fBmodule\.json\fP?
-.P
-The \fBpackage\.json\fP file defines the package\. (See "What is a
-package?" above\.)
-.P
-The \fBnode_modules\fP folder is the place Node\.js looks for modules\.
-(See "What is a module?" above\.)
-.P
-For example, if you create a file at \fBnode_modules/foo\.js\fP and then
-had a program that did \fBvar f = require('foo\.js')\fP then it would load
-the module\. However, \fBfoo\.js\fP is not a "package" in this case,
-because it does not have a package\.json\.
-.P
-Alternatively, if you create a package which does not have an
-\fBindex\.js\fP or a \fB"main"\fP field in the \fBpackage\.json\fP file, then it is
-not a module\. Even if it's installed in \fBnode_modules\fP, it can't be
-an argument to \fBrequire()\fP\|\.
-.SH \fB"node_modules"\fP is the name of my deity's arch\-rival, and a Forbidden Word in my religion\. Can I configure npm to use a different folder?
-.P
-No\. This will never happen\. This question comes up sometimes,
-because it seems silly from the outside that npm couldn't just be
-configured to put stuff somewhere else, and then npm could load them
-from there\. It's an arbitrary spelling choice, right? What's the big
-deal?
-.P
-At the time of this writing, the string \fB\|'node_modules'\fP appears 151
-times in 53 separate files in npm and node core (excluding tests and
-documentation)\.
-.P
-Some of these references are in node's built\-in module loader\. Since
-npm is not involved \fBat all\fR at run\-time, node itself would have to
-be configured to know where you've decided to stick stuff\. Complexity
-hurdle #1\. Since the Node module system is locked, this cannot be
-changed, and is enough to kill this request\. But I'll continue, in
-deference to your deity's delicate feelings regarding spelling\.
-.P
-Many of the others are in dependencies that npm uses, which are not
-necessarily tightly coupled to npm (in the sense that they do not read
-npm's configuration files, etc\.) Each of these would have to be
-configured to take the name of the \fBnode_modules\fP folder as a
-parameter\. Complexity hurdle #2\.
-.P
-Furthermore, npm has the ability to "bundle" dependencies by adding
-the dep names to the \fB"bundledDependencies"\fP list in package\.json,
-which causes the folder to be included in the package tarball\. What
-if the author of a module bundles its dependencies, and they use a
-different spelling for \fBnode_modules\fP? npm would have to rename the
-folder at publish time, and then be smart enough to unpack it using
-your locally configured name\. Complexity hurdle #3\.
-.P
-Furthermore, what happens when you \fIchange\fR this name? Fine, it's
-easy enough the first time, just rename the \fBnode_modules\fP folders to
-\fB\|\./blergyblerp/\fP or whatever name you choose\. But what about when you
-change it again? npm doesn't currently track any state about past
-configuration settings, so this would be rather difficult to do
-properly\. It would have to track every previous value for this
-config, and always accept any of them, or else yesterday's install may
-be broken tomorrow\. Complexity hurdle #4\.
-.P
-Never going to happen\. The folder is named \fBnode_modules\fP\|\. It is
-written indelibly in the Node Way, handed down from the ancient times
-of Node 0\.3\.
-.SH How do I install node with npm?
-.P
-You don't\. Try one of these node version managers:
-.P
-Unix:
-.RS 0
-.IP \(bu 2
-http://github\.com/isaacs/nave
-.IP \(bu 2
-http://github\.com/visionmedia/n
-.IP \(bu 2
-http://github\.com/creationix/nvm
-
-.RE
-.P
-Windows:
-.RS 0
-.IP \(bu 2
-http://github\.com/marcelklehr/nodist
-.IP \(bu 2
-https://github\.com/coreybutler/nvm\-windows
-.IP \(bu 2
-https://github\.com/hakobera/nvmw
-.IP \(bu 2
-https://github\.com/nanjingboy/nvmw
-
-.RE
-.SH How can I use npm for development?
-.P
-See npm help 7 \fBnpm\-developers\fP and npm help 5 \fBpackage\.json\fP\|\.
-.P
-You'll most likely want to \fBnpm link\fP your development folder\. That's
-awesomely handy\.
-.P
-To set up your own private registry, check out npm help 7 \fBnpm\-registry\fP\|\.
-.SH Can I list a url as a dependency?
-.P
-Yes\. It should be a url to a gzipped tarball containing a single folder
-that has a package\.json in its root, or a git url\.
-(See "what is a package?" above\.)
-.SH How do I symlink to a dev folder so I don't have to keep re\-installing?
-.P
-See npm help \fBnpm\-link\fP
-.SH The package registry website\. What is that exactly?
-.P
-See npm help 7 \fBnpm\-registry\fP\|\.
-.SH I forgot my password, and can't publish\. How do I reset it?
-.P
-Go to https://npmjs\.com/forgot\|\.
-.SH I get ECONNREFUSED a lot\. What's up?
-.P
-Either the registry is down, or node's DNS isn't able to reach out\.
-.P
-To check if the registry is down, open up
-https://registry\.npmjs\.org/ in a web browser\. This will also tell
-you if you are just unable to access the internet for some reason\.
-.P
-If the registry IS down, let us know by emailing support@npmjs\.com
-or posting an issue at https://github\.com/npm/npm/issues\|\. If it's
-down for the world (and not just on your local network) then we're
-probably already being pinged about it\.
-.P
-You can also often get a faster response by visiting the #npm channel
-on Freenode IRC\.
-.SH Why no namespaces?
-.P
-npm has only one global namespace\. If you want to namespace your own packages,
-you may: simply use the \fB\-\fP character to separate the names or use scoped
-packages\. npm is a mostly anarchic system\. There is not sufficient need to
-impose namespace rules on everyone\.
-.P
-As of 2\.0, npm supports scoped packages, which allow you to publish a group of
-related modules without worrying about name collisions\.
-.P
-Every npm user owns the scope associated with their username\. For example, the
-user named \fBnpm\fP owns the scope \fB@npm\fP\|\. Scoped packages are published inside a
-scope by naming them as if they were files under the scope directory, e\.g\., by
-setting \fBname\fP in \fBpackage\.json\fP to \fB@npm/npm\fP\|\.
-.P
-Scoped packages are supported by the public npm registry\. The npm client is
-backwards\-compatible with un\-scoped registries, so it can be used to work with
-scoped and un\-scoped registries at the same time\.
-.P
-Unscoped packages can only depend on other unscoped packages\. Scoped packages
-can depend on packages from their own scope, a different scope, or the public
-registry (unscoped)\.
-.P
-For the current documentation of scoped packages, see
-https://docs\.npmjs\.com/misc/scope
-.P
-References:
-.RS 0
-.IP 1. 3
-For the reasoning behind the "one global namespace", please see this
-discussion: https://github\.com/npm/npm/issues/798 (TL;DR: It doesn't
-actually make things better, and can make them worse\.)
-.IP 2. 3
-For the pre\-implementation discussion of the scoped package feature, see
-this discussion: https://github\.com/npm/npm/issues/5239
-
-.RE
-.SH Who does npm?
-.P
-npm was originally written by Isaac Z\. Schlueter, and many others have
-contributed to it, some of them quite substantially\.
-.P
-The npm open source project, The npm Registry, and the community
-website \fIhttps://www\.npmjs\.com\fR are maintained and operated by the
-good folks at npm, Inc\. \fIhttp://www\.npmjs\.com\fR
-.SH I have a question or request not addressed here\. Where should I put it?
-.P
-Post an issue on the github project:
-.RS 0
-.IP \(bu 2
-https://github\.com/npm/npm/issues
-
-.RE
-.SH Why does npm hate me?
-.P
-npm is not capable of hatred\. It loves everyone, especially you\.
-.SH SEE ALSO
-.RS 0
-.IP \(bu 2
-npm help npm
-.IP \(bu 2
-npm help 7 developers
-.IP \(bu 2
-npm help 5 package\.json
-.IP \(bu 2
-npm help config
-.IP \(bu 2
-npm help 7 config
-.IP \(bu 2
-npm help 5 npmrc
-.IP \(bu 2
-npm help 7 config
-.IP \(bu 2
-npm help 5 folders
-
-.RE
-
diff --git a/deps/npm/man/man7/npm-index.7 b/deps/npm/man/man7/npm-index.7
index c147e713235609..8479b3c6c22dc3 100644
--- a/deps/npm/man/man7/npm-index.7
+++ b/deps/npm/man/man7/npm-index.7
@@ -1,4 +1,4 @@
-.TH "NPM\-INDEX" "7" "November 2015" "" ""
+.TH "NPM\-INDEX" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-index\fR \- Index of all npm documentation
.SS npm help README
@@ -64,6 +64,9 @@ Get help on npm
.SS npm help init
.P
Interactively create a package\.json file
+.SS npm help install\-test
+.P
+Install package(s) and run tests
.SS npm help install
.P
Install a package
@@ -187,9 +190,6 @@ Developer Guide
.SS npm help 7 disputes
.P
Handling Module Name Disputes
-.SS npm help 7 faq
-.P
-Frequently Asked Questions
.SS npm help 7 index
.P
Index of all npm documentation
diff --git a/deps/npm/man/man7/npm-orgs.7 b/deps/npm/man/man7/npm-orgs.7
index 503a6f35b00753..7bf5ba171e97fa 100644
--- a/deps/npm/man/man7/npm-orgs.7
+++ b/deps/npm/man/man7/npm-orgs.7
@@ -1,4 +1,4 @@
-.TH "NPM\-ORGS" "7" "November 2015" "" ""
+.TH "NPM\-ORGS" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-orgs\fR \- Working with Teams & Orgs
.SH DESCRIPTION
diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7
index 3013d956234c77..b255de73f8549b 100644
--- a/deps/npm/man/man7/npm-registry.7
+++ b/deps/npm/man/man7/npm-registry.7
@@ -1,4 +1,4 @@
-.TH "NPM\-REGISTRY" "7" "November 2015" "" ""
+.TH "NPM\-REGISTRY" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-registry\fR \- The JavaScript Package Registry
.SH DESCRIPTION
@@ -11,10 +11,10 @@ Additionally, npm's package registry implementation supports several
write APIs as well, to allow for publishing packages and managing user
account information\.
.P
-The official public npm registry is at http://registry\.npmjs\.org/\|\. It
+The official public npm registry is at https://registry\.npmjs\.org/\|\. It
is powered by a CouchDB database, of which there is a public mirror at
-http://skimdb\.npmjs\.com/registry\|\. The code for the couchapp is
-available at http://github\.com/npm/npm\-registry\-couchapp\|\.
+https://skimdb\.npmjs\.com/registry\|\. The code for the couchapp is
+available at https://github\.com/npm/npm\-registry\-couchapp\|\.
.P
The registry URL used is determined by the scope of the package (see
npm help 7 \fBnpm\-scope\fP)\. If no scope is specified, the default registry is used, which is
diff --git a/deps/npm/man/man7/npm-scope.7 b/deps/npm/man/man7/npm-scope.7
index deadca7ba3a212..131c18c3e6d9e5 100644
--- a/deps/npm/man/man7/npm-scope.7
+++ b/deps/npm/man/man7/npm-scope.7
@@ -1,4 +1,4 @@
-.TH "NPM\-SCOPE" "7" "November 2015" "" ""
+.TH "NPM\-SCOPE" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-scope\fR \- Scoped packages
.SH DESCRIPTION
diff --git a/deps/npm/man/man7/npm-scripts.7 b/deps/npm/man/man7/npm-scripts.7
index a2fe4b952d08d0..09a0651ddef7f8 100644
--- a/deps/npm/man/man7/npm-scripts.7
+++ b/deps/npm/man/man7/npm-scripts.7
@@ -1,4 +1,4 @@
-.TH "NPM\-SCRIPTS" "7" "November 2015" "" ""
+.TH "NPM\-SCRIPTS" "7" "January 2016" "" ""
.SH "NAME"
\fBnpm-scripts\fR \- How npm handles the "scripts" field
.SH DESCRIPTION
@@ -195,10 +195,10 @@ For example, if your package\.json contains this:
.fi
.RE
.P
-then the \fBscripts/install\.js\fP will be called for the install,
-post\-install, stages of the lifecycle, and the \fBscripts/uninstall\.js\fP
-would be called when the package is uninstalled\. Since
-\fBscripts/install\.js\fP is running for three different phases, it would
+then \fBscripts/install\.js\fP will be called for the install
+and post\-install stages of the lifecycle, and \fBscripts/uninstall\.js\fP
+will be called when the package is uninstalled\. Since
+\fBscripts/install\.js\fP is running for two different phases, it would
be wise in this case to look at the \fBnpm_lifecycle_event\fP environment
variable\.
.P
@@ -252,7 +252,7 @@ by simply describing your package appropriately\. In general, this
will lead to a more robust and consistent state\.
.IP \(bu 2
Inspect the env to determine where to put things\. For instance, if
-the \fBnpm_config_binroot\fP environ is set to \fB/home/user/bin\fP, then
+the \fBnpm_config_binroot\fP environment variable is set to \fB/home/user/bin\fP, then
don't try to install executables into \fB/usr/local/bin\fP\|\. The user
probably set it up that way for a reason\.
.IP \(bu 2
diff --git a/deps/npm/man/man7/removing-npm.7 b/deps/npm/man/man7/removing-npm.7
index e26cab123819cd..4bf93d54ba08fa 100644
--- a/deps/npm/man/man7/removing-npm.7
+++ b/deps/npm/man/man7/removing-npm.7
@@ -1,4 +1,4 @@
-.TH "NPM\-REMOVAL" "1" "November 2015" "" ""
+.TH "NPM\-REMOVAL" "1" "January 2016" "" ""
.SH "NAME"
\fBnpm-removal\fR \- Cleaning the Slate
.SH SYNOPSIS
@@ -70,7 +70,7 @@ find /usr/local/{lib/node,bin} \-exec grep \-l npm \\{\\} \\; ;
.IP \(bu 2
README
.IP \(bu 2
-npm help rm
+npm help uninstall
.IP \(bu 2
npm help prune
diff --git a/deps/npm/man/man7/semver.7 b/deps/npm/man/man7/semver.7
index be2e6f0779c60e..600c968297ff7c 100644
--- a/deps/npm/man/man7/semver.7
+++ b/deps/npm/man/man7/semver.7
@@ -1,4 +1,4 @@
-.TH "SEMVER" "7" "November 2015" "" ""
+.TH "SEMVER" "7" "January 2016" "" ""
.SH "NAME"
\fBsemver\fR \- The semantic versioner for npm
.SH Usage
@@ -119,7 +119,7 @@ will append the value of the string as a prerelease identifier:
.P
.RS 2
.nf
-> semver\.inc('1\.2\.3', 'pre', 'beta')
+> semver\.inc('1\.2\.3', 'prerelease', 'beta')
\|'1\.2\.4\-beta\.0'
.fi
.RE
@@ -283,6 +283,31 @@ zero\.
.IP \(bu 2
\fB^0\.x\fP := \fB>=0\.0\.0 <1\.0\.0\fP
+.RE
+.SS Range Grammar
+.P
+Putting all this together, here is a Backus\-Naur grammar for ranges,
+for the benefit of parser authors:
+.P
+.RS 2
+.nf
+range\-set ::= range ( logical\-or range ) *
+logical\-or ::= ( ' ' ) * '||' ( ' ' ) *
+range ::= hyphen | simple ( ' ' simple ) * | ''
+hyphen ::= partial ' \- ' partial
+simple ::= primitive | partial | tilde | caret
+primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
+partial ::= xr ( '\.' xr ( '\.' xr qualifier ? )? )?
+xr ::= 'x' | 'X' | '*' | nr
+nr ::= '0' | ['1'\-'9']['0'\-'9']+
+tilde ::= '~' partial
+caret ::= '^' partial
+qualifier ::= ( '\-' pre )? ( '+' build )?
+pre ::= parts
+build ::= parts
+parts ::= part ( '\.' part ) *
+part ::= nr | [\-0\-9A\-Za\-z]+
+.fi
.RE
.SH Functions
.P
diff --git a/deps/npm/node_modules/columnify/columnify.js b/deps/npm/node_modules/columnify/columnify.js
index 42b2089a3485c0..334d5509ae222e 100644
--- a/deps/npm/node_modules/columnify/columnify.js
+++ b/deps/npm/node_modules/columnify/columnify.js
@@ -145,6 +145,8 @@ module.exports = function (items) {
column.width = items.map(function (item) {
return item[columnName];
}).reduce(function (min, cur) {
+ // if already at maxWidth don't bother testing
+ if (min >= column.maxWidth) return min;
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, wcwidth(cur))));
}, 0);
});
@@ -181,9 +183,11 @@ module.exports = function (items) {
var column = columns[columnName];
column.width = items.map(function (item) {
return item[columnName].reduce(function (min, cur) {
+ if (min >= column.maxWidth) return min;
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, wcwidth(cur))));
}, 0);
}).reduce(function (min, cur) {
+ if (min >= column.maxWidth) return min;
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, cur)));
}, 0);
});
@@ -217,7 +221,7 @@ function createRows(items, columns, columnNames, paddingChr) {
});
// combine matching lines of each rows
- var _loop = function (i) {
+ var _loop = function _loop(i) {
row[i] = row[i] || [];
columnNames.forEach(function (columnName) {
var column = columns[columnName];
@@ -240,12 +244,15 @@ function createRows(items, columns, columnNames, paddingChr) {
*/
function mixin() {
- if (Object.assign) return Object.assign.apply(Object, arguments);
+ var _Object;
+
+ if (Object.assign) return (_Object = Object).assign.apply(_Object, arguments);
return ObjectAssign.apply(undefined, arguments);
}
function ObjectAssign(target, firstSource) {
"use strict";
+
if (target === undefined || target === null) throw new TypeError("Cannot convert first argument to object");
var to = Object(target);
diff --git a/deps/npm/node_modules/columnify/index.js b/deps/npm/node_modules/columnify/index.js
index 227b41efc609c1..221269b3e76b72 100644
--- a/deps/npm/node_modules/columnify/index.js
+++ b/deps/npm/node_modules/columnify/index.js
@@ -135,6 +135,8 @@ module.exports = function(items, options = {}) {
column.width = items
.map(item => item[columnName])
.reduce((min, cur) => {
+ // if already at maxWidth don't bother testing
+ if (min >= column.maxWidth) return min
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, wcwidth(cur))))
}, 0)
})
@@ -171,9 +173,11 @@ module.exports = function(items, options = {}) {
let column = columns[columnName]
column.width = items.map(item => {
return item[columnName].reduce((min, cur) => {
+ if (min >= column.maxWidth) return min
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, wcwidth(cur))))
}, 0)
}).reduce((min, cur) => {
+ if (min >= column.maxWidth) return min
return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, cur)))
}, 0)
})
diff --git a/deps/npm/node_modules/columnify/package.json b/deps/npm/node_modules/columnify/package.json
index c4345001f31339..a661b6e356d707 100644
--- a/deps/npm/node_modules/columnify/package.json
+++ b/deps/npm/node_modules/columnify/package.json
@@ -1,68 +1,100 @@
{
- "name": "columnify",
- "version": "1.5.2",
- "description": "Render data in text columns. Supports in-column text-wrap.",
- "main": "columnify.js",
- "scripts": {
- "pretest": "npm prune",
- "test": "make prepublish && tape test/*.js | tap-spec",
- "bench": "npm test && node bench",
- "prepublish": "make prepublish"
+ "_args": [
+ [
+ "columnify@1.5.4",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "columnify@1.5.4",
+ "_id": "columnify@1.5.4",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/columnify",
+ "_nodeVersion": "4.2.3",
+ "_npmUser": {
+ "email": "secoif@gmail.com",
+ "name": "timoxley"
+ },
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "columnify",
+ "raw": "columnify@1.5.4",
+ "rawSpec": "1.5.4",
+ "scope": null,
+ "spec": "1.5.4",
+ "type": "version"
},
+ "_requiredBy": [
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+ "_shasum": "4737ddf1c7b69a8a7c340570782e947eec8e78bb",
+ "_shrinkwrap": null,
+ "_spec": "columnify@1.5.4",
+ "_where": "/Users/rebecca/code/npm",
"author": {
"name": "Tim Oxley"
},
- "license": "MIT",
- "devDependencies": {
- "babel": "^5.8.21",
- "chalk": "^1.1.0",
- "tap-spec": "^4.0.2",
- "tape": "^4.0.3"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/timoxley/columnify.git"
+ "babel": {
+ "presets": [
+ "es2015"
+ ]
},
- "keywords": [
- "column",
- "text",
- "ansi",
- "console",
- "terminal",
- "wrap",
- "table"
- ],
"bugs": {
"url": "https://github.com/timoxley/columnify/issues"
},
- "homepage": "https://github.com/timoxley/columnify",
"dependencies": {
"strip-ansi": "^3.0.0",
"wcwidth": "^1.0.0"
},
+ "description": "Render data in text columns. Supports in-column text-wrap.",
+ "devDependencies": {
+ "babel": "^6.3.26",
+ "babel-cli": "^6.3.17",
+ "babel-preset-es2015": "^6.3.13",
+ "chalk": "^1.1.1",
+ "tap-spec": "^4.1.1",
+ "tape": "^4.4.0"
+ },
"directories": {
"test": "test"
},
- "gitHead": "e7417b78091844ff2f3ba62551a4817c7ae217bd",
- "_id": "columnify@1.5.2",
- "_shasum": "6937930d47c22a9bfa20732a7fd619d47eaba65a",
- "_from": "columnify@>=1.5.2 <1.6.0",
- "_npmVersion": "2.9.0",
- "_nodeVersion": "2.0.1",
- "_npmUser": {
- "name": "timoxley",
- "email": "secoif@gmail.com"
+ "dist": {
+ "shasum": "4737ddf1c7b69a8a7c340570782e947eec8e78bb",
+ "tarball": "http://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz"
},
+ "gitHead": "b5373b3d6344bf59e1ab63c912c188c34bce5889",
+ "homepage": "https://github.com/timoxley/columnify",
+ "keywords": [
+ "ansi",
+ "column",
+ "console",
+ "table",
+ "terminal",
+ "text",
+ "wrap"
+ ],
+ "license": "MIT",
+ "main": "columnify.js",
"maintainers": [
{
"name": "timoxley",
"email": "secoif@gmail.com"
}
],
- "dist": {
- "shasum": "6937930d47c22a9bfa20732a7fd619d47eaba65a",
- "tarball": "http://registry.npmjs.org/columnify/-/columnify-1.5.2.tgz"
+ "name": "columnify",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/timoxley/columnify.git"
+ },
+ "scripts": {
+ "bench": "npm test && node bench",
+ "prepublish": "make prepublish",
+ "pretest": "npm prune",
+ "test": "make prepublish && tape test/*.js | tap-spec"
},
- "_resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.2.tgz",
- "readme": "ERROR: No README data found!"
+ "version": "1.5.4"
}
diff --git a/deps/npm/node_modules/columnify/utils.js b/deps/npm/node_modules/columnify/utils.js
index 30682af3b1fe9c..df3e6cc44e8561 100644
--- a/deps/npm/node_modules/columnify/utils.js
+++ b/deps/npm/node_modules/columnify/utils.js
@@ -108,33 +108,46 @@ function splitIntoLines(str, max) {
* @return String
*/
-function splitLongWords(str, max, truncationChar, result) {
+function splitLongWords(str, max, truncationChar) {
str = str.trim()
- result = result || []
- if (!str) return result.join(' ') || ''
+ var result = []
var words = str.split(' ')
- var word = words.shift() || str
- if (wcwidth(word) > max) {
- // slice is based on length no wcwidth
- var i = 0
- var wwidth = 0
- var limit = max - wcwidth(truncationChar)
- while (i < word.length) {
- var w = wcwidth(word.charAt(i))
- if(w + wwidth > limit)
- break
- wwidth += w
- ++i
+ var remainder = ''
+
+ var truncationWidth = wcwidth(truncationChar)
+
+ while (remainder || words.length) {
+ if (remainder) {
+ var word = remainder
+ remainder = ''
+ } else {
+ var word = words.shift()
}
- var remainder = word.slice(i) // get remainder
- words.unshift(remainder) // save remainder for next loop
+ if (wcwidth(word) > max) {
+ // slice is based on length no wcwidth
+ var i = 0
+ var wwidth = 0
+ var limit = max - truncationWidth
+ while (i < word.length) {
+ var w = wcwidth(word.charAt(i))
+ if (w + wwidth > limit) {
+ break
+ }
+ wwidth += w
+ ++i
+ }
+
+ remainder = word.slice(i) // get remainder
+ // save remainder for next loop
- word = word.slice(0, i) // grab truncated word
- word += truncationChar // add trailing … or whatever
+ word = word.slice(0, i) // grab truncated word
+ word += truncationChar // add trailing … or whatever
+ }
+ result.push(word)
}
- result.push(word)
- return splitLongWords(words.join(' '), max, truncationChar, result)
+
+ return result.join(' ')
}
diff --git a/deps/npm/node_modules/config-chain/package.json b/deps/npm/node_modules/config-chain/package.json
index a8b63880e9ebc2..f7d3e531ba894e 100644
--- a/deps/npm/node_modules/config-chain/package.json
+++ b/deps/npm/node_modules/config-chain/package.json
@@ -1,40 +1,87 @@
{
- "name": "config-chain",
- "version": "1.1.9",
+ "_args": [
+ [
+ "config-chain@1.1.10",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "config-chain@1.1.10",
+ "_id": "config-chain@1.1.10",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/config-chain",
+ "_nodeVersion": "5.3.0",
+ "_npmUser": {
+ "email": "dominic.tarr@gmail.com",
+ "name": "dominictarr"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "config-chain",
+ "raw": "config-chain@1.1.10",
+ "rawSpec": "1.1.10",
+ "scope": null,
+ "spec": "1.1.10",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/",
+ "/standard/standard-format/esformatter-jsx/js-beautify"
+ ],
+ "_resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.10.tgz",
+ "_shasum": "7fc383de0fcc84d711cb465bd176579cad612346",
+ "_shrinkwrap": null,
+ "_spec": "config-chain@1.1.10",
+ "_where": "/Users/rebecca/code/npm",
+ "author": {
+ "email": "dominic.tarr@gmail.com",
+ "name": "Dominic Tarr",
+ "url": "http://dominictarr.com"
+ },
+ "bugs": {
+ "url": "https://github.com/dominictarr/config-chain/issues"
+ },
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ },
+ "description": "HANDLE CONFIGURATION ONCE AND FOR ALL",
+ "devDependencies": {
+ "tap": "0.3.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7fc383de0fcc84d711cb465bd176579cad612346",
+ "tarball": "http://registry.npmjs.org/config-chain/-/config-chain-1.1.10.tgz"
+ },
+ "gitHead": "0b6db3e14b9cdbe31460292bc4caf3983f977816",
+ "homepage": "http://github.com/dominictarr/config-chain",
"licenses": [
{
"type": "MIT",
"url": "https://raw.githubusercontent.com/dominictarr/config-chain/master/LICENCE"
}
],
- "description": "HANDLE CONFIGURATION ONCE AND FOR ALL",
- "homepage": "http://github.com/dominictarr/config-chain",
+ "maintainers": [
+ {
+ "name": "dominictarr",
+ "email": "dominic.tarr@gmail.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "config-chain",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/dominictarr/config-chain.git"
},
- "dependencies": {
- "proto-list": "~1.2.1",
- "ini": "1"
- },
- "devDependencies": {
- "tap": "0.3.0"
- },
- "author": {
- "name": "Dominic Tarr",
- "email": "dominic.tarr@gmail.com",
- "url": "http://dominictarr.com"
- },
"scripts": {
"test": "tap test/"
},
- "readme": "#config-chain\n\nUSE THIS MODULE TO LOAD ALL YOUR CONFIGURATIONS\n\n``` js\n\n //npm install config-chain\n\n var cc = require('config-chain')\n , opts = require('optimist').argv //ALWAYS USE OPTIMIST FOR COMMAND LINE OPTIONS.\n , env = opts.env || process.env.YOUR_APP_ENV || 'dev' //SET YOUR ENV LIKE THIS.\n\n // EACH ARG TO CONFIGURATOR IS LOADED INTO CONFIGURATION CHAIN\n // EARLIER ITEMS OVERIDE LATER ITEMS\n // PUTS COMMAND LINE OPTS FIRST, AND DEFAULTS LAST!\n\n //strings are interpereted as filenames.\n //will be loaded synchronously\n\n var conf =\n cc(\n //OVERRIDE SETTINGS WITH COMMAND LINE OPTS\n opts,\n\n //ENV VARS IF PREFIXED WITH 'myApp_'\n\n cc.env('myApp_'), //myApp_foo = 'like this'\n\n //FILE NAMED BY ENV\n path.join(__dirname, 'config.' + env + '.json'),\n\n //IF `env` is PRODUCTION\n env === 'prod'\n ? path.join(__dirname, 'special.json') //load a special file\n : null //NULL IS IGNORED!\n\n //SUBDIR FOR ENV CONFIG\n path.join(__dirname, 'config', env, 'config.json'),\n\n //SEARCH PARENT DIRECTORIES FROM CURRENT DIR FOR FILE\n cc.find('config.json'),\n\n //PUT DEFAULTS LAST\n {\n host: 'localhost'\n port: 8000\n })\n\n var host = conf.get('host')\n\n // or\n\n var host = conf.store.host\n\n```\n\nFINALLY, EASY FLEXIBLE CONFIGURATIONS!\n\n##see also: [proto-list](https://github.com/isaacs/proto-list/)\n\nWHATS THAT YOU SAY?\n\nYOU WANT A \"CLASS\" SO THAT YOU CAN DO CRAYCRAY JQUERY CRAPS?\n\nEXTEND WITH YOUR OWN FUNCTIONALTY!?\n\n## CONFIGCHAIN LIVES TO SERVE ONLY YOU!\n\n```javascript\nvar cc = require('config-chain')\n\n// all the stuff you did before\nvar config = cc({\n some: 'object'\n },\n cc.find('config.json'),\n cc.env('myApp_')\n )\n // CONFIGS AS A SERVICE, aka \"CaaS\", aka EVERY DEVOPS DREAM OMG!\n .addUrl('http://configurator:1234/my-configs')\n // ASYNC FTW!\n .addFile('/path/to/file.json')\n\n // OBJECTS ARE OK TOO, they're SYNC but they still ORDER RIGHT\n // BECAUSE PROMISES ARE USED BUT NO, NOT *THOSE* PROMISES, JUST\n // ACTUAL PROMISES LIKE YOU MAKE TO YOUR MOM, KEPT OUT OF LOVE\n .add({ another: 'object' })\n\n // DIE A THOUSAND DEATHS IF THIS EVER HAPPENS!!\n .on('error', function (er) {\n // IF ONLY THERE WAS SOMETHIGN HARDER THAN THROW\n // MY SORROW COULD BE ADEQUATELY EXPRESSED. /o\\\n throw er\n })\n\n // THROW A PARTY IN YOUR FACE WHEN ITS ALL LOADED!!\n .on('load', function (config) {\n console.awesome('HOLY SHIT!')\n })\n```\n\n# BORING API DOCS\n\n## cc(...args)\n\nMAKE A CHAIN AND ADD ALL THE ARGS.\n\nIf the arg is a STRING, then it shall be a JSON FILENAME.\n\nSYNC I/O!\n\nRETURN THE CHAIN!\n\n## cc.json(...args)\n\nJoin the args INTO A JSON FILENAME!\n\nSYNC I/O!\n\n## cc.find(relativePath)\n\nSEEK the RELATIVE PATH by climbing the TREE OF DIRECTORIES.\n\nRETURN THE FOUND PATH!\n\nSYNC I/O!\n\n## cc.parse(content, file, type)\n\nParse the content string, and guess the type from either the\nspecified type or the filename.\n\nRETURN THE RESULTING OBJECT!\n\nNO I/O!\n\n## cc.env(prefix, env=process.env)\n\nGet all the keys on the provided env object (or process.env) which are\nprefixed by the specified prefix, and put the values on a new object.\n\nRETURN THE RESULTING OBJECT!\n\nNO I/O!\n\n## cc.ConfigChain()\n\nThe ConfigChain class for CRAY CRAY JQUERY STYLE METHOD CHAINING!\n\nOne of these is returned by the main exported function, as well.\n\nIt inherits (prototypically) from\n[ProtoList](https://github.com/isaacs/proto-list/), and also inherits\n(parasitically) from\n[EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)\n\nIt has all the methods from both, and except where noted, they are\nunchanged.\n\n### LET IT BE KNOWN THAT chain IS AN INSTANCE OF ConfigChain.\n\n## chain.sources\n\nA list of all the places where it got stuff. The keys are the names\npassed to addFile or addUrl etc, and the value is an object with some\ninfo about the data source.\n\n## chain.addFile(filename, type, [name=filename])\n\nFilename is the name of the file. Name is an arbitrary string to be\nused later if you desire. Type is either 'ini' or 'json', and will\ntry to guess intelligently if omitted.\n\nLoaded files can be saved later.\n\n## chain.addUrl(url, type, [name=url])\n\nSame as the filename thing, but with a url.\n\nCan't be saved later.\n\n## chain.addEnv(prefix, env, [name='env'])\n\nAdd all the keys from the env object that start with the prefix.\n\n## chain.addString(data, file, type, [name])\n\nParse the string and add it to the set. (Mainly used internally.)\n\n## chain.add(object, [name])\n\nAdd the object to the set.\n\n## chain.root {Object}\n\nThe root from which all the other config objects in the set descend\nprototypically.\n\nPut your defaults here.\n\n## chain.set(key, value, name)\n\nSet the key to the value on the named config object. If name is\nunset, then set it on the first config object in the set. (That is,\nthe one with the highest priority, which was added first.)\n\n## chain.get(key, [name])\n\nGet the key from the named config object explicitly, or from the\nresolved configs if not specified.\n\n## chain.save(name, type)\n\nWrite the named config object back to its origin.\n\nCurrently only supported for env and file config types.\n\nFor files, encode the data according to the type.\n\n## chain.on('save', function () {})\n\nWhen one or more files are saved, emits `save` event when they're all\nsaved.\n\n## chain.on('load', function (chain) {})\n\nWhen the config chain has loaded all the specified files and urls and\nsuch, the 'load' event fires.\n",
- "readmeFilename": "readme.markdown",
- "bugs": {
- "url": "https://github.com/dominictarr/config-chain/issues"
- },
- "_id": "config-chain@1.1.9",
- "_shasum": "39ac7d4dca84faad926124c54cff25a53aa8bf6e",
- "_resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.9.tgz",
- "_from": "config-chain@>=1.1.9 <1.2.0"
+ "version": "1.1.10"
}
diff --git a/deps/npm/node_modules/config-chain/test/save.js b/deps/npm/node_modules/config-chain/test/save.js
index 783461317cced9..bc97bbd3f6f1df 100644
--- a/deps/npm/node_modules/config-chain/test/save.js
+++ b/deps/npm/node_modules/config-chain/test/save.js
@@ -38,7 +38,7 @@ test('test saving and loading ini files', function (t) {
.save('jsonfile')
.on('save', function () {
t.equal(fs.readFileSync(f1, 'utf8'),
- "bloo = jaus\nfoo = zoo\n")
+ "bloo=jaus\nfoo=zoo\n")
t.equal(fs.readFileSync(f2, 'utf8'),
"{\"oof\":\"ooz\",\"oolb\":\"suaj\"}")
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/.npmignore b/deps/npm/node_modules/fs-write-stream-atomic/.npmignore
new file mode 100644
index 00000000000000..2f24c57c382e41
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/.npmignore
@@ -0,0 +1,3 @@
+node_modules/
+coverage/
+.nyc_output/
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/.travis.yml b/deps/npm/node_modules/fs-write-stream-atomic/.travis.yml
new file mode 100644
index 00000000000000..68946625271c27
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/.travis.yml
@@ -0,0 +1,11 @@
+language: node_js
+sudo: false
+before_install:
+ - "npm -g install npm"
+node_js:
+ - "0.8"
+ - "0.10"
+ - "0.12"
+ - "iojs"
+ - "4"
+ - "5"
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/index.js b/deps/npm/node_modules/fs-write-stream-atomic/index.js
index d86b8c673f23ad..59b50db6d72927 100644
--- a/deps/npm/node_modules/fs-write-stream-atomic/index.js
+++ b/deps/npm/node_modules/fs-write-stream-atomic/index.js
@@ -1,96 +1,124 @@
var fs = require('graceful-fs')
+var Writable = require('readable-stream').Writable
var util = require('util')
-var crypto = require('crypto')
+var MurmurHash3 = require('imurmurhash')
+var iferr = require('iferr')
-function md5hex () {
- var hash = crypto.createHash('md5')
- for (var ii=0; ii=1.0.4 <1.1.0",
- "_npmVersion": "2.14.3",
- "_nodeVersion": "2.2.2",
- "_npmUser": {
- "name": "zkat",
- "email": "kat@sykosomatic.org"
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ },
+ "description": "Like `fs.createWriteStream(...)`, but atomic.",
+ "devDependencies": {
+ "rimraf": "^2.4.4",
+ "standard": "^5.4.1",
+ "tap": "^2.3.1"
+ },
+ "directories": {
+ "test": "test"
},
"dist": {
- "shasum": "c1ea55889f036ceebdead7d1055edbad998fe5e9",
- "tarball": "http://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.4.tgz"
+ "shasum": "e49aaddf288f87d46ff9e882f216a13abc40778b",
+ "tarball": "http://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.8.tgz"
},
+ "gitHead": "b55824ee4de7f1ca23784929d68b1b8f5edbf4a4",
+ "homepage": "https://github.com/npm/fs-write-stream-atomic",
+ "license": "ISC",
+ "main": "index.js",
"maintainers": [
{
"name": "iarna",
@@ -50,12 +70,26 @@
},
{
"name": "isaacs",
- "email": "isaacs@npmjs.com"
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
},
{
"name": "zkat",
"email": "kat@sykosomatic.org"
}
],
- "_resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.4.tgz"
+ "name": "fs-write-stream-atomic",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/fs-write-stream-atomic.git"
+ },
+ "scripts": {
+ "test": "standard && tap --coverage test/*.js"
+ },
+ "version": "1.0.8"
}
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js b/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js
index 159c596ab0181f..d0205e15f4389c 100644
--- a/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js
@@ -1,7 +1,14 @@
+var fs = require('graceful-fs')
var test = require('tap').test
-var writeStream = require('../index.js')
-var fs = require('fs')
var path = require('path')
+var writeStream = require('../index.js')
+
+var rename = fs.rename
+fs.rename = function (from, to, cb) {
+ setTimeout(function () {
+ rename(from, to, cb)
+ }, 100)
+}
test('basic', function (t) {
// open 10 write streams to the same file.
@@ -10,40 +17,41 @@ test('basic', function (t) {
var target = path.resolve(__dirname, 'test.txt')
var n = 10
+ // We run all of our assertions twice:
+ // once for finish, once for close
+ // There are 6 assertions, two fixed, plus 4 lines in the file.
+ t.plan(n * 2 * 6)
+
var streams = []
for (var i = 0; i < n; i++) {
var s = writeStream(target)
- s.on('finish', verifier('finish'))
- s.on('close', verifier('close'))
+ s.on('finish', verifier('finish', i))
+ s.on('close', verifier('close', i))
streams.push(s)
}
- var verifierCalled = 0
- function verifier (ev) { return function () {
- if (ev === 'close')
- t.equal(this.__emittedFinish, true)
- else {
- this.__emittedFinish = true
- t.equal(ev, 'finish')
- }
-
- // make sure that one of the atomic streams won.
- var res = fs.readFileSync(target, 'utf8')
- var lines = res.trim().split(/\n/)
- lines.forEach(function (line) {
- var first = lines[0].match(/\d+$/)[0]
- var cur = line.match(/\d+$/)[0]
- t.equal(cur, first)
- })
+ function verifier (ev, num) {
+ return function () {
+ if (ev === 'close') {
+ t.equal(this.__emittedFinish, true, num + '. closed only after finish')
+ } else {
+ this.__emittedFinish = true
+ t.equal(ev, 'finish', num + '. finished')
+ }
- var resExpr = /^first write \d+\nsecond write \d+\nthird write \d+\nfinal write \d+\n$/
- t.similar(res, resExpr)
+ // make sure that one of the atomic streams won.
+ var res = fs.readFileSync(target, 'utf8')
+ var lines = res.trim().split(/\n/)
+ lines.forEach(function (line, lineno) {
+ var first = lines[0].match(/\d+$/)[0]
+ var cur = line.match(/\d+$/)[0]
+ t.equal(cur, first, num + '. line ' + lineno + ' matches')
+ })
- // should be called once for each close, and each finish
- if (++verifierCalled === n * 2) {
- t.end()
+ var resExpr = /^first write \d+\nsecond write \d+\nthird write \d+\nfinal write \d+\n$/
+ t.similar(res, resExpr, num + '. content matches')
}
- }}
+ }
// now write something to each stream.
streams.forEach(function (stream, i) {
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/chown.js b/deps/npm/node_modules/fs-write-stream-atomic/test/chown.js
new file mode 100644
index 00000000000000..1733cf27ec2089
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/chown.js
@@ -0,0 +1,44 @@
+'use strict'
+var fs = require('graceful-fs')
+var path = require('path')
+var test = require('tap').test
+var rimraf = require('rimraf')
+var writeStream = require('../index.js')
+
+var target = path.resolve(__dirname, 'test-chown')
+
+test('chown works', function (t) {
+ t.plan(1)
+ var stream = writeStream(target, {chown: {uid: process.getuid(), gid: process.getgid()}})
+ var hadError = false
+ stream.on('error', function (er) {
+ hadError = true
+ console.log('#', er)
+ })
+ stream.on('close', function () {
+ t.is(hadError, false, 'no errors before close')
+ })
+ stream.end()
+})
+
+test('chown fails', function (t) {
+ t.plan(1)
+ fs.chown = function (file, uid, gid, cb) {
+ cb(new Error('TEST BREAK'))
+ }
+ var stream = writeStream(target, {chown: {uid: process.getuid(), gid: process.getgid()}})
+ var hadError = false
+ stream.on('error', function (er) {
+ hadError = true
+ console.log('#', er)
+ })
+ stream.on('close', function () {
+ t.is(hadError, true, 'error before close')
+ })
+ stream.end()
+})
+
+test('cleanup', function (t) {
+ rimraf.sync(target)
+ t.end()
+})
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/rename-fail.js b/deps/npm/node_modules/fs-write-stream-atomic/test/rename-fail.js
new file mode 100644
index 00000000000000..7e27f0bfb0f616
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/rename-fail.js
@@ -0,0 +1,30 @@
+'use strict'
+var fs = require('graceful-fs')
+var path = require('path')
+var test = require('tap').test
+var rimraf = require('rimraf')
+var writeStream = require('../index.js')
+
+var target = path.resolve(__dirname, 'test-rename')
+
+test('rename fails', function (t) {
+ t.plan(1)
+ fs.rename = function (src, dest, cb) {
+ cb(new Error('TEST BREAK'))
+ }
+ var stream = writeStream(target)
+ var hadError = false
+ stream.on('error', function (er) {
+ hadError = true
+ console.log('#', er)
+ })
+ stream.on('close', function () {
+ t.is(hadError, true, 'error before close')
+ })
+ stream.end()
+})
+
+test('cleanup', function (t) {
+ rimraf.sync(target)
+ t.end()
+})
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js b/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js
new file mode 100644
index 00000000000000..9840a6ef0308bf
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js
@@ -0,0 +1,40 @@
+'use strict'
+var fs = require('graceful-fs')
+var path = require('path')
+var test = require('tap').test
+var rimraf = require('rimraf')
+var writeStream = require('../index.js')
+
+var target = path.resolve(__dirname, 'test-chown')
+
+test('slow close', function (t) {
+ t.plan(2)
+ // The goal here is to simulate the "file close" step happening so slowly
+ // that the whole close/rename process could finish before the file is
+ // actually closed (and thus buffers truely flushed to the OS). In
+ // previous versions of this module, this would result in the module
+ // emitting finish & close before the file was fully written and in
+ // turn, could break other layers that tried to read the new file.
+ var realEmit = fs.WriteStream.prototype.emit
+ var reallyClosed = false
+ fs.WriteStream.prototype.emit = function (event) {
+ if (event !== 'close') return realEmit.apply(this, arguments)
+ setTimeout(function () {
+ reallyClosed = true
+ realEmit.call(this, 'close')
+ }.bind(this), 200)
+ }
+ var stream = writeStream(target)
+ stream.on('finish', function () {
+ t.is(reallyClosed, true, "didn't finish before target was closed")
+ })
+ stream.on('close', function () {
+ t.is(reallyClosed, true, "didn't close before target was closed")
+ })
+ stream.end()
+})
+
+test('cleanup', function (t) {
+ rimraf.sync(target)
+ t.end()
+})
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/toolong.js b/deps/npm/node_modules/fs-write-stream-atomic/test/toolong.js
index a1e5b714a697ad..f146cc55b1dabc 100644
--- a/deps/npm/node_modules/fs-write-stream-atomic/test/toolong.js
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/toolong.js
@@ -2,7 +2,7 @@ var path = require('path')
var test = require('tap').test
var writeStream = require('../index.js')
-function repeat(times, string) {
+function repeat (times, string) {
var output = ''
for (var ii = 0; ii < times; ++ii) {
output += string
@@ -10,19 +10,20 @@ function repeat(times, string) {
return output
}
-var target = path.resolve(__dirname, repeat(1000,'test'))
+var target = path.resolve(__dirname, repeat(1000, 'test'))
test('name too long', function (t) {
+ t.plan(2)
var stream = writeStream(target)
var hadError = false
stream.on('error', function (er) {
if (!hadError) {
- t.is(er.code, 'ENAMETOOLONG', target.length + " character name results in ENAMETOOLONG")
+ t.is(er.code, 'ENAMETOOLONG', target.length + ' character name results in ENAMETOOLONG')
hadError = true
}
})
stream.on('close', function () {
- t.end()
+ t.ok(hadError, 'got error before close')
})
stream.end()
})
diff --git a/deps/npm/node_modules/fstream-npm/.travis.yml b/deps/npm/node_modules/fstream-npm/.travis.yml
index c225dd42746cf8..3637c003fcd0aa 100644
--- a/deps/npm/node_modules/fstream-npm/.travis.yml
+++ b/deps/npm/node_modules/fstream-npm/.travis.yml
@@ -1,13 +1,15 @@
language: node_js
sudo: false
node_js:
+ - "5"
+ - "4"
- iojs
- "0.12"
- "0.10"
- "0.8"
before_install:
- "npm config set spin false"
- - "npm install -g npm/npm#2.x"
+ - "npm install -g npm"
script: "npm test"
notifications:
slack: npm-inc:kRqQjto7YbINqHPb1X6nS3g8
diff --git a/deps/npm/node_modules/fstream-npm/fstream-npm.js b/deps/npm/node_modules/fstream-npm/fstream-npm.js
index 5541c3197191fd..8f8114fe89a123 100644
--- a/deps/npm/node_modules/fstream-npm/fstream-npm.js
+++ b/deps/npm/node_modules/fstream-npm/fstream-npm.js
@@ -89,17 +89,19 @@ Packer.prototype.readBundledLinks = function () {
}
Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
- // package.json files can never be ignored.
- if (entry === 'package.json') return true
+ if (!entryObj || entryObj.type !== 'Directory') {
+ // package.json files can never be ignored.
+ if (entry === 'package.json') return true
- // readme files should never be ignored.
- if (entry.match(/^readme(\.[^\.]*)$/i)) return true
+ // readme files should never be ignored.
+ if (entry.match(/^readme(\.[^\.]*)$/i)) return true
- // license files should never be ignored.
- if (entry.match(/^(license|licence)(\.[^\.]*)?$/i)) return true
+ // license files should never be ignored.
+ if (entry.match(/^(license|licence)(\.[^\.]*)?$/i)) return true
- // changelogs should never be ignored.
- if (entry.match(/^(changes|changelog|history)(\.[^\.]*)?$/i)) return true
+ // changelogs should never be ignored.
+ if (entry.match(/^(changes|changelog|history)(\.[^\.]*)?$/i)) return true
+ }
// special rules. see below.
if (entry === 'node_modules' && this.packageRoot) return true
@@ -116,7 +118,8 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
entry === '.hg' ||
entry === '.lock-wscript' ||
entry.match(/^\.wafpickle-[0-9]+$/) ||
- entry === 'config.gypi' ||
+ (this.parent && this.parent.packageRoot && this.basename === 'build' &&
+ entry === 'config.gypi') ||
entry === 'npm-debug.log' ||
entry === '.npmrc' ||
entry.match(/^\..*\.swp$/) ||
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/browser.js b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/browser.js
deleted file mode 100644
index 7d0515920e5cb3..00000000000000
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/browser.js
+++ /dev/null
@@ -1,1159 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.minimatch = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o any number of characters
-var star = qmark + '*?'
-
-// ** when dots are allowed. Anything goes, except .. and .
-// not (^ or / followed by one or two dots followed by $ or /),
-// followed by anything, any number of times.
-var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'
-
-// not a ^ or / followed by a dot,
-// followed by anything, any number of times.
-var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'
-
-// characters that need to be escaped in RegExp.
-var reSpecials = charSet('().*{}+?[]^$\\!')
-
-// "abc" -> { a:true, b:true, c:true }
-function charSet (s) {
- return s.split('').reduce(function (set, c) {
- set[c] = true
- return set
- }, {})
-}
-
-// normalizes slashes.
-var slashSplit = /\/+/
-
-minimatch.filter = filter
-function filter (pattern, options) {
- options = options || {}
- return function (p, i, list) {
- return minimatch(p, pattern, options)
- }
-}
-
-function ext (a, b) {
- a = a || {}
- b = b || {}
- var t = {}
- Object.keys(b).forEach(function (k) {
- t[k] = b[k]
- })
- Object.keys(a).forEach(function (k) {
- t[k] = a[k]
- })
- return t
-}
-
-minimatch.defaults = function (def) {
- if (!def || !Object.keys(def).length) return minimatch
-
- var orig = minimatch
-
- var m = function minimatch (p, pattern, options) {
- return orig.minimatch(p, pattern, ext(def, options))
- }
-
- m.Minimatch = function Minimatch (pattern, options) {
- return new orig.Minimatch(pattern, ext(def, options))
- }
-
- return m
-}
-
-Minimatch.defaults = function (def) {
- if (!def || !Object.keys(def).length) return Minimatch
- return minimatch.defaults(def).Minimatch
-}
-
-function minimatch (p, pattern, options) {
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
-
- if (!options) options = {}
-
- // shortcut: comments match nothing.
- if (!options.nocomment && pattern.charAt(0) === '#') {
- return false
- }
-
- // "" only matches ""
- if (pattern.trim() === '') return p === ''
-
- return new Minimatch(pattern, options).match(p)
-}
-
-function Minimatch (pattern, options) {
- if (!(this instanceof Minimatch)) {
- return new Minimatch(pattern, options)
- }
-
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
-
- if (!options) options = {}
- pattern = pattern.trim()
-
- // windows support: need to use /, not \
- if (path.sep !== '/') {
- pattern = pattern.split(path.sep).join('/')
- }
-
- this.options = options
- this.set = []
- this.pattern = pattern
- this.regexp = null
- this.negate = false
- this.comment = false
- this.empty = false
-
- // make the set of regexps etc.
- this.make()
-}
-
-Minimatch.prototype.debug = function () {}
-
-Minimatch.prototype.make = make
-function make () {
- // don't do it more than once.
- if (this._made) return
-
- var pattern = this.pattern
- var options = this.options
-
- // empty patterns and comments match nothing.
- if (!options.nocomment && pattern.charAt(0) === '#') {
- this.comment = true
- return
- }
- if (!pattern) {
- this.empty = true
- return
- }
-
- // step 1: figure out negation, etc.
- this.parseNegate()
-
- // step 2: expand braces
- var set = this.globSet = this.braceExpand()
-
- if (options.debug) this.debug = console.error
-
- this.debug(this.pattern, set)
-
- // step 3: now we have a set, so turn each one into a series of path-portion
- // matching patterns.
- // These will be regexps, except in the case of "**", which is
- // set to the GLOBSTAR object for globstar behavior,
- // and will not contain any / characters
- set = this.globParts = set.map(function (s) {
- return s.split(slashSplit)
- })
-
- this.debug(this.pattern, set)
-
- // glob --> regexps
- set = set.map(function (s, si, set) {
- return s.map(this.parse, this)
- }, this)
-
- this.debug(this.pattern, set)
-
- // filter out everything that didn't compile properly.
- set = set.filter(function (s) {
- return s.indexOf(false) === -1
- })
-
- this.debug(this.pattern, set)
-
- this.set = set
-}
-
-Minimatch.prototype.parseNegate = parseNegate
-function parseNegate () {
- var pattern = this.pattern
- var negate = false
- var options = this.options
- var negateOffset = 0
-
- if (options.nonegate) return
-
- for (var i = 0, l = pattern.length
- ; i < l && pattern.charAt(i) === '!'
- ; i++) {
- negate = !negate
- negateOffset++
- }
-
- if (negateOffset) this.pattern = pattern.substr(negateOffset)
- this.negate = negate
-}
-
-// Brace expansion:
-// a{b,c}d -> abd acd
-// a{b,}c -> abc ac
-// a{0..3}d -> a0d a1d a2d a3d
-// a{b,c{d,e}f}g -> abg acdfg acefg
-// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
-//
-// Invalid sets are not expanded.
-// a{2..}b -> a{2..}b
-// a{b}c -> a{b}c
-minimatch.braceExpand = function (pattern, options) {
- return braceExpand(pattern, options)
-}
-
-Minimatch.prototype.braceExpand = braceExpand
-
-function braceExpand (pattern, options) {
- if (!options) {
- if (this instanceof Minimatch) {
- options = this.options
- } else {
- options = {}
- }
- }
-
- pattern = typeof pattern === 'undefined'
- ? this.pattern : pattern
-
- if (typeof pattern === 'undefined') {
- throw new Error('undefined pattern')
- }
-
- if (options.nobrace ||
- !pattern.match(/\{.*\}/)) {
- // shortcut. no need to expand.
- return [pattern]
- }
-
- return expand(pattern)
-}
-
-// parse a component of the expanded set.
-// At this point, no pattern may contain "/" in it
-// so we're going to return a 2d array, where each entry is the full
-// pattern, split on '/', and then turned into a regular expression.
-// A regexp is made at the end which joins each array with an
-// escaped /, and another full one which joins each regexp with |.
-//
-// Following the lead of Bash 4.1, note that "**" only has special meaning
-// when it is the *only* thing in a path portion. Otherwise, any series
-// of * is equivalent to a single *. Globstar behavior is enabled by
-// default, and can be disabled by setting options.noglobstar.
-Minimatch.prototype.parse = parse
-var SUBPARSE = {}
-function parse (pattern, isSub) {
- var options = this.options
-
- // shortcuts
- if (!options.noglobstar && pattern === '**') return GLOBSTAR
- if (pattern === '') return ''
-
- var re = ''
- var hasMagic = !!options.nocase
- var escaping = false
- // ? => one single character
- var patternListStack = []
- var negativeLists = []
- var plType
- var stateChar
- var inClass = false
- var reClassStart = -1
- var classStart = -1
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set.
- var patternStart = pattern.charAt(0) === '.' ? '' // anything
- // not (start or / followed by . or .. followed by / or end)
- : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
- : '(?!\\.)'
- var self = this
-
- function clearStateChar () {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star
- hasMagic = true
- break
- case '?':
- re += qmark
- hasMagic = true
- break
- default:
- re += '\\' + stateChar
- break
- }
- self.debug('clearStateChar %j %j', stateChar, re)
- stateChar = false
- }
- }
-
- for (var i = 0, len = pattern.length, c
- ; (i < len) && (c = pattern.charAt(i))
- ; i++) {
- this.debug('%s\t%s %s %j', pattern, i, re, c)
-
- // skip over any that are escaped.
- if (escaping && reSpecials[c]) {
- re += '\\' + c
- escaping = false
- continue
- }
-
- switch (c) {
- case '/':
- // completely not allowed, even escaped.
- // Should already be path-split by now.
- return false
-
- case '\\':
- clearStateChar()
- escaping = true
- continue
-
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
-
- // all of those are literals inside a class, except that
- // the glob [!a] means [^a] in regexp
- if (inClass) {
- this.debug(' in class')
- if (c === '!' && i === classStart + 1) c = '^'
- re += c
- continue
- }
-
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- self.debug('call clearStateChar %j', stateChar)
- clearStateChar()
- stateChar = c
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext) clearStateChar()
- continue
-
- case '(':
- if (inClass) {
- re += '('
- continue
- }
-
- if (!stateChar) {
- re += '\\('
- continue
- }
-
- plType = stateChar
- patternListStack.push({
- type: plType,
- start: i - 1,
- reStart: re.length
- })
- // negation is (?:(?!js)[^/]*)
- re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
- this.debug('plType %j %j', stateChar, re)
- stateChar = false
- continue
-
- case ')':
- if (inClass || !patternListStack.length) {
- re += '\\)'
- continue
- }
-
- clearStateChar()
- hasMagic = true
- re += ')'
- var pl = patternListStack.pop()
- plType = pl.type
- // negation is (?:(?!js)[^/]*)
- // The others are (?:)
- switch (plType) {
- case '!':
- negativeLists.push(pl)
- re += ')[^/]*?)'
- pl.reEnd = re.length
- break
- case '?':
- case '+':
- case '*':
- re += plType
- break
- case '@': break // the default anyway
- }
- continue
-
- case '|':
- if (inClass || !patternListStack.length || escaping) {
- re += '\\|'
- escaping = false
- continue
- }
-
- clearStateChar()
- re += '|'
- continue
-
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar()
-
- if (inClass) {
- re += '\\' + c
- continue
- }
-
- inClass = true
- classStart = i
- reClassStart = re.length
- re += c
- continue
-
- case ']':
- // a right bracket shall lose its special
- // meaning and represent itself in
- // a bracket expression if it occurs
- // first in the list. -- POSIX.2 2.8.3.2
- if (i === classStart + 1 || !inClass) {
- re += '\\' + c
- escaping = false
- continue
- }
-
- // handle the case where we left a class open.
- // "[z-a]" is valid, equivalent to "\[z-a\]"
- if (inClass) {
- // split where the last [ was, make sure we don't have
- // an invalid re. if so, re-walk the contents of the
- // would-be class to re-translate any characters that
- // were passed through as-is
- // TODO: It would probably be faster to determine this
- // without a try/catch and a new RegExp, but it's tricky
- // to do safely. For now, this is safe and works.
- var cs = pattern.substring(classStart + 1, i)
- try {
- RegExp('[' + cs + ']')
- } catch (er) {
- // not a valid class!
- var sp = this.parse(cs, SUBPARSE)
- re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
- hasMagic = hasMagic || sp[1]
- inClass = false
- continue
- }
- }
-
- // finish up the class.
- hasMagic = true
- inClass = false
- re += c
- continue
-
- default:
- // swallow any state char that wasn't consumed
- clearStateChar()
-
- if (escaping) {
- // no need
- escaping = false
- } else if (reSpecials[c]
- && !(c === '^' && inClass)) {
- re += '\\'
- }
-
- re += c
-
- } // switch
- } // for
-
- // handle the case where we left a class open.
- // "[abc" is valid, equivalent to "\[abc"
- if (inClass) {
- // split where the last [ was, and escape it
- // this is a huge pita. We now have to re-walk
- // the contents of the would-be class to re-translate
- // any characters that were passed through as-is
- cs = pattern.substr(classStart + 1)
- sp = this.parse(cs, SUBPARSE)
- re = re.substr(0, reClassStart) + '\\[' + sp[0]
- hasMagic = hasMagic || sp[1]
- }
-
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- var tail = re.slice(pl.reStart + 3)
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\'
- }
-
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|'
- })
-
- this.debug('tail=%j\n %s', tail, tail)
- var t = pl.type === '*' ? star
- : pl.type === '?' ? qmark
- : '\\' + pl.type
-
- hasMagic = true
- re = re.slice(0, pl.reStart) + t + '\\(' + tail
- }
-
- // handle trailing things that only matter at the very end.
- clearStateChar()
- if (escaping) {
- // trailing \\
- re += '\\\\'
- }
-
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- var addPatternStart = false
- switch (re.charAt(0)) {
- case '.':
- case '[':
- case '(': addPatternStart = true
- }
-
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (var n = negativeLists.length - 1; n > -1; n--) {
- var nl = negativeLists[n]
-
- var nlBefore = re.slice(0, nl.reStart)
- var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
- var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
- var nlAfter = re.slice(nl.reEnd)
-
- nlLast += nlAfter
-
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- var openParensBefore = nlBefore.split('(').length - 1
- var cleanAfter = nlAfter
- for (i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
- }
- nlAfter = cleanAfter
-
- var dollar = ''
- if (nlAfter === '' && isSub !== SUBPARSE) {
- dollar = '$'
- }
- var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
- re = newRe
- }
-
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re
- }
-
- if (addPatternStart) {
- re = patternStart + re
- }
-
- // parsing just a piece of a larger pattern.
- if (isSub === SUBPARSE) {
- return [re, hasMagic]
- }
-
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(pattern)
- }
-
- var flags = options.nocase ? 'i' : ''
- var regExp = new RegExp('^' + re + '$', flags)
-
- regExp._glob = pattern
- regExp._src = re
-
- return regExp
-}
-
-minimatch.makeRe = function (pattern, options) {
- return new Minimatch(pattern, options || {}).makeRe()
-}
-
-Minimatch.prototype.makeRe = makeRe
-function makeRe () {
- if (this.regexp || this.regexp === false) return this.regexp
-
- // at this point, this.set is a 2d array of partial
- // pattern strings, or "**".
- //
- // It's better to use .match(). This function shouldn't
- // be used, really, but it's pretty convenient sometimes,
- // when you just want to work with a regex.
- var set = this.set
-
- if (!set.length) {
- this.regexp = false
- return this.regexp
- }
- var options = this.options
-
- var twoStar = options.noglobstar ? star
- : options.dot ? twoStarDot
- : twoStarNoDot
- var flags = options.nocase ? 'i' : ''
-
- var re = set.map(function (pattern) {
- return pattern.map(function (p) {
- return (p === GLOBSTAR) ? twoStar
- : (typeof p === 'string') ? regExpEscape(p)
- : p._src
- }).join('\\\/')
- }).join('|')
-
- // must match entire pattern
- // ending in a * or ** will make it less strict.
- re = '^(?:' + re + ')$'
-
- // can match anything, as long as it's not this.
- if (this.negate) re = '^(?!' + re + ').*$'
-
- try {
- this.regexp = new RegExp(re, flags)
- } catch (ex) {
- this.regexp = false
- }
- return this.regexp
-}
-
-minimatch.match = function (list, pattern, options) {
- options = options || {}
- var mm = new Minimatch(pattern, options)
- list = list.filter(function (f) {
- return mm.match(f)
- })
- if (mm.options.nonull && !list.length) {
- list.push(pattern)
- }
- return list
-}
-
-Minimatch.prototype.match = match
-function match (f, partial) {
- this.debug('match', f, this.pattern)
- // short-circuit in the case of busted things.
- // comments, etc.
- if (this.comment) return false
- if (this.empty) return f === ''
-
- if (f === '/' && partial) return true
-
- var options = this.options
-
- // windows: need to use /, not \
- if (path.sep !== '/') {
- f = f.split(path.sep).join('/')
- }
-
- // treat the test path as a set of pathparts.
- f = f.split(slashSplit)
- this.debug(this.pattern, 'split', f)
-
- // just ONE of the pattern sets in this.set needs to match
- // in order for it to be valid. If negating, then just one
- // match means that we have failed.
- // Either way, return on the first hit.
-
- var set = this.set
- this.debug(this.pattern, 'set', set)
-
- // Find the basename of the path by looking for the last non-empty segment
- var filename
- var i
- for (i = f.length - 1; i >= 0; i--) {
- filename = f[i]
- if (filename) break
- }
-
- for (i = 0; i < set.length; i++) {
- var pattern = set[i]
- var file = f
- if (options.matchBase && pattern.length === 1) {
- file = [filename]
- }
- var hit = this.matchOne(file, pattern, partial)
- if (hit) {
- if (options.flipNegate) return true
- return !this.negate
- }
- }
-
- // didn't get any hits. this is success if it's a negative
- // pattern, failure otherwise.
- if (options.flipNegate) return false
- return this.negate
-}
-
-// set partial to true to test if, for example,
-// "/a/b" matches the start of "/*/b/*/d"
-// Partial means, if you run out of file before you run
-// out of pattern, then that's fine, as long as all
-// the parts match.
-Minimatch.prototype.matchOne = function (file, pattern, partial) {
- var options = this.options
-
- this.debug('matchOne',
- { 'this': this, file: file, pattern: pattern })
-
- this.debug('matchOne', file.length, pattern.length)
-
- for (var fi = 0,
- pi = 0,
- fl = file.length,
- pl = pattern.length
- ; (fi < fl) && (pi < pl)
- ; fi++, pi++) {
- this.debug('matchOne loop')
- var p = pattern[pi]
- var f = file[fi]
-
- this.debug(pattern, p, f)
-
- // should be impossible.
- // some invalid regexp stuff in the set.
- if (p === false) return false
-
- if (p === GLOBSTAR) {
- this.debug('GLOBSTAR', [pattern, p, f])
-
- // "**"
- // a/**/b/**/c would match the following:
- // a/b/x/y/z/c
- // a/x/y/z/b/c
- // a/b/x/b/x/c
- // a/b/c
- // To do this, take the rest of the pattern after
- // the **, and see if it would match the file remainder.
- // If so, return success.
- // If not, the ** "swallows" a segment, and try again.
- // This is recursively awful.
- //
- // a/**/b/**/c matching a/b/x/y/z/c
- // - a matches a
- // - doublestar
- // - matchOne(b/x/y/z/c, b/**/c)
- // - b matches b
- // - doublestar
- // - matchOne(x/y/z/c, c) -> no
- // - matchOne(y/z/c, c) -> no
- // - matchOne(z/c, c) -> no
- // - matchOne(c, c) yes, hit
- var fr = fi
- var pr = pi + 1
- if (pr === pl) {
- this.debug('** at the end')
- // a ** at the end will just swallow the rest.
- // We have found a match.
- // however, it will not swallow /.x, unless
- // options.dot is set.
- // . and .. are *never* matched by **, for explosively
- // exponential reasons.
- for (; fi < fl; fi++) {
- if (file[fi] === '.' || file[fi] === '..' ||
- (!options.dot && file[fi].charAt(0) === '.')) return false
- }
- return true
- }
-
- // ok, let's see if we can swallow whatever we can.
- while (fr < fl) {
- var swallowee = file[fr]
-
- this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
-
- // XXX remove this slice. Just pass the start index.
- if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
- this.debug('globstar found match!', fr, fl, swallowee)
- // found a match.
- return true
- } else {
- // can't swallow "." or ".." ever.
- // can only swallow ".foo" when explicitly asked.
- if (swallowee === '.' || swallowee === '..' ||
- (!options.dot && swallowee.charAt(0) === '.')) {
- this.debug('dot detected!', file, fr, pattern, pr)
- break
- }
-
- // ** swallows a segment, and continue.
- this.debug('globstar swallow a segment, and continue')
- fr++
- }
- }
-
- // no match was found.
- // However, in partial mode, we can't say this is necessarily over.
- // If there's more *pattern* left, then
- if (partial) {
- // ran out of file
- this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
- if (fr === fl) return true
- }
- return false
- }
-
- // something other than **
- // non-magic patterns just have to match exactly
- // patterns with magic have been turned into regexps.
- var hit
- if (typeof p === 'string') {
- if (options.nocase) {
- hit = f.toLowerCase() === p.toLowerCase()
- } else {
- hit = f === p
- }
- this.debug('string match', p, f, hit)
- } else {
- hit = f.match(p)
- this.debug('pattern match', p, f, hit)
- }
-
- if (!hit) return false
- }
-
- // Note: ending in / means that we'll get a final ""
- // at the end of the pattern. This can only match a
- // corresponding "" at the end of the file.
- // If the file ends in /, then it can only match a
- // a pattern that ends in /, unless the pattern just
- // doesn't have any more for it. But, a/b/ should *not*
- // match "a/b/*", even though "" matches against the
- // [^/]*? pattern, except in partial mode, where it might
- // simply not be reached yet.
- // However, a/b/ should still satisfy a/*
-
- // now either we fell off the end of the pattern, or we're done.
- if (fi === fl && pi === pl) {
- // ran out of pattern and filename at the same time.
- // an exact hit!
- return true
- } else if (fi === fl) {
- // ran out of file, but still had pattern left.
- // this is ok if we're doing the match as part of
- // a glob fs traversal.
- return partial
- } else if (pi === pl) {
- // ran out of pattern, still have file left.
- // this is only acceptable if we're on the very last
- // empty segment of a file with a trailing slash.
- // a/* should match a/b/
- var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
- return emptyFileEnd
- }
-
- // should be unreachable.
- throw new Error('wtf?')
-}
-
-// replace stuff like \* with *
-function globUnescape (s) {
- return s.replace(/\\(.)/g, '$1')
-}
-
-function regExpEscape (s) {
- return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
-}
-
-},{"brace-expansion":2,"path":undefined}],2:[function(require,module,exports){
-var concatMap = require('concat-map');
-var balanced = require('balanced-match');
-
-module.exports = expandTop;
-
-var escSlash = '\0SLASH'+Math.random()+'\0';
-var escOpen = '\0OPEN'+Math.random()+'\0';
-var escClose = '\0CLOSE'+Math.random()+'\0';
-var escComma = '\0COMMA'+Math.random()+'\0';
-var escPeriod = '\0PERIOD'+Math.random()+'\0';
-
-function numeric(str) {
- return parseInt(str, 10) == str
- ? parseInt(str, 10)
- : str.charCodeAt(0);
-}
-
-function escapeBraces(str) {
- return str.split('\\\\').join(escSlash)
- .split('\\{').join(escOpen)
- .split('\\}').join(escClose)
- .split('\\,').join(escComma)
- .split('\\.').join(escPeriod);
-}
-
-function unescapeBraces(str) {
- return str.split(escSlash).join('\\')
- .split(escOpen).join('{')
- .split(escClose).join('}')
- .split(escComma).join(',')
- .split(escPeriod).join('.');
-}
-
-
-// Basically just str.split(","), but handling cases
-// where we have nested braced sections, which should be
-// treated as individual members, like {a,{b,c},d}
-function parseCommaParts(str) {
- if (!str)
- return [''];
-
- var parts = [];
- var m = balanced('{', '}', str);
-
- if (!m)
- return str.split(',');
-
- var pre = m.pre;
- var body = m.body;
- var post = m.post;
- var p = pre.split(',');
-
- p[p.length-1] += '{' + body + '}';
- var postParts = parseCommaParts(post);
- if (post.length) {
- p[p.length-1] += postParts.shift();
- p.push.apply(p, postParts);
- }
-
- parts.push.apply(parts, p);
-
- return parts;
-}
-
-function expandTop(str) {
- if (!str)
- return [];
-
- var expansions = expand(escapeBraces(str));
- return expansions.filter(identity).map(unescapeBraces);
-}
-
-function identity(e) {
- return e;
-}
-
-function embrace(str) {
- return '{' + str + '}';
-}
-function isPadded(el) {
- return /^-?0\d/.test(el);
-}
-
-function lte(i, y) {
- return i <= y;
-}
-function gte(i, y) {
- return i >= y;
-}
-
-function expand(str) {
- var expansions = [];
-
- var m = balanced('{', '}', str);
- if (!m || /\$$/.test(m.pre)) return [str];
-
- var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
- var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
- var isSequence = isNumericSequence || isAlphaSequence;
- var isOptions = /^(.*,)+(.+)?$/.test(m.body);
- if (!isSequence && !isOptions) {
- // {a},b}
- if (m.post.match(/,.*}/)) {
- str = m.pre + '{' + m.body + escClose + m.post;
- return expand(str);
- }
- return [str];
- }
-
- var n;
- if (isSequence) {
- n = m.body.split(/\.\./);
- } else {
- n = parseCommaParts(m.body);
- if (n.length === 1) {
- // x{{a,b}}y ==> x{a}y x{b}y
- n = expand(n[0]).map(embrace);
- if (n.length === 1) {
- var post = m.post.length
- ? expand(m.post)
- : [''];
- return post.map(function(p) {
- return m.pre + n[0] + p;
- });
- }
- }
- }
-
- // at this point, n is the parts, and we know it's not a comma set
- // with a single entry.
-
- // no need to expand pre, since it is guaranteed to be free of brace-sets
- var pre = m.pre;
- var post = m.post.length
- ? expand(m.post)
- : [''];
-
- var N;
-
- if (isSequence) {
- var x = numeric(n[0]);
- var y = numeric(n[1]);
- var width = Math.max(n[0].length, n[1].length)
- var incr = n.length == 3
- ? Math.abs(numeric(n[2]))
- : 1;
- var test = lte;
- var reverse = y < x;
- if (reverse) {
- incr *= -1;
- test = gte;
- }
- var pad = n.some(isPadded);
-
- N = [];
-
- for (var i = x; test(i, y); i += incr) {
- var c;
- if (isAlphaSequence) {
- c = String.fromCharCode(i);
- if (c === '\\')
- c = '';
- } else {
- c = String(i);
- if (pad) {
- var need = width - c.length;
- if (need > 0) {
- var z = new Array(need + 1).join('0');
- if (i < 0)
- c = '-' + z + c.slice(1);
- else
- c = z + c;
- }
- }
- }
- N.push(c);
- }
- } else {
- N = concatMap(n, function(el) { return expand(el) });
- }
-
- for (var j = 0; j < N.length; j++) {
- for (var k = 0; k < post.length; k++) {
- expansions.push([pre, N[j], post[k]].join(''))
- }
- }
-
- return expansions;
-}
-
-
-},{"balanced-match":3,"concat-map":4}],3:[function(require,module,exports){
-module.exports = balanced;
-function balanced(a, b, str) {
- var bal = 0;
- var m = {};
- var ended = false;
-
- for (var i = 0; i < str.length; i++) {
- if (a == str.substr(i, a.length)) {
- if (!('start' in m)) m.start = i;
- bal++;
- }
- else if (b == str.substr(i, b.length) && 'start' in m) {
- ended = true;
- bal--;
- if (!bal) {
- m.end = i;
- m.pre = str.substr(0, m.start);
- m.body = (m.end - m.start > 1)
- ? str.substring(m.start + a.length, m.end)
- : '';
- m.post = str.slice(m.end + b.length);
- return m;
- }
- }
- }
-
- // if we opened more than we closed, find the one we closed
- if (bal && ended) {
- var start = m.start + a.length;
- m = balanced(a, b, str.substr(start));
- if (m) {
- m.start += start;
- m.end += start;
- m.pre = str.slice(0, start) + m.pre;
- }
- return m;
- }
-}
-
-},{}],4:[function(require,module,exports){
-module.exports = function (xs, fn) {
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- var x = fn(xs[i], i);
- if (Array.isArray(x)) res.push.apply(res, x);
- else res.push(x);
- }
- return res;
-};
-
-},{}]},{},[1])(1)
-});
\ No newline at end of file
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
index cc4dba29d959a2..6e5919de39a312 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
@@ -1,4 +1,3 @@
language: node_js
node_js:
- - "0.8"
- "0.10"
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/README.md b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
similarity index 70%
rename from deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/README.md
rename to deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
index 052a62b8d7b7ae..2cdc8e4148cc0a 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/README.md
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
@@ -1,36 +1,3 @@
-
-# isarray
-
-`Array#isArray` for older browsers.
-
-## Usage
-
-```js
-var isArray = require('isarray');
-
-console.log(isArray([])); // => true
-console.log(isArray({})); // => false
-```
-
-## Installation
-
-With [npm](http://npmjs.org) do
-
-```bash
-$ npm install isarray
-```
-
-Then bundle for the browser with
-[browserify](https://github.com/substack/browserify).
-
-With [component](http://component.io) do
-
-```bash
-$ component install juliangruber/isarray
-```
-
-## License
-
(MIT)
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
index 2aff0ebff4403e..421f3aa5f951a2 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -47,6 +47,15 @@ If there's no match, `undefined` will be returned.
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+### var r = balanced.range(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+array with indexes: `[ , ]`.
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`.
+
## Installation
With [npm](https://npmjs.org) do:
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
index d165ae8174ca82..75f3d71cba90bc 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -1,38 +1,50 @@
module.exports = balanced;
function balanced(a, b, str) {
- var bal = 0;
- var m = {};
- var ended = false;
-
- for (var i = 0; i < str.length; i++) {
- if (a == str.substr(i, a.length)) {
- if (!('start' in m)) m.start = i;
- bal++;
- }
- else if (b == str.substr(i, b.length) && 'start' in m) {
- ended = true;
- bal--;
- if (!bal) {
- m.end = i;
- m.pre = str.substr(0, m.start);
- m.body = (m.end - m.start > 1)
- ? str.substring(m.start + a.length, m.end)
- : '';
- m.post = str.slice(m.end + b.length);
- return m;
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ begs = [];
+ left = str.length;
+
+ while (i < str.length && i >= 0 && ! result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
}
+
+ i = ai < bi && ai >= 0 ? ai : bi;
}
- }
- // if we opened more than we closed, find the one we closed
- if (bal && ended) {
- var start = m.start + a.length;
- m = balanced(a, b, str.substr(start));
- if (m) {
- m.start += start;
- m.end += start;
- m.pre = str.slice(0, start) + m.pre;
+ if (begs.length) {
+ result = [ left, right ];
}
- return m;
}
+
+ return result;
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
index 35332a3c4eb366..d71e6b979bee4b 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -1,56 +1,98 @@
{
- "name": "balanced-match",
- "description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.2.0",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/balanced-match.git"
+ "_args": [
+ [
+ "balanced-match@^0.3.0",
+ "/Users/rebecca/code/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion"
+ ]
+ ],
+ "_from": "balanced-match@>=0.3.0 <0.4.0",
+ "_id": "balanced-match@0.3.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/fstream-npm/fstream-ignore/minimatch/brace-expansion/balanced-match",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "homepage": "https://github.com/juliangruber/balanced-match",
- "main": "index.js",
- "scripts": {
- "test": "make test"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "balanced-match",
+ "raw": "balanced-match@^0.3.0",
+ "rawSpec": "^0.3.0",
+ "scope": null,
+ "spec": ">=0.3.0 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fstream-npm/fstream-ignore/minimatch/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz",
+ "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "_shrinkwrap": null,
+ "_spec": "balanced-match@^0.3.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion",
+ "author": {
+ "email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
},
"dependencies": {},
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": {
- "tape": "~1.1.1"
+ "tape": "~4.2.2"
},
+ "directories": {},
+ "dist": {
+ "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
+ },
+ "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5",
+ "homepage": "https://github.com/juliangruber/balanced-match",
"keywords": [
+ "balanced",
"match",
+ "parse",
"regexp",
- "test",
- "balanced",
- "parse"
+ "test"
],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
"license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "name": "balanced-match",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "scripts": {
+ "test": "make test"
+ },
"testling": {
- "files": "test/*.js",
"browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
+ "android-browser/4.2..latest",
"chrome/25..latest",
"chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
"ipad/6.0..latest",
"iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "readme": "# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `` and ``.\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)\n\n## Example\n\nGet the first matching pair of braces:\n\n```js\nvar balanced = require('balanced-match');\n\nconsole.log(balanced('{', '}', 'pre{in{nested}}post'));\nconsole.log(balanced('{', '}', 'pre{first}between{second}post'));\n```\n\nThe matches are:\n\n```bash\n$ node example.js\n{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }\n{ start: 3,\n end: 9,\n pre: 'pre',\n body: 'first',\n post: 'between{second}post' }\n```\n\n## API\n\n### var m = balanced(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\nobject with those keys:\n\n* **start** the index of the first match of `a`\n* **end** the index of the matching `b`\n* **pre** the preamble, `a` and `b` not included\n* **body** the match, `a` and `b` not included\n* **post** the postscript, `a` and `b` not included\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install balanced-match\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/juliangruber/balanced-match/issues"
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
},
- "_id": "balanced-match@0.2.0",
- "_shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
- "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz",
- "_from": "balanced-match@>=0.2.0 <0.3.0"
+ "version": "0.3.0"
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
index 36bfd39954850d..f5e98e3f2a3240 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
@@ -52,5 +52,33 @@ test('balanced', function(t) {
body: 'innest',
post: 'post'
});
+ t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: '{in}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 8,
+ pre: 'pre',
+ body: 'in',
+ post: '}post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), {
+ start: 4,
+ end: 10,
+ pre: 'pre{',
+ body: 'first',
+ post: 'in{second}post'
+ });
+ t.deepEqual(balanced('', '?>', 'pre>post'), {
+ start: 3,
+ end: 4,
+ pre: 'pre',
+ body: '',
+ post: 'post'
+ });
t.end();
});
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/package.json
index 4cb3e05d7ceb6c..14febd4da676dd 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -1,60 +1,64 @@
{
- "name": "brace-expansion",
- "description": "Brace expansion as known from sh/bash",
- "version": "1.1.1",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/brace-expansion.git"
- },
- "homepage": "https://github.com/juliangruber/brace-expansion",
- "main": "index.js",
- "scripts": {
- "test": "tape test/*.js",
- "gentest": "bash test/generate.sh"
- },
- "dependencies": {
- "balanced-match": "^0.2.0",
- "concat-map": "0.0.1"
+ "_args": [
+ [
+ "brace-expansion@^1.0.0",
+ "/Users/rebecca/code/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch"
+ ]
+ ],
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_id": "brace-expansion@1.1.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/fstream-npm/fstream-ignore/minimatch/brace-expansion",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "devDependencies": {
- "tape": "^3.0.3"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "brace-expansion",
+ "raw": "brace-expansion@^1.0.0",
+ "rawSpec": "^1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
},
- "keywords": [],
+ "_requiredBy": [
+ "/fstream-npm/fstream-ignore/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
+ "_shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "_shrinkwrap": null,
+ "_spec": "brace-expansion@^1.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch",
"author": {
- "name": "Julian Gruber",
"email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
"url": "http://juliangruber.com"
},
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "gitHead": "f50da498166d76ea570cf3b30179f01f0f119612",
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
- "_id": "brace-expansion@1.1.1",
- "_shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "_from": "brace-expansion@>=1.0.0 <2.0.0",
- "_npmVersion": "2.6.1",
- "_nodeVersion": "0.10.36",
- "_npmUser": {
- "name": "juliangruber",
- "email": "julian@juliangruber.com"
+ "dependencies": {
+ "balanced-match": "^0.3.0",
+ "concat-map": "0.0.1"
},
+ "description": "Brace expansion as known from sh/bash",
+ "devDependencies": {
+ "tape": "4.2.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz"
+ },
+ "gitHead": "b03773a30fa516b1374945b68e9acb6253d595fa",
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "keywords": [],
+ "license": "MIT",
+ "main": "index.js",
"maintainers": [
{
"name": "juliangruber",
@@ -65,11 +69,32 @@
"email": "isaacs@npmjs.com"
}
],
- "dist": {
- "shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz"
+ "name": "brace-expansion",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz",
- "readme": "ERROR: No README data found!"
+ "scripts": {
+ "gentest": "bash test/generate.sh",
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "browsers": [
+ "android-browser/4.2..latest",
+ "chrome/25..latest",
+ "chrome/canary",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
+ },
+ "version": "1.1.2"
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/package.json
index e9256630aa3819..51abf989189a64 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/package.json
@@ -6,7 +6,7 @@
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "2.0.10",
+ "version": "3.0.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
@@ -14,8 +14,7 @@
"main": "minimatch.js",
"scripts": {
"posttest": "standard minimatch.js test/*.js",
- "test": "tap test/*.js",
- "prepublish": "browserify -o browser.js -e minimatch.js -s minimatch --bare"
+ "test": "tap test/*.js"
},
"engines": {
"node": "*"
@@ -24,23 +23,38 @@
"brace-expansion": "^1.0.0"
},
"devDependencies": {
- "browserify": "^9.0.3",
"standard": "^3.7.2",
"tap": "^1.2.0"
},
"license": "ISC",
"files": [
- "minimatch.js",
- "browser.js"
+ "minimatch.js"
],
- "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself if this option is set. When not set, an empty list\nis returned if there are no matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n",
- "readmeFilename": "README.md",
+ "gitHead": "270dbea567f0af6918cb18103e98c612aa717a20",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
"homepage": "https://github.com/isaacs/minimatch#readme",
- "_id": "minimatch@2.0.10",
- "_shasum": "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7",
- "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "_from": "minimatch@>=2.0.1 <3.0.0"
+ "_id": "minimatch@3.0.0",
+ "_shasum": "5236157a51e4f004c177fb3c527ff7dd78f0ef83",
+ "_from": "minimatch@>=3.0.0 <4.0.0",
+ "_npmVersion": "3.3.2",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "5236157a51e4f004c177fb3c527ff7dd78f0ef83",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
index 1a505bd4a2afc2..ad55dd41f1ac02 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream-ignore",
"description": "A thing for ignoring files based on globs",
- "version": "1.0.2",
+ "version": "1.0.3",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-ignore.git"
@@ -18,39 +18,43 @@
"dependencies": {
"fstream": "^1.0.0",
"inherits": "2",
- "minimatch": "^2.0.1"
+ "minimatch": "^3.0.0"
},
"devDependencies": {
- "tap": "",
+ "mkdirp": "",
"rimraf": "",
- "mkdirp": ""
+ "tap": "^2.2.0"
},
"license": "ISC",
- "gitHead": "20363d39660671c0de746bd07a0d07de7090d085",
+ "gitHead": "86c835eef61049496003f6b90c1e6c1236c92d6a",
"bugs": {
"url": "https://github.com/isaacs/fstream-ignore/issues"
},
- "homepage": "https://github.com/isaacs/fstream-ignore",
- "_id": "fstream-ignore@1.0.2",
- "_shasum": "18c891db01b782a74a7bff936a0f24997741c7ab",
+ "homepage": "https://github.com/isaacs/fstream-ignore#readme",
+ "_id": "fstream-ignore@1.0.3",
+ "_shasum": "4c74d91fa88b22b42f4f86a18a2820dd79d8fcdd",
"_from": "fstream-ignore@>=1.0.0 <2.0.0",
- "_npmVersion": "2.1.11",
- "_nodeVersion": "0.10.16",
+ "_npmVersion": "2.14.8",
+ "_nodeVersion": "4.2.1",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "dist": {
+ "shasum": "4c74d91fa88b22b42f4f86a18a2820dd79d8fcdd",
+ "tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.3.tgz"
},
"maintainers": [
{
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
}
],
- "dist": {
- "shasum": "18c891db01b782a74a7bff936a0f24997741c7ab",
- "tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz",
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.3.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/test/common.js b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/test/common.js
index 0e6cd989c978fa..79470eba617344 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/test/common.js
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/test/common.js
@@ -1,5 +1,5 @@
if (require.main === module) {
- console.log("0..1")
+ console.log("1..1")
console.log("ok 1 trivial pass")
return
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index f3ab7b8faf1adc..7b5da94c0440d3 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -6,10 +6,10 @@
},
"name": "fstream-npm",
"description": "fstream class for creating npm packages",
- "version": "1.0.5",
+ "version": "1.0.7",
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/fstream-npm.git"
+ "url": "git+https://github.com/npm/fstream-npm.git"
},
"scripts": {
"test": "standard && tap test/*.js"
@@ -29,12 +29,12 @@
"license": "ISC",
"readme": "# fstream-npm\n\nThis is an fstream DirReader class that will read a directory and filter\nthings according to the semantics of what goes in an npm package.\n\nFor example:\n\n```javascript\n// This will print out all the files that would be included\n// by 'npm publish' or 'npm install' of this directory.\n\nvar FN = require(\"fstream-npm\")\nFN({ path: \"./\" })\n .on(\"child\", function (e) {\n console.error(e.path.substr(e.root.path.length + 1))\n })\n```\n\n",
"readmeFilename": "README.md",
- "gitHead": "f6ec06b9c45d7330213a5b446fff424b5a74e197",
+ "gitHead": "d57b6b24f91156067f73417dd8785c6312bfc75f",
"bugs": {
- "url": "https://github.com/isaacs/fstream-npm/issues"
+ "url": "https://github.com/npm/fstream-npm/issues"
},
- "homepage": "https://github.com/isaacs/fstream-npm#readme",
- "_id": "fstream-npm@1.0.5",
- "_shasum": "4c1d1cbc6da95c745f8d2c52077a1d2e7b337206",
- "_from": "fstream-npm@>=1.0.5 <1.1.0"
+ "homepage": "https://github.com/npm/fstream-npm#readme",
+ "_id": "fstream-npm@1.0.7",
+ "_shasum": "7ed0d1ac13d7686dd9e1bf6ceb8be273bf6d2f86",
+ "_from": "fstream-npm@>=1.0.7 <1.1.0"
}
diff --git a/deps/npm/node_modules/fstream-npm/test/ignores.js b/deps/npm/node_modules/fstream-npm/test/ignores.js
index fef5dcc222bc70..ac94251f72caa2 100644
--- a/deps/npm/node_modules/fstream-npm/test/ignores.js
+++ b/deps/npm/node_modules/fstream-npm/test/ignores.js
@@ -9,8 +9,6 @@ var Packer = require('..')
var pkg = join(__dirname, 'test-package')
-var gitDir = join(pkg, '.git')
-
var elfJS = function () {/*
module.exports = function () {
console.log("i'm a elf")
@@ -30,31 +28,49 @@ test('setup', function (t) {
var included = [
'package.json',
- 'elf.js'
+ 'elf.js',
+ join('deps', 'foo', 'config', 'config.gypi')
]
test('follows npm package ignoring rules', function (t) {
var subject = new Packer({ path: pkg, type: 'Directory', isDirectory: true })
+ var filenames = []
subject.on('entry', function (entry) {
t.equal(entry.type, 'File', 'only files in this package')
- var filename = entry.basename
- t.ok(
- included.indexOf(filename) > -1,
- filename + ' is included'
- )
+
+ // include relative path in filename
+ var filename = entry._path.slice(entry.root._path.length + 1)
+
+ filenames.push(filename)
})
// need to do this so fstream doesn't explode when files are removed from
// under it
- subject.on('end', function () { t.end() })
+ subject.on('end', function () {
+ // ensure we get *exactly* the results we expect by comparing in both
+ // directions
+ filenames.forEach(function (filename) {
+ t.ok(
+ included.indexOf(filename) > -1,
+ filename + ' is included'
+ )
+ })
+ included.forEach(function (filename) {
+ t.ok(
+ filenames.indexOf(filename) > -1,
+ filename + ' is not included'
+ )
+ })
+ t.end()
+ })
})
test('cleanup', function (t) {
- cleanup()
- t.end()
+ // rimraf.sync chokes here for some reason
+ rimraf(pkg, function () { t.end() })
})
function setup () {
- cleanup()
+ rimraf.sync(pkg)
mkdirp.sync(pkg)
fs.writeFileSync(
join(pkg, 'package.json'),
@@ -71,25 +87,46 @@ function setup () {
'packaged=false'
)
- var build = join(pkg, 'build')
- mkdirp.sync(build)
fs.writeFileSync(
- join(build, 'config.gypi'),
+ join(pkg, '.npmignore'),
+ '.npmignore\ndummy\npackage.json'
+ )
+
+ fs.writeFileSync(
+ join(pkg, 'dummy'),
+ 'foo'
+ )
+
+ var buildDir = join(pkg, 'build')
+ mkdirp.sync(buildDir)
+ fs.writeFileSync(
+ join(buildDir, 'config.gypi'),
"i_wont_be_included_by_fstream='with any luck'"
)
+ var depscfg = join(pkg, 'deps', 'foo', 'config')
+ mkdirp.sync(depscfg)
+ fs.writeFileSync(
+ join(depscfg, 'config.gypi'),
+ "i_will_be_included_by_fstream='with any luck'"
+ )
+
fs.writeFileSync(
- join(build, 'npm-debug.log'),
+ join(buildDir, 'npm-debug.log'),
'0 lol\n'
)
+ var gitDir = join(pkg, '.git')
mkdirp.sync(gitDir)
fs.writeFileSync(
join(gitDir, 'gitstub'),
"won't fool git, also won't be included by fstream"
)
-}
-function cleanup () {
- rimraf.sync(pkg)
+ var historyDir = join(pkg, 'node_modules/history')
+ mkdirp.sync(historyDir)
+ fs.writeFileSync(
+ join(historyDir, 'README.md'),
+ "please don't include me"
+ )
}
diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md
index 063cf950ac0c29..6960483bac63c6 100644
--- a/deps/npm/node_modules/glob/README.md
+++ b/deps/npm/node_modules/glob/README.md
@@ -1,9 +1,9 @@
-[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
-
# Glob
Match files using the patterns the shell uses, like stars and stuff.
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master)
+
This is a glob implementation in JavaScript. It uses the `minimatch`
library to do its matching.
@@ -74,14 +74,6 @@ slashes in it, then it will seek for any file anywhere in the tree
with a matching basename. For example, `*.js` would match
`test/simple/basic.js`.
-### Negation
-
-The intent for negation would be for a pattern starting with `!` to
-match everything that *doesn't* match the supplied pattern. However,
-the implementation is weird, and for the time being, this should be
-avoided. The behavior is deprecated in version 5, and will be removed
-entirely in version 6.
-
### Empty Sets
If no matching files are found, then an empty array is returned. This
@@ -114,19 +106,19 @@ options.
## glob(pattern, [options], cb)
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* `cb` {Function}
- * `err` {Error | null}
- * `matches` {Array} filenames found matching the pattern
+* `pattern` `{String}` Pattern to be matched
+* `options` `{Object}`
+* `cb` `{Function}`
+ * `err` `{Error | null}`
+ * `matches` `{Array}` filenames found matching the pattern
Perform an asynchronous glob search.
## glob.sync(pattern, [options])
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* return: {Array} filenames found matching the pattern
+* `pattern` `{String}` Pattern to be matched
+* `options` `{Object}`
+* return: `{Array}` filenames found matching the pattern
Perform a synchronous glob search.
@@ -144,11 +136,11 @@ immediately.
### new glob.Glob(pattern, [options], [cb])
-* `pattern` {String} pattern to search for
-* `options` {Object}
-* `cb` {Function} Called when an error occurs, or matches are found
- * `err` {Error | null}
- * `matches` {Array} filenames found matching the pattern
+* `pattern` `{String}` pattern to search for
+* `options` `{Object}`
+* `cb` `{Function}` Called when an error occurs, or matches are found
+ * `err` `{Error | null}`
+ * `matches` `{Array}` filenames found matching the pattern
Note that if the `sync` flag is set in the options, then matches will
be immediately available on the `g.found` member.
@@ -164,8 +156,8 @@ be immediately available on the `g.found` member.
values:
* `false` - Path does not exist
* `true` - Path exists
- * `'DIR'` - Path exists, and is not a directory
- * `'FILE'` - Path exists, and is a directory
+ * `'FILE'` - Path exists, and is not a directory
+ * `'DIR'` - Path exists, and is a directory
* `[file, entries, ...]` - Path exists, is a directory, and the
array value is the results of `fs.readdir`
* `statCache` Cache of `fs.stat` results, to prevent statting the same
@@ -182,7 +174,8 @@ be immediately available on the `g.found` member.
matches found. If the `nonull` option is set, and no match was found,
then the `matches` list contains the original pattern. The matches
are sorted, unless the `nosort` flag is set.
-* `match` Every time a match is found, this is emitted with the matched.
+* `match` Every time a match is found, this is emitted with the specific
+ thing that matched. It is not deduplicated or resolved to a realpath.
* `error` Emitted when an unexpected error is encountered, or whenever
any fs error occurs if `options.strict` is set.
* `abort` When `abort()` is called, this event is raised.
@@ -264,7 +257,9 @@ the filesystem.
equivalent to `**/*.js`, matching all js files in all directories.
* `nodir` Do not match directories, only files. (Note: to match
*only* directories, simply put a `/` at the end of the pattern.)
-* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `ignore` Add a pattern or an array of glob patterns to exclude matches.
+ Note: `ignore` patterns are *always* in `dot:true` mode, regardless
+ of any other settings.
* `follow` Follow symlinked directories when expanding `**` patterns.
Note that this can result in a lot of duplicate references in the
presence of cyclic links.
@@ -272,10 +267,6 @@ the filesystem.
In the case of a symlink that cannot be resolved, the full absolute
path to the matched entry is returned (though it will usually be a
broken symlink)
-* `nonegate` Suppress deprecated `negate` behavior. (See below.)
- Default=true
-* `nocomment` Suppress deprecated `comment` behavior. (See below.)
- Default=true
## Comparisons to other fnmatch/glob implementations
@@ -308,22 +299,13 @@ checked for validity. Since those two are valid, matching proceeds.
### Comments and Negation
-**Note**: In version 5 of this module, negation and comments are
-**disabled** by default. You can explicitly set `nonegate:false` or
-`nocomment:false` to re-enable them. They are going away entirely in
-version 6.
-
-The intent for negation would be for a pattern starting with `!` to
-match everything that *doesn't* match the supplied pattern. However,
-the implementation is weird. It is better to use the `ignore` option
-to set a pattern or set of patterns to exclude from matches. If you
-want the "everything except *x*" type of behavior, you can use `**` as
-the main pattern, and set an `ignore` for the things to exclude.
-
-The comments feature is added in minimatch, primarily to more easily
-support use cases like ignore files, where a `#` at the start of a
-line makes the pattern "empty". However, in the context of a
-straightforward filesystem globber, "comments" don't make much sense.
+Previously, this module let you mark a pattern as a "comment" if it
+started with a `#` character, or a "negated" pattern if it started
+with a `!` character.
+
+These options were deprecated in version 5, and removed in version 6.
+
+To specify things that should not match, use the `ignore` option.
## Windows
diff --git a/deps/npm/node_modules/glob/common.js b/deps/npm/node_modules/glob/common.js
index e36a631cab20c4..c9127eb334f18b 100644
--- a/deps/npm/node_modules/glob/common.js
+++ b/deps/npm/node_modules/glob/common.js
@@ -36,15 +36,16 @@ function setupIgnores (self, options) {
}
}
+// ignore patterns are always in dot:true mode.
function ignoreMap (pattern) {
var gmatcher = null
if (pattern.slice(-3) === '/**') {
var gpattern = pattern.replace(/(\/\*\*)+$/, '')
- gmatcher = new Minimatch(gpattern)
+ gmatcher = new Minimatch(gpattern, { dot: true })
}
return {
- matcher: new Minimatch(pattern),
+ matcher: new Minimatch(pattern, { dot: true }),
gmatcher: gmatcher
}
}
@@ -103,35 +104,15 @@ function setopts (self, pattern, options) {
self.nomount = !!options.nomount
- // disable comments and negation unless the user explicitly
- // passes in false as the option.
- options.nonegate = options.nonegate === false ? false : true
- options.nocomment = options.nocomment === false ? false : true
- deprecationWarning(options)
+ // disable comments and negation in Minimatch.
+ // Note that they are not supported in Glob itself anyway.
+ options.nonegate = true
+ options.nocomment = true
self.minimatch = new Minimatch(pattern, options)
self.options = self.minimatch.options
}
-// TODO(isaacs): remove entirely in v6
-// exported to reset in tests
-exports.deprecationWarned
-function deprecationWarning(options) {
- if (!options.nonegate || !options.nocomment) {
- if (process.noDeprecation !== true && !exports.deprecationWarned) {
- var msg = 'glob WARNING: comments and negation will be disabled in v6'
- if (process.throwDeprecation)
- throw new Error(msg)
- else if (process.traceDeprecation)
- console.trace(msg)
- else
- console.error(msg)
-
- exports.deprecationWarned = true
- }
- }
-}
-
function finish (self) {
var nou = self.nounique
var all = nou ? [] : Object.create(null)
diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js
index 022d2ac8c6e58b..a62da27ebd507a 100644
--- a/deps/npm/node_modules/glob/glob.js
+++ b/deps/npm/node_modules/glob/glob.js
@@ -80,8 +80,21 @@ var GlobSync = glob.GlobSync = globSync.GlobSync
// old api surface
glob.glob = glob
+function extend (origin, add) {
+ if (add === null || typeof add !== 'object') {
+ return origin
+ }
+
+ var keys = Object.keys(add)
+ var i = keys.length
+ while (i--) {
+ origin[keys[i]] = add[keys[i]]
+ }
+ return origin
+}
+
glob.hasMagic = function (pattern, options_) {
- var options = util._extend({}, options_)
+ var options = extend({}, options_)
options.noprocess = true
var g = new Glob(pattern, options)
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
index cc4dba29d959a2..6e5919de39a312 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
@@ -1,4 +1,3 @@
language: node_js
node_js:
- - "0.8"
- "0.10"
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
new file mode 100644
index 00000000000000..2cdc8e4148cc0a
--- /dev/null
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
@@ -0,0 +1,21 @@
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
index 2aff0ebff4403e..421f3aa5f951a2 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -47,6 +47,15 @@ If there's no match, `undefined` will be returned.
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+### var r = balanced.range(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+array with indexes: `[ , ]`.
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`.
+
## Installation
With [npm](https://npmjs.org) do:
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
index d165ae8174ca82..75f3d71cba90bc 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -1,38 +1,50 @@
module.exports = balanced;
function balanced(a, b, str) {
- var bal = 0;
- var m = {};
- var ended = false;
-
- for (var i = 0; i < str.length; i++) {
- if (a == str.substr(i, a.length)) {
- if (!('start' in m)) m.start = i;
- bal++;
- }
- else if (b == str.substr(i, b.length) && 'start' in m) {
- ended = true;
- bal--;
- if (!bal) {
- m.end = i;
- m.pre = str.substr(0, m.start);
- m.body = (m.end - m.start > 1)
- ? str.substring(m.start + a.length, m.end)
- : '';
- m.post = str.slice(m.end + b.length);
- return m;
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ begs = [];
+ left = str.length;
+
+ while (i < str.length && i >= 0 && ! result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
}
+
+ i = ai < bi && ai >= 0 ? ai : bi;
}
- }
- // if we opened more than we closed, find the one we closed
- if (bal && ended) {
- var start = m.start + a.length;
- m = balanced(a, b, str.substr(start));
- if (m) {
- m.start += start;
- m.end += start;
- m.pre = str.slice(0, start) + m.pre;
+ if (begs.length) {
+ result = [ left, right ];
}
- return m;
}
+
+ return result;
}
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
index 35332a3c4eb366..5de119ba5b5760 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -1,56 +1,98 @@
{
- "name": "balanced-match",
- "description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.2.0",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/balanced-match.git"
+ "_args": [
+ [
+ "balanced-match@^0.3.0",
+ "/Users/rebecca/code/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion"
+ ]
+ ],
+ "_from": "balanced-match@>=0.3.0 <0.4.0",
+ "_id": "balanced-match@0.3.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/glob/minimatch/brace-expansion/balanced-match",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "homepage": "https://github.com/juliangruber/balanced-match",
- "main": "index.js",
- "scripts": {
- "test": "make test"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "balanced-match",
+ "raw": "balanced-match@^0.3.0",
+ "rawSpec": "^0.3.0",
+ "scope": null,
+ "spec": ">=0.3.0 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/glob/minimatch/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz",
+ "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "_shrinkwrap": null,
+ "_spec": "balanced-match@^0.3.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion",
+ "author": {
+ "email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
},
"dependencies": {},
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": {
- "tape": "~1.1.1"
+ "tape": "~4.2.2"
},
+ "directories": {},
+ "dist": {
+ "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
+ },
+ "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5",
+ "homepage": "https://github.com/juliangruber/balanced-match",
"keywords": [
+ "balanced",
"match",
+ "parse",
"regexp",
- "test",
- "balanced",
- "parse"
+ "test"
],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
"license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "name": "balanced-match",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "scripts": {
+ "test": "make test"
+ },
"testling": {
- "files": "test/*.js",
"browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
+ "android-browser/4.2..latest",
"chrome/25..latest",
"chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
"ipad/6.0..latest",
"iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "readme": "# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `` and ``.\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)\n\n## Example\n\nGet the first matching pair of braces:\n\n```js\nvar balanced = require('balanced-match');\n\nconsole.log(balanced('{', '}', 'pre{in{nested}}post'));\nconsole.log(balanced('{', '}', 'pre{first}between{second}post'));\n```\n\nThe matches are:\n\n```bash\n$ node example.js\n{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }\n{ start: 3,\n end: 9,\n pre: 'pre',\n body: 'first',\n post: 'between{second}post' }\n```\n\n## API\n\n### var m = balanced(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\nobject with those keys:\n\n* **start** the index of the first match of `a`\n* **end** the index of the matching `b`\n* **pre** the preamble, `a` and `b` not included\n* **body** the match, `a` and `b` not included\n* **post** the postscript, `a` and `b` not included\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install balanced-match\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/juliangruber/balanced-match/issues"
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
},
- "_id": "balanced-match@0.2.0",
- "_shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
- "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz",
- "_from": "balanced-match@>=0.2.0 <0.3.0"
+ "version": "0.3.0"
}
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
index 36bfd39954850d..f5e98e3f2a3240 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
@@ -52,5 +52,33 @@ test('balanced', function(t) {
body: 'innest',
post: 'post'
});
+ t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: '{in}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 8,
+ pre: 'pre',
+ body: 'in',
+ post: '}post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), {
+ start: 4,
+ end: 10,
+ pre: 'pre{',
+ body: 'first',
+ post: 'in{second}post'
+ });
+ t.deepEqual(balanced('', '?>', 'pre>post'), {
+ start: 3,
+ end: 4,
+ pre: 'pre',
+ body: '',
+ post: 'post'
+ });
t.end();
});
diff --git a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
index 4cb3e05d7ceb6c..78214dbeeaff3f 100644
--- a/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
+++ b/deps/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -1,60 +1,64 @@
{
- "name": "brace-expansion",
- "description": "Brace expansion as known from sh/bash",
- "version": "1.1.1",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/brace-expansion.git"
- },
- "homepage": "https://github.com/juliangruber/brace-expansion",
- "main": "index.js",
- "scripts": {
- "test": "tape test/*.js",
- "gentest": "bash test/generate.sh"
- },
- "dependencies": {
- "balanced-match": "^0.2.0",
- "concat-map": "0.0.1"
+ "_args": [
+ [
+ "brace-expansion@^1.0.0",
+ "/Users/rebecca/code/npm/node_modules/glob/node_modules/minimatch"
+ ]
+ ],
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_id": "brace-expansion@1.1.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/glob/minimatch/brace-expansion",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "devDependencies": {
- "tape": "^3.0.3"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "brace-expansion",
+ "raw": "brace-expansion@^1.0.0",
+ "rawSpec": "^1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
},
- "keywords": [],
+ "_requiredBy": [
+ "/glob/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
+ "_shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "_shrinkwrap": null,
+ "_spec": "brace-expansion@^1.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/glob/node_modules/minimatch",
"author": {
- "name": "Julian Gruber",
"email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
"url": "http://juliangruber.com"
},
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "gitHead": "f50da498166d76ea570cf3b30179f01f0f119612",
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
- "_id": "brace-expansion@1.1.1",
- "_shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "_from": "brace-expansion@>=1.0.0 <2.0.0",
- "_npmVersion": "2.6.1",
- "_nodeVersion": "0.10.36",
- "_npmUser": {
- "name": "juliangruber",
- "email": "julian@juliangruber.com"
+ "dependencies": {
+ "balanced-match": "^0.3.0",
+ "concat-map": "0.0.1"
},
+ "description": "Brace expansion as known from sh/bash",
+ "devDependencies": {
+ "tape": "4.2.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz"
+ },
+ "gitHead": "b03773a30fa516b1374945b68e9acb6253d595fa",
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "keywords": [],
+ "license": "MIT",
+ "main": "index.js",
"maintainers": [
{
"name": "juliangruber",
@@ -65,11 +69,32 @@
"email": "isaacs@npmjs.com"
}
],
- "dist": {
- "shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz"
+ "name": "brace-expansion",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz",
- "readme": "ERROR: No README data found!"
+ "scripts": {
+ "gentest": "bash test/generate.sh",
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "browsers": [
+ "android-browser/4.2..latest",
+ "chrome/25..latest",
+ "chrome/canary",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
+ },
+ "version": "1.1.2"
}
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 21725064f52f42..c7094df7f65315 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -1,24 +1,50 @@
{
- "author": {
- "name": "Isaac Z. Schlueter",
+ "_args": [
+ [
+ "glob@latest",
+ "/Users/zkat/Documents/code/npm"
+ ]
+ ],
+ "_from": "glob@latest",
+ "_id": "glob@6.0.4",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/glob",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
"email": "i@izs.me",
- "url": "http://blog.izs.me/"
+ "name": "isaacs"
},
- "name": "glob",
- "description": "a little globber",
- "version": "5.0.15",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/node-glob.git"
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "glob",
+ "raw": "glob@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
},
- "main": "glob.js",
- "files": [
- "glob.js",
- "sync.js",
- "common.js"
+ "_requiredBy": [
+ "/",
+ "/init-package-json",
+ "/read-package-json",
+ "/tap",
+ "/tap/nyc",
+ "/tap/tap-mocha-reporter"
],
- "engines": {
- "node": "*"
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "_shasum": "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22",
+ "_shrinkwrap": null,
+ "_spec": "glob@latest",
+ "_where": "/Users/zkat/Documents/code/npm",
+ "author": {
+ "email": "i@izs.me",
+ "name": "Isaac Z. Schlueter",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
},
"dependencies": {
"inflight": "^1.0.4",
@@ -27,47 +53,51 @@
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
+ "description": "a little globber",
"devDependencies": {
"mkdirp": "0",
"rimraf": "^2.2.8",
- "tap": "^1.1.4",
+ "tap": "^5.0.0",
"tick": "0.0.6"
},
- "scripts": {
- "prepublish": "npm run benchclean",
- "profclean": "rm -f v8.log profile.txt",
- "test": "tap test/*.js --cov",
- "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
- "bench": "bash benchmark.sh",
- "prof": "bash prof.sh && cat profile.txt",
- "benchclean": "node benchclean.js"
+ "directories": {},
+ "dist": {
+ "shasum": "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-6.0.4.tgz"
},
- "license": "ISC",
- "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb",
- "bugs": {
- "url": "https://github.com/isaacs/node-glob/issues"
+ "engines": {
+ "node": "*"
},
+ "files": [
+ "common.js",
+ "glob.js",
+ "sync.js"
+ ],
+ "gitHead": "3bd419c538737e56fda7e21c21ff52ca0c198df6",
"homepage": "https://github.com/isaacs/node-glob#readme",
- "_id": "glob@5.0.15",
- "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
- "_from": "glob@>=5.0.15 <5.1.0",
- "_npmVersion": "3.3.2",
- "_nodeVersion": "4.0.0",
- "_npmUser": {
- "name": "isaacs",
- "email": "isaacs@npmjs.com"
- },
- "dist": {
- "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
- "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz"
- },
+ "license": "ISC",
+ "main": "glob.js",
"maintainers": [
{
"name": "isaacs",
"email": "i@izs.me"
}
],
- "directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "readme": "ERROR: No README data found!"
+ "name": "glob",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "scripts": {
+ "bench": "bash benchmark.sh",
+ "benchclean": "node benchclean.js",
+ "prepublish": "npm run benchclean",
+ "prof": "bash prof.sh && cat profile.txt",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "tap test/*.js --cov",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js"
+ },
+ "version": "6.0.4"
}
diff --git a/deps/npm/node_modules/has-unicode/README.md b/deps/npm/node_modules/has-unicode/README.md
index 4393106fda3a0a..ebe3c2a7f4f9fa 100644
--- a/deps/npm/node_modules/has-unicode/README.md
+++ b/deps/npm/node_modules/has-unicode/README.md
@@ -26,9 +26,12 @@ If you have a UTF-16 locale then you won't be detected as unicode capable.
### Windows
-Since at least Windows 7, `cmd` and `powershell` have been unicode capable.
-As such, we report any Windows installation as unicode capable.
-
+Since at least Windows 7, `cmd` and `powershell` have been unicode capable,
+but unfortunately even then it's not guaranteed. In many localizations it
+still uses legacy code pages and there's no facility short of running
+programs or linking C++ that will let us detect this. As such, we
+report any Windows installation as NOT unicode capable, and recommend
+that you encourage your users to override this via config.
### Unix Like Operating Systems
diff --git a/deps/npm/node_modules/has-unicode/index.js b/deps/npm/node_modules/has-unicode/index.js
index e0907b510a8b9a..9bf537b1cd48e5 100644
--- a/deps/npm/node_modules/has-unicode/index.js
+++ b/deps/npm/node_modules/has-unicode/index.js
@@ -2,9 +2,13 @@
var os = require("os")
var hasUnicode = module.exports = function () {
- // Supported Win32 platforms (>XP) support unicode in the console, though
- // font support isn't fantastic.
- if (os.type() == "Windows_NT") { return true }
+ // Recent Win32 platforms (>XP) CAN support unicode in the console but
+ // don't have to, and in non-english locales often use traditional local
+ // code pages. There's no way, short of windows system calls or execing
+ // the chcp command line program to figure this out. As such, we default
+ // this to false and encourage your users to override it via config if
+ // appropriate.
+ if (os.type() == "Windows_NT") { return false }
var isUTF8 = /[.]UTF-8/
if (isUTF8.test(process.env.LC_ALL)
diff --git a/deps/npm/node_modules/has-unicode/package.json b/deps/npm/node_modules/has-unicode/package.json
index 3f0aa0581830c5..924e3b7a097caf 100644
--- a/deps/npm/node_modules/has-unicode/package.json
+++ b/deps/npm/node_modules/has-unicode/package.json
@@ -1,53 +1,79 @@
{
- "name": "has-unicode",
- "version": "1.0.1",
- "description": "Try to guess if your terminal supports unicode",
- "main": "index.js",
- "scripts": {
- "test": "tap test/*.js"
+ "_args": [
+ [
+ "has-unicode@2.0.0",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "has-unicode@2.0.0",
+ "_id": "has-unicode@2.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/has-unicode",
+ "_nodeVersion": "4.2.2",
+ "_npmUser": {
+ "email": "me@re-becca.org",
+ "name": "iarna"
},
- "repository": {
- "type": "git",
- "url": "git+https://github.com/iarna/has-unicode.git"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "has-unicode",
+ "raw": "has-unicode@2.0.0",
+ "rawSpec": "2.0.0",
+ "scope": null,
+ "spec": "2.0.0",
+ "type": "version"
},
- "keywords": [
- "unicode",
- "terminal"
+ "_requiredBy": [
+ "/"
],
+ "_resolved": "file:../has-unicode",
+ "_shasum": "a3cd96c307ba41d559c5a2ee408c12a11c4c2ec3",
+ "_shrinkwrap": null,
+ "_spec": "has-unicode@2.0.0",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "Rebecca Turner",
- "email": "me@re-becca.org"
+ "email": "me@re-becca.org",
+ "name": "Rebecca Turner"
},
- "license": "ISC",
"bugs": {
"url": "https://github.com/iarna/has-unicode/issues"
},
- "homepage": "https://github.com/iarna/has-unicode",
+ "dependencies": {},
+ "description": "Try to guess if your terminal supports unicode",
"devDependencies": {
- "require-inject": "^1.1.1",
- "tap": "^0.4.13"
- },
- "gitHead": "d4ad300c67b25c197582e42e936ea928f7935d01",
- "_id": "has-unicode@1.0.1",
- "_shasum": "c46fceea053eb8ec789bffbba25fca52dfdcf38e",
- "_from": "has-unicode@>=1.0.1 <1.1.0",
- "_npmVersion": "3.3.6",
- "_nodeVersion": "4.1.1",
- "_npmUser": {
- "name": "iarna",
- "email": "me@re-becca.org"
+ "require-inject": "^1.3.0",
+ "tap": "^2.3.1"
},
+ "directories": {},
"dist": {
- "shasum": "c46fceea053eb8ec789bffbba25fca52dfdcf38e",
- "tarball": "http://registry.npmjs.org/has-unicode/-/has-unicode-1.0.1.tgz"
+ "shasum": "a3cd96c307ba41d559c5a2ee408c12a11c4c2ec3",
+ "tarball": "http://registry.npmjs.org/has-unicode/-/has-unicode-2.0.0.tgz"
},
+ "gitHead": "fdd5de141a5564bdb5bc991d951209da40f6a598",
+ "homepage": "https://github.com/iarna/has-unicode",
+ "keywords": [
+ "terminal",
+ "unicode"
+ ],
+ "license": "ISC",
+ "main": "index.js",
"maintainers": [
{
"name": "iarna",
"email": "me@re-becca.org"
}
],
- "directories": {},
- "_resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.1.tgz",
- "readme": "ERROR: No README data found!"
+ "name": "has-unicode",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/iarna/has-unicode.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "2.0.0"
}
diff --git a/deps/npm/node_modules/has-unicode/test/index.js b/deps/npm/node_modules/has-unicode/test/index.js
index 2394c14ef7fce9..cbdfda335088ee 100644
--- a/deps/npm/node_modules/has-unicode/test/index.js
+++ b/deps/npm/node_modules/has-unicode/test/index.js
@@ -7,7 +7,7 @@ test("Windows", function (t) {
var hasUnicode = requireInject("../index.js", {
os: { type: function () { return "Windows_NT" } }
})
- t.is(hasUnicode(), true, "Windows is assumed to be unicode aware")
+ t.is(hasUnicode(), false, "Windows is assumed NOT to be unicode aware")
})
test("Unix Env", function (t) {
t.plan(3)
diff --git a/deps/npm/node_modules/imurmurhash/README.md b/deps/npm/node_modules/imurmurhash/README.md
new file mode 100644
index 00000000000000..f35b20a0ef5bfe
--- /dev/null
+++ b/deps/npm/node_modules/imurmurhash/README.md
@@ -0,0 +1,122 @@
+iMurmurHash.js
+==============
+
+An incremental implementation of the MurmurHash3 (32-bit) hashing algorithm for JavaScript based on [Gary Court's implementation](https://github.com/garycourt/murmurhash-js) with [kazuyukitanimura's modifications](https://github.com/kazuyukitanimura/murmurhash-js).
+
+This version works significantly faster than the non-incremental version if you need to hash many small strings into a single hash, since string concatenation (to build the single string to pass the non-incremental version) is fairly costly. In one case tested, using the incremental version was about 50% faster than concatenating 5-10 strings and then hashing.
+
+Installation
+------------
+
+To use iMurmurHash in the browser, [download the latest version](https://raw.github.com/jensyt/imurmurhash-js/master/imurmurhash.min.js) and include it as a script on your site.
+
+```html
+
+
+```
+
+---
+
+To use iMurmurHash in Node.js, install the module using NPM:
+
+```bash
+npm install imurmurhash
+```
+
+Then simply include it in your scripts:
+
+```javascript
+MurmurHash3 = require('imurmurhash');
+```
+
+Quick Example
+-------------
+
+```javascript
+// Create the initial hash
+var hashState = MurmurHash3('string');
+
+// Incrementally add text
+hashState.hash('more strings');
+hashState.hash('even more strings');
+
+// All calls can be chained if desired
+hashState.hash('and').hash('some').hash('more');
+
+// Get a result
+hashState.result();
+// returns 0xe4ccfe6b
+```
+
+Functions
+---------
+
+### MurmurHash3 ([string], [seed])
+Get a hash state object, optionally initialized with the given _string_ and _seed_. _Seed_ must be a positive integer if provided. Calling this function without the `new` keyword will return a cached state object that has been reset. This is safe to use as long as the object is only used from a single thread and no other hashes are created while operating on this one. If this constraint cannot be met, you can use `new` to create a new state object. For example:
+
+```javascript
+// Use the cached object, calling the function again will return the same
+// object (but reset, so the current state would be lost)
+hashState = MurmurHash3();
+...
+
+// Create a new object that can be safely used however you wish. Calling the
+// function again will simply return a new state object, and no state loss
+// will occur, at the cost of creating more objects.
+hashState = new MurmurHash3();
+```
+
+Both methods can be mixed however you like if you have different use cases.
+
+---
+
+### MurmurHash3.prototype.hash (string)
+Incrementally add _string_ to the hash. This can be called as many times as you want for the hash state object, including after a call to `result()`. Returns `this` so calls can be chained.
+
+---
+
+### MurmurHash3.prototype.result ()
+Get the result of the hash as a 32-bit positive integer. This performs the tail and finalizer portions of the algorithm, but does not store the result in the state object. This means that it is perfectly safe to get results and then continue adding strings via `hash`.
+
+```javascript
+// Do the whole string at once
+MurmurHash3('this is a test string').result();
+// 0x70529328
+
+// Do part of the string, get a result, then the other part
+var m = MurmurHash3('this is a');
+m.result();
+// 0xbfc4f834
+m.hash(' test string').result();
+// 0x70529328 (same as above)
+```
+
+---
+
+### MurmurHash3.prototype.reset ([seed])
+Reset the state object for reuse, optionally using the given _seed_ (defaults to 0 like the constructor). Returns `this` so calls can be chained.
+
+---
+
+License (MIT)
+-------------
+Copyright (c) 2013 Gary Court, Jens Taylor
+
+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/deps/npm/node_modules/imurmurhash/imurmurhash.js b/deps/npm/node_modules/imurmurhash/imurmurhash.js
new file mode 100644
index 00000000000000..05347a2536fce2
--- /dev/null
+++ b/deps/npm/node_modules/imurmurhash/imurmurhash.js
@@ -0,0 +1,138 @@
+/**
+ * @preserve
+ * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013)
+ *
+ * @author Jens Taylor
+ * @see http://github.com/homebrewing/brauhaus-diff
+ * @author Gary Court
+ * @see http://github.com/garycourt/murmurhash-js
+ * @author Austin Appleby
+ * @see http://sites.google.com/site/murmurhash/
+ */
+(function(){
+ var cache;
+
+ // Call this function without `new` to use the cached object (good for
+ // single-threaded environments), or with `new` to create a new object.
+ //
+ // @param {string} key A UTF-16 or ASCII string
+ // @param {number} seed An optional positive integer
+ // @return {object} A MurmurHash3 object for incremental hashing
+ function MurmurHash3(key, seed) {
+ var m = this instanceof MurmurHash3 ? this : cache;
+ m.reset(seed)
+ if (typeof key === 'string' && key.length > 0) {
+ m.hash(key);
+ }
+
+ if (m !== this) {
+ return m;
+ }
+ };
+
+ // Incrementally add a string to this hash
+ //
+ // @param {string} key A UTF-16 or ASCII string
+ // @return {object} this
+ MurmurHash3.prototype.hash = function(key) {
+ var h1, k1, i, top, len;
+
+ len = key.length;
+ this.len += len;
+
+ k1 = this.k1;
+ i = 0;
+ switch (this.rem) {
+ case 0: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) : 0;
+ case 1: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 8 : 0;
+ case 2: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 16 : 0;
+ case 3:
+ k1 ^= len > i ? (key.charCodeAt(i) & 0xff) << 24 : 0;
+ k1 ^= len > i ? (key.charCodeAt(i++) & 0xff00) >> 8 : 0;
+ }
+
+ this.rem = (len + this.rem) & 3; // & 3 is same as % 4
+ len -= this.rem;
+ if (len > 0) {
+ h1 = this.h1;
+ while (1) {
+ k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff;
+ k1 = (k1 << 15) | (k1 >>> 17);
+ k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff;
+
+ h1 ^= k1;
+ h1 = (h1 << 13) | (h1 >>> 19);
+ h1 = (h1 * 5 + 0xe6546b64) & 0xffffffff;
+
+ if (i >= len) {
+ break;
+ }
+
+ k1 = ((key.charCodeAt(i++) & 0xffff)) ^
+ ((key.charCodeAt(i++) & 0xffff) << 8) ^
+ ((key.charCodeAt(i++) & 0xffff) << 16);
+ top = key.charCodeAt(i++);
+ k1 ^= ((top & 0xff) << 24) ^
+ ((top & 0xff00) >> 8);
+ }
+
+ k1 = 0;
+ switch (this.rem) {
+ case 3: k1 ^= (key.charCodeAt(i + 2) & 0xffff) << 16;
+ case 2: k1 ^= (key.charCodeAt(i + 1) & 0xffff) << 8;
+ case 1: k1 ^= (key.charCodeAt(i) & 0xffff);
+ }
+
+ this.h1 = h1;
+ }
+
+ this.k1 = k1;
+ return this;
+ };
+
+ // Get the result of this hash
+ //
+ // @return {number} The 32-bit hash
+ MurmurHash3.prototype.result = function() {
+ var k1, h1;
+
+ k1 = this.k1;
+ h1 = this.h1;
+
+ if (k1 > 0) {
+ k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff;
+ k1 = (k1 << 15) | (k1 >>> 17);
+ k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff;
+ h1 ^= k1;
+ }
+
+ h1 ^= this.len;
+
+ h1 ^= h1 >>> 16;
+ h1 = (h1 * 0xca6b + (h1 & 0xffff) * 0x85eb0000) & 0xffffffff;
+ h1 ^= h1 >>> 13;
+ h1 = (h1 * 0xae35 + (h1 & 0xffff) * 0xc2b20000) & 0xffffffff;
+ h1 ^= h1 >>> 16;
+
+ return h1 >>> 0;
+ };
+
+ // Reset the hash object for reuse
+ //
+ // @param {number} seed An optional positive integer
+ MurmurHash3.prototype.reset = function(seed) {
+ this.h1 = typeof seed === 'number' ? seed : 0;
+ this.rem = this.k1 = this.len = 0;
+ return this;
+ };
+
+ // A cached object to use. This can be safely used if you're in a single-
+ // threaded environment, otherwise you need to create new hashes to use.
+ cache = new MurmurHash3();
+
+ if (typeof(module) != 'undefined') {
+ module.exports = MurmurHash3;
+ } else {
+ this.MurmurHash3 = MurmurHash3;
+ }
+}());
diff --git a/deps/npm/node_modules/imurmurhash/imurmurhash.min.js b/deps/npm/node_modules/imurmurhash/imurmurhash.min.js
new file mode 100644
index 00000000000000..dc0ee88d6b69c9
--- /dev/null
+++ b/deps/npm/node_modules/imurmurhash/imurmurhash.min.js
@@ -0,0 +1,12 @@
+/**
+ * @preserve
+ * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013)
+ *
+ * @author Jens Taylor
+ * @see http://github.com/homebrewing/brauhaus-diff
+ * @author Gary Court
+ * @see http://github.com/garycourt/murmurhash-js
+ * @author Austin Appleby
+ * @see http://sites.google.com/site/murmurhash/
+ */
+!function(){function t(h,r){var s=this instanceof t?this:e;return s.reset(r),"string"==typeof h&&h.length>0&&s.hash(h),s!==this?s:void 0}var e;t.prototype.hash=function(t){var e,h,r,s,i;switch(i=t.length,this.len+=i,h=this.k1,r=0,this.rem){case 0:h^=i>r?65535&t.charCodeAt(r++):0;case 1:h^=i>r?(65535&t.charCodeAt(r++))<<8:0;case 2:h^=i>r?(65535&t.charCodeAt(r++))<<16:0;case 3:h^=i>r?(255&t.charCodeAt(r))<<24:0,h^=i>r?(65280&t.charCodeAt(r++))>>8:0}if(this.rem=3&i+this.rem,i-=this.rem,i>0){for(e=this.h1;;){if(h=4294967295&11601*h+3432906752*(65535&h),h=h<<15|h>>>17,h=4294967295&13715*h+461832192*(65535&h),e^=h,e=e<<13|e>>>19,e=4294967295&5*e+3864292196,r>=i)break;h=65535&t.charCodeAt(r++)^(65535&t.charCodeAt(r++))<<8^(65535&t.charCodeAt(r++))<<16,s=t.charCodeAt(r++),h^=(255&s)<<24^(65280&s)>>8}switch(h=0,this.rem){case 3:h^=(65535&t.charCodeAt(r+2))<<16;case 2:h^=(65535&t.charCodeAt(r+1))<<8;case 1:h^=65535&t.charCodeAt(r)}this.h1=e}return this.k1=h,this},t.prototype.result=function(){var t,e;return t=this.k1,e=this.h1,t>0&&(t=4294967295&11601*t+3432906752*(65535&t),t=t<<15|t>>>17,t=4294967295&13715*t+461832192*(65535&t),e^=t),e^=this.len,e^=e>>>16,e=4294967295&51819*e+2246770688*(65535&e),e^=e>>>13,e=4294967295&44597*e+3266445312*(65535&e),e^=e>>>16,e>>>0},t.prototype.reset=function(t){return this.h1="number"==typeof t?t:0,this.rem=this.k1=this.len=0,this},e=new t,"undefined"!=typeof module?module.exports=t:this.MurmurHash3=t}();
\ No newline at end of file
diff --git a/deps/npm/node_modules/imurmurhash/package.json b/deps/npm/node_modules/imurmurhash/package.json
new file mode 100644
index 00000000000000..a8d0b1746207a5
--- /dev/null
+++ b/deps/npm/node_modules/imurmurhash/package.json
@@ -0,0 +1,85 @@
+{
+ "_args": [
+ [
+ "imurmurhash@^0.1.4",
+ "/Users/ogd/Documents/projects/npm/npm/node_modules/fs-write-stream-atomic"
+ ]
+ ],
+ "_from": "imurmurhash@>=0.1.4 <0.2.0",
+ "_id": "imurmurhash@0.1.4",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/imurmurhash",
+ "_npmUser": {
+ "email": "jensyt@gmail.com",
+ "name": "jensyt"
+ },
+ "_npmVersion": "1.3.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "imurmurhash",
+ "raw": "imurmurhash@^0.1.4",
+ "rawSpec": "^0.1.4",
+ "scope": null,
+ "spec": ">=0.1.4 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fs-write-stream-atomic"
+ ],
+ "_resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "_shasum": "9218b9b2b928a238b13dc4fb6b6d576f231453ea",
+ "_shrinkwrap": null,
+ "_spec": "imurmurhash@^0.1.4",
+ "_where": "/Users/ogd/Documents/projects/npm/npm/node_modules/fs-write-stream-atomic",
+ "author": {
+ "email": "jensyt@gmail.com",
+ "name": "Jens Taylor",
+ "url": "https://github.com/homebrewing"
+ },
+ "bugs": {
+ "url": "https://github.com/jensyt/imurmurhash-js/issues"
+ },
+ "dependencies": {},
+ "description": "An incremental implementation of MurmurHash3",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "9218b9b2b928a238b13dc4fb6b6d576f231453ea",
+ "tarball": "http://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+ },
+ "engines": {
+ "node": ">=0.8.19"
+ },
+ "files": [
+ "README.md",
+ "imurmurhash.js",
+ "imurmurhash.min.js",
+ "package.json"
+ ],
+ "homepage": "https://github.com/jensyt/imurmurhash-js",
+ "keywords": [
+ "hash",
+ "incremental",
+ "murmur",
+ "murmurhash",
+ "murmurhash3"
+ ],
+ "license": "MIT",
+ "main": "imurmurhash.js",
+ "maintainers": [
+ {
+ "name": "jensyt",
+ "email": "jensyt@gmail.com"
+ }
+ ],
+ "name": "imurmurhash",
+ "optionalDependencies": {},
+ "readme": "iMurmurHash.js\n==============\n\nAn incremental implementation of the MurmurHash3 (32-bit) hashing algorithm for JavaScript based on [Gary Court's implementation](https://github.com/garycourt/murmurhash-js) with [kazuyukitanimura's modifications](https://github.com/kazuyukitanimura/murmurhash-js).\n\nThis version works significantly faster than the non-incremental version if you need to hash many small strings into a single hash, since string concatenation (to build the single string to pass the non-incremental version) is fairly costly. In one case tested, using the incremental version was about 50% faster than concatenating 5-10 strings and then hashing.\n\nInstallation\n------------\n\nTo use iMurmurHash in the browser, [download the latest version](https://raw.github.com/jensyt/imurmurhash-js/master/imurmurhash.min.js) and include it as a script on your site.\n\n```html\n\n\n```\n\n---\n\nTo use iMurmurHash in Node.js, install the module using NPM:\n\n```bash\nnpm install imurmurhash\n```\n\nThen simply include it in your scripts:\n\n```javascript\nMurmurHash3 = require('imurmurhash');\n```\n\nQuick Example\n-------------\n\n```javascript\n// Create the initial hash\nvar hashState = MurmurHash3('string');\n\n// Incrementally add text\nhashState.hash('more strings');\nhashState.hash('even more strings');\n\n// All calls can be chained if desired\nhashState.hash('and').hash('some').hash('more');\n\n// Get a result\nhashState.result();\n// returns 0xe4ccfe6b\n```\n\nFunctions\n---------\n\n### MurmurHash3 ([string], [seed])\nGet a hash state object, optionally initialized with the given _string_ and _seed_. _Seed_ must be a positive integer if provided. Calling this function without the `new` keyword will return a cached state object that has been reset. This is safe to use as long as the object is only used from a single thread and no other hashes are created while operating on this one. If this constraint cannot be met, you can use `new` to create a new state object. For example:\n\n```javascript\n// Use the cached object, calling the function again will return the same\n// object (but reset, so the current state would be lost)\nhashState = MurmurHash3();\n...\n\n// Create a new object that can be safely used however you wish. Calling the\n// function again will simply return a new state object, and no state loss\n// will occur, at the cost of creating more objects.\nhashState = new MurmurHash3();\n```\n\nBoth methods can be mixed however you like if you have different use cases.\n\n---\n\n### MurmurHash3.prototype.hash (string)\nIncrementally add _string_ to the hash. This can be called as many times as you want for the hash state object, including after a call to `result()`. Returns `this` so calls can be chained.\n\n---\n\n### MurmurHash3.prototype.result ()\nGet the result of the hash as a 32-bit positive integer. This performs the tail and finalizer portions of the algorithm, but does not store the result in the state object. This means that it is perfectly safe to get results and then continue adding strings via `hash`.\n\n```javascript\n// Do the whole string at once\nMurmurHash3('this is a test string').result();\n// 0x70529328\n\n// Do part of the string, get a result, then the other part\nvar m = MurmurHash3('this is a');\nm.result();\n// 0xbfc4f834\nm.hash(' test string').result();\n// 0x70529328 (same as above)\n```\n\n---\n\n### MurmurHash3.prototype.reset ([seed])\nReset the state object for reuse, optionally using the given _seed_ (defaults to 0 like the constructor). Returns `this` so calls can be chained.\n\n---\n\nLicense (MIT)\n-------------\nCopyright (c) 2013 Gary Court, Jens Taylor\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
+ "readmeFilename": "README.md",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jensyt/imurmurhash-js.git"
+ },
+ "version": "0.1.4"
+}
diff --git a/deps/npm/node_modules/init-package-json/README.md b/deps/npm/node_modules/init-package-json/README.md
index 2cc79c4bf78100..bd64c1230986fc 100644
--- a/deps/npm/node_modules/init-package-json/README.md
+++ b/deps/npm/node_modules/init-package-json/README.md
@@ -41,5 +41,5 @@ Or from the command line:
$ npm-init
```
-See [PromZard](https://github.com/isaacs/promzard) for details about
+See [PromZard](https://github.com/npm/promzard) for details about
what can go in the config file.
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index 102bdb8c96e2a9..21e33c570ccc3f 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,23 +1,49 @@
{
- "name": "init-package-json",
- "version": "1.9.1",
- "main": "init-package-json.js",
- "scripts": {
- "test": "tap test/*.js"
+ "_args": [
+ [
+ "init-package-json@~1.9.3",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "init-package-json@>=1.9.3 <1.10.0",
+ "_id": "init-package-json@1.9.3",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/init-package-json",
+ "_nodeVersion": "4.2.2",
+ "_npmUser": {
+ "email": "me@re-becca.org",
+ "name": "iarna"
},
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/init-package-json.git"
+ "_npmVersion": "3.5.4",
+ "_phantomChildren": {
+ "read": "1.0.7"
+ },
+ "_requested": {
+ "name": "init-package-json",
+ "raw": "init-package-json@~1.9.3",
+ "rawSpec": "~1.9.3",
+ "scope": null,
+ "spec": ">=1.9.3 <1.10.0",
+ "type": "range"
},
+ "_requiredBy": [
+ "/"
+ ],
+ "_shasum": "ca2ff94709b6d9aaad66533c11a0aff645f15c7d",
+ "_shrinkwrap": null,
+ "_spec": "init-package-json@~1.9.3",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "Isaac Z. Schlueter",
"email": "i@izs.me",
+ "name": "Isaac Z. Schlueter",
"url": "http://blog.izs.me/"
},
- "license": "ISC",
- "description": "A node module to get your node module started",
+ "bugs": {
+ "url": "https://github.com/npm/init-package-json/issues"
+ },
"dependencies": {
- "glob": "^5.0.3",
+ "glob": "^6.0.0",
"npm-package-arg": "^4.0.0",
"promzard": "^0.3.0",
"read": "~1.0.1",
@@ -26,39 +52,31 @@
"validate-npm-package-license": "^3.0.1",
"validate-npm-package-name": "^2.0.1"
},
+ "description": "A node module to get your node module started",
"devDependencies": {
"npm": "^2",
"rimraf": "^2.1.4",
"tap": "^1.2.0"
},
+ "directories": {},
+ "dist": {
+ "shasum": "ca2ff94709b6d9aaad66533c11a0aff645f15c7d",
+ "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.9.3.tgz"
+ },
+ "gitHead": "12eb24ff2f75f84a4a27436bc6f6cb765cbd9ee2",
+ "homepage": "https://github.com/npm/init-package-json#readme",
"keywords": [
+ "helper",
"init",
- "package.json",
"package",
- "helper",
- "wizard",
- "wizerd",
+ "package.json",
"prompt",
- "start"
+ "start",
+ "wizard",
+ "wizerd"
],
- "gitHead": "37c38b4e23189eb5645901fa6851f343fddd4b73",
- "bugs": {
- "url": "https://github.com/isaacs/init-package-json/issues"
- },
- "homepage": "https://github.com/isaacs/init-package-json#readme",
- "_id": "init-package-json@1.9.1",
- "_shasum": "a28e05b5baeb3363cd473df68d30d3a80523a31c",
- "_from": "init-package-json@>=1.9.1 <1.10.0",
- "_npmVersion": "2.14.1",
- "_nodeVersion": "2.2.2",
- "_npmUser": {
- "name": "zkat",
- "email": "kat@sykosomatic.org"
- },
- "dist": {
- "shasum": "a28e05b5baeb3363cd473df68d30d3a80523a31c",
- "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.9.1.tgz"
- },
+ "license": "ISC",
+ "main": "init-package-json.js",
"maintainers": [
{
"name": "isaacs",
@@ -77,7 +95,15 @@
"email": "kat@sykosomatic.org"
}
],
- "directories": {},
- "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.9.1.tgz",
- "readme": "ERROR: No README data found!"
+ "name": "init-package-json",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/init-package-json.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.9.3"
}
diff --git a/deps/npm/node_modules/lodash.clonedeep/LICENSE b/deps/npm/node_modules/lodash.clonedeep/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.clonedeep/LICENSE
+++ b/deps/npm/node_modules/lodash.clonedeep/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.clonedeep/README.md b/deps/npm/node_modules/lodash.clonedeep/README.md
index 7be9a82e463cb2..65176db360cca7 100644
--- a/deps/npm/node_modules/lodash.clonedeep/README.md
+++ b/deps/npm/node_modules/lodash.clonedeep/README.md
@@ -1,20 +1,18 @@
-# lodash.clonedeep v3.0.2
+# lodash.clonedeep v4.0.1
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.cloneDeep` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.cloneDeep` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.clonedeep
```
-In Node.js/io.js:
-
+In Node.js:
```js
var cloneDeep = require('lodash.clonedeep');
```
-See the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash.clonedeep) for more details.
+See the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash.clonedeep) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/index.js b/deps/npm/node_modules/lodash.clonedeep/index.js
index f486c2246be0dd..c9082a6a5f2406 100644
--- a/deps/npm/node_modules/lodash.clonedeep/index.js
+++ b/deps/npm/node_modules/lodash.clonedeep/index.js
@@ -1,63 +1,803 @@
/**
- * lodash 3.0.2 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var baseClone = require('lodash._baseclone'),
- bindCallback = require('lodash._bindcallback');
+var Stack = require('lodash._stack'),
+ arrayEach = require('lodash._arrayeach'),
+ baseFor = require('lodash._basefor'),
+ keys = require('lodash.keys');
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to match `RegExp` flags from their coerced string values. */
+var reFlags = /\w*$/;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used to identify `toStringTag` values supported by `_.clone`. */
+var cloneableTags = {};
+cloneableTags[argsTag] = cloneableTags[arrayTag] =
+cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
+cloneableTags[dateTag] = cloneableTags[float32Tag] =
+cloneableTags[float64Tag] = cloneableTags[int8Tag] =
+cloneableTags[int16Tag] = cloneableTags[int32Tag] =
+cloneableTags[mapTag] = cloneableTags[numberTag] =
+cloneableTags[objectTag] = cloneableTags[regexpTag] =
+cloneableTags[setTag] = cloneableTags[stringTag] =
+cloneableTags[symbolTag] = cloneableTags[uint8Tag] =
+cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] =
+cloneableTags[uint32Tag] = true;
+cloneableTags[errorTag] = cloneableTags[funcTag] =
+cloneableTags[weakMapTag] = false;
+
+/**
+ * Adds the key-value `pair` to `map`.
+ *
+ * @private
+ * @param {Object} map The map to modify.
+ * @param {Array} pair The key-value pair to add.
+ * @returns {Object} Returns `map`.
+ */
+function addMapEntry(map, pair) {
+ map.set(pair[0], pair[1]);
+ return map;
+}
+
+/**
+ * Adds `value` to `set`.
+ *
+ * @private
+ * @param {Object} set The set to modify.
+ * @param {*} value The value to add.
+ * @returns {Object} Returns `set`.
+ */
+function addSetEntry(set, value) {
+ set.add(value);
+ return set;
+}
+
+/**
+ * A specialized version of `_.reduce` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initFromArray] Specify using the first element of `array` as the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+function arrayReduce(array, iteratee, accumulator, initFromArray) {
+ var index = -1,
+ length = array.length;
+
+ if (initFromArray && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Converts `map` to an array.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+}
+
+/**
+ * Converts `set` to an array.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var _Symbol = global.Symbol,
+ Uint8Array = global.Uint8Array,
+ getOwnPropertySymbols = Object.getOwnPropertySymbols;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(global, 'Map'),
+ Set = getNative(global, 'Set');
+
+/** Used to detect maps and sets. */
+var mapCtorString = Map ? funcToString.call(Map) : '',
+ setCtorString = Set ? funcToString.call(Set) : '';
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = _Symbol ? _Symbol.prototype : undefined,
+ symbolValueOf = _Symbol ? symbolProto.valueOf : undefined;
+
+/**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+function assignValue(object, key, value) {
+ var objValue = object[key];
+ if ((!eq(objValue, value) ||
+ (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) ||
+ (value === undefined && !(key in object))) {
+ object[key] = value;
+ }
+}
+
+/**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+}
+
+/**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+function baseClone(value, isDeep, customizer, key, object, stack) {
+ var result;
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ if (isHostObject(value)) {
+ return object ? value : {};
+ }
+ result = initCloneObject(isFunc ? {} : value);
+ if (!isDeep) {
+ return copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ return cloneableTags[tag]
+ ? initCloneByTag(value, tag, isDeep)
+ : (object ? value : {});
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stack || (stack = new Stack);
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result);
+
+ // Recursively populate clone (susceptible to call stack limits).
+ (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
+ assignValue(result, key, baseClone(subValue, isDeep, customizer, key, value, stack));
+ });
+ return isArr ? result : copySymbols(value, result);
+}
+
+/**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+var baseCreate = (function() {
+ function object() {}
+ return function(prototype) {
+ if (isObject(prototype)) {
+ object.prototype = prototype;
+ var result = new object;
+ object.prototype = undefined;
+ }
+ return result || {};
+ };
+}());
+
+/**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+}
+
+/**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} buffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+function cloneBuffer(buffer) {
+ var Ctor = buffer.constructor,
+ result = new Ctor(buffer.byteLength),
+ view = new Uint8Array(result);
+
+ view.set(new Uint8Array(buffer));
+ return result;
+}
+
+/**
+ * Creates a clone of `map`.
+ *
+ * @private
+ * @param {Object} map The map to clone.
+ * @returns {Object} Returns the cloned map.
+ */
+function cloneMap(map) {
+ var Ctor = map.constructor;
+ return arrayReduce(mapToArray(map), addMapEntry, new Ctor);
+}
+
+/**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+function cloneRegExp(regexp) {
+ var Ctor = regexp.constructor,
+ result = new Ctor(regexp.source, reFlags.exec(regexp));
+
+ result.lastIndex = regexp.lastIndex;
+ return result;
+}
+
+/**
+ * Creates a clone of `set`.
+ *
+ * @private
+ * @param {Object} set The set to clone.
+ * @returns {Object} Returns the cloned set.
+ */
+function cloneSet(set) {
+ var Ctor = set.constructor;
+ return arrayReduce(setToArray(set), addSetEntry, new Ctor);
+}
+
+/**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+function cloneSymbol(symbol) {
+ return _Symbol ? Object(symbolValueOf.call(symbol)) : {};
+}
+
+/**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+function cloneTypedArray(typedArray, isDeep) {
+ var buffer = typedArray.buffer,
+ Ctor = typedArray.constructor;
+
+ return new Ctor(isDeep ? cloneBuffer(buffer) : buffer, typedArray.byteOffset, typedArray.length);
+}
+
+/**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+}
+
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+function copyObject(source, props, object) {
+ return copyObjectWith(source, props, object);
+}
/**
- * Creates a deep clone of `value`. If `customizer` is provided it's invoked
- * to produce the cloned values. If `customizer` returns `undefined` cloning
- * is handled by the method instead. The `customizer` is bound to `thisArg`
- * and invoked with up to three argument; (value [, index|key, object]).
+ * This function is like `copyObject` except that it accepts a function to
+ * customize copied values.
*
- * **Note:** This method is loosely based on the
- * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
- * The enumerable properties of `arguments` objects and objects created by
- * constructors other than `Object` are cloned to plain `Object` objects. An
- * empty object is returned for uncloneable values such as functions, DOM nodes,
- * Maps, Sets, and WeakMaps.
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+function copyObjectWith(source, props, object, customizer) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index],
+ newValue = customizer ? customizer(object[key], source[key], key, object, source) : source[key];
+
+ assignValue(object, key, newValue);
+ }
+ return object;
+}
+
+/**
+ * Copies own symbol properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Creates an array of the own symbol properties of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+var getSymbols = getOwnPropertySymbols || function() {
+ return [];
+};
+
+/**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function getTag(value) {
+ return objectToString.call(value);
+}
+
+// Fallback for IE 11 providing `toStringTag` values for maps and sets.
+if ((Map && getTag(new Map) != mapTag) || (Set && getTag(new Set) != setTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : null,
+ ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : '';
+
+ if (ctorString) {
+ if (ctorString == mapCtorString) {
+ return mapTag;
+ }
+ if (ctorString == setCtorString) {
+ return setTag;
+ }
+ }
+ return result;
+ };
+}
+
+/**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+function initCloneArray(array) {
+ var length = array.length,
+ result = array.constructor(length);
+
+ // Add properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+}
+
+/**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+function initCloneObject(object) {
+ var Ctor = object.constructor;
+ return baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
+}
+
+/**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneBuffer(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case float32Tag: case float64Tag:
+ case int8Tag: case int16Tag: case int32Tag:
+ case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag:
+ return cloneMap(object);
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ return cloneRegExp(object);
+
+ case setTag:
+ return cloneSet(object);
+
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+}
+
+/**
+ * This method is like `_.clone` except that it recursively clones `value`.
*
* @static
* @memberOf _
* @category Lang
- * @param {*} value The value to deep clone.
- * @param {Function} [customizer] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @param {*} value The value to recursively clone.
* @returns {*} Returns the deep cloned value.
* @example
*
- * var users = [
- * { 'user': 'barney' },
- * { 'user': 'fred' }
- * ];
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+function cloneDeep(value) {
+ return baseClone(value, true);
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
*
- * var deep = _.cloneDeep(users);
- * deep[0] === users[0];
+ * _.eq('a', Object('a'));
* // => false
*
- * // using a customizer callback
- * var el = _.cloneDeep(document.body, function(value) {
- * if (_.isElement(value)) {
- * return value.cloneNode(true);
- * }
- * });
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
*
- * el === document.body
+ * _.isNative(_);
* // => false
- * el.nodeName
- * // => BODY
- * el.childNodes.length;
- * // => 20
*/
-function cloneDeep(value, customizer, thisArg) {
- return typeof customizer == 'function'
- ? baseClone(value, true, bindCallback(customizer, thisArg, 3))
- : baseClone(value, true);
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
}
module.exports = cloneDeep;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/LICENSE.txt b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/LICENSE.txt
similarity index 100%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/LICENSE.txt
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/LICENSE.txt
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/README.md
similarity index 100%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/README.md
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/README.md
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/index.js
similarity index 100%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/index.js
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/index.js
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/package.json
similarity index 53%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/package.json
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/package.json
index 63072607e9a869..5735c5c9bc89f6 100644
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/package.json
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._arrayeach/package.json
@@ -1,15 +1,46 @@
{
- "name": "lodash._arrayeach",
- "version": "3.0.0",
- "description": "The modern build of lodash’s internal `arrayEach` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
+ "_args": [
+ [
+ "lodash._arrayeach@^3.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.clonedeep"
+ ]
+ ],
+ "_from": "lodash._arrayeach@>=3.0.0 <4.0.0",
+ "_id": "lodash._arrayeach@3.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.clonedeep/lodash._arrayeach",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayeach",
+ "raw": "lodash._arrayeach@^3.0.0",
+ "rawSpec": "^3.0.0",
+ "scope": null,
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.clonedeep"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
+ "_shasum": "bab156b2a90d3f1bbd5c653403349e5e5933ef9e",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayeach@^3.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.clonedeep",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
@@ -37,6 +68,26 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `arrayEach` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "bab156b2a90d3f1bbd5c653403349e5e5933ef9e",
+ "tarball": "http://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayeach",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -44,13 +95,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "readme": "# lodash._arrayeach v3.0.0\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayEach` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._arrayeach\n```\n\nIn Node.js/io.js:\n\n```js\nvar arrayEach = require('lodash._arrayeach');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arrayeach) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._arrayeach@3.0.0",
- "_shasum": "bab156b2a90d3f1bbd5c653403349e5e5933ef9e",
- "_resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
- "_from": "lodash._arrayeach@>=3.0.0 <4.0.0"
+ "version": "3.0.0"
}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/README.md
deleted file mode 100644
index 883a43c3a48435..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._baseclone v3.3.0
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseClone` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._baseclone
-```
-
-In Node.js/io.js:
-
-```js
-var baseClone = require('lodash._baseclone');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.3.0-npm-packages/lodash._baseclone) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/index.js
deleted file mode 100644
index 4024d58ad339cb..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/index.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * lodash 3.3.0 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var arrayCopy = require('lodash._arraycopy'),
- arrayEach = require('lodash._arrayeach'),
- baseAssign = require('lodash._baseassign'),
- baseFor = require('lodash._basefor'),
- isArray = require('lodash.isarray'),
- keys = require('lodash.keys');
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
-
-/** Used to match `RegExp` flags from their coerced string values. */
-var reFlags = /\w*$/;
-
-/** Used to identify `toStringTag` values supported by `_.clone`. */
-var cloneableTags = {};
-cloneableTags[argsTag] = cloneableTags[arrayTag] =
-cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
-cloneableTags[dateTag] = cloneableTags[float32Tag] =
-cloneableTags[float64Tag] = cloneableTags[int8Tag] =
-cloneableTags[int16Tag] = cloneableTags[int32Tag] =
-cloneableTags[numberTag] = cloneableTags[objectTag] =
-cloneableTags[regexpTag] = cloneableTags[stringTag] =
-cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
-cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
-cloneableTags[errorTag] = cloneableTags[funcTag] =
-cloneableTags[mapTag] = cloneableTags[setTag] =
-cloneableTags[weakMapTag] = false;
-
-/** Used for native method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objToString = objectProto.toString;
-
-/** Native method references. */
-var ArrayBuffer = global.ArrayBuffer,
- Uint8Array = global.Uint8Array;
-
-/**
- * The base implementation of `_.clone` without support for argument juggling
- * and `this` binding `customizer` functions.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @param {Function} [customizer] The function to customize cloning values.
- * @param {string} [key] The key of `value`.
- * @param {Object} [object] The object `value` belongs to.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates clones with source counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
- var result;
- if (customizer) {
- result = object ? customizer(value, key, object) : customizer(value);
- }
- if (result !== undefined) {
- return result;
- }
- if (!isObject(value)) {
- return value;
- }
- var isArr = isArray(value);
- if (isArr) {
- result = initCloneArray(value);
- if (!isDeep) {
- return arrayCopy(value, result);
- }
- } else {
- var tag = objToString.call(value),
- isFunc = tag == funcTag;
-
- if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
- result = initCloneObject(isFunc ? {} : value);
- if (!isDeep) {
- return baseAssign(result, value);
- }
- } else {
- return cloneableTags[tag]
- ? initCloneByTag(value, tag, isDeep)
- : (object ? value : {});
- }
- }
- // Check for circular references and return its corresponding clone.
- stackA || (stackA = []);
- stackB || (stackB = []);
-
- var length = stackA.length;
- while (length--) {
- if (stackA[length] == value) {
- return stackB[length];
- }
- }
- // Add the source value to the stack of traversed objects and associate it with its clone.
- stackA.push(value);
- stackB.push(result);
-
- // Recursively populate clone (susceptible to call stack limits).
- (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
- result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
- });
- return result;
-}
-
-/**
- * The base implementation of `_.forOwn` without support for callback
- * shorthands and `this` binding.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Object} Returns `object`.
- */
-function baseForOwn(object, iteratee) {
- return baseFor(object, iteratee, keys);
-}
-
-/**
- * Creates a clone of the given array buffer.
- *
- * @private
- * @param {ArrayBuffer} buffer The array buffer to clone.
- * @returns {ArrayBuffer} Returns the cloned array buffer.
- */
-function bufferClone(buffer) {
- var result = new ArrayBuffer(buffer.byteLength),
- view = new Uint8Array(result);
-
- view.set(new Uint8Array(buffer));
- return result;
-}
-
-/**
- * Initializes an array clone.
- *
- * @private
- * @param {Array} array The array to clone.
- * @returns {Array} Returns the initialized clone.
- */
-function initCloneArray(array) {
- var length = array.length,
- result = new array.constructor(length);
-
- // Add array properties assigned by `RegExp#exec`.
- if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
- result.index = array.index;
- result.input = array.input;
- }
- return result;
-}
-
-/**
- * Initializes an object clone.
- *
- * @private
- * @param {Object} object The object to clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneObject(object) {
- var Ctor = object.constructor;
- if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
- Ctor = Object;
- }
- return new Ctor;
-}
-
-/**
- * Initializes an object clone based on its `toStringTag`.
- *
- * **Note:** This function only supports cloning values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to clone.
- * @param {string} tag The `toStringTag` of the object to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneByTag(object, tag, isDeep) {
- var Ctor = object.constructor;
- switch (tag) {
- case arrayBufferTag:
- return bufferClone(object);
-
- case boolTag:
- case dateTag:
- return new Ctor(+object);
-
- case float32Tag: case float64Tag:
- case int8Tag: case int16Tag: case int32Tag:
- case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
- var buffer = object.buffer;
- return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
-
- case numberTag:
- case stringTag:
- return new Ctor(object);
-
- case regexpTag:
- var result = new Ctor(object.source, reFlags.exec(object));
- result.lastIndex = object.lastIndex;
- }
- return result;
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-module.exports = baseClone;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/package.json
deleted file mode 100644
index f99b36cfeca9c9..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "name": "lodash._arraycopy",
- "version": "3.0.0",
- "description": "The modern build of lodash’s internal `arrayCopy` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "readme": "# lodash._arraycopy v3.0.0\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._arraycopy\n```\n\nIn Node.js/io.js:\n\n```js\nvar arrayCopy = require('lodash._arraycopy');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arraycopy) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._arraycopy@3.0.0",
- "_shasum": "76e7b7c1f1fb92547374878a562ed06a3e50f6e1",
- "_resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
- "_from": "lodash._arraycopy@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/README.md
deleted file mode 100644
index 0aa23093730de6..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._baseassign v3.2.0
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseAssign` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._baseassign
-```
-
-In Node.js/io.js:
-
-```js
-var baseAssign = require('lodash._baseassign');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.2.0-npm-packages/lodash._baseassign) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/index.js
deleted file mode 100644
index f5612c85081563..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * lodash 3.2.0 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var baseCopy = require('lodash._basecopy'),
- keys = require('lodash.keys');
-
-/**
- * The base implementation of `_.assign` without support for argument juggling,
- * multiple sources, and `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssign(object, source) {
- return source == null
- ? object
- : baseCopy(source, keys(source), object);
-}
-
-module.exports = baseAssign;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/README.md
deleted file mode 100644
index acdfa29d3d210a..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._basecopy v3.0.1
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._basecopy
-```
-
-In Node.js/io.js:
-
-```js
-var baseCopy = require('lodash._basecopy');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._basecopy) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js
deleted file mode 100644
index b586d31d9d4345..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * lodash 3.0.1 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-
-/**
- * Copies properties of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy properties from.
- * @param {Array} props The property names to copy.
- * @param {Object} [object={}] The object to copy properties to.
- * @returns {Object} Returns `object`.
- */
-function baseCopy(source, props, object) {
- object || (object = {});
-
- var index = -1,
- length = props.length;
-
- while (++index < length) {
- var key = props[index];
- object[key] = source[key];
- }
- return object;
-}
-
-module.exports = baseCopy;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/package.json
deleted file mode 100644
index a704063e0ae4a1..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/node_modules/lodash._basecopy/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "name": "lodash._basecopy",
- "version": "3.0.1",
- "description": "The modern build of lodash’s internal `baseCopy` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "readme": "# lodash._basecopy v3.0.1\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._basecopy\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseCopy = require('lodash._basecopy');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._basecopy) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._basecopy@3.0.1",
- "_shasum": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36",
- "_resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "_from": "lodash._basecopy@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/package.json
deleted file mode 100644
index 65386d8bd02aba..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._baseassign/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "lodash._baseassign",
- "version": "3.2.0",
- "description": "The modern build of lodash’s internal `baseAssign` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "dependencies": {
- "lodash._basecopy": "^3.0.0",
- "lodash.keys": "^3.0.0"
- },
- "readme": "# lodash._baseassign v3.2.0\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseAssign` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._baseassign\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseAssign = require('lodash._baseassign');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.2.0-npm-packages/lodash._baseassign) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._baseassign@3.2.0",
- "_shasum": "8c38a099500f215ad09e59f1722fd0c52bfe0a4e",
- "_resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
- "_from": "lodash._baseassign@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/README.md
deleted file mode 100644
index d9e33731b2fc90..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._basefor v3.0.2
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseFor` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._basefor
-```
-
-In Node.js/io.js:
-
-```js
-var baseFor = require('lodash._basefor');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash._basefor) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/index.js
deleted file mode 100644
index a3d7dcd1014da0..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/index.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * lodash 3.0.2 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-
-/**
- * The base implementation of `baseForIn` and `baseForOwn` which iterates
- * over `object` properties returned by `keysFunc` invoking `iteratee` for
- * each property. Iteratee functions may exit iteration early by explicitly
- * returning `false`.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @returns {Object} Returns `object`.
- */
-var baseFor = createBaseFor();
-
-/**
- * Creates a base function for `_.forIn` or `_.forInRight`.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseFor(fromRight) {
- return function(object, iteratee, keysFunc) {
- var iterable = toObject(object),
- props = keysFunc(object),
- length = props.length,
- index = fromRight ? length : -1;
-
- while ((fromRight ? index-- : ++index < length)) {
- var key = props[index];
- if (iteratee(iterable[key], key, iterable) === false) {
- break;
- }
- }
- return object;
- };
-}
-
-/**
- * Converts `value` to an object if it's not one.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {Object} Returns the object.
- */
-function toObject(value) {
- return isObject(value) ? value : Object(value);
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-module.exports = baseFor;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/package.json
deleted file mode 100644
index 85421f441af04b..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._basefor/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "name": "lodash._basefor",
- "version": "3.0.2",
- "description": "The modern build of lodash’s internal `baseFor` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "readme": "# lodash._basefor v3.0.2\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseFor` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._basefor\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseFor = require('lodash._basefor');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash._basefor) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._basefor@3.0.2",
- "_shasum": "3a4cece5b7031eae78a441c5416b90878eeee5a1",
- "_resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.2.tgz",
- "_from": "lodash._basefor@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/package.json
deleted file mode 100644
index 1aca59200aefd9..00000000000000
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "lodash._baseclone",
- "version": "3.3.0",
- "description": "The modern build of lodash’s internal `baseClone` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "dependencies": {
- "lodash._arraycopy": "^3.0.0",
- "lodash._arrayeach": "^3.0.0",
- "lodash._baseassign": "^3.0.0",
- "lodash._basefor": "^3.0.0",
- "lodash.isarray": "^3.0.0",
- "lodash.keys": "^3.0.0"
- },
- "readme": "# lodash._baseclone v3.3.0\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseClone` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._baseclone\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseClone = require('lodash._baseclone');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.3.0-npm-packages/lodash._baseclone) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._baseclone@3.3.0",
- "_shasum": "303519bf6393fe7e42f34d8b630ef7794e3542b7",
- "_resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
- "_from": "lodash._baseclone@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/LICENSE.txt b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/LICENSE
similarity index 89%
rename from deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/LICENSE.txt
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/LICENSE.txt
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/README.md
new file mode 100644
index 00000000000000..b17e221b1613f0
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/README.md
@@ -0,0 +1,18 @@
+# lodash._basefor v3.0.3
+
+The internal [lodash](https://lodash.com/) function `baseFor` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._basefor
+```
+
+In Node.js:
+```js
+var baseFor = require('lodash._basefor');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.3-npm-packages/lodash._basefor) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/index.js
new file mode 100644
index 00000000000000..3f1d1896d2bdf2
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/index.js
@@ -0,0 +1,48 @@
+/**
+ * lodash 3.0.3 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+var baseFor = createBaseFor();
+
+/**
+ * Creates a base function for methods like `_.forIn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+}
+
+module.exports = baseFor;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/package.json
new file mode 100644
index 00000000000000..003549a67a425f
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._basefor/package.json
@@ -0,0 +1,97 @@
+{
+ "_args": [
+ [
+ "lodash._basefor@^3.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.clonedeep"
+ ]
+ ],
+ "_from": "lodash._basefor@>=3.0.0 <4.0.0",
+ "_id": "lodash._basefor@3.0.3",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.clonedeep/lodash._basefor",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._basefor",
+ "raw": "lodash._basefor@^3.0.0",
+ "rawSpec": "^3.0.0",
+ "scope": null,
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.clonedeep"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+ "_shasum": "7550b4e9218ef09fad24343b612021c79b4c20c2",
+ "_shrinkwrap": null,
+ "_spec": "lodash._basefor@^3.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.clonedeep",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `baseFor` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "7550b4e9218ef09fad24343b612021c79b4c20c2",
+ "tarball": "http://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._basefor",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.3"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/LICENSE.txt b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/LICENSE
similarity index 89%
rename from deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/LICENSE.txt
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/LICENSE.txt
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/README.md
new file mode 100644
index 00000000000000..7ea070a6694f89
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/README.md
@@ -0,0 +1,18 @@
+# lodash._stack v4.0.1
+
+The internal [lodash](https://lodash.com/) function `Stack` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._stack
+```
+
+In Node.js:
+```js
+var Stack = require('lodash._stack');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash._stack) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/index.js
new file mode 100644
index 00000000000000..fe8a3570bef771
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/index.js
@@ -0,0 +1,249 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var MapCache = require('lodash._mapcache');
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** Used for built-in method references. */
+var arrayProto = global.Array.prototype;
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function Stack(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+function stackClear() {
+ this.__data__ = { 'array': [], 'map': null };
+}
+
+/**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function stackDelete(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocDelete(array, key) : data.map['delete'](key);
+}
+
+/**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function stackGet(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocGet(array, key) : data.map.get(key);
+}
+
+/**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function stackHas(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocHas(array, key) : data.map.has(key);
+}
+
+/**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache object.
+ */
+function stackSet(key, value) {
+ var data = this.__data__,
+ array = data.array;
+
+ if (array) {
+ if (array.length < (LARGE_ARRAY_SIZE - 1)) {
+ assocSet(array, key, value);
+ } else {
+ data.array = null;
+ data.map = new MapCache(array);
+ }
+ }
+ var map = data.map;
+ if (map) {
+ map.set(key, value);
+ }
+ return this;
+}
+
+/**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+}
+
+/**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+// Add functions to the `Stack` cache.
+Stack.prototype.clear = stackClear;
+Stack.prototype['delete'] = stackDelete;
+Stack.prototype.get = stackGet;
+Stack.prototype.has = stackHas;
+Stack.prototype.set = stackSet;
+
+module.exports = Stack;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/LICENSE.txt b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/LICENSE
similarity index 89%
rename from deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/LICENSE.txt
rename to deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/LICENSE.txt
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/README.md b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/README.md
new file mode 100644
index 00000000000000..5737ffe3bddc4a
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/README.md
@@ -0,0 +1,18 @@
+# lodash._mapcache v4.0.0
+
+The internal [lodash](https://lodash.com/) function `MapCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._mapcache
+```
+
+In Node.js:
+```js
+var MapCache = require('lodash._mapcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._mapcache) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/index.js b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/index.js
new file mode 100644
index 00000000000000..1057c5554dae24
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/index.js
@@ -0,0 +1,493 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = global.Array.prototype,
+ objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(global, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates an hash object.
+ *
+ * @private
+ * @returns {Object} Returns the new hash object.
+ */
+function Hash() {}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(hash, key) {
+ return hashHas(hash, key) && delete hash[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(hash, key) {
+ if (nativeCreate) {
+ var result = hash[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(hash, key) ? hash[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(hash, key) {
+ return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function hashSet(hash, key, value) {
+ hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+}
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function MapCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapClear() {
+ this.__data__ = { 'hash': new Hash, 'map': Map ? new Map : [], 'string': new Hash };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapDelete(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashDelete(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map['delete'](key) : assocDelete(data.map, key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapGet(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashGet(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.get(key) : assocGet(data.map, key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapHas(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashHas(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.has(key) : assocHas(data.map, key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache object.
+ */
+function mapSet(key, value) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ hashSet(typeof key == 'string' ? data.string : data.hash, key, value);
+ } else if (Map) {
+ data.map.set(key, value);
+ } else {
+ assocSet(data.map, key, value);
+ }
+ return this;
+}
+
+/**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+}
+
+/**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+// Avoid inheriting from `Object.prototype` when possible.
+Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
+
+// Add functions to the `MapCache`.
+MapCache.prototype.clear = mapClear;
+MapCache.prototype['delete'] = mapDelete;
+MapCache.prototype.get = mapGet;
+MapCache.prototype.has = mapHas;
+MapCache.prototype.set = mapSet;
+
+module.exports = MapCache;
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/package.json
new file mode 100644
index 00000000000000..596a99a15e600c
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/node_modules/lodash._mapcache/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._mapcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack"
+ ]
+ ],
+ "_from": "lodash._mapcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._mapcache@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.clonedeep/lodash._stack/lodash._mapcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._mapcache",
+ "raw": "lodash._mapcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.clonedeep/lodash._stack"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz",
+ "_shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "_shrinkwrap": null,
+ "_spec": "lodash._mapcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `MapCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "tarball": "http://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._mapcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/package.json b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/package.json
new file mode 100644
index 00000000000000..dc2a27e05788ab
--- /dev/null
+++ b/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._stack/package.json
@@ -0,0 +1,99 @@
+{
+ "_args": [
+ [
+ "lodash._stack@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.clonedeep"
+ ]
+ ],
+ "_from": "lodash._stack@>=4.0.0 <5.0.0",
+ "_id": "lodash._stack@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.clonedeep/lodash._stack",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._stack",
+ "raw": "lodash._stack@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.clonedeep"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._stack/-/lodash._stack-4.0.1.tgz",
+ "_shasum": "66b9ba9c054bd3e24cd039f4374f258329009a74",
+ "_shrinkwrap": null,
+ "_spec": "lodash._stack@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.clonedeep",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._mapcache": "^4.0.0"
+ },
+ "description": "The internal lodash function `Stack` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "66b9ba9c054bd3e24cd039f4374f258329009a74",
+ "tarball": "http://registry.npmjs.org/lodash._stack/-/lodash._stack-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash._stack",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
+}
diff --git a/deps/npm/node_modules/lodash.clonedeep/package.json b/deps/npm/node_modules/lodash.clonedeep/package.json
index 05fe4afe9c8539..4591bbb548b903 100644
--- a/deps/npm/node_modules/lodash.clonedeep/package.json
+++ b/deps/npm/node_modules/lodash.clonedeep/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.clonedeep",
- "version": "3.0.2",
- "description": "The modern build of lodash’s `_.cloneDeep` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.clonedeep@latest",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "lodash.clonedeep@latest",
+ "_id": "lodash.clonedeep@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.clonedeep",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.clonedeep",
+ "raw": "lodash.clonedeep@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
+ },
+ "_requiredBy": [
+ "/"
],
+ "_resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.0.1.tgz",
+ "_shasum": "fc9873223ecc004c7e8b504a06f9a36e8a29637a",
+ "_shrinkwrap": null,
+ "_spec": "lodash.clonedeep@latest",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,6 +58,46 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {
+ "lodash._arrayeach": "^3.0.0",
+ "lodash._basefor": "^3.0.0",
+ "lodash._stack": "^4.0.0",
+ "lodash.keys": "^4.0.0"
+ },
+ "description": "The lodash method `_.cloneDeep` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "fc9873223ecc004c7e8b504a06f9a36e8a29637a",
+ "tarball": "http://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "clonedeep",
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.clonedeep",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -50,17 +105,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "dependencies": {
- "lodash._baseclone": "^3.0.0",
- "lodash._bindcallback": "^3.0.0"
- },
- "readme": "# lodash.clonedeep v3.0.2\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.cloneDeep` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.clonedeep\n```\n\nIn Node.js/io.js:\n\n```js\nvar cloneDeep = require('lodash.clonedeep');\n```\n\nSee the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash.clonedeep) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash.clonedeep@3.0.2",
- "_shasum": "a0a1e40d82a5ea89ff5b147b8444ed63d92827db",
- "_resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz",
- "_from": "lodash.clonedeep@>=3.0.2 <3.1.0"
+ "version": "4.0.1"
}
diff --git a/deps/npm/node_modules/lodash.isarguments/LICENSE b/deps/npm/node_modules/lodash.isarguments/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.isarguments/LICENSE
+++ b/deps/npm/node_modules/lodash.isarguments/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.isarguments/README.md b/deps/npm/node_modules/lodash.isarguments/README.md
index 2e94f790f6e4e4..7efe2f50c490da 100644
--- a/deps/npm/node_modules/lodash.isarguments/README.md
+++ b/deps/npm/node_modules/lodash.isarguments/README.md
@@ -1,20 +1,18 @@
-# lodash.isarguments v3.0.4
+# lodash.isarguments v3.0.5
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArguments` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.isArguments` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.isarguments
```
-In Node.js/io.js:
-
+In Node.js:
```js
var isArguments = require('lodash.isarguments');
```
-See the [documentation](https://lodash.com/docs#isArguments) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarguments) for more details.
+See the [documentation](https://lodash.com/docs#isArguments) or [package source](https://github.com/lodash/lodash/blob/3.0.5-npm-packages/lodash.isarguments) for more details.
diff --git a/deps/npm/node_modules/lodash.isarguments/index.js b/deps/npm/node_modules/lodash.isarguments/index.js
index b947b47dffdca8..169a6e4eb48986 100644
--- a/deps/npm/node_modules/lodash.isarguments/index.js
+++ b/deps/npm/node_modules/lodash.isarguments/index.js
@@ -1,37 +1,34 @@
/**
- * lodash 3.0.4 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 3.0.5 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-/**
- * Checks if `value` is object-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
-/** Used for native method references. */
-var objectProto = Object.prototype;
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
-/** Native method references. */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
/**
- * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
- * of an array-like value.
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
*/
-var MAX_SAFE_INTEGER = 9007199254740991;
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
/**
* The base implementation of `_.property` without support for deep paths.
@@ -59,48 +56,192 @@ function baseProperty(key) {
var getLength = baseProperty('length');
/**
- * Checks if `value` is array-like.
+ * Checks if `value` is likely an `arguments` object.
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
*/
function isArrayLike(value) {
- return value != null && isLength(getLength(value));
+ return value != null &&
+ !(typeof value == 'function' && isFunction(value)) && isLength(getLength(value));
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
}
/**
* Checks if `value` is a valid array-like length.
*
- * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
*/
function isLength(value) {
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
/**
- * Checks if `value` is classified as an `arguments` object.
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
- * _.isArguments(function() { return arguments; }());
+ * _.isObject({});
* // => true
*
- * _.isArguments([1, 2, 3]);
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
* // => false
*/
-function isArguments(value) {
- return isObjectLike(value) && isArrayLike(value) &&
- hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
}
module.exports = isArguments;
diff --git a/deps/npm/node_modules/lodash.isarguments/package.json b/deps/npm/node_modules/lodash.isarguments/package.json
index 2c7c609ed147cf..92ecceb3d1c002 100644
--- a/deps/npm/node_modules/lodash.isarguments/package.json
+++ b/deps/npm/node_modules/lodash.isarguments/package.json
@@ -1,41 +1,63 @@
{
- "name": "lodash.isarguments",
- "version": "3.0.4",
- "description": "The modern build of lodash’s `_.isArguments` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.isarguments@3.0.5",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "lodash.isarguments@3.0.5",
+ "_id": "lodash.isarguments@3.0.5",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.isarguments",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.isarguments",
+ "raw": "lodash.isarguments@3.0.5",
+ "rawSpec": "3.0.5",
+ "scope": null,
+ "spec": "3.0.5",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/",
+ "/lodash.keys",
+ "/lodash.union/lodash._baseflatten",
+ "/standard/standard-engine/eslint/lodash.merge",
+ "/standard/standard-engine/eslint/lodash.merge/lodash.isplainobject",
+ "/standard/standard-engine/eslint/lodash.merge/lodash.keysin",
+ "/standard/standard-engine/eslint/lodash.omit/lodash._baseflatten",
+ "/standard/standard-engine/eslint/lodash.omit/lodash.keysin"
],
+ "_resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.5.tgz",
+ "_shasum": "d5fdffdb83569fd77344aeb4a54abb89482728e5",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isarguments@3.0.5",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,6 +65,41 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {},
+ "description": "The lodash method `_.isArguments` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d5fdffdb83569fd77344aeb4a54abb89482728e5",
+ "tarball": "http://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.5.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "isarguments",
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isarguments",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -50,13 +107,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "readme": "# lodash.isarguments v3.0.4\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArguments` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.isarguments\n```\n\nIn Node.js/io.js:\n\n```js\nvar isArguments = require('lodash.isarguments');\n```\n\nSee the [documentation](https://lodash.com/docs#isArguments) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarguments) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash.isarguments@3.0.4",
- "_shasum": "ebbb884c48d27366a44ea6fee57ed7b5a32a81e0",
- "_resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.4.tgz",
- "_from": "lodash.isarguments@3.0.4"
+ "version": "3.0.5"
}
diff --git a/deps/npm/node_modules/lodash.isarray/LICENSE b/deps/npm/node_modules/lodash.isarray/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.isarray/LICENSE
+++ b/deps/npm/node_modules/lodash.isarray/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.isarray/README.md b/deps/npm/node_modules/lodash.isarray/README.md
index ea274aae1be395..da1580fabe9919 100644
--- a/deps/npm/node_modules/lodash.isarray/README.md
+++ b/deps/npm/node_modules/lodash.isarray/README.md
@@ -1,20 +1,18 @@
-# lodash.isarray v3.0.4
+# lodash.isarray v4.0.0
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.isArray` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.isarray
```
-In Node.js/io.js:
-
+In Node.js:
```js
var isArray = require('lodash.isarray');
```
-See the [documentation](https://lodash.com/docs#isArray) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarray) for more details.
+See the [documentation](https://lodash.com/docs#isArray) or [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash.isarray) for more details.
diff --git a/deps/npm/node_modules/lodash.isarray/index.js b/deps/npm/node_modules/lodash.isarray/index.js
index dd246584489df6..105fd4249e782f 100644
--- a/deps/npm/node_modules/lodash.isarray/index.js
+++ b/deps/npm/node_modules/lodash.isarray/index.js
@@ -1,91 +1,18 @@
/**
- * lodash 3.0.4 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-/** `Object#toString` result references. */
-var arrayTag = '[object Array]',
- funcTag = '[object Function]';
-
-/** Used to detect host constructors (Safari > 5). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/**
- * Checks if `value` is object-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/** Used for native method references. */
-var objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var fnToString = Function.prototype.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objToString = objectProto.toString;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
- fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/* Native method references for those with the same name as other `lodash` methods. */
-var nativeIsArray = getNative(Array, 'isArray');
-
-/**
- * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
- * of an array-like value.
- */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
- var value = object == null ? undefined : object[key];
- return isNative(value) ? value : undefined;
-}
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- */
-function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
+ * @type Function
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
@@ -94,87 +21,15 @@ function isLength(value) {
* _.isArray([1, 2, 3]);
* // => true
*
- * _.isArray(function() { return arguments; }());
- * // => false
- */
-var isArray = nativeIsArray || function(value) {
- return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
-};
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
+ * _.isArray(document.body.children);
* // => false
- */
-function isFunction(value) {
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in older versions of Chrome and Safari which return 'function' for regexes
- // and Safari 8 equivalents which return 'object' for typed array constructors.
- return isObject(value) && objToString.call(value) == funcTag;
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
+ * _.isArray('abc');
* // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * Checks if `value` is a native function.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
- * @example
- *
- * _.isNative(Array.prototype.push);
- * // => true
*
- * _.isNative(_);
+ * _.isArray(_.noop);
* // => false
*/
-function isNative(value) {
- if (value == null) {
- return false;
- }
- if (isFunction(value)) {
- return reIsNative.test(fnToString.call(value));
- }
- return isObjectLike(value) && reIsHostCtor.test(value);
-}
+var isArray = Array.isArray;
module.exports = isArray;
diff --git a/deps/npm/node_modules/lodash.isarray/package.json b/deps/npm/node_modules/lodash.isarray/package.json
index 0d8a02c800e787..606f67a82fcd5a 100644
--- a/deps/npm/node_modules/lodash.isarray/package.json
+++ b/deps/npm/node_modules/lodash.isarray/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.isarray",
- "version": "3.0.4",
- "description": "The modern build of lodash’s `_.isArray` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.isarray@latest",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "lodash.isarray@latest",
+ "_id": "lodash.isarray@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.isarray",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.isarray",
+ "raw": "lodash.isarray@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
+ },
+ "_requiredBy": [
+ "/"
],
+ "_resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz",
+ "_shasum": "2aca496b28c4ca6d726715313590c02e6ea34403",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isarray@latest",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,6 +58,41 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {},
+ "description": "The lodash method `_.isArray` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "2aca496b28c4ca6d726715313590c02e6ea34403",
+ "tarball": "http://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "isarray",
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isarray",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -50,13 +100,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "readme": "# lodash.isarray v3.0.4\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.isarray\n```\n\nIn Node.js/io.js:\n\n```js\nvar isArray = require('lodash.isarray');\n```\n\nSee the [documentation](https://lodash.com/docs#isArray) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarray) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash.isarray@3.0.4",
- "_shasum": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55",
- "_resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "_from": "lodash.isarray@3.0.4"
+ "version": "4.0.0"
}
diff --git a/deps/npm/node_modules/lodash.keys/LICENSE b/deps/npm/node_modules/lodash.keys/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.keys/LICENSE
+++ b/deps/npm/node_modules/lodash.keys/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.keys/README.md b/deps/npm/node_modules/lodash.keys/README.md
index 5f69a1826f90e2..e6d7e0ee1f22f4 100644
--- a/deps/npm/node_modules/lodash.keys/README.md
+++ b/deps/npm/node_modules/lodash.keys/README.md
@@ -1,20 +1,18 @@
-# lodash.keys v3.1.2
+# lodash.keys v4.0.0
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.keys` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.keys` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.keys
```
-In Node.js/io.js:
-
+In Node.js:
```js
var keys = require('lodash.keys');
```
-See the [documentation](https://lodash.com/docs#keys) or [package source](https://github.com/lodash/lodash/blob/3.1.2-npm-packages/lodash.keys) for more details.
+See the [documentation](https://lodash.com/docs#keys) or [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash.keys) for more details.
diff --git a/deps/npm/node_modules/lodash.keys/index.js b/deps/npm/node_modules/lodash.keys/index.js
index f4c17749a17ae7..c6ca29d3c20975 100644
--- a/deps/npm/node_modules/lodash.keys/index.js
+++ b/deps/npm/node_modules/lodash.keys/index.js
@@ -1,32 +1,104 @@
/**
- * lodash 3.1.2 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var getNative = require('lodash._getnative'),
- isArguments = require('lodash.isarguments'),
- isArray = require('lodash.isarray');
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ stringTag = '[object String]';
/** Used to detect unsigned integer values. */
-var reIsUint = /^\d+$/;
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+}
-/** Used for native method references. */
-var objectProto = Object.prototype;
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
-/* Native method references for those with the same name as other `lodash` methods. */
-var nativeKeys = getNative(Object, 'keys');
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var getPrototypeOf = Object.getPrototypeOf,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = Object.keys;
/**
- * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
- * of an array-like value.
+ * The base implementation of `_.has` without support for deep paths.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
*/
-var MAX_SAFE_INTEGER = 9007199254740991;
+function baseHas(object, key) {
+ // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,
+ // that are composed entirely of index properties, return `false` for
+ // `hasOwnProperty` checks of them.
+ return hasOwnProperty.call(object, key) ||
+ (typeof object == 'object' && key in object && getPrototypeOf(object) === null);
+}
+
+/**
+ * The base implementation of `_.keys` which doesn't skip the constructor
+ * property of prototypes or treat sparse arrays as dense.
+ *
+ * @private
+ * @type Function
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeys(object) {
+ return nativeKeys(Object(object));
+}
/**
* The base implementation of `_.property` without support for deep paths.
@@ -54,69 +126,189 @@ function baseProperty(key) {
var getLength = baseProperty('length');
/**
- * Checks if `value` is array-like.
+ * Creates an array of index keys for `object` values of arrays,
+ * `arguments` objects, and strings, otherwise `null` is returned.
*
* @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @param {Object} object The object to query.
+ * @returns {Array|null} Returns index keys, else `null`.
*/
-function isArrayLike(value) {
- return value != null && isLength(getLength(value));
+function indexKeys(object) {
+ var length = object ? object.length : undefined;
+ return (isLength(length) && (isArray(object) || isString(object) || isArguments(object)))
+ ? baseTimes(length, String)
+ : null;
}
/**
- * Checks if `value` is a valid array-like index.
+ * Checks if `value` is likely a prototype object.
*
* @private
* @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
*/
-function isIndex(value, length) {
- value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
- length = length == null ? MAX_SAFE_INTEGER : length;
- return value > -1 && value % 1 == 0 && value < length;
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
}
/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ * Checks if `value` is likely an `arguments` object.
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
*/
-function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+function isArguments(value) {
+ // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
}
/**
- * A fallback implementation of `Object.keys` which creates an array of the
- * own enumerable property names of `object`.
+ * Checks if `value` is classified as an `Array` object.
*
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
*/
-function shimKeys(object) {
- var props = keysIn(object),
- propsLength = props.length,
- length = propsLength && object.length;
+var isArray = Array.isArray;
- var allowIndexes = !!length && isLength(length) &&
- (isArray(object) || isArguments(object));
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null &&
+ !(typeof value == 'function' && isFunction(value)) && isLength(getLength(value));
+}
- var index = -1,
- result = [];
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
- while (++index < propsLength) {
- var key = props[index];
- if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
- result.push(key);
- }
- }
- return result;
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
/**
@@ -136,7 +328,10 @@ function shimKeys(object) {
* _.isObject([1, 2, 3]);
* // => true
*
- * _.isObject(1);
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
* // => false
*/
function isObject(value) {
@@ -147,45 +342,59 @@ function isObject(value) {
}
/**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
- * for more details.
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
*
* @static
* @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
- * function Foo() {
- * this.a = 1;
- * this.b = 2;
- * }
+ * _.isObjectLike({});
+ * // => true
*
- * Foo.prototype.c = 3;
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
*
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
+ * _.isObjectLike(_.noop);
+ * // => false
*
- * _.keys('hi');
- * // => ['0', '1']
+ * _.isObjectLike(null);
+ * // => false
*/
-var keys = !nativeKeys ? shimKeys : function(object) {
- var Ctor = object == null ? undefined : object.constructor;
- if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
- (typeof object != 'function' && isArrayLike(object))) {
- return shimKeys(object);
- }
- return isObject(object) ? nativeKeys(object) : [];
-};
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
/**
- * Creates an array of the own and inherited enumerable property names of `object`.
+ * Checks if `value` is classified as a `String` primitive or object.
*
- * **Note:** Non-object values are coerced to objects.
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+ return typeof value == 'string' ||
+ (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);
+}
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
*
* @static
* @memberOf _
@@ -201,32 +410,26 @@ var keys = !nativeKeys ? shimKeys : function(object) {
*
* Foo.prototype.c = 3;
*
- * _.keysIn(new Foo);
- * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
*/
-function keysIn(object) {
- if (object == null) {
- return [];
- }
- if (!isObject(object)) {
- object = Object(object);
- }
- var length = object.length;
- length = (length && isLength(length) &&
- (isArray(object) || isArguments(object)) && length) || 0;
-
- var Ctor = object.constructor,
- index = -1,
- isProto = typeof Ctor == 'function' && Ctor.prototype === object,
- result = Array(length),
- skipIndexes = length > 0;
-
- while (++index < length) {
- result[index] = (index + '');
+function keys(object) {
+ var isProto = isPrototype(object);
+ if (!(isProto || isArrayLike(object))) {
+ return baseKeys(object);
}
+ var indexes = indexKeys(object),
+ skipIndexes = !!indexes,
+ result = indexes || [],
+ length = result.length;
+
for (var key in object) {
- if (!(skipIndexes && isIndex(key, length)) &&
- !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ if (baseHas(object, key) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length))) &&
+ !(isProto && key == 'constructor')) {
result.push(key);
}
}
diff --git a/deps/npm/node_modules/lodash.keys/package.json b/deps/npm/node_modules/lodash.keys/package.json
index 588c63e9ea0e41..ac7c6a0a09ff40 100644
--- a/deps/npm/node_modules/lodash.keys/package.json
+++ b/deps/npm/node_modules/lodash.keys/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.keys",
- "version": "3.1.2",
- "description": "The modern build of lodash’s `_.keys` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.keys@latest",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "lodash.keys@latest",
+ "_id": "lodash.keys@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.keys",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.keys",
+ "raw": "lodash.keys@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
+ },
+ "_requiredBy": [
+ "/"
],
+ "_resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-4.0.0.tgz",
+ "_shasum": "32cb6c0691cbc5ca4b4009992d2c6076bfb98cba",
+ "_shrinkwrap": null,
+ "_spec": "lodash.keys@latest",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,6 +58,41 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {},
+ "description": "The lodash method `_.keys` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "32cb6c0691cbc5ca4b4009992d2c6076bfb98cba",
+ "tarball": "http://registry.npmjs.org/lodash.keys/-/lodash.keys-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "keys",
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.keys",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -50,18 +100,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "dependencies": {
- "lodash._getnative": "^3.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- },
- "readme": "# lodash.keys v3.1.2\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.keys` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.keys\n```\n\nIn Node.js/io.js:\n\n```js\nvar keys = require('lodash.keys');\n```\n\nSee the [documentation](https://lodash.com/docs#keys) or [package source](https://github.com/lodash/lodash/blob/3.1.2-npm-packages/lodash.keys) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash.keys@3.1.2",
- "_shasum": "4dbc0472b156be50a0b286855d1bd0b0c656098a",
- "_resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "_from": "lodash.keys@3.1.2"
+ "version": "4.0.0"
}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/LICENSE.txt b/deps/npm/node_modules/lodash.union/LICENSE
similarity index 89%
rename from deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/LICENSE.txt
rename to deps/npm/node_modules/lodash.union/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/LICENSE.txt
+++ b/deps/npm/node_modules/lodash.union/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.union/README.md b/deps/npm/node_modules/lodash.union/README.md
index 62f67e410f1e15..71d34e172c56e8 100644
--- a/deps/npm/node_modules/lodash.union/README.md
+++ b/deps/npm/node_modules/lodash.union/README.md
@@ -1,20 +1,18 @@
-# lodash.union v3.1.0
+# lodash.union v4.0.1
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.union` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.union` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.union
```
-In Node.js/io.js:
-
+In Node.js:
```js
var union = require('lodash.union');
```
-See the [documentation](https://lodash.com/docs#union) or [package source](https://github.com/lodash/lodash/blob/3.1.0-npm-packages/lodash.union) for more details.
+See the [documentation](https://lodash.com/docs#union) or [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash.union) for more details.
diff --git a/deps/npm/node_modules/lodash.union/index.js b/deps/npm/node_modules/lodash.union/index.js
index b26b28c89cda4c..8e457055783f65 100644
--- a/deps/npm/node_modules/lodash.union/index.js
+++ b/deps/npm/node_modules/lodash.union/index.js
@@ -1,22 +1,179 @@
/**
- * lodash 3.1.0 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.2
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var baseFlatten = require('lodash._baseflatten'),
- baseUniq = require('lodash._baseuniq'),
- restParam = require('lodash.restparam');
+var SetCache = require('lodash._setcache'),
+ arrayIncludes = require('lodash._arrayincludes'),
+ arrayIncludesWith = require('lodash._arrayincludeswith'),
+ baseFlatten = require('lodash._baseflatten'),
+ cacheHas = require('lodash._cachehas'),
+ rest = require('lodash.rest');
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Converts `set` to an array.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/* Built-in method references that are verified to be native. */
+var Set = getNative(global, 'Set');
/**
- * Creates an array of unique values, in order, of the provided arrays using
- * `SameValueZero` for equality comparisons.
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
*
- * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
- * comparisons are like strict equality comparisons, e.g. `===`, except that
- * `NaN` matches `NaN`.
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+function baseUniq(array, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ length = array.length,
+ isCommon = true,
+ result = [],
+ seen = result;
+
+ if (comparator) {
+ isCommon = false;
+ includes = arrayIncludesWith;
+ }
+ else if (length >= LARGE_ARRAY_SIZE) {
+ var set = iteratee ? null : createSet(array);
+ if (set) {
+ return setToArray(set);
+ }
+ isCommon = false;
+ includes = cacheHas;
+ seen = new SetCache;
+ }
+ else {
+ seen = iteratee ? [] : result;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ else if (!includes(seen, computed, comparator)) {
+ if (seen !== result) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+}
+
+/**
+ * Creates a set of `values`.
+ *
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) {
+ return new Set(values);
+};
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Creates an array of unique values, in order, from all of the provided arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
*
* @static
* @memberOf _
@@ -25,11 +182,137 @@ var baseFlatten = require('lodash._baseflatten'),
* @returns {Array} Returns the new array of combined values.
* @example
*
- * _.union([1, 2], [4, 2], [2, 1]);
- * // => [1, 2, 4]
+ * _.union([2, 1], [4, 2], [1, 2]);
+ * // => [2, 1, 4]
*/
-var union = restParam(function(arrays) {
+var union = rest(function(arrays) {
return baseUniq(baseFlatten(arrays, false, true));
});
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+/**
+ * A no-operation function that returns `undefined` regardless of the
+ * arguments it receives.
+ *
+ * @static
+ * @memberOf _
+ * @category Util
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.noop(object) === undefined;
+ * // => true
+ */
+function noop() {
+ // No operation performed.
+}
+
module.exports = union;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/README.md
new file mode 100644
index 00000000000000..af814ce59e6a3d
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludes v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludes` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludes
+```
+
+In Node.js:
+```js
+var arrayIncludes = require('lodash._arrayincludes');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludes) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/index.js
new file mode 100644
index 00000000000000..b9d5f79787ff7c
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/index.js
@@ -0,0 +1,69 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludes(array, value) {
+ return !!array.length && baseIndexOf(array, value, 0) > -1;
+}
+
+/**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+module.exports = arrayIncludes;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/package.json
new file mode 100644
index 00000000000000..81e1b4b0c3fbbb
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludes/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludes@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash._arrayincludes@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludes@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._arrayincludes",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludes",
+ "raw": "lodash._arrayincludes@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz",
+ "_shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludes@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludes` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludes",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/README.md
new file mode 100644
index 00000000000000..26d2593ad3b3cc
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludeswith v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludesWith` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludeswith
+```
+
+In Node.js:
+```js
+var arrayIncludesWith = require('lodash._arrayincludeswith');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludeswith) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/index.js
new file mode 100644
index 00000000000000..b4416d7f0e5269
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/index.js
@@ -0,0 +1,32 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includesWith` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+}
+
+module.exports = arrayIncludesWith;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/package.json
new file mode 100644
index 00000000000000..9a69f51c0b94c3
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._arrayincludeswith/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludeswith@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash._arrayincludeswith@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludeswith@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._arrayincludeswith",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludeswith",
+ "raw": "lodash._arrayincludeswith@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz",
+ "_shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludeswith@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludesWith` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludeswith",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/LICENSE
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/README.md
index f3e227779c4f89..1f6567d52ab2e5 100644
--- a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/README.md
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/README.md
@@ -1,20 +1,18 @@
-# lodash._baseflatten v3.1.4
+# lodash._baseflatten v4.0.0
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseFlatten` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The internal [lodash](https://lodash.com/) function `baseFlatten` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash._baseflatten
```
-In Node.js/io.js:
-
+In Node.js:
```js
var baseFlatten = require('lodash._baseflatten');
```
-See the [package source](https://github.com/lodash/lodash/blob/3.1.4-npm-packages/lodash._baseflatten) for more details.
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._baseflatten) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/index.js
index c43acfa729179c..38ca527b8bc03b 100644
--- a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/index.js
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/index.js
@@ -1,31 +1,20 @@
/**
- * lodash 3.1.4 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var isArguments = require('lodash.isarguments'),
- isArray = require('lodash.isarray');
-/**
- * Checks if `value` is object-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/**
- * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
- * of an array-like value.
- */
+/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
/**
* Appends the elements of `values` to `array`.
*
@@ -45,9 +34,23 @@ function arrayPush(array, values) {
return array;
}
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
/**
- * The base implementation of `_.flatten` with added support for restricting
- * flattening and specifying the start index.
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/**
+ * The base implementation of `_.flatten` with support for restricting flattening.
*
* @private
* @param {Array} array The array to flatten.
@@ -64,7 +67,7 @@ function baseFlatten(array, isDeep, isStrict, result) {
while (++index < length) {
var value = array[index];
- if (isObjectLike(value) && isArrayLike(value) &&
+ if (isArrayLikeObject(value) &&
(isStrict || isArray(value) || isArguments(value))) {
if (isDeep) {
// Recursively flatten arrays (susceptible to call stack limits).
@@ -105,27 +108,217 @@ function baseProperty(key) {
var getLength = baseProperty('length');
/**
- * Checks if `value` is array-like.
+ * Checks if `value` is likely an `arguments` object.
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
*/
function isArrayLike(value) {
- return value != null && isLength(getLength(value));
+ return value != null &&
+ !(typeof value == 'function' && isFunction(value)) && isLength(getLength(value));
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
}
/**
* Checks if `value` is a valid array-like length.
*
- * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
*/
function isLength(value) {
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
module.exports = baseFlatten;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/package.json
index 6d142e1cbaaa4f..8685436a66b1d0 100644
--- a/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/package.json
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._baseflatten/package.json
@@ -1,35 +1,56 @@
{
- "name": "lodash._baseflatten",
- "version": "3.1.4",
- "description": "The modern build of lodash’s internal `baseFlatten` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
+ "_args": [
+ [
+ "lodash._baseflatten@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash._baseflatten@>=4.0.0 <5.0.0",
+ "_id": "lodash._baseflatten@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._baseflatten",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._baseflatten",
+ "raw": "lodash._baseflatten@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-4.0.0.tgz",
+ "_shasum": "d42e26378eca93e8df08cf50c5ee3e404b85d424",
+ "_shrinkwrap": null,
+ "_spec": "lodash._baseflatten@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -37,6 +58,34 @@
"url": "https://mathiasbynens.be/"
}
],
+ "dependencies": {},
+ "description": "The internal lodash function `baseFlatten` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d42e26378eca93e8df08cf50c5ee3e404b85d424",
+ "tarball": "http://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._baseflatten",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/lodash/lodash.git"
@@ -44,17 +93,5 @@
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
},
- "dependencies": {
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- },
- "readme": "# lodash._baseflatten v3.1.4\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseFlatten` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._baseflatten\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseFlatten = require('lodash._baseflatten');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.1.4-npm-packages/lodash._baseflatten) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._baseflatten@3.1.4",
- "_shasum": "0770ff80131af6e34f3b511796a7ba5214e65ff7",
- "_resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz",
- "_from": "lodash._baseflatten@>=3.0.0 <4.0.0"
+ "version": "4.0.0"
}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/README.md
new file mode 100644
index 00000000000000..1bc556dc513245
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/README.md
@@ -0,0 +1,18 @@
+# lodash._cachehas v4.0.0
+
+The internal [lodash](https://lodash.com/) function `cacheHas` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._cachehas
+```
+
+In Node.js:
+```js
+var cacheHas = require('lodash._cachehas');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._cachehas) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/index.js
new file mode 100644
index 00000000000000..93693f8f69ff8e
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/index.js
@@ -0,0 +1,45 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ * Checks if `value` is in `cache`.
+ *
+ * @private
+ * @param {Object} cache The set cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function cacheHas(cache, value) {
+ var map = cache.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ return hash[value] === HASH_UNDEFINED;
+ }
+ return map.has(value);
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+module.exports = cacheHas;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/package.json
new file mode 100644
index 00000000000000..b9d5717a0a915f
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._cachehas/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._cachehas@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash._cachehas@>=4.0.0 <5.0.0",
+ "_id": "lodash._cachehas@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._cachehas",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._cachehas",
+ "raw": "lodash._cachehas@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz",
+ "_shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "_shrinkwrap": null,
+ "_spec": "lodash._cachehas@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `cacheHas` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "tarball": "http://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._cachehas",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/README.md
new file mode 100644
index 00000000000000..56265a8fe436ea
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/README.md
@@ -0,0 +1,18 @@
+# lodash._setcache v4.0.1
+
+The internal [lodash](https://lodash.com/) function `SetCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._setcache
+```
+
+In Node.js:
+```js
+var SetCache = require('lodash._setcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash._setcache) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/index.js
new file mode 100644
index 00000000000000..45a19c662d65d1
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/index.js
@@ -0,0 +1,68 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var MapCache = require('lodash._mapcache');
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ *
+ * Creates a set cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.push(values[index]);
+ }
+}
+
+/**
+ * Adds `value` to the set cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+function cachePush(value) {
+ var map = this.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ hash[value] = HASH_UNDEFINED;
+ }
+ else {
+ map.set(value, HASH_UNDEFINED);
+ }
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+// Add functions to the `SetCache`.
+SetCache.prototype.push = cachePush;
+
+module.exports = SetCache;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
new file mode 100644
index 00000000000000..5737ffe3bddc4a
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
@@ -0,0 +1,18 @@
+# lodash._mapcache v4.0.0
+
+The internal [lodash](https://lodash.com/) function `MapCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._mapcache
+```
+
+In Node.js:
+```js
+var MapCache = require('lodash._mapcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._mapcache) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
new file mode 100644
index 00000000000000..1057c5554dae24
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
@@ -0,0 +1,493 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = global.Array.prototype,
+ objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(global, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates an hash object.
+ *
+ * @private
+ * @returns {Object} Returns the new hash object.
+ */
+function Hash() {}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(hash, key) {
+ return hashHas(hash, key) && delete hash[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(hash, key) {
+ if (nativeCreate) {
+ var result = hash[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(hash, key) ? hash[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(hash, key) {
+ return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function hashSet(hash, key, value) {
+ hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+}
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function MapCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapClear() {
+ this.__data__ = { 'hash': new Hash, 'map': Map ? new Map : [], 'string': new Hash };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapDelete(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashDelete(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map['delete'](key) : assocDelete(data.map, key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapGet(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashGet(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.get(key) : assocGet(data.map, key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapHas(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashHas(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.has(key) : assocHas(data.map, key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache object.
+ */
+function mapSet(key, value) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ hashSet(typeof key == 'string' ? data.string : data.hash, key, value);
+ } else if (Map) {
+ data.map.set(key, value);
+ } else {
+ assocSet(data.map, key, value);
+ }
+ return this;
+}
+
+/**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+}
+
+/**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+// Avoid inheriting from `Object.prototype` when possible.
+Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
+
+// Add functions to the `MapCache`.
+MapCache.prototype.clear = mapClear;
+MapCache.prototype['delete'] = mapDelete;
+MapCache.prototype.get = mapGet;
+MapCache.prototype.has = mapHas;
+MapCache.prototype.set = mapSet;
+
+module.exports = MapCache;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
new file mode 100644
index 00000000000000..0be166f00d5cb2
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._mapcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union/node_modules/lodash._setcache"
+ ]
+ ],
+ "_from": "lodash._mapcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._mapcache@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._setcache/lodash._mapcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._mapcache",
+ "raw": "lodash._mapcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union/lodash._setcache"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz",
+ "_shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "_shrinkwrap": null,
+ "_spec": "lodash._mapcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union/node_modules/lodash._setcache",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `MapCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "tarball": "http://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._mapcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/package.json
new file mode 100644
index 00000000000000..64e553f4ee9a76
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash._setcache/package.json
@@ -0,0 +1,99 @@
+{
+ "_args": [
+ [
+ "lodash._setcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash._setcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._setcache@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash._setcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._setcache",
+ "raw": "lodash._setcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz",
+ "_shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "_shrinkwrap": null,
+ "_spec": "lodash._setcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._mapcache": "^4.0.0"
+ },
+ "description": "The internal lodash function `SetCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "tarball": "http://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash._setcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
+}
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/LICENSE b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/README.md b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/README.md
new file mode 100644
index 00000000000000..ef7ffc65e206a7
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/README.md
@@ -0,0 +1,18 @@
+# lodash.rest v4.0.0
+
+The [lodash](https://lodash.com/) method `_.rest` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.rest
+```
+
+In Node.js:
+```js
+var rest = require('lodash.rest');
+```
+
+See the [documentation](https://lodash.com/docs#rest) or [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash.rest) for more details.
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/index.js b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/index.js
new file mode 100644
index 00000000000000..d77ef5f1214ddf
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/index.js
@@ -0,0 +1,249 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_INTEGER = 1.7976931348623157e+308,
+ NAN = 0 / 0;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match leading and trailing whitespace. */
+var reTrim = /^\s+|\s+$/g;
+
+/** Used to detect bad signed hexadecimal string values. */
+var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+
+/** Used to detect binary string values. */
+var reIsBinary = /^0b[01]+$/i;
+
+/** Used to detect octal string values. */
+var reIsOctal = /^0o[0-7]+$/i;
+
+/** Built-in method references without a dependency on `global`. */
+var freeParseInt = parseInt;
+
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, args) {
+ var length = args ? args.length : 0;
+ switch (length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.rest(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+function rest(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, array);
+ case 1: return func.call(this, args[0], array);
+ case 2: return func.call(this, args[0], args[1], array);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = array;
+ return apply(func, this, otherArgs);
+ };
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3');
+ * // => 3
+ */
+function toInteger(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+ value = toNumber(value);
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = (value < 0 ? -1 : 1);
+ return sign * MAX_INTEGER;
+ }
+ var remainder = value % 1;
+ return value === value ? (remainder ? value - remainder : value) : 0;
+}
+
+/**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3);
+ * // => 3
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3');
+ * // => 3
+ */
+function toNumber(value) {
+ if (isObject(value)) {
+ var other = isFunction(value.valueOf) ? value.valueOf() : value;
+ value = isObject(other) ? (other + '') : other;
+ }
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+ value = value.replace(reTrim, '');
+ var isBinary = reIsBinary.test(value);
+ return (isBinary || reIsOctal.test(value))
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+ : (reIsBadHex.test(value) ? NAN : +value);
+}
+
+module.exports = rest;
diff --git a/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/package.json b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/package.json
new file mode 100644
index 00000000000000..55bebf71e5a673
--- /dev/null
+++ b/deps/npm/node_modules/lodash.union/node_modules/lodash.rest/package.json
@@ -0,0 +1,104 @@
+{
+ "_args": [
+ [
+ "lodash.rest@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.union"
+ ]
+ ],
+ "_from": "lodash.rest@>=4.0.0 <5.0.0",
+ "_id": "lodash.rest@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union/lodash.rest",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.rest",
+ "raw": "lodash.rest@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.union"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.0.tgz",
+ "_shasum": "6a767430c0f0128073cb326aa59dc244de2fe892",
+ "_shrinkwrap": null,
+ "_spec": "lodash.rest@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.union",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.rest` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "6a767430c0f0128073cb326aa59dc244de2fe892",
+ "tarball": "http://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "rest",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.rest",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.union/package.json b/deps/npm/node_modules/lodash.union/package.json
index 7c82a1ef4b536b..dc5b37ac4370a2 100644
--- a/deps/npm/node_modules/lodash.union/package.json
+++ b/deps/npm/node_modules/lodash.union/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.union",
- "version": "3.1.0",
- "description": "The modern build of lodash’s `_.union` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.union@latest",
+ "/Users/rebecca/code/npm"
+ ]
+ ],
+ "_from": "lodash.union@latest",
+ "_id": "lodash.union@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.union",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.union",
+ "raw": "lodash.union@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
+ },
+ "_requiredBy": [
+ "/"
],
+ "_resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.0.1.tgz",
+ "_shasum": "43a1569658707d5c82e436012f381dadc7c469f8",
+ "_shrinkwrap": null,
+ "_spec": "lodash.union@latest",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,39 +58,36 @@
"url": "https://mathiasbynens.be/"
}
],
- "repository": {
- "type": "git",
- "url": "https://github.com/lodash/lodash"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
"dependencies": {
- "lodash._baseflatten": "^3.0.0",
- "lodash._baseuniq": "^3.0.0",
- "lodash.restparam": "^3.0.0"
- },
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
+ "lodash._arrayincludes": "^4.0.0",
+ "lodash._arrayincludeswith": "^4.0.0",
+ "lodash._baseflatten": "^4.0.0",
+ "lodash._cachehas": "^4.0.0",
+ "lodash._setcache": "^4.0.0",
+ "lodash.rest": "^4.0.0"
},
- "_id": "lodash.union@3.1.0",
- "_shasum": "a4a3066fc15d6a7f8151cce9bdfe63dce7f5bcff",
- "_from": "lodash.union@>=3.1.0 <3.2.0",
- "_npmVersion": "2.7.3",
- "_nodeVersion": "0.12.0",
- "_npmUser": {
- "name": "jdalton",
- "email": "john.david.dalton@gmail.com"
+ "description": "The lodash method `_.union` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "43a1569658707d5c82e436012f381dadc7c469f8",
+ "tarball": "http://registry.npmjs.org/lodash.union/-/lodash.union-4.0.1.tgz"
},
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "union",
+ "util"
+ ],
+ "license": "MIT",
"maintainers": [
{
"name": "jdalton",
"email": "john.david.dalton@gmail.com"
},
- {
- "name": "kitcambridge",
- "email": "github@kitcambridge.be"
- },
{
"name": "mathias",
"email": "mathias@qiwi.be"
@@ -83,16 +95,17 @@
{
"name": "phated",
"email": "blaine@iceddev.com"
- },
- {
- "name": "d10",
- "email": "demoneaux@gmail.com"
}
],
- "dist": {
- "shasum": "a4a3066fc15d6a7f8151cce9bdfe63dce7f5bcff",
- "tarball": "http://registry.npmjs.org/lodash.union/-/lodash.union-3.1.0.tgz"
+ "name": "lodash.union",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-3.1.0.tgz"
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
}
diff --git a/deps/npm/node_modules/lodash.uniq/LICENSE b/deps/npm/node_modules/lodash.uniq/LICENSE
index 9cd87e5dcefe58..b054ca5a3ac7d6 100644
--- a/deps/npm/node_modules/lodash.uniq/LICENSE
+++ b/deps/npm/node_modules/lodash.uniq/LICENSE
@@ -1,5 +1,5 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/deps/npm/node_modules/lodash.uniq/README.md b/deps/npm/node_modules/lodash.uniq/README.md
index 7ec935c7aa7fbe..bd52a4af176593 100644
--- a/deps/npm/node_modules/lodash.uniq/README.md
+++ b/deps/npm/node_modules/lodash.uniq/README.md
@@ -1,20 +1,18 @@
-# lodash.uniq v3.2.2
+# lodash.uniq v4.0.1
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.uniq` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.uniq` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.uniq
```
-In Node.js/io.js:
-
+In Node.js:
```js
var uniq = require('lodash.uniq');
```
-See the [documentation](https://lodash.com/docs#uniq) or [package source](https://github.com/lodash/lodash/blob/3.2.2-npm-packages/lodash.uniq) for more details.
+See the [documentation](https://lodash.com/docs#uniq) or [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash.uniq) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/index.js b/deps/npm/node_modules/lodash.uniq/index.js
index 7c9a845e6a491f..b4f28f0cbca320 100644
--- a/deps/npm/node_modules/lodash.uniq/index.js
+++ b/deps/npm/node_modules/lodash.uniq/index.js
@@ -1,106 +1,319 @@
/**
- * lodash 3.2.2 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var baseCallback = require('lodash._basecallback'),
- baseUniq = require('lodash._baseuniq'),
- isIterateeCall = require('lodash._isiterateecall');
+var SetCache = require('lodash._setcache'),
+ arrayIncludes = require('lodash._arrayincludes'),
+ arrayIncludesWith = require('lodash._arrayincludeswith'),
+ cacheHas = require('lodash._cachehas');
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
/**
- * An implementation of `_.uniq` optimized for sorted arrays without support
- * for callback shorthands and `this` binding.
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Converts `set` to an array.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/* Built-in method references that are verified to be native. */
+var Set = getNative(global, 'Set');
+
+/**
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
- * @param {Function} [iteratee] The function invoked per iteration.
- * @returns {Array} Returns the new duplicate-value-free array.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
*/
-function sortedUniq(array, iteratee) {
- var seen,
- index = -1,
+function baseUniq(array, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
length = array.length,
- resIndex = -1,
- result = [];
+ isCommon = true,
+ result = [],
+ seen = result;
+ if (comparator) {
+ isCommon = false;
+ includes = arrayIncludesWith;
+ }
+ else if (length >= LARGE_ARRAY_SIZE) {
+ var set = iteratee ? null : createSet(array);
+ if (set) {
+ return setToArray(set);
+ }
+ isCommon = false;
+ includes = cacheHas;
+ seen = new SetCache;
+ }
+ else {
+ seen = iteratee ? [] : result;
+ }
+ outer:
while (++index < length) {
var value = array[index],
- computed = iteratee ? iteratee(value, index, array) : value;
+ computed = iteratee ? iteratee(value) : value;
- if (!index || seen !== computed) {
- seen = computed;
- result[++resIndex] = value;
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ else if (!includes(seen, computed, comparator)) {
+ if (seen !== result) {
+ seen.push(computed);
+ }
+ result.push(value);
}
}
return result;
}
/**
- * Creates a duplicate-free version of an array, using
- * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
- * for equality comparisons, in which only the first occurence of each element
- * is kept. Providing `true` for `isSorted` performs a faster search algorithm
- * for sorted arrays. If an iteratee function is provided it is invoked for
- * each element in the array to generate the criterion by which uniqueness
- * is computed. The `iteratee` is bound to `thisArg` and invoked with three
- * arguments: (value, index, array).
- *
- * If a property name is provided for `iteratee` the created `_.property`
- * style callback returns the property value of the given element.
+ * Creates a set of `values`.
*
- * If a value is also provided for `thisArg` the created `_.matchesProperty`
- * style callback returns `true` for elements that have a matching property
- * value, else `false`.
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) {
+ return new Set(values);
+};
+
+/**
+ * Gets the native function at `key` of `object`.
*
- * If an object is provided for `iteratee` the created `_.matches` style
- * callback returns `true` for elements that have the properties of the given
- * object, else `false`.
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurrence of each element
+ * is kept.
*
* @static
* @memberOf _
- * @alias unique
* @category Array
* @param {Array} array The array to inspect.
- * @param {boolean} [isSorted] Specify the array is sorted.
- * @param {Function|Object|string} [iteratee] The function invoked per iteration.
- * @param {*} [thisArg] The `this` binding of `iteratee`.
- * @returns {Array} Returns the new duplicate-value-free array.
+ * @returns {Array} Returns the new duplicate free array.
* @example
*
* _.uniq([2, 1, 2]);
* // => [2, 1]
+ */
+function uniq(array) {
+ return (array && array.length)
+ ? baseUniq(array)
+ : [];
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
*
- * // using `isSorted`
- * _.uniq([1, 1, 2], true);
- * // => [1, 2]
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
*
- * // using an iteratee function
- * _.uniq([1, 2.5, 1.5, 2], function(n) {
- * return this.floor(n);
- * }, Math);
- * // => [1, 2.5]
+ * _.isFunction(_);
+ * // => true
*
- * // using the `_.property` callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
+ * _.isFunction(/abc/);
+ * // => false
*/
-function uniq(array, isSorted, iteratee, thisArg) {
- var length = array ? array.length : 0;
- if (!length) {
- return [];
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
}
- if (isSorted != null && typeof isSorted != 'boolean') {
- thisArg = iteratee;
- iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
- isSorted = false;
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
}
- iteratee = iteratee == null ? iteratee : baseCallback(iteratee, thisArg, 3);
- return (isSorted)
- ? sortedUniq(array, iteratee)
- : baseUniq(array, iteratee);
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+/**
+ * A no-operation function that returns `undefined` regardless of the
+ * arguments it receives.
+ *
+ * @static
+ * @memberOf _
+ * @category Util
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.noop(object) === undefined;
+ * // => true
+ */
+function noop() {
+ // No operation performed.
}
module.exports = uniq;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/LICENSE b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/README.md
new file mode 100644
index 00000000000000..af814ce59e6a3d
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludes v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludes` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludes
+```
+
+In Node.js:
+```js
+var arrayIncludes = require('lodash._arrayincludes');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludes) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/index.js
new file mode 100644
index 00000000000000..b9d5f79787ff7c
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/index.js
@@ -0,0 +1,69 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludes(array, value) {
+ return !!array.length && baseIndexOf(array, value, 0) > -1;
+}
+
+/**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+module.exports = arrayIncludes;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/package.json
new file mode 100644
index 00000000000000..c4c081c4e32c7f
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludes/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludes@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.uniq"
+ ]
+ ],
+ "_from": "lodash._arrayincludes@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludes@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq/lodash._arrayincludes",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludes",
+ "raw": "lodash._arrayincludes@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.uniq"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz",
+ "_shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludes@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.uniq",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludes` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludes",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/LICENSE b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/README.md
new file mode 100644
index 00000000000000..26d2593ad3b3cc
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludeswith v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludesWith` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludeswith
+```
+
+In Node.js:
+```js
+var arrayIncludesWith = require('lodash._arrayincludeswith');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludeswith) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/index.js
new file mode 100644
index 00000000000000..b4416d7f0e5269
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/index.js
@@ -0,0 +1,32 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includesWith` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+}
+
+module.exports = arrayIncludesWith;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/package.json
new file mode 100644
index 00000000000000..91ad1a67352024
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._arrayincludeswith/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludeswith@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.uniq"
+ ]
+ ],
+ "_from": "lodash._arrayincludeswith@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludeswith@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq/lodash._arrayincludeswith",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludeswith",
+ "raw": "lodash._arrayincludeswith@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.uniq"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz",
+ "_shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludeswith@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.uniq",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludesWith` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludeswith",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/README.md
deleted file mode 100644
index 11f1a64b71187a..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._basecallback v3.3.1
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCallback` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._basecallback
-```
-
-In Node.js/io.js:
-
-```js
-var baseCallback = require('lodash._basecallback');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.3.1-npm-packages/lodash._basecallback) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/index.js
deleted file mode 100644
index cd44f79ee883ae..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/index.js
+++ /dev/null
@@ -1,422 +0,0 @@
-/**
- * lodash 3.3.1 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var baseIsEqual = require('lodash._baseisequal'),
- bindCallback = require('lodash._bindcallback'),
- isArray = require('lodash.isarray'),
- pairs = require('lodash.pairs');
-
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
- reIsPlainProp = /^\w*$/,
- rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `value` to a string if it's not one. An empty string is returned
- * for `null` or `undefined` values.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
- return value == null ? '' : (value + '');
-}
-
-/**
- * The base implementation of `_.callback` which supports specifying the
- * number of arguments to provide to `func`.
- *
- * @private
- * @param {*} [func=_.identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [argCount] The number of arguments to provide to `func`.
- * @returns {Function} Returns the callback.
- */
-function baseCallback(func, thisArg, argCount) {
- var type = typeof func;
- if (type == 'function') {
- return thisArg === undefined
- ? func
- : bindCallback(func, thisArg, argCount);
- }
- if (func == null) {
- return identity;
- }
- if (type == 'object') {
- return baseMatches(func);
- }
- return thisArg === undefined
- ? property(func)
- : baseMatchesProperty(func, thisArg);
-}
-
-/**
- * The base implementation of `get` without support for string paths
- * and default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array} path The path of the property to get.
- * @param {string} [pathKey] The key representation of path.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path, pathKey) {
- if (object == null) {
- return;
- }
- if (pathKey !== undefined && pathKey in toObject(object)) {
- path = [pathKey];
- }
- var index = 0,
- length = path.length;
-
- while (object != null && index < length) {
- object = object[path[index++]];
- }
- return (index && index == length) ? object : undefined;
-}
-
-/**
- * The base implementation of `_.isMatch` without support for callback
- * shorthands and `this` binding.
- *
- * @private
- * @param {Object} object The object to inspect.
- * @param {Array} matchData The propery names, values, and compare flags to match.
- * @param {Function} [customizer] The function to customize comparing objects.
- * @returns {boolean} Returns `true` if `object` is a match, else `false`.
- */
-function baseIsMatch(object, matchData, customizer) {
- var index = matchData.length,
- length = index,
- noCustomizer = !customizer;
-
- if (object == null) {
- return !length;
- }
- object = toObject(object);
- while (index--) {
- var data = matchData[index];
- if ((noCustomizer && data[2])
- ? data[1] !== object[data[0]]
- : !(data[0] in object)
- ) {
- return false;
- }
- }
- while (++index < length) {
- data = matchData[index];
- var key = data[0],
- objValue = object[key],
- srcValue = data[1];
-
- if (noCustomizer && data[2]) {
- if (objValue === undefined && !(key in object)) {
- return false;
- }
- } else {
- var result = customizer ? customizer(objValue, srcValue, key) : undefined;
- if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
- return false;
- }
- }
- }
- return true;
-}
-
-/**
- * The base implementation of `_.matches` which does not clone `source`.
- *
- * @private
- * @param {Object} source The object of property values to match.
- * @returns {Function} Returns the new function.
- */
-function baseMatches(source) {
- var matchData = getMatchData(source);
- if (matchData.length == 1 && matchData[0][2]) {
- var key = matchData[0][0],
- value = matchData[0][1];
-
- return function(object) {
- if (object == null) {
- return false;
- }
- return object[key] === value && (value !== undefined || (key in toObject(object)));
- };
- }
- return function(object) {
- return baseIsMatch(object, matchData);
- };
-}
-
-/**
- * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
- *
- * @private
- * @param {string} path The path of the property to get.
- * @param {*} srcValue The value to compare.
- * @returns {Function} Returns the new function.
- */
-function baseMatchesProperty(path, srcValue) {
- var isArr = isArray(path),
- isCommon = isKey(path) && isStrictComparable(srcValue),
- pathKey = (path + '');
-
- path = toPath(path);
- return function(object) {
- if (object == null) {
- return false;
- }
- var key = pathKey;
- object = toObject(object);
- if ((isArr || !isCommon) && !(key in object)) {
- object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
- if (object == null) {
- return false;
- }
- key = last(path);
- object = toObject(object);
- }
- return object[key] === srcValue
- ? (srcValue !== undefined || (key in object))
- : baseIsEqual(srcValue, object[key], undefined, true);
- };
-}
-
-/**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new function.
- */
-function baseProperty(key) {
- return function(object) {
- return object == null ? undefined : object[key];
- };
-}
-
-/**
- * A specialized version of `baseProperty` which supports deep paths.
- *
- * @private
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new function.
- */
-function basePropertyDeep(path) {
- var pathKey = (path + '');
- path = toPath(path);
- return function(object) {
- return baseGet(object, path, pathKey);
- };
-}
-
-/**
- * The base implementation of `_.slice` without an iteratee call guard.
- *
- * @private
- * @param {Array} array The array to slice.
- * @param {number} [start=0] The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns the slice of `array`.
- */
-function baseSlice(array, start, end) {
- var index = -1,
- length = array.length;
-
- start = start == null ? 0 : (+start || 0);
- if (start < 0) {
- start = -start > length ? 0 : (length + start);
- }
- end = (end === undefined || end > length) ? length : (+end || 0);
- if (end < 0) {
- end += length;
- }
- length = start > end ? 0 : ((end - start) >>> 0);
- start >>>= 0;
-
- var result = Array(length);
- while (++index < length) {
- result[index] = array[index + start];
- }
- return result;
-}
-
-/**
- * Gets the propery names, values, and compare flags of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the match data of `object`.
- */
-function getMatchData(object) {
- var result = pairs(object),
- length = result.length;
-
- while (length--) {
- result[length][2] = isStrictComparable(result[length][1]);
- }
- return result;
-}
-
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
- var type = typeof value;
- if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
- return true;
- }
- if (isArray(value)) {
- return false;
- }
- var result = !reIsDeepProp.test(value);
- return result || (object != null && value in toObject(object));
-}
-
-/**
- * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` if suitable for strict
- * equality comparisons, else `false`.
- */
-function isStrictComparable(value) {
- return value === value && !isObject(value);
-}
-
-/**
- * Converts `value` to an object if it's not one.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {Object} Returns the object.
- */
-function toObject(value) {
- return isObject(value) ? value : Object(value);
-}
-
-/**
- * Converts `value` to property path array if it's not one.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {Array} Returns the property path array.
- */
-function toPath(value) {
- if (isArray(value)) {
- return value;
- }
- var result = [];
- baseToString(value).replace(rePropName, function(match, number, quote, string) {
- result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
- });
- return result;
-}
-
-/**
- * Gets the last element of `array`.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to query.
- * @returns {*} Returns the last element of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- */
-function last(array) {
- var length = array ? array.length : 0;
- return length ? array[length - 1] : undefined;
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utility
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'user': 'fred' };
- *
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
- return value;
-}
-
-/**
- * Creates a function that returns the property value at `path` on a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utility
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var objects = [
- * { 'a': { 'b': { 'c': 2 } } },
- * { 'a': { 'b': { 'c': 1 } } }
- * ];
- *
- * _.map(objects, _.property('a.b.c'));
- * // => [2, 1]
- *
- * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
- * // => [1, 2]
- */
-function property(path) {
- return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
-}
-
-module.exports = baseCallback;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/README.md
deleted file mode 100644
index 7261bf341cd90e..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._baseisequal v3.0.7
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseIsEqual` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._baseisequal
-```
-
-In Node.js/io.js:
-
-```js
-var baseIsEqual = require('lodash._baseisequal');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.0.7-npm-packages/lodash._baseisequal) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js
deleted file mode 100644
index 76aebe4a3998df..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js
+++ /dev/null
@@ -1,342 +0,0 @@
-/**
- * lodash 3.0.7 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var isArray = require('lodash.isarray'),
- isTypedArray = require('lodash.istypedarray'),
- keys = require('lodash.keys');
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- regexpTag = '[object RegExp]',
- stringTag = '[object String]';
-
-/**
- * Checks if `value` is object-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/** Used for native method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
- * of values.
- */
-var objToString = objectProto.toString;
-
-/**
- * A specialized version of `_.some` for arrays without support for callback
- * shorthands and `this` binding.
- *
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- * else `false`.
- */
-function arraySome(array, predicate) {
- var index = -1,
- length = array.length;
-
- while (++index < length) {
- if (predicate(array[index], index, array)) {
- return true;
- }
- }
- return false;
-}
-
-/**
- * The base implementation of `_.isEqual` without support for `this` binding
- * `customizer` functions.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {Function} [customizer] The function to customize comparing values.
- * @param {boolean} [isLoose] Specify performing partial comparisons.
- * @param {Array} [stackA] Tracks traversed `value` objects.
- * @param {Array} [stackB] Tracks traversed `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
- if (value === other) {
- return true;
- }
- if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
- return value !== value && other !== other;
- }
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
-}
-
-/**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparing objects.
- * @param {boolean} [isLoose] Specify performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `value` objects.
- * @param {Array} [stackB=[]] Tracks traversed `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
- var objIsArr = isArray(object),
- othIsArr = isArray(other),
- objTag = arrayTag,
- othTag = arrayTag;
-
- if (!objIsArr) {
- objTag = objToString.call(object);
- if (objTag == argsTag) {
- objTag = objectTag;
- } else if (objTag != objectTag) {
- objIsArr = isTypedArray(object);
- }
- }
- if (!othIsArr) {
- othTag = objToString.call(other);
- if (othTag == argsTag) {
- othTag = objectTag;
- } else if (othTag != objectTag) {
- othIsArr = isTypedArray(other);
- }
- }
- var objIsObj = objTag == objectTag,
- othIsObj = othTag == objectTag,
- isSameTag = objTag == othTag;
-
- if (isSameTag && !(objIsArr || objIsObj)) {
- return equalByTag(object, other, objTag);
- }
- if (!isLoose) {
- var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
-
- if (objIsWrapped || othIsWrapped) {
- return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
- }
- }
- if (!isSameTag) {
- return false;
- }
- // Assume cyclic values are equal.
- // For more information on detecting circular references see https://es5.github.io/#JO.
- stackA || (stackA = []);
- stackB || (stackB = []);
-
- var length = stackA.length;
- while (length--) {
- if (stackA[length] == object) {
- return stackB[length] == other;
- }
- }
- // Add `object` and `other` to the stack of traversed objects.
- stackA.push(object);
- stackB.push(other);
-
- var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
-
- stackA.pop();
- stackB.pop();
-
- return result;
-}
-
-/**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparing arrays.
- * @param {boolean} [isLoose] Specify performing partial comparisons.
- * @param {Array} [stackA] Tracks traversed `value` objects.
- * @param {Array} [stackB] Tracks traversed `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
-function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
- var index = -1,
- arrLength = array.length,
- othLength = other.length;
-
- if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
- return false;
- }
- // Ignore non-index properties.
- while (++index < arrLength) {
- var arrValue = array[index],
- othValue = other[index],
- result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
-
- if (result !== undefined) {
- if (result) {
- continue;
- }
- return false;
- }
- // Recursively compare arrays (susceptible to call stack limits).
- if (isLoose) {
- if (!arraySome(other, function(othValue) {
- return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
- })) {
- return false;
- }
- } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
- return false;
- }
- }
- return true;
-}
-
-/**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} value The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalByTag(object, other, tag) {
- switch (tag) {
- case boolTag:
- case dateTag:
- // Coerce dates and booleans to numbers, dates to milliseconds and booleans
- // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
- return +object == +other;
-
- case errorTag:
- return object.name == other.name && object.message == other.message;
-
- case numberTag:
- // Treat `NaN` vs. `NaN` as equal.
- return (object != +object)
- ? other != +other
- : object == +other;
-
- case regexpTag:
- case stringTag:
- // Coerce regexes to strings and treat strings primitives and string
- // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
- return object == (other + '');
- }
- return false;
-}
-
-/**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparing values.
- * @param {boolean} [isLoose] Specify performing partial comparisons.
- * @param {Array} [stackA] Tracks traversed `value` objects.
- * @param {Array} [stackB] Tracks traversed `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
- var objProps = keys(object),
- objLength = objProps.length,
- othProps = keys(other),
- othLength = othProps.length;
-
- if (objLength != othLength && !isLoose) {
- return false;
- }
- var index = objLength;
- while (index--) {
- var key = objProps[index];
- if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
- return false;
- }
- }
- var skipCtor = isLoose;
- while (++index < objLength) {
- key = objProps[index];
- var objValue = object[key],
- othValue = other[key],
- result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
-
- // Recursively compare objects (susceptible to call stack limits).
- if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
- return false;
- }
- skipCtor || (skipCtor = key == 'constructor');
- }
- if (!skipCtor) {
- var objCtor = object.constructor,
- othCtor = other.constructor;
-
- // Non `Object` object instances with different constructors are not equal.
- if (objCtor != othCtor &&
- ('constructor' in object && 'constructor' in other) &&
- !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
- typeof othCtor == 'function' && othCtor instanceof othCtor)) {
- return false;
- }
- }
- return true;
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-module.exports = baseIsEqual;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/README.md
deleted file mode 100644
index b1779ccf7fcd17..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash.istypedarray v3.0.2
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isTypedArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash.istypedarray
-```
-
-In Node.js/io.js:
-
-```js
-var isTypedArray = require('lodash.istypedarray');
-```
-
-See the [documentation](https://lodash.com/docs#isTypedArray) or [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash.istypedarray) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js
deleted file mode 100644
index 829a2d77a78ec7..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * lodash 3.0.2 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
-
-/** Used to identify `toStringTag` values of typed arrays. */
-var typedArrayTags = {};
-typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
-typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
-typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
-typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
-typedArrayTags[uint32Tag] = true;
-typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
-typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
-typedArrayTags[dateTag] = typedArrayTags[errorTag] =
-typedArrayTags[funcTag] = typedArrayTags[mapTag] =
-typedArrayTags[numberTag] = typedArrayTags[objectTag] =
-typedArrayTags[regexpTag] = typedArrayTags[setTag] =
-typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
-
-/**
- * Checks if `value` is object-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/** Used for native method references. */
-var objectProto = Object.prototype;
-
-/**
- * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
- * of values.
- */
-var objToString = objectProto.toString;
-
-/**
- * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
- * of an array-like value.
- */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- */
-function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/**
- * Checks if `value` is classified as a typed array.
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
- */
-function isTypedArray(value) {
- return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
-}
-
-module.exports = isTypedArray;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/package.json
deleted file mode 100644
index 1de8c845f39558..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "lodash.istypedarray",
- "version": "3.0.2",
- "description": "The modern build of lodash’s `_.isTypedArray` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
- ],
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "readme": "# lodash.istypedarray v3.0.2\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isTypedArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.istypedarray\n```\n\nIn Node.js/io.js:\n\n```js\nvar isTypedArray = require('lodash.istypedarray');\n```\n\nSee the [documentation](https://lodash.com/docs#isTypedArray) or [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash.istypedarray) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash.istypedarray@3.0.2",
- "_shasum": "9397b113c15f424f320af06caa59cc495e2093ce",
- "_resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.2.tgz",
- "_from": "lodash.istypedarray@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/package.json
deleted file mode 100644
index 33b1d56dc75614..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "lodash._baseisequal",
- "version": "3.0.7",
- "description": "The modern build of lodash’s internal `baseIsEqual` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "dependencies": {
- "lodash.isarray": "^3.0.0",
- "lodash.istypedarray": "^3.0.0",
- "lodash.keys": "^3.0.0"
- },
- "readme": "# lodash._baseisequal v3.0.7\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseIsEqual` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._baseisequal\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseIsEqual = require('lodash._baseisequal');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.7-npm-packages/lodash._baseisequal) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._baseisequal@3.0.7",
- "_shasum": "d8025f76339d29342767dcc887ce5cb95a5b51f1",
- "_resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz",
- "_from": "lodash._baseisequal@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/README.md
deleted file mode 100644
index 9edbbac4b155f1..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash.pairs v3.0.1
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.pairs` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash.pairs
-```
-
-In Node.js/io.js:
-
-```js
-var pairs = require('lodash.pairs');
-```
-
-See the [documentation](https://lodash.com/docs#pairs) or [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash.pairs) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/index.js
deleted file mode 100644
index c0c1877553b7b0..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/node_modules/lodash.pairs/index.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * lodash 3.0.1 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var keys = require('lodash.keys');
-
-/**
- * Converts `value` to an object if it's not one.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {Object} Returns the object.
- */
-function toObject(value) {
- return isObject(value) ? value : Object(value);
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * Creates a two dimensional array of the key-value pairs for `object`,
- * e.g. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
- */
-function pairs(object) {
- object = toObject(object);
-
- var index = -1,
- props = keys(object),
- length = props.length,
- result = Array(length);
-
- while (++index < length) {
- var key = props[index];
- result[index] = [key, object[key]];
- }
- return result;
-}
-
-module.exports = pairs;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/package.json
deleted file mode 100644
index 3a13a7f014288c..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._basecallback/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "lodash._basecallback",
- "version": "3.3.1",
- "description": "The modern build of lodash’s internal `baseCallback` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "dependencies": {
- "lodash._baseisequal": "^3.0.0",
- "lodash._bindcallback": "^3.0.0",
- "lodash.isarray": "^3.0.0",
- "lodash.pairs": "^3.0.0"
- },
- "readme": "# lodash._basecallback v3.3.1\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCallback` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._basecallback\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseCallback = require('lodash._basecallback');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.3.1-npm-packages/lodash._basecallback) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._basecallback@3.3.1",
- "_shasum": "b7b2bb43dc2160424a21ccf26c57e443772a8e27",
- "_resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz",
- "_from": "lodash._basecallback@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/LICENSE b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/README.md
new file mode 100644
index 00000000000000..1bc556dc513245
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/README.md
@@ -0,0 +1,18 @@
+# lodash._cachehas v4.0.0
+
+The internal [lodash](https://lodash.com/) function `cacheHas` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._cachehas
+```
+
+In Node.js:
+```js
+var cacheHas = require('lodash._cachehas');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._cachehas) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/index.js
new file mode 100644
index 00000000000000..93693f8f69ff8e
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/index.js
@@ -0,0 +1,45 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ * Checks if `value` is in `cache`.
+ *
+ * @private
+ * @param {Object} cache The set cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function cacheHas(cache, value) {
+ var map = cache.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ return hash[value] === HASH_UNDEFINED;
+ }
+ return map.has(value);
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+module.exports = cacheHas;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/package.json
new file mode 100644
index 00000000000000..85c05097b7470f
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._cachehas/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._cachehas@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.uniq"
+ ]
+ ],
+ "_from": "lodash._cachehas@>=4.0.0 <5.0.0",
+ "_id": "lodash._cachehas@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq/lodash._cachehas",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._cachehas",
+ "raw": "lodash._cachehas@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.uniq"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz",
+ "_shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "_shrinkwrap": null,
+ "_spec": "lodash._cachehas@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.uniq",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `cacheHas` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "tarball": "http://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._cachehas",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/README.md
deleted file mode 100644
index 0c5c701db23f43..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._isiterateecall v3.0.9
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `isIterateeCall` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._isiterateecall
-```
-
-In Node.js/io.js:
-
-```js
-var isIterateeCall = require('lodash._isiterateecall');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.0.9-npm-packages/lodash._isiterateecall) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/index.js
deleted file mode 100644
index ea3761b6c41ca2..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/index.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * lodash 3.0.9 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^\d+$/;
-
-/**
- * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
- * of an array-like value.
- */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new function.
- */
-function baseProperty(key) {
- return function(object) {
- return object == null ? undefined : object[key];
- };
-}
-
-/**
- * Gets the "length" property value of `object`.
- *
- * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
- * that affects Safari on at least iOS 8.1-8.3 ARM64.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {*} Returns the "length" value.
- */
-var getLength = baseProperty('length');
-
-/**
- * Checks if `value` is array-like.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- */
-function isArrayLike(value) {
- return value != null && isLength(getLength(value));
-}
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
- value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
- length = length == null ? MAX_SAFE_INTEGER : length;
- return value > -1 && value % 1 == 0 && value < length;
-}
-
-/**
- * Checks if the provided arguments are from an iteratee call.
- *
- * @private
- * @param {*} value The potential iteratee value argument.
- * @param {*} index The potential iteratee index or key argument.
- * @param {*} object The potential iteratee object argument.
- * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
- */
-function isIterateeCall(value, index, object) {
- if (!isObject(object)) {
- return false;
- }
- var type = typeof index;
- if (type == 'number'
- ? (isArrayLike(object) && isIndex(index, object.length))
- : (type == 'string' && index in object)) {
- var other = object[index];
- return value === value ? (value === other) : (other !== other);
- }
- return false;
-}
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- */
-function isLength(value) {
- return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/**
- * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
- // Avoid a V8 JIT bug in Chrome 19-20.
- // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-module.exports = isIterateeCall;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/package.json
deleted file mode 100644
index 233f1f94305f24..00000000000000
--- a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._isiterateecall/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "name": "lodash._isiterateecall",
- "version": "3.0.9",
- "description": "The modern build of lodash’s internal `isIterateeCall` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "readme": "# lodash._isiterateecall v3.0.9\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `isIterateeCall` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._isiterateecall\n```\n\nIn Node.js/io.js:\n\n```js\nvar isIterateeCall = require('lodash._isiterateecall');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.9-npm-packages/lodash._isiterateecall) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._isiterateecall@3.0.9",
- "_shasum": "5203ad7ba425fae842460e696db9cf3e6aac057c",
- "_resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "_from": "lodash._isiterateecall@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/LICENSE b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/README.md
new file mode 100644
index 00000000000000..56265a8fe436ea
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/README.md
@@ -0,0 +1,18 @@
+# lodash._setcache v4.0.1
+
+The internal [lodash](https://lodash.com/) function `SetCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._setcache
+```
+
+In Node.js:
+```js
+var SetCache = require('lodash._setcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash._setcache) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/index.js
new file mode 100644
index 00000000000000..45a19c662d65d1
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/index.js
@@ -0,0 +1,68 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var MapCache = require('lodash._mapcache');
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ *
+ * Creates a set cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.push(values[index]);
+ }
+}
+
+/**
+ * Adds `value` to the set cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+function cachePush(value) {
+ var map = this.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ hash[value] = HASH_UNDEFINED;
+ }
+ else {
+ map.set(value, HASH_UNDEFINED);
+ }
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+// Add functions to the `SetCache`.
+SetCache.prototype.push = cachePush;
+
+module.exports = SetCache;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
new file mode 100644
index 00000000000000..5737ffe3bddc4a
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
@@ -0,0 +1,18 @@
+# lodash._mapcache v4.0.0
+
+The internal [lodash](https://lodash.com/) function `MapCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._mapcache
+```
+
+In Node.js:
+```js
+var MapCache = require('lodash._mapcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._mapcache) for more details.
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
new file mode 100644
index 00000000000000..1057c5554dae24
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
@@ -0,0 +1,493 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = global.Array.prototype,
+ objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(global, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates an hash object.
+ *
+ * @private
+ * @returns {Object} Returns the new hash object.
+ */
+function Hash() {}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(hash, key) {
+ return hashHas(hash, key) && delete hash[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(hash, key) {
+ if (nativeCreate) {
+ var result = hash[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(hash, key) ? hash[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(hash, key) {
+ return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function hashSet(hash, key, value) {
+ hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+}
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function MapCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapClear() {
+ this.__data__ = { 'hash': new Hash, 'map': Map ? new Map : [], 'string': new Hash };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapDelete(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashDelete(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map['delete'](key) : assocDelete(data.map, key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapGet(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashGet(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.get(key) : assocGet(data.map, key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapHas(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashHas(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.has(key) : assocHas(data.map, key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache object.
+ */
+function mapSet(key, value) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ hashSet(typeof key == 'string' ? data.string : data.hash, key, value);
+ } else if (Map) {
+ data.map.set(key, value);
+ } else {
+ assocSet(data.map, key, value);
+ }
+ return this;
+}
+
+/**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+}
+
+/**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+// Avoid inheriting from `Object.prototype` when possible.
+Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
+
+// Add functions to the `MapCache`.
+MapCache.prototype.clear = mapClear;
+MapCache.prototype['delete'] = mapDelete;
+MapCache.prototype.get = mapGet;
+MapCache.prototype.has = mapHas;
+MapCache.prototype.set = mapSet;
+
+module.exports = MapCache;
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
new file mode 100644
index 00000000000000..8def8745e0e50c
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._mapcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.uniq/node_modules/lodash._setcache"
+ ]
+ ],
+ "_from": "lodash._mapcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._mapcache@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq/lodash._setcache/lodash._mapcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._mapcache",
+ "raw": "lodash._mapcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.uniq/lodash._setcache"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz",
+ "_shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "_shrinkwrap": null,
+ "_spec": "lodash._mapcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.uniq/node_modules/lodash._setcache",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `MapCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "tarball": "http://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._mapcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/package.json b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/package.json
new file mode 100644
index 00000000000000..0c5d0e01cf3df7
--- /dev/null
+++ b/deps/npm/node_modules/lodash.uniq/node_modules/lodash._setcache/package.json
@@ -0,0 +1,99 @@
+{
+ "_args": [
+ [
+ "lodash._setcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.uniq"
+ ]
+ ],
+ "_from": "lodash._setcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._setcache@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq/lodash._setcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._setcache",
+ "raw": "lodash._setcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.uniq"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz",
+ "_shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "_shrinkwrap": null,
+ "_spec": "lodash._setcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.uniq",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._mapcache": "^4.0.0"
+ },
+ "description": "The internal lodash function `SetCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "tarball": "http://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash._setcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
+}
diff --git a/deps/npm/node_modules/lodash.uniq/package.json b/deps/npm/node_modules/lodash.uniq/package.json
index e29a590d959696..40b46c212fbe2d 100644
--- a/deps/npm/node_modules/lodash.uniq/package.json
+++ b/deps/npm/node_modules/lodash.uniq/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.uniq",
- "version": "3.2.2",
- "description": "The modern build of lodash’s `_.uniq` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.uniq@4.0.1",
+ "/Users/rebecca/code/npm"
+ ]
],
+ "_from": "lodash.uniq@4.0.1",
+ "_id": "lodash.uniq@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.uniq",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.uniq",
+ "raw": "lodash.uniq@4.0.1",
+ "rawSpec": "4.0.1",
+ "scope": null,
+ "spec": "4.0.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.0.1.tgz",
+ "_shasum": "69338b6ad6ac0c716d259f764ac339fc29a7ebea",
+ "_shrinkwrap": null,
+ "_spec": "lodash.uniq@4.0.1",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,41 +58,34 @@
"url": "https://mathiasbynens.be/"
}
],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
"dependencies": {
- "lodash._basecallback": "^3.0.0",
- "lodash._baseuniq": "^3.0.0",
- "lodash._getnative": "^3.0.0",
- "lodash._isiterateecall": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- },
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
+ "lodash._arrayincludes": "^4.0.0",
+ "lodash._arrayincludeswith": "^4.0.0",
+ "lodash._cachehas": "^4.0.0",
+ "lodash._setcache": "^4.0.0"
},
- "_id": "lodash.uniq@3.2.2",
- "_shasum": "146c36f25e75d19501ba402e88ba14937f63cd8b",
- "_from": "lodash.uniq@>=3.2.2 <3.3.0",
- "_npmVersion": "2.12.0",
- "_nodeVersion": "0.12.5",
- "_npmUser": {
- "name": "jdalton",
- "email": "john.david.dalton@gmail.com"
+ "description": "The lodash method `_.uniq` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "69338b6ad6ac0c716d259f764ac339fc29a7ebea",
+ "tarball": "http://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.0.1.tgz"
},
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "uniq",
+ "util"
+ ],
+ "license": "MIT",
"maintainers": [
{
"name": "jdalton",
"email": "john.david.dalton@gmail.com"
},
- {
- "name": "kitcambridge",
- "email": "github@kitcambridge.be"
- },
{
"name": "mathias",
"email": "mathias@qiwi.be"
@@ -85,17 +93,17 @@
{
"name": "phated",
"email": "blaine@iceddev.com"
- },
- {
- "name": "d10",
- "email": "demoneaux@gmail.com"
}
],
- "dist": {
- "shasum": "146c36f25e75d19501ba402e88ba14937f63cd8b",
- "tarball": "http://registry.npmjs.org/lodash.uniq/-/lodash.uniq-3.2.2.tgz"
+ "name": "lodash.uniq",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-3.2.2.tgz",
- "readme": "ERROR: No README data found!"
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
}
diff --git a/deps/npm/node_modules/lodash.without/LICENSE b/deps/npm/node_modules/lodash.without/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/LICENSE.txt b/deps/npm/node_modules/lodash.without/LICENSE.txt
deleted file mode 100644
index 9cd87e5dcefe58..00000000000000
--- a/deps/npm/node_modules/lodash.without/LICENSE.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright 2012-2015 The Dojo Foundation
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
-DocumentCloud and Investigative Reporters & Editors
-
-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/deps/npm/node_modules/lodash.without/README.md b/deps/npm/node_modules/lodash.without/README.md
index 5414eed6d39c0c..a731822884da00 100644
--- a/deps/npm/node_modules/lodash.without/README.md
+++ b/deps/npm/node_modules/lodash.without/README.md
@@ -1,20 +1,18 @@
-# lodash.without v3.2.1
+# lodash.without v4.0.1
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.without` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [lodash](https://lodash.com/) method `_.without` exported as a [Node.js](https://nodejs.org/) module.
## Installation
Using npm:
-
```bash
$ {sudo -H} npm i -g npm
$ npm i --save lodash.without
```
-In Node.js/io.js:
-
+In Node.js:
```js
var without = require('lodash.without');
```
-See the [documentation](https://lodash.com/docs#without) or [package source](https://github.com/lodash/lodash/blob/3.2.1-npm-packages/lodash.without) for more details.
+See the [documentation](https://lodash.com/docs#without) or [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash.without) for more details.
diff --git a/deps/npm/node_modules/lodash.without/index.js b/deps/npm/node_modules/lodash.without/index.js
index 2febcd416bcd2f..92e420c2d00408 100644
--- a/deps/npm/node_modules/lodash.without/index.js
+++ b/deps/npm/node_modules/lodash.without/index.js
@@ -1,19 +1,104 @@
/**
- * lodash 3.2.1 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license
*/
-var baseDifference = require('lodash._basedifference'),
- restParam = require('lodash.restparam');
+var SetCache = require('lodash._setcache'),
+ arrayIncludes = require('lodash._arrayincludes'),
+ arrayIncludesWith = require('lodash._arrayincludeswith'),
+ arrayMap = require('lodash._arraymap'),
+ cacheHas = require('lodash._cachehas'),
+ rest = require('lodash.rest');
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/**
+ * The base implementation of `_.unary` without support for storing wrapper metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new function.
+ */
+function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
/**
- * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
- * of an array-like value.
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
*/
-var MAX_SAFE_INTEGER = 9007199254740991;
+var objectToString = objectProto.toString;
+
+/**
+ * The base implementation of methods like `_.difference` without support for
+ * excluding multiple arrays or iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+function baseDifference(array, values, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ isCommon = true,
+ length = array.length,
+ result = [],
+ valuesLength = values.length;
+
+ if (!length) {
+ return result;
+ }
+ if (iteratee) {
+ values = arrayMap(values, baseUnary(iteratee));
+ }
+ if (comparator) {
+ includes = arrayIncludesWith;
+ isCommon = false;
+ }
+ else if (values.length >= LARGE_ARRAY_SIZE) {
+ includes = cacheHas;
+ isCommon = false;
+ values = new SetCache(values);
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ if (isCommon && computed === computed) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values[valuesIndex] === computed) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ else if (!includes(values, computed, comparator)) {
+ result.push(value);
+ }
+ }
+ return result;
+}
/**
* The base implementation of `_.property` without support for deep paths.
@@ -41,49 +126,192 @@ function baseProperty(key) {
var getLength = baseProperty('length');
/**
- * Checks if `value` is array-like.
+ * Creates an array excluding all provided values using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to filter.
+ * @param {...*} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.without([1, 2, 1, 3], 1, 2);
+ * // => [3]
+ */
+var without = rest(function(array, values) {
+ return isArrayLikeObject(array)
+ ? baseDifference(array, values)
+ : [];
+});
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
*/
function isArrayLike(value) {
- return value != null && isLength(getLength(value));
+ return value != null &&
+ !(typeof value == 'function' && isFunction(value)) && isLength(getLength(value));
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
}
/**
* Checks if `value` is a valid array-like length.
*
- * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
+ * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
*
- * @private
+ * @static
+ * @memberOf _
+ * @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
*/
function isLength(value) {
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
/**
- * Creates an array excluding all provided values using
- * [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
- * for equality comparisons.
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
- * @category Array
- * @param {Array} array The array to filter.
- * @param {...*} [values] The values to exclude.
- * @returns {Array} Returns the new array of filtered values.
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
- * _.without([1, 2, 1, 3], 1, 2);
- * // => [3]
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
*/
-var without = restParam(function(array, values) {
- return isArrayLike(array)
- ? baseDifference(array, values)
- : [];
-});
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
module.exports = without;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/README.md
new file mode 100644
index 00000000000000..af814ce59e6a3d
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludes v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludes` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludes
+```
+
+In Node.js:
+```js
+var arrayIncludes = require('lodash._arrayincludes');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludes) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/index.js
new file mode 100644
index 00000000000000..b9d5f79787ff7c
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/index.js
@@ -0,0 +1,69 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludes(array, value) {
+ return !!array.length && baseIndexOf(array, value, 0) > -1;
+}
+
+/**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+module.exports = arrayIncludes;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/package.json
new file mode 100644
index 00000000000000..e060d56c5ef07a
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludes/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludes@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash._arrayincludes@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludes@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._arrayincludes",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludes",
+ "raw": "lodash._arrayincludes@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz",
+ "_shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludes@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludes` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "670d14047d4fef8147c5560e02edad59f0051251",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludes/-/lodash._arrayincludes-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludes",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/README.md
new file mode 100644
index 00000000000000..26d2593ad3b3cc
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/README.md
@@ -0,0 +1,18 @@
+# lodash._arrayincludeswith v4.0.0
+
+The internal [lodash](https://lodash.com/) function `arrayIncludesWith` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._arrayincludeswith
+```
+
+In Node.js:
+```js
+var arrayIncludesWith = require('lodash._arrayincludeswith');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._arrayincludeswith) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/index.js
new file mode 100644
index 00000000000000..b4416d7f0e5269
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/index.js
@@ -0,0 +1,32 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * A specialized version of `_.includesWith` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+}
+
+module.exports = arrayIncludesWith;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/package.json
new file mode 100644
index 00000000000000..4479e59333229b
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arrayincludeswith/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._arrayincludeswith@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash._arrayincludeswith@>=4.0.0 <5.0.0",
+ "_id": "lodash._arrayincludeswith@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._arrayincludeswith",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arrayincludeswith",
+ "raw": "lodash._arrayincludeswith@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz",
+ "_shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arrayincludeswith@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `arrayIncludesWith` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "cf065785fdbd28753efa4fd2f0b71facc1897a4c",
+ "tarball": "http://registry.npmjs.org/lodash._arrayincludeswith/-/lodash._arrayincludeswith-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arrayincludeswith",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/LICENSE.txt b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/LICENSE.txt
similarity index 100%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arrayeach/LICENSE.txt
rename to deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/LICENSE.txt
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/README.md
similarity index 54%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/README.md
rename to deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/README.md
index 16ee6fd242807c..1c866863dafcf4 100644
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/README.md
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/README.md
@@ -1,6 +1,6 @@
-# lodash._arraycopy v3.0.0
+# lodash._arraymap v3.0.0
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayMap` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
## Installation
@@ -8,13 +8,13 @@ Using npm:
```bash
$ {sudo -H} npm i -g npm
-$ npm i --save lodash._arraycopy
+$ npm i --save lodash._arraymap
```
In Node.js/io.js:
```js
-var arrayCopy = require('lodash._arraycopy');
+var arrayMap = require('lodash._arraymap');
```
-See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arraycopy) for more details.
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arraymap) for more details.
diff --git a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/index.js
similarity index 50%
rename from deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/index.js
rename to deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/index.js
index b9abb2253a1f57..4e0c30bbc17222 100644
--- a/deps/npm/node_modules/lodash.clonedeep/node_modules/lodash._baseclone/node_modules/lodash._arraycopy/index.js
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/index.js
@@ -8,22 +8,23 @@
*/
/**
- * Copies the values of `source` to `array`.
+ * A specialized version of `_.map` for arrays without support for callback
+ * shorthands or `this` binding.
*
* @private
- * @param {Array} source The array to copy values from.
- * @param {Array} [array=[]] The array to copy values to.
- * @returns {Array} Returns `array`.
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
*/
-function arrayCopy(source, array) {
+function arrayMap(array, iteratee) {
var index = -1,
- length = source.length;
+ length = array.length,
+ result = Array(length);
- array || (array = Array(length));
while (++index < length) {
- array[index] = source[index];
+ result[index] = iteratee(array[index], index, array);
}
- return array;
+ return result;
}
-module.exports = arrayCopy;
+module.exports = arrayMap;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/package.json
new file mode 100644
index 00000000000000..e4c9ea7f3c69a9
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._arraymap/package.json
@@ -0,0 +1,99 @@
+{
+ "_args": [
+ [
+ "lodash._arraymap@^3.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash._arraymap@>=3.0.0 <4.0.0",
+ "_id": "lodash._arraymap@3.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._arraymap",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._arraymap",
+ "raw": "lodash._arraymap@^3.0.0",
+ "rawSpec": "^3.0.0",
+ "scope": null,
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz",
+ "_shasum": "1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66",
+ "_shrinkwrap": null,
+ "_spec": "lodash._arraymap@^3.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `arrayMap` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66",
+ "tarball": "http://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._arraymap",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/README.md
deleted file mode 100644
index d9b809cfd2a277..00000000000000
--- a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# lodash._basedifference v3.0.3
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseDifference` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash._basedifference
-```
-
-In Node.js/io.js:
-
-```js
-var baseDifference = require('lodash._basedifference');
-```
-
-See the [package source](https://github.com/lodash/lodash/blob/3.0.3-npm-packages/lodash._basedifference) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/index.js
deleted file mode 100644
index 43c6460fd1e17f..00000000000000
--- a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * lodash 3.0.3 (Custom Build)
- * Build: `lodash modern modularize exports="npm" -o ./`
- * Copyright 2012-2015 The Dojo Foundation
- * Based on Underscore.js 1.8.3
- * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license
- */
-var baseIndexOf = require('lodash._baseindexof'),
- cacheIndexOf = require('lodash._cacheindexof'),
- createCache = require('lodash._createcache');
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * The base implementation of `_.difference` which accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Array} values The values to exclude.
- * @returns {Array} Returns the new array of filtered values.
- */
-function baseDifference(array, values) {
- var length = array ? array.length : 0,
- result = [];
-
- if (!length) {
- return result;
- }
- var index = -1,
- indexOf = baseIndexOf,
- isCommon = true,
- cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
- valuesLength = values.length;
-
- if (cache) {
- indexOf = cacheIndexOf;
- isCommon = false;
- values = cache;
- }
- outer:
- while (++index < length) {
- var value = array[index];
-
- if (isCommon && value === value) {
- var valuesIndex = valuesLength;
- while (valuesIndex--) {
- if (values[valuesIndex] === value) {
- continue outer;
- }
- }
- result.push(value);
- }
- else if (indexOf(values, value, 0) < 0) {
- result.push(value);
- }
- }
- return result;
-}
-
-module.exports = baseDifference;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/package.json
deleted file mode 100644
index 380d53b289b4e4..00000000000000
--- a/deps/npm/node_modules/lodash.without/node_modules/lodash._basedifference/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "lodash._basedifference",
- "version": "3.0.3",
- "description": "The modern build of lodash’s internal `baseDifference` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "author": {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- "contributors": [
- {
- "name": "John-David Dalton",
- "email": "john.david.dalton@gmail.com",
- "url": "http://allyoucanleet.com/"
- },
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
- {
- "name": "Blaine Bublitz",
- "email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
- },
- {
- "name": "Mathias Bynens",
- "email": "mathias@qiwi.be",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
- "dependencies": {
- "lodash._baseindexof": "^3.0.0",
- "lodash._cacheindexof": "^3.0.0",
- "lodash._createcache": "^3.0.0"
- },
- "readme": "# lodash._basedifference v3.0.3\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseDifference` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash._basedifference\n```\n\nIn Node.js/io.js:\n\n```js\nvar baseDifference = require('lodash._basedifference');\n```\n\nSee the [package source](https://github.com/lodash/lodash/blob/3.0.3-npm-packages/lodash._basedifference) for more details.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
- },
- "_id": "lodash._basedifference@3.0.3",
- "_shasum": "f2c204296c2a78e02b389081b6edcac933cf629c",
- "_resolved": "https://registry.npmjs.org/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz",
- "_from": "lodash._basedifference@>=3.0.0 <4.0.0"
-}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/README.md
new file mode 100644
index 00000000000000..1bc556dc513245
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/README.md
@@ -0,0 +1,18 @@
+# lodash._cachehas v4.0.0
+
+The internal [lodash](https://lodash.com/) function `cacheHas` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._cachehas
+```
+
+In Node.js:
+```js
+var cacheHas = require('lodash._cachehas');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._cachehas) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/index.js
new file mode 100644
index 00000000000000..93693f8f69ff8e
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/index.js
@@ -0,0 +1,45 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ * Checks if `value` is in `cache`.
+ *
+ * @private
+ * @param {Object} cache The set cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function cacheHas(cache, value) {
+ var map = cache.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ return hash[value] === HASH_UNDEFINED;
+ }
+ return map.has(value);
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+module.exports = cacheHas;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/package.json
new file mode 100644
index 00000000000000..ab02956384e480
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._cachehas/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._cachehas@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash._cachehas@>=4.0.0 <5.0.0",
+ "_id": "lodash._cachehas@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._cachehas",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._cachehas",
+ "raw": "lodash._cachehas@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz",
+ "_shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "_shrinkwrap": null,
+ "_spec": "lodash._cachehas@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `cacheHas` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "18dab9e3694144f24bcb4a8e03f14616e3453a34",
+ "tarball": "http://registry.npmjs.org/lodash._cachehas/-/lodash._cachehas-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._cachehas",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/README.md
new file mode 100644
index 00000000000000..56265a8fe436ea
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/README.md
@@ -0,0 +1,18 @@
+# lodash._setcache v4.0.1
+
+The internal [lodash](https://lodash.com/) function `SetCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._setcache
+```
+
+In Node.js:
+```js
+var SetCache = require('lodash._setcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash._setcache) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/index.js
new file mode 100644
index 00000000000000..45a19c662d65d1
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/index.js
@@ -0,0 +1,68 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var MapCache = require('lodash._mapcache');
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/**
+ *
+ * Creates a set cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.push(values[index]);
+ }
+}
+
+/**
+ * Adds `value` to the set cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+function cachePush(value) {
+ var map = this.__data__;
+ if (isKeyable(value)) {
+ var data = map.__data__,
+ hash = typeof value == 'string' ? data.string : data.hash;
+
+ hash[value] = HASH_UNDEFINED;
+ }
+ else {
+ map.set(value, HASH_UNDEFINED);
+ }
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+// Add functions to the `SetCache`.
+SetCache.prototype.push = cachePush;
+
+module.exports = SetCache;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
new file mode 100644
index 00000000000000..5737ffe3bddc4a
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/README.md
@@ -0,0 +1,18 @@
+# lodash._mapcache v4.0.0
+
+The internal [lodash](https://lodash.com/) function `MapCache` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._mapcache
+```
+
+In Node.js:
+```js
+var MapCache = require('lodash._mapcache');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash._mapcache) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
new file mode 100644
index 00000000000000..1057c5554dae24
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/index.js
@@ -0,0 +1,493 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = global.Array.prototype,
+ objectProto = global.Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = global.Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(global, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates an hash object.
+ *
+ * @private
+ * @returns {Object} Returns the new hash object.
+ */
+function Hash() {}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(hash, key) {
+ return hashHas(hash, key) && delete hash[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(hash, key) {
+ if (nativeCreate) {
+ var result = hash[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(hash, key) ? hash[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(hash, key) {
+ return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function hashSet(hash, key, value) {
+ hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+}
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+function MapCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapClear() {
+ this.__data__ = { 'hash': new Hash, 'map': Map ? new Map : [], 'string': new Hash };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapDelete(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashDelete(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map['delete'](key) : assocDelete(data.map, key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapGet(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashGet(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.get(key) : assocGet(data.map, key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapHas(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashHas(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.has(key) : assocHas(data.map, key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache object.
+ */
+function mapSet(key, value) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ hashSet(typeof key == 'string' ? data.string : data.hash, key, value);
+ } else if (Map) {
+ data.map.set(key, value);
+ } else {
+ assocSet(data.map, key, value);
+ }
+ return this;
+}
+
+/**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+}
+
+/**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+}
+
+/**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value !== '__proto__') || value == null;
+}
+
+/**
+ * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+// Avoid inheriting from `Object.prototype` when possible.
+Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
+
+// Add functions to the `MapCache`.
+MapCache.prototype.clear = mapClear;
+MapCache.prototype['delete'] = mapDelete;
+MapCache.prototype.get = mapGet;
+MapCache.prototype.has = mapHas;
+MapCache.prototype.set = mapSet;
+
+module.exports = MapCache;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
new file mode 100644
index 00000000000000..f16514890e39a4
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/node_modules/lodash._mapcache/package.json
@@ -0,0 +1,89 @@
+{
+ "_args": [
+ [
+ "lodash._mapcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without/node_modules/lodash._setcache"
+ ]
+ ],
+ "_from": "lodash._mapcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._mapcache@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._setcache/lodash._mapcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._mapcache",
+ "raw": "lodash._mapcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without/lodash._setcache"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz",
+ "_shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "_shrinkwrap": null,
+ "_spec": "lodash._mapcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without/node_modules/lodash._setcache",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `MapCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1ddb7171850b4cf6b8d8329f9c6123b43b7565ad",
+ "tarball": "http://registry.npmjs.org/lodash._mapcache/-/lodash._mapcache-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._mapcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/package.json
new file mode 100644
index 00000000000000..8535c4aa0857bf
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash._setcache/package.json
@@ -0,0 +1,99 @@
+{
+ "_args": [
+ [
+ "lodash._setcache@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash._setcache@>=4.0.0 <5.0.0",
+ "_id": "lodash._setcache@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash._setcache",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash._setcache",
+ "raw": "lodash._setcache@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz",
+ "_shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "_shrinkwrap": null,
+ "_spec": "lodash._setcache@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._mapcache": "^4.0.0"
+ },
+ "description": "The internal lodash function `SetCache` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d8c6196cee20791ed3545b08c6cea0278df0401e",
+ "tarball": "http://registry.npmjs.org/lodash._setcache/-/lodash._setcache-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash._setcache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
+}
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/LICENSE b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/LICENSE
new file mode 100644
index 00000000000000..b054ca5a3ac7d6
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/README.md b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/README.md
new file mode 100644
index 00000000000000..ef7ffc65e206a7
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/README.md
@@ -0,0 +1,18 @@
+# lodash.rest v4.0.0
+
+The [lodash](https://lodash.com/) method `_.rest` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.rest
+```
+
+In Node.js:
+```js
+var rest = require('lodash.rest');
+```
+
+See the [documentation](https://lodash.com/docs#rest) or [package source](https://github.com/lodash/lodash/blob/4.0.0-npm-packages/lodash.rest) for more details.
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/index.js b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/index.js
new file mode 100644
index 00000000000000..d77ef5f1214ddf
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/index.js
@@ -0,0 +1,249 @@
+/**
+ * lodash 4.0.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_INTEGER = 1.7976931348623157e+308,
+ NAN = 0 / 0;
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to match leading and trailing whitespace. */
+var reTrim = /^\s+|\s+$/g;
+
+/** Used to detect bad signed hexadecimal string values. */
+var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+
+/** Used to detect binary string values. */
+var reIsBinary = /^0b[01]+$/i;
+
+/** Used to detect octal string values. */
+var reIsOctal = /^0o[0-7]+$/i;
+
+/** Built-in method references without a dependency on `global`. */
+var freeParseInt = parseInt;
+
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, args) {
+ var length = args ? args.length : 0;
+ switch (length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+/** Used for built-in method references. */
+var objectProto = global.Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.rest(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+function rest(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, array);
+ case 1: return func.call(this, args[0], array);
+ case 2: return func.call(this, args[0], args[1], array);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = array;
+ return apply(func, this, otherArgs);
+ };
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8 which returns 'object' for typed array constructors, and
+ // PhantomJS 1.9 which returns 'function' for `NodeList` instances.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3');
+ * // => 3
+ */
+function toInteger(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+ value = toNumber(value);
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = (value < 0 ? -1 : 1);
+ return sign * MAX_INTEGER;
+ }
+ var remainder = value % 1;
+ return value === value ? (remainder ? value - remainder : value) : 0;
+}
+
+/**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3);
+ * // => 3
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3');
+ * // => 3
+ */
+function toNumber(value) {
+ if (isObject(value)) {
+ var other = isFunction(value.valueOf) ? value.valueOf() : value;
+ value = isObject(other) ? (other + '') : other;
+ }
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+ value = value.replace(reTrim, '');
+ var isBinary = reIsBinary.test(value);
+ return (isBinary || reIsOctal.test(value))
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+ : (reIsBadHex.test(value) ? NAN : +value);
+}
+
+module.exports = rest;
diff --git a/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/package.json b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/package.json
new file mode 100644
index 00000000000000..1d174009deec34
--- /dev/null
+++ b/deps/npm/node_modules/lodash.without/node_modules/lodash.rest/package.json
@@ -0,0 +1,104 @@
+{
+ "_args": [
+ [
+ "lodash.rest@^4.0.0",
+ "/Users/rebecca/code/npm/node_modules/lodash.without"
+ ]
+ ],
+ "_from": "lodash.rest@>=4.0.0 <5.0.0",
+ "_id": "lodash.rest@4.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without/lodash.rest",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.rest",
+ "raw": "lodash.rest@^4.0.0",
+ "rawSpec": "^4.0.0",
+ "scope": null,
+ "spec": ">=4.0.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.without"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.0.tgz",
+ "_shasum": "6a767430c0f0128073cb326aa59dc244de2fe892",
+ "_shrinkwrap": null,
+ "_spec": "lodash.rest@^4.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/lodash.without",
+ "author": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.rest` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "6a767430c0f0128073cb326aa59dc244de2fe892",
+ "tarball": "http://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "rest",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.rest",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.0"
+}
diff --git a/deps/npm/node_modules/lodash.without/package.json b/deps/npm/node_modules/lodash.without/package.json
index 9e15bfac021dd0..6859f595c7d76b 100644
--- a/deps/npm/node_modules/lodash.without/package.json
+++ b/deps/npm/node_modules/lodash.without/package.json
@@ -1,41 +1,56 @@
{
- "name": "lodash.without",
- "version": "3.2.1",
- "description": "The modern build of lodash’s `_.without` as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": [
- "lodash",
- "lodash-modularized",
- "stdlib",
- "util"
+ "_args": [
+ [
+ "lodash.without@latest",
+ "/Users/rebecca/code/npm"
+ ]
],
+ "_from": "lodash.without@latest",
+ "_id": "lodash.without@4.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/lodash.without",
+ "_nodeVersion": "5.4.0",
+ "_npmUser": {
+ "email": "john.david.dalton@gmail.com",
+ "name": "jdalton"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lodash.without",
+ "raw": "lodash.without@latest",
+ "rawSpec": "latest",
+ "scope": null,
+ "spec": "latest",
+ "type": "tag"
+ },
+ "_requiredBy": [
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.0.1.tgz",
+ "_shasum": "b8c65653ade3968fc2194f83a19e1c755214f7ea",
+ "_shrinkwrap": null,
+ "_spec": "lodash.without@latest",
+ "_where": "/Users/rebecca/code/npm",
"author": {
- "name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
+ "name": "John-David Dalton",
"url": "http://allyoucanleet.com/"
},
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
"contributors": [
{
"name": "John-David Dalton",
"email": "john.david.dalton@gmail.com",
"url": "http://allyoucanleet.com/"
},
- {
- "name": "Benjamin Tan",
- "email": "demoneaux@gmail.com",
- "url": "https://d10.github.io/"
- },
{
"name": "Blaine Bublitz",
"email": "blaine@iceddev.com",
- "url": "http://www.iceddev.com/"
- },
- {
- "name": "Kit Cambridge",
- "email": "github@kitcambridge.be",
- "url": "http://kitcambridge.be/"
+ "url": "https://github.com/phated"
},
{
"name": "Mathias Bynens",
@@ -43,38 +58,36 @@
"url": "https://mathiasbynens.be/"
}
],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/lodash/lodash.git"
- },
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- },
"dependencies": {
- "lodash._basedifference": "^3.0.0",
- "lodash.restparam": "^3.0.0"
- },
- "bugs": {
- "url": "https://github.com/lodash/lodash/issues"
+ "lodash._arrayincludes": "^4.0.0",
+ "lodash._arrayincludeswith": "^4.0.0",
+ "lodash._arraymap": "^3.0.0",
+ "lodash._cachehas": "^4.0.0",
+ "lodash._setcache": "^4.0.0",
+ "lodash.rest": "^4.0.0"
},
- "_id": "lodash.without@3.2.1",
- "_shasum": "d69614b3512e52294b6abab782e7ca96538ce816",
- "_from": "lodash.without@>=3.2.1 <3.3.0",
- "_npmVersion": "2.10.0",
- "_nodeVersion": "0.12.3",
- "_npmUser": {
- "name": "jdalton",
- "email": "john.david.dalton@gmail.com"
+ "description": "The lodash method `_.without` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "b8c65653ade3968fc2194f83a19e1c755214f7ea",
+ "tarball": "http://registry.npmjs.org/lodash.without/-/lodash.without-4.0.1.tgz"
},
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util",
+ "without"
+ ],
+ "license": "MIT",
"maintainers": [
{
"name": "jdalton",
"email": "john.david.dalton@gmail.com"
},
- {
- "name": "kitcambridge",
- "email": "github@kitcambridge.be"
- },
{
"name": "mathias",
"email": "mathias@qiwi.be"
@@ -82,16 +95,17 @@
{
"name": "phated",
"email": "blaine@iceddev.com"
- },
- {
- "name": "d10",
- "email": "demoneaux@gmail.com"
}
],
- "dist": {
- "shasum": "d69614b3512e52294b6abab782e7ca96538ce816",
- "tarball": "http://registry.npmjs.org/lodash.without/-/lodash.without-3.2.1.tgz"
+ "name": "lodash.without",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-3.2.1.tgz"
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
}
diff --git a/deps/npm/node_modules/node-gyp/CHANGELOG.md b/deps/npm/node_modules/node-gyp/CHANGELOG.md
index 4c8cc367814497..a0193adf0c74bd 100644
--- a/deps/npm/node_modules/node-gyp/CHANGELOG.md
+++ b/deps/npm/node_modules/node-gyp/CHANGELOG.md
@@ -1,3 +1,13 @@
+v3.1.0 2015-11-14
+
+* [[`9049241f91`](https://github.com/nodejs/node-gyp/commit/9049241f91)] - **gyp**: don't use links at all, just copy the files instead (Nathan Zadoks)
+* [[`8ef90348d1`](https://github.com/nodejs/node-gyp/commit/8ef90348d1)] - **gyp**: apply https://codereview.chromium.org/11361103/ (Nathan Rajlich)
+* [[`a2ed0df84e`](https://github.com/nodejs/node-gyp/commit/a2ed0df84e)] - **gyp**: always install into $PRODUCT_DIR (Nathan Rajlich)
+* [[`cc8b2fa83e`](https://github.com/nodejs/node-gyp/commit/cc8b2fa83e)] - Update gyp to b3cef02. (Imran Iqbal) [#781](https://github.com/nodejs/node-gyp/pull/781)
+* [[`f5d86eb84e`](https://github.com/nodejs/node-gyp/commit/f5d86eb84e)] - Update to tar@2.0.0. (Edgar Muentes) [#797](https://github.com/nodejs/node-gyp/pull/797)
+* [[`2ac7de02c4`](https://github.com/nodejs/node-gyp/commit/2ac7de02c4)] - Fix infinite loop with zero-length options. (Ben Noordhuis) [#745](https://github.com/nodejs/node-gyp/pull/745)
+* [[`101bed639b`](https://github.com/nodejs/node-gyp/commit/101bed639b)] - This platform value came from debian package, and now the value (Jérémy Lal) [#738](https://github.com/nodejs/node-gyp/pull/738)
+
v3.0.3 2015-09-14
* [[`ad827cda30`](https://github.com/nodejs/node-gyp/commit/ad827cda30)] - tarballUrl global and && when checking for iojs (Lars-Magnus Skog) [#729](https://github.com/nodejs/node-gyp/pull/729)
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index 779dc6adc2713b..dec739f16fde99 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -38,11 +38,11 @@ You will also need to install:
* A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org)
* On Mac OS X:
* `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported) (already installed on Mac OS X)
- * [Xcode](https://developer.apple.com/xcode/downloads/)
+ * [Xcode](https://developer.apple.com/xcode/download/)
* You also need to install the `Command Line Tools` via Xcode. You can find this under the menu `Xcode -> Preferences -> Downloads`
* This step will install `gcc` and the related toolchain containing `make`
* On Windows:
- * [Python][windows-python] ([`v2.7.3`][windows-python-v2.7.3] recommended, `v3.x.x` is __*not*__ supported)
+ * Python ([`v2.7.10`][python-v2.7.10] recommended, `v3.x.x` is __*not*__ supported)
* Make sure that you have a PYTHON environment variable, and it is set to drive:\path\to\python.exe not to a folder
* Windows XP/Vista/7:
* Microsoft Visual Studio C++ 2013 ([Express][msvc2013] version works well)
@@ -50,6 +50,14 @@ You will also need to install:
* If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]
* Windows 7/8:
* Microsoft Visual Studio C++ 2013 for Windows Desktop ([Express][msvc2013] version works well)
+ * Windows 10:
+ * Install the latest version of npm (3.3.6 at the time of writing)
+ * Install Python 2.7 from https://www.python.org/download/releases/2.7/ and make sure its on the System Path
+ * Install Visual Studio Community 2015 Edition. (Custom Install, Select Visual C++ during the installation)
+ * Set the environment variable GYP_MSVS_VERSION=2015
+ * Run the command prompt as Administrator
+ * $ npm install (--msvs_version=2015) <-- Shouldn't be needed if you have set GYP_MSVS_VERSION env
+ * If the above steps have not worked or you are unsure please visit http://www.serverpals.com/blog/building-using-node-gyp-with-visual-studio-express-2015-on-windows-10-pro-x64 for a full walkthrough
* All Windows Versions
* For 64-bit builds of node and native modules you will _**also**_ need the [Windows 7 64-bit SDK][win7sdk]
* You may need to run one of the following commands if your build complains about WindowsSDKDir not being set, and you are sure you have already installed the SDK:
@@ -136,9 +144,9 @@ A barebones `gyp` file appropriate for building a node addon looks like:
Some additional resources for addons and writing `gyp` files:
* ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative)
- * ["Hello World" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)
- * [gyp user documentation](https://chromium.googlesource.com/external/gyp/+/master/docs/UserDocumentation.md)
- * [gyp input format reference](https://chromium.googlesource.com/external/gyp/+/master/docs/InputFormatReference.md)
+ * ["Hello World" node addon example](https://github.com/nodejs/node/tree/master/test/addons/hello-world)
+ * [gyp user documentation](https://gyp.gsrc.io/docs/UserDocumentation.md)
+ * [gyp input format reference](https://gyp.gsrc.io/docs/InputFormatReference.md)
* [*"binding.gyp" files out in the wild* wiki page](https://github.com/nodejs/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)
@@ -185,8 +193,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-[windows-python]: http://www.python.org/getit/windows
-[windows-python-v2.7.3]: http://www.python.org/download/releases/2.7.3#download
-[msvc2013]: http://www.microsoft.com/en-gb/download/details.aspx?id=44914
-[win7sdk]: http://www.microsoft.com/en-us/download/details.aspx?id=8279
-[compiler update for the Windows SDK 7.1]: http://www.microsoft.com/en-us/download/details.aspx?id=4422
+[python-v2.7.10]: https://www.python.org/downloads/release/python-2710/
+[msvc2013]: https://www.microsoft.com/en-gb/download/details.aspx?id=44914
+[win7sdk]: https://www.microsoft.com/en-us/download/details.aspx?id=8279
+[compiler update for the Windows SDK 7.1]: https://www.microsoft.com/en-us/download/details.aspx?id=4422
diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index 510b00c713f55c..3372bfa521f623 100644
--- a/deps/npm/node_modules/node-gyp/addon.gypi
+++ b/deps/npm/node_modules/node-gyp/addon.gypi
@@ -65,6 +65,11 @@
'DYLIB_INSTALL_NAME_BASE': '@rpath'
},
}],
+ [ 'OS=="aix"', {
+ 'ldflags': [
+ '-Wl,-bimport:<(node_exp_file)'
+ ],
+ }],
[ 'OS=="win"', {
'libraries': [
'-lkernel32.lib',
diff --git a/deps/npm/node_modules/node-gyp/gyp/AUTHORS b/deps/npm/node_modules/node-gyp/gyp/AUTHORS
index 9389ca0a23e48f..fecf84a1c4d72a 100644
--- a/deps/npm/node_modules/node-gyp/gyp/AUTHORS
+++ b/deps/npm/node_modules/node-gyp/gyp/AUTHORS
@@ -9,3 +9,4 @@ Steven Knight
Ryan Norton
David J. Sankel
Eric N. Vander Weele
+Tom Freudenberg
diff --git a/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py b/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
index abec27b3e33120..dde025383c3276 100644
--- a/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
+++ b/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
@@ -125,15 +125,13 @@ def CheckChangeOnCommit(input_api, output_api):
TRYBOTS = [
- 'gyp-win32',
- 'gyp-win64',
- 'gyp-linux',
- 'gyp-mac',
- 'gyp-android'
+ 'linux_try',
+ 'mac_try',
+ 'win_try',
]
def GetPreferredTryMasters(_, change):
return {
- 'tryserver.nacl': { t: set(['defaulttests']) for t in TRYBOTS },
+ 'client.gyp': { t: set(['defaulttests']) for t in TRYBOTS },
}
diff --git a/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py b/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
index f46ab1822fe321..9a2b71f1b355cf 100755
--- a/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
+++ b/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
@@ -3,27 +3,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-
"""Argument-less script to select what to run on the buildbots."""
-
-import filecmp
import os
import shutil
import subprocess
import sys
-if sys.platform in ['win32', 'cygwin']:
- EXE_SUFFIX = '.exe'
-else:
- EXE_SUFFIX = ''
-
-
BUILDBOT_DIR = os.path.dirname(os.path.abspath(__file__))
TRUNK_DIR = os.path.dirname(BUILDBOT_DIR)
ROOT_DIR = os.path.dirname(TRUNK_DIR)
-ANDROID_DIR = os.path.join(ROOT_DIR, 'android')
CMAKE_DIR = os.path.join(ROOT_DIR, 'cmake')
CMAKE_BIN_DIR = os.path.join(CMAKE_DIR, 'bin')
OUT_DIR = os.path.join(TRUNK_DIR, 'out')
@@ -71,95 +61,6 @@ def PrepareCmake():
CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR)
-_ANDROID_SETUP = 'source build/envsetup.sh && lunch full-eng'
-
-
-def PrepareAndroidTree():
- """Prepare an Android tree to run 'android' format tests."""
- if os.environ['BUILDBOT_CLOBBER'] == '1':
- print '@@@BUILD_STEP Clobber Android checkout@@@'
- shutil.rmtree(ANDROID_DIR)
-
- # (Re)create the directory so that the following steps will succeed.
- if not os.path.isdir(ANDROID_DIR):
- os.mkdir(ANDROID_DIR)
-
- # We use a manifest from the gyp project listing pinned revisions of AOSP to
- # use, to ensure that we test against a stable target. This needs to be
- # updated to pick up new build system changes sometimes, so we must test if
- # it has changed.
- manifest_filename = 'aosp_manifest.xml'
- gyp_manifest = os.path.join(BUILDBOT_DIR, manifest_filename)
- android_manifest = os.path.join(ANDROID_DIR, '.repo', 'manifests',
- manifest_filename)
- manifest_is_current = (os.path.isfile(android_manifest) and
- filecmp.cmp(gyp_manifest, android_manifest))
- if not manifest_is_current:
- # It's safe to repeat these steps, so just do them again to make sure we are
- # in a good state.
- print '@@@BUILD_STEP Initialize Android checkout@@@'
- CallSubProcess(
- ['repo', 'init',
- '-u', 'https://android.googlesource.com/platform/manifest',
- '-b', 'master',
- '-g', 'all,-notdefault,-device,-darwin,-mips,-x86'],
- cwd=ANDROID_DIR)
- shutil.copy(gyp_manifest, android_manifest)
-
- print '@@@BUILD_STEP Sync Android@@@'
- CallSubProcess(['repo', 'sync', '-j4', '-m', manifest_filename],
- cwd=ANDROID_DIR)
-
- # If we already built the system image successfully and didn't sync to a new
- # version of the source, skip running the build again as it's expensive even
- # when there's nothing to do.
- system_img = os.path.join(ANDROID_DIR, 'out', 'target', 'product', 'generic',
- 'system.img')
- if manifest_is_current and os.path.isfile(system_img):
- return
-
- print '@@@BUILD_STEP Build Android@@@'
- CallSubProcess(
- ['/bin/bash',
- '-c', '%s && make -j4' % _ANDROID_SETUP],
- cwd=ANDROID_DIR)
-
-
-def StartAndroidEmulator():
- """Start an android emulator from the built android tree."""
- print '@@@BUILD_STEP Start Android emulator@@@'
-
- CallSubProcess(['/bin/bash', '-c',
- '%s && adb kill-server ' % _ANDROID_SETUP],
- cwd=ANDROID_DIR)
-
- # If taskset is available, use it to force adbd to run only on one core, as,
- # sadly, it improves its reliability (see crbug.com/268450).
- adbd_wrapper = ''
- with open(os.devnull, 'w') as devnull_fd:
- if subprocess.call(['which', 'taskset'], stdout=devnull_fd) == 0:
- adbd_wrapper = 'taskset -c 0'
- CallSubProcess(['/bin/bash', '-c',
- '%s && %s adb start-server ' % (_ANDROID_SETUP, adbd_wrapper)],
- cwd=ANDROID_DIR)
-
- subprocess.Popen(
- ['/bin/bash', '-c',
- '%s && emulator -no-window' % _ANDROID_SETUP],
- cwd=ANDROID_DIR)
- CallSubProcess(
- ['/bin/bash', '-c',
- '%s && adb wait-for-device' % _ANDROID_SETUP],
- cwd=ANDROID_DIR)
-
-
-def StopAndroidEmulator():
- """Stop all android emulators."""
- print '@@@BUILD_STEP Stop Android emulator@@@'
- # If this fails, it's because there is no emulator running.
- subprocess.call(['pkill', 'emulator.*'])
-
-
def GypTestFormat(title, format=None, msvs_version=None, tests=[]):
"""Run the gyp tests for a given format, emitting annotator tags.
@@ -185,15 +86,7 @@ def GypTestFormat(title, format=None, msvs_version=None, tests=[]):
'--format', format,
'--path', CMAKE_BIN_DIR,
'--chdir', 'gyp'] + tests)
- if format == 'android':
- # gyptest needs the environment setup from envsetup/lunch in order to build
- # using the 'android' backend, so this is done in a single shell.
- retcode = subprocess.call(
- ['/bin/bash',
- '-c', '%s && cd %s && %s' % (_ANDROID_SETUP, ROOT_DIR, command)],
- cwd=ANDROID_DIR, env=env)
- else:
- retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True)
+ retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True)
if retcode:
# Emit failure tag, and keep going.
print '@@@STEP_FAILURE@@@'
@@ -209,15 +102,7 @@ def GypBuild():
print 'Done.'
retcode = 0
- # The Android gyp bot runs on linux so this must be tested first.
- if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android':
- PrepareAndroidTree()
- StartAndroidEmulator()
- try:
- retcode += GypTestFormat('android')
- finally:
- StopAndroidEmulator()
- elif sys.platform.startswith('linux'):
+ if sys.platform.startswith('linux'):
retcode += GypTestFormat('ninja')
retcode += GypTestFormat('make')
PrepareCmake()
diff --git a/deps/npm/node_modules/node-gyp/gyp/buildbot/commit_queue/cq_config.json b/deps/npm/node_modules/node-gyp/gyp/buildbot/commit_queue/cq_config.json
index bbf20e394f3bb6..656c21e54fb12f 100644
--- a/deps/npm/node_modules/node-gyp/gyp/buildbot/commit_queue/cq_config.json
+++ b/deps/npm/node_modules/node-gyp/gyp/buildbot/commit_queue/cq_config.json
@@ -3,7 +3,6 @@
"launched": {
"tryserver.nacl": {
"gyp-presubmit": ["defaulttests"],
- "gyp-android": ["defaulttests"],
"gyp-linux": ["defaulttests"],
"gyp-mac": ["defaulttests"],
"gyp-win32": ["defaulttests"],
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyp_main.py b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
index 4ec872f0f95aa3..25a6eba94aae7d 100755
--- a/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
+++ b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
@@ -4,15 +4,13 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import os
import sys
-# TODO(mark): sys.path manipulation is some temporary testing stuff.
-try:
- import gyp
-except ImportError, e:
- import os.path
- sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
- import gyp
+# Make sure we're using the version of pylib in this repo, not one installed
+# elsewhere on the system.
+sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
+import gyp
if __name__ == '__main__':
sys.exit(gyp.script_main())
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
index dde0e07092b167..4985756bdde76a 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
@@ -708,10 +708,7 @@ def _ValidateSettings(validators, settings, stderr):
_MSBuildOnly(_compile, 'BuildingInIDE', _boolean)
_MSBuildOnly(_compile, 'CompileAsManaged',
_Enumeration([], new=['false',
- 'true', # /clr
- 'Pure', # /clr:pure
- 'Safe', # /clr:safe
- 'OldSyntax'])) # /clr:oldSyntax
+ 'true'])) # /clr
_MSBuildOnly(_compile, 'CreateHotpatchableImage', _boolean) # /hotpatch
_MSBuildOnly(_compile, 'MultiProcessorCompilation', _boolean) # /MP
_MSBuildOnly(_compile, 'PreprocessOutputPath', _string) # /Fi
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
index d24dcac4d5e13e..bf6ea6b802ff91 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
@@ -296,7 +296,7 @@ def testValidateMSBuildSettings_settings(self):
'BuildingInIDE': 'true',
'CallingConvention': 'Cdecl',
'CompileAs': 'CompileAsC',
- 'CompileAsManaged': 'Pure',
+ 'CompileAsManaged': 'true',
'CreateHotpatchableImage': 'true',
'DebugInformationFormat': 'ProgramDatabase',
'DisableLanguageExtensions': 'true',
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
index 92e583fd6e27c7..d9bfa684fa30c2 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
@@ -84,10 +84,11 @@ def SetupScript(self, target_arch):
# vcvars32, which it can only find if VS??COMNTOOLS is set, which it
# isn't always.
if target_arch == 'x86':
- if self.short_name == '2013' and (
+ if self.short_name >= '2013' and self.short_name[-1] != 'e' and (
os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
- # VS2013 non-Express has a x64-x86 cross that we want to prefer.
+ # VS2013 and later, non-Express have a x64-x86 cross that we want
+ # to prefer.
return [os.path.normpath(
os.path.join(self.path, 'VC/vcvarsall.bat')), 'amd64_x86']
# Otherwise, the standard x86 compiler.
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
index ac6d918b849922..668f38b60d0093 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
@@ -49,7 +49,7 @@ def FindBuildFiles():
def Load(build_files, format, default_variables={},
includes=[], depth='.', params=None, check=False,
- circular_check=True):
+ circular_check=True, duplicate_basename_check=True):
"""
Loads one or more specified build files.
default_variables and includes will be copied before use.
@@ -126,6 +126,7 @@ def Load(build_files, format, default_variables={},
# Process the input specific to this generator.
result = gyp.input.Load(build_files, default_variables, includes[:],
depth, generator_input_info, check, circular_check,
+ duplicate_basename_check,
params['parallel'], params['root_targets'])
return [generator] + result
@@ -324,6 +325,16 @@ def gyp_main(args):
parser.add_option('--no-circular-check', dest='circular_check',
action='store_false', default=True, regenerate=False,
help="don't check for circular relationships between files")
+ # --no-duplicate-basename-check disables the check for duplicate basenames
+ # in a static_library/shared_library project. Visual C++ 2008 generator
+ # doesn't support this configuration. Libtool on Mac also generates warnings
+ # when duplicate basenames are passed into Make generator on Mac.
+ # TODO(yukawa): Remove this option when these legacy generators are
+ # deprecated.
+ parser.add_option('--no-duplicate-basename-check',
+ dest='duplicate_basename_check', action='store_false',
+ default=True, regenerate=False,
+ help="don't check for duplicate basenames")
parser.add_option('--no-parallel', action='store_true', default=False,
help='Disable multiprocessing')
parser.add_option('-S', '--suffix', dest='suffix', default='',
@@ -499,7 +510,8 @@ def gyp_main(args):
# Start with the default variables from the command line.
[generator, flat_list, targets, data] = Load(
build_files, format, cmdline_default_variables, includes, options.depth,
- params, options.check, options.circular_check)
+ params, options.check, options.circular_check,
+ options.duplicate_basename_check)
# TODO(mark): Pass |data| for now because the generator needs a list of
# build files that came in. In the future, maybe it should just accept
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
index b6875e43efcbc4..256e3f3a6b2400 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
@@ -131,13 +131,20 @@ def QualifiedTarget(build_file, target, toolset):
@memoize
-def RelativePath(path, relative_to):
+def RelativePath(path, relative_to, follow_path_symlink=True):
# Assuming both |path| and |relative_to| are relative to the current
# directory, returns a relative path that identifies path relative to
# relative_to.
+ # If |follow_symlink_path| is true (default) and |path| is a symlink, then
+ # this method returns a path to the real file represented by |path|. If it is
+ # false, this method returns a path to the symlink. If |path| is not a
+ # symlink, this option has no effect.
# Convert to normalized (and therefore absolute paths).
- path = os.path.realpath(path)
+ if follow_path_symlink:
+ path = os.path.realpath(path)
+ else:
+ path = os.path.abspath(path)
relative_to = os.path.realpath(relative_to)
# On Windows, we can't create a relative path to a different drive, so just
@@ -418,6 +425,8 @@ def GetFlavor(params):
return 'freebsd'
if sys.platform.startswith('openbsd'):
return 'openbsd'
+ if sys.platform.startswith('netbsd'):
+ return 'netbsd'
if sys.platform.startswith('aix'):
return 'aix'
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
index 15b80ef973793c..921c1a6b714328 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
@@ -7,23 +7,59 @@
the generator flag config_path) the path of a json file that dictates the files
and targets to search for. The following keys are supported:
files: list of paths (relative) of the files to search for.
-targets: list of targets to search for. The target names are unqualified.
+test_targets: unqualified target names to search for. Any target in this list
+that depends upon a file in |files| is output regardless of the type of target
+or chain of dependencies.
+additional_compile_targets: Unqualified targets to search for in addition to
+test_targets. Targets in the combined list that depend upon a file in |files|
+are not necessarily output. For example, if the target is of type none then the
+target is not output (but one of the descendants of the target will be).
The following is output:
error: only supplied if there is an error.
-targets: the set of targets passed in via targets that either directly or
- indirectly depend upon the set of paths supplied in files.
-build_targets: minimal set of targets that directly depend on the changed
- files and need to be built. The expectation is this set of targets is passed
- into a build step.
+compile_targets: minimal set of targets that directly or indirectly (for
+ targets of type none) depend on the files in |files| and is one of the
+ supplied targets or a target that one of the supplied targets depends on.
+ The expectation is this set of targets is passed into a build step. This list
+ always contains the output of test_targets as well.
+test_targets: set of targets from the supplied |test_targets| that either
+ directly or indirectly depend upon a file in |files|. This list if useful
+ if additional processing needs to be done for certain targets after the
+ build, such as running tests.
status: outputs one of three values: none of the supplied files were found,
one of the include files changed so that it should be assumed everything
- changed (in this case targets and build_targets are not output) or at
+ changed (in this case test_targets and compile_targets are not output) or at
least one file was found.
-invalid_targets: list of supplied targets thare were not found.
+invalid_targets: list of supplied targets that were not found.
+
+Example:
+Consider a graph like the following:
+ A D
+ / \
+B C
+A depends upon both B and C, A is of type none and B and C are executables.
+D is an executable, has no dependencies and nothing depends on it.
+If |additional_compile_targets| = ["A"], |test_targets| = ["B", "C"] and
+files = ["b.cc", "d.cc"] (B depends upon b.cc and D depends upon d.cc), then
+the following is output:
+|compile_targets| = ["B"] B must built as it depends upon the changed file b.cc
+and the supplied target A depends upon it. A is not output as a build_target
+as it is of type none with no rules and actions.
+|test_targets| = ["B"] B directly depends upon the change file b.cc.
+
+Even though the file d.cc, which D depends upon, has changed D is not output
+as it was not supplied by way of |additional_compile_targets| or |test_targets|.
If the generator flag analyzer_output_path is specified, output is written
there. Otherwise output is written to stdout.
+
+In Gyp the "all" target is shorthand for the root targets in the files passed
+to gyp. For example, if file "a.gyp" contains targets "a1" and
+"a2", and file "b.gyp" contains targets "b1" and "b2" and "a2" has a dependency
+on "b2" and gyp is supplied "a.gyp" then "all" consists of "a1" and "a2".
+Notice that "b1" and "b2" are not in the "all" target as "b.gyp" was not
+directly supplied to gyp. OTOH if both "a.gyp" and "b.gyp" are supplied to gyp
+then the "all" target includes "b1" and "b2".
"""
import gyp.common
@@ -183,7 +219,10 @@ class Target(object):
added_to_compile_targets: used when determining if the target was added to the
set of targets that needs to be built.
in_roots: true if this target is a descendant of one of the root nodes.
- is_executable: true if the type of target is executable."""
+ is_executable: true if the type of target is executable.
+ is_static_library: true if the type of target is static_library.
+ is_or_has_linked_ancestor: true if the target does a link (eg executable), or
+ if there is a target in back_deps that does a link."""
def __init__(self, name):
self.deps = set()
self.match_status = MATCH_STATUS_TBD
@@ -196,6 +235,8 @@ def __init__(self, name):
self.added_to_compile_targets = False
self.in_roots = False
self.is_executable = False
+ self.is_static_library = False
+ self.is_or_has_linked_ancestor = False
class Config(object):
@@ -205,6 +246,8 @@ class Config(object):
def __init__(self):
self.files = []
self.targets = set()
+ self.additional_compile_target_names = set()
+ self.test_target_names = set()
def Init(self, params):
"""Initializes Config. This is a separate method as it raises an exception
@@ -224,7 +267,9 @@ def Init(self, params):
if not isinstance(config, dict):
raise Exception('config_path must be a JSON file containing a dictionary')
self.files = config.get('files', [])
- self.targets = set(config.get('targets', []))
+ self.additional_compile_target_names = set(
+ config.get('additional_compile_targets', []))
+ self.test_target_names = set(config.get('test_targets', []))
def _WasBuildFileModified(build_file, data, files, toplevel_dir):
@@ -266,8 +311,8 @@ def _GetOrCreateTargetByName(targets, target_name):
def _DoesTargetTypeRequireBuild(target_dict):
"""Returns true if the target type is such that it needs to be built."""
# If a 'none' target has rules or actions we assume it requires a build.
- return target_dict['type'] != 'none' or \
- target_dict.get('actions') or target_dict.get('rules')
+ return bool(target_dict['type'] != 'none' or
+ target_dict.get('actions') or target_dict.get('rules'))
def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
@@ -275,12 +320,13 @@ def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
"""Returns a tuple of the following:
. A dictionary mapping from fully qualified name to Target.
. A list of the targets that have a source file in |files|.
- . Set of root Targets reachable from the the files |build_files|.
+ . Targets that constitute the 'all' target. See description at top of file
+ for details on the 'all' target.
This sets the |match_status| of the targets that contain any of the source
files in |files| to MATCH_STATUS_MATCHES.
|toplevel_dir| is the root of the source tree."""
# Maps from target name to Target.
- targets = {}
+ name_to_target = {}
# Targets that matched.
matching_targets = []
@@ -300,7 +346,8 @@ def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
while len(targets_to_visit) > 0:
target_name = targets_to_visit.pop()
- created_target, target = _GetOrCreateTargetByName(targets, target_name)
+ created_target, target = _GetOrCreateTargetByName(name_to_target,
+ target_name)
if created_target:
roots.add(target)
elif target.visited:
@@ -309,7 +356,11 @@ def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
target.visited = True
target.requires_build = _DoesTargetTypeRequireBuild(
target_dicts[target_name])
- target.is_executable = target_dicts[target_name]['type'] == 'executable'
+ target_type = target_dicts[target_name]['type']
+ target.is_executable = target_type == 'executable'
+ target.is_static_library = target_type == 'static_library'
+ target.is_or_has_linked_ancestor = (target_type == 'executable' or
+ target_type == 'shared_library')
build_file = gyp.common.ParseQualifiedTarget(target_name)[0]
if not build_file in build_file_in_files:
@@ -329,7 +380,7 @@ def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
sources = _ExtractSources(target_name, target_dicts[target_name],
toplevel_dir)
for source in sources:
- if source in files:
+ if _ToGypPath(os.path.normpath(source)) in files:
print 'target', target_name, 'matches', source
target.match_status = MATCH_STATUS_MATCHES
matching_targets.append(target)
@@ -339,22 +390,25 @@ def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
for dep in target_dicts[target_name].get('dependencies', []):
targets_to_visit.append(dep)
- created_dep_target, dep_target = _GetOrCreateTargetByName(targets, dep)
+ created_dep_target, dep_target = _GetOrCreateTargetByName(name_to_target,
+ dep)
if not created_dep_target:
roots.discard(dep_target)
target.deps.add(dep_target)
dep_target.back_deps.add(target)
- return targets, matching_targets, roots & build_file_targets
+ return name_to_target, matching_targets, roots & build_file_targets
def _GetUnqualifiedToTargetMapping(all_targets, to_find):
- """Returns a mapping (dictionary) from unqualified name to Target for all the
- Targets in |to_find|."""
+ """Returns a tuple of the following:
+ . mapping (dictionary) from unqualified name to Target for all the
+ Targets in |to_find|.
+ . any target names not found. If this is empty all targets were found."""
result = {}
if not to_find:
- return result
+ return {}, []
to_find = set(to_find)
for target_name in all_targets.keys():
extracted = gyp.common.ParseQualifiedTarget(target_name)
@@ -362,13 +416,14 @@ def _GetUnqualifiedToTargetMapping(all_targets, to_find):
to_find.remove(extracted[1])
result[extracted[1]] = all_targets[target_name]
if not to_find:
- return result
- return result
+ return result, []
+ return result, [x for x in to_find]
-def _DoesTargetDependOn(target):
- """Returns true if |target| or any of its dependencies matches the supplied
- set of paths. This updates |matches| of the Targets as it recurses.
+def _DoesTargetDependOnMatchingTargets(target):
+ """Returns true if |target| or any of its dependencies is one of the
+ targets containing the files supplied as input to analyzer. This updates
+ |matches| of the Targets as it recurses.
target: the Target to look for."""
if target.match_status == MATCH_STATUS_DOESNT_MATCH:
return False
@@ -376,25 +431,28 @@ def _DoesTargetDependOn(target):
target.match_status == MATCH_STATUS_MATCHES_BY_DEPENDENCY:
return True
for dep in target.deps:
- if _DoesTargetDependOn(dep):
+ if _DoesTargetDependOnMatchingTargets(dep):
target.match_status = MATCH_STATUS_MATCHES_BY_DEPENDENCY
+ print '\t', target.name, 'matches by dep', dep.name
return True
target.match_status = MATCH_STATUS_DOESNT_MATCH
return False
-def _GetTargetsDependingOn(possible_targets):
+def _GetTargetsDependingOnMatchingTargets(possible_targets):
"""Returns the list of Targets in |possible_targets| that depend (either
- directly on indirectly) on the matched targets.
+ directly on indirectly) on at least one of the targets containing the files
+ supplied as input to analyzer.
possible_targets: targets to search from."""
found = []
+ print 'Targets that matched by dependency:'
for target in possible_targets:
- if _DoesTargetDependOn(target):
+ if _DoesTargetDependOnMatchingTargets(target):
found.append(target)
return found
-def _AddBuildTargets(target, roots, add_if_no_ancestor, result):
+def _AddCompileTargets(target, roots, add_if_no_ancestor, result):
"""Recurses through all targets that depend on |target|, adding all targets
that need to be built (and are in |roots|) to |result|.
roots: set of root targets.
@@ -405,31 +463,45 @@ def _AddBuildTargets(target, roots, add_if_no_ancestor, result):
return
target.visited = True
- target.in_roots = not target.back_deps and target in roots
+ target.in_roots = target in roots
for back_dep_target in target.back_deps:
- _AddBuildTargets(back_dep_target, roots, False, result)
+ _AddCompileTargets(back_dep_target, roots, False, result)
target.added_to_compile_targets |= back_dep_target.added_to_compile_targets
target.in_roots |= back_dep_target.in_roots
+ target.is_or_has_linked_ancestor |= (
+ back_dep_target.is_or_has_linked_ancestor)
# Always add 'executable' targets. Even though they may be built by other
# targets that depend upon them it makes detection of what is going to be
# built easier.
+ # And always add static_libraries that have no dependencies on them from
+ # linkables. This is necessary as the other dependencies on them may be
+ # static libraries themselves, which are not compile time dependencies.
if target.in_roots and \
(target.is_executable or
(not target.added_to_compile_targets and
- (add_if_no_ancestor or target.requires_build))):
+ (add_if_no_ancestor or target.requires_build)) or
+ (target.is_static_library and add_if_no_ancestor and
+ not target.is_or_has_linked_ancestor)):
+ print '\t\tadding to compile targets', target.name, 'executable', \
+ target.is_executable, 'added_to_compile_targets', \
+ target.added_to_compile_targets, 'add_if_no_ancestor', \
+ add_if_no_ancestor, 'requires_build', target.requires_build, \
+ 'is_static_library', target.is_static_library, \
+ 'is_or_has_linked_ancestor', target.is_or_has_linked_ancestor
result.add(target)
target.added_to_compile_targets = True
-def _GetBuildTargets(matching_targets, roots):
+def _GetCompileTargets(matching_targets, supplied_targets):
"""Returns the set of Targets that require a build.
matching_targets: targets that changed and need to be built.
- roots: set of root targets in the build files to search from."""
+ supplied_targets: set of targets supplied to analyzer to search from."""
result = set()
for target in matching_targets:
- _AddBuildTargets(target, roots, True, result)
+ print 'finding compile targets for match', target.name
+ _AddCompileTargets(target, supplied_targets, True, result)
return result
@@ -454,6 +526,16 @@ def _WriteOutput(params, **values):
print 'Targets that require a build:'
for target in values['build_targets']:
print '\t', target
+ if 'compile_targets' in values:
+ values['compile_targets'].sort()
+ print 'Targets that need to be built:'
+ for target in values['compile_targets']:
+ print '\t', target
+ if 'test_targets' in values:
+ values['test_targets'].sort()
+ print 'Test targets:'
+ for target in values['test_targets']:
+ print '\t', target
output_path = params.get('generator_flags', {}).get(
'analyzer_output_path', None)
@@ -473,7 +555,7 @@ def _WasGypIncludeFileModified(params, files):
files."""
if params['options'].includes:
for include in params['options'].includes:
- if _ToGypPath(include) in files:
+ if _ToGypPath(os.path.normpath(include)) in files:
print 'Include file modified, assuming all changed', include
return True
return False
@@ -513,11 +595,104 @@ def CalculateVariables(default_variables, params):
default_variables.setdefault('OS', operating_system)
+class TargetCalculator(object):
+ """Calculates the matching test_targets and matching compile_targets."""
+ def __init__(self, files, additional_compile_target_names, test_target_names,
+ data, target_list, target_dicts, toplevel_dir, build_files):
+ self._additional_compile_target_names = set(additional_compile_target_names)
+ self._test_target_names = set(test_target_names)
+ self._name_to_target, self._changed_targets, self._root_targets = (
+ _GenerateTargets(data, target_list, target_dicts, toplevel_dir,
+ frozenset(files), build_files))
+ self._unqualified_mapping, self.invalid_targets = (
+ _GetUnqualifiedToTargetMapping(self._name_to_target,
+ self._supplied_target_names_no_all()))
+
+ def _supplied_target_names(self):
+ return self._additional_compile_target_names | self._test_target_names
+
+ def _supplied_target_names_no_all(self):
+ """Returns the supplied test targets without 'all'."""
+ result = self._supplied_target_names();
+ result.discard('all')
+ return result
+
+ def is_build_impacted(self):
+ """Returns true if the supplied files impact the build at all."""
+ return self._changed_targets
+
+ def find_matching_test_target_names(self):
+ """Returns the set of output test targets."""
+ assert self.is_build_impacted()
+ # Find the test targets first. 'all' is special cased to mean all the
+ # root targets. To deal with all the supplied |test_targets| are expanded
+ # to include the root targets during lookup. If any of the root targets
+ # match, we remove it and replace it with 'all'.
+ test_target_names_no_all = set(self._test_target_names)
+ test_target_names_no_all.discard('all')
+ test_targets_no_all = _LookupTargets(test_target_names_no_all,
+ self._unqualified_mapping)
+ test_target_names_contains_all = 'all' in self._test_target_names
+ if test_target_names_contains_all:
+ test_targets = [x for x in (set(test_targets_no_all) |
+ set(self._root_targets))]
+ else:
+ test_targets = [x for x in test_targets_no_all]
+ print 'supplied test_targets'
+ for target_name in self._test_target_names:
+ print '\t', target_name
+ print 'found test_targets'
+ for target in test_targets:
+ print '\t', target.name
+ print 'searching for matching test targets'
+ matching_test_targets = _GetTargetsDependingOnMatchingTargets(test_targets)
+ matching_test_targets_contains_all = (test_target_names_contains_all and
+ set(matching_test_targets) &
+ set(self._root_targets))
+ if matching_test_targets_contains_all:
+ # Remove any of the targets for all that were not explicitly supplied,
+ # 'all' is subsequentely added to the matching names below.
+ matching_test_targets = [x for x in (set(matching_test_targets) &
+ set(test_targets_no_all))]
+ print 'matched test_targets'
+ for target in matching_test_targets:
+ print '\t', target.name
+ matching_target_names = [gyp.common.ParseQualifiedTarget(target.name)[1]
+ for target in matching_test_targets]
+ if matching_test_targets_contains_all:
+ matching_target_names.append('all')
+ print '\tall'
+ return matching_target_names
+
+ def find_matching_compile_target_names(self):
+ """Returns the set of output compile targets."""
+ assert self.is_build_impacted();
+ # Compile targets are found by searching up from changed targets.
+ # Reset the visited status for _GetBuildTargets.
+ for target in self._name_to_target.itervalues():
+ target.visited = False
+
+ supplied_targets = _LookupTargets(self._supplied_target_names_no_all(),
+ self._unqualified_mapping)
+ if 'all' in self._supplied_target_names():
+ supplied_targets = [x for x in (set(supplied_targets) |
+ set(self._root_targets))]
+ print 'Supplied test_targets & compile_targets'
+ for target in supplied_targets:
+ print '\t', target.name
+ print 'Finding compile targets'
+ compile_targets = _GetCompileTargets(self._changed_targets,
+ supplied_targets)
+ return [gyp.common.ParseQualifiedTarget(target.name)[1]
+ for target in compile_targets]
+
+
def GenerateOutput(target_list, target_dicts, data, params):
"""Called by gyp as the final stage. Outputs results."""
config = Config()
try:
config.Init(params)
+
if not config.files:
raise Exception('Must specify files to analyze via config_path generator '
'flag')
@@ -528,41 +703,38 @@ def GenerateOutput(target_list, target_dicts, data, params):
if _WasGypIncludeFileModified(params, config.files):
result_dict = { 'status': all_changed_string,
- 'targets': list(config.targets) }
+ 'test_targets': list(config.test_target_names),
+ 'compile_targets': list(
+ config.additional_compile_target_names |
+ config.test_target_names) }
_WriteOutput(params, **result_dict)
return
- all_targets, matching_targets, roots = _GenerateTargets(
- data, target_list, target_dicts, toplevel_dir, frozenset(config.files),
- params['build_files'])
-
- unqualified_mapping = _GetUnqualifiedToTargetMapping(all_targets,
- config.targets)
- invalid_targets = None
- if len(unqualified_mapping) != len(config.targets):
- invalid_targets = _NamesNotIn(config.targets, unqualified_mapping)
-
- if matching_targets:
- search_targets = _LookupTargets(config.targets, unqualified_mapping)
- matched_search_targets = _GetTargetsDependingOn(search_targets)
- # Reset the visited status for _GetBuildTargets.
- for target in all_targets.itervalues():
- target.visited = False
- build_targets = _GetBuildTargets(matching_targets, roots)
- matched_search_targets = [gyp.common.ParseQualifiedTarget(target.name)[1]
- for target in matched_search_targets]
- build_targets = [gyp.common.ParseQualifiedTarget(target.name)[1]
- for target in build_targets]
- else:
- matched_search_targets = []
- build_targets = []
-
- result_dict = { 'targets': matched_search_targets,
- 'status': found_dependency_string if matching_targets else
- no_dependency_string,
- 'build_targets': build_targets}
- if invalid_targets:
- result_dict['invalid_targets'] = invalid_targets
+ calculator = TargetCalculator(config.files,
+ config.additional_compile_target_names,
+ config.test_target_names, data,
+ target_list, target_dicts, toplevel_dir,
+ params['build_files'])
+ if not calculator.is_build_impacted():
+ result_dict = { 'status': no_dependency_string,
+ 'test_targets': [],
+ 'compile_targets': [] }
+ if calculator.invalid_targets:
+ result_dict['invalid_targets'] = calculator.invalid_targets
+ _WriteOutput(params, **result_dict)
+ return
+
+ test_target_names = calculator.find_matching_test_target_names()
+ compile_target_names = calculator.find_matching_compile_target_names()
+ found_at_least_one_target = compile_target_names or test_target_names
+ result_dict = { 'test_targets': test_target_names,
+ 'status': found_dependency_string if
+ found_at_least_one_target else no_dependency_string,
+ 'compile_targets': list(
+ set(compile_target_names) |
+ set(test_target_names)) }
+ if calculator.invalid_targets:
+ result_dict['invalid_targets'] = calculator.invalid_targets
_WriteOutput(params, **result_dict)
except Exception as e:
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
index 8f5feddee1cb35..17f5e6396c6303 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
@@ -55,7 +55,7 @@
'CONFIGURATION_NAME': '${configuration}',
}
-FULL_PATH_VARS = ('${CMAKE_SOURCE_DIR}', '${builddir}', '${obj}')
+FULL_PATH_VARS = ('${CMAKE_CURRENT_LIST_DIR}', '${builddir}', '${obj}')
generator_supports_multiple_toolsets = True
generator_wants_static_library_dependencies_adjusted = True
@@ -103,7 +103,7 @@ def NormjoinPathForceCMakeSource(base_path, rel_path):
if any([rel_path.startswith(var) for var in FULL_PATH_VARS]):
return rel_path
# TODO: do we need to check base_path for absolute variables as well?
- return os.path.join('${CMAKE_SOURCE_DIR}',
+ return os.path.join('${CMAKE_CURRENT_LIST_DIR}',
os.path.normpath(os.path.join(base_path, rel_path)))
@@ -150,20 +150,17 @@ def SetFileProperty(output, source_name, property_name, values, sep):
output.write('")\n')
-def SetFilesProperty(output, source_names, property_name, values, sep):
+def SetFilesProperty(output, variable, property_name, values, sep):
"""Given a set of source files, sets the given property on them."""
- output.write('set_source_files_properties(\n')
- for source_name in source_names:
- output.write(' ')
- output.write(source_name)
- output.write('\n')
- output.write(' PROPERTIES\n ')
+ output.write('set_source_files_properties(')
+ WriteVariable(output, variable)
+ output.write(' PROPERTIES ')
output.write(property_name)
output.write(' "')
for value in values:
output.write(CMakeStringEscape(value))
output.write(sep)
- output.write('"\n)\n')
+ output.write('")\n')
def SetTargetProperty(output, target_name, property_name, values, sep=''):
@@ -236,11 +233,11 @@ def StringToCMakeTargetName(a):
"""Converts the given string 'a' to a valid CMake target name.
All invalid characters are replaced by '_'.
- Invalid for cmake: ' ', '/', '(', ')'
+ Invalid for cmake: ' ', '/', '(', ')', '"'
Invalid for make: ':'
Invalid for unknown reasons but cause failures: '.'
"""
- return a.translate(string.maketrans(' /():.', '______'))
+ return a.translate(string.maketrans(' /():."', '_______'))
def WriteActions(target_name, actions, extra_sources, extra_deps,
@@ -296,7 +293,7 @@ def WriteActions(target_name, actions, extra_sources, extra_deps,
WriteVariable(output, inputs_name)
output.write('\n')
- output.write(' WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write(' WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
output.write(path_to_gyp)
output.write('\n')
@@ -401,9 +398,9 @@ def WriteRules(target_name, rules, extra_sources, extra_deps,
output.write(NormjoinPath(path_to_gyp, rule_source))
output.write('\n')
- # CMAKE_SOURCE_DIR is where the CMakeLists.txt lives.
+ # CMAKE_CURRENT_LIST_DIR is where the CMakeLists.txt lives.
# The cwd is the current build directory.
- output.write(' WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write(' WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
output.write(path_to_gyp)
output.write('\n')
@@ -488,7 +485,7 @@ def __init__(self, ext, command):
copy = file_copy if os.path.basename(src) else dir_copy
- copy.cmake_inputs.append(NormjoinPath(path_to_gyp, src))
+ copy.cmake_inputs.append(NormjoinPathForceCMakeSource(path_to_gyp, src))
copy.cmake_outputs.append(NormjoinPathForceCMakeSource(path_to_gyp, dst))
copy.gyp_inputs.append(src)
copy.gyp_outputs.append(dst)
@@ -525,7 +522,7 @@ def __init__(self, ext, command):
WriteVariable(output, copy.inputs_name, ' ')
output.write('\n')
- output.write('WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write('WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
output.write(path_to_gyp)
output.write('\n')
@@ -640,6 +637,12 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
target_type = spec.get('type', '')
target_toolset = spec.get('toolset')
+ cmake_target_type = cmake_target_type_from_gyp_target_type.get(target_type)
+ if cmake_target_type is None:
+ print ('Target %s has unknown target type %s, skipping.' %
+ ( target_name, target_type ) )
+ return
+
SetVariable(output, 'TARGET', target_name)
SetVariable(output, 'TOOLSET', target_toolset)
@@ -667,27 +670,89 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
srcs = spec.get('sources', [])
# Gyp separates the sheep from the goats based on file extensions.
- def partition(l, p):
- return reduce(lambda x, e: x[not p(e)].append(e) or x, l, ([], []))
- compilable_srcs, other_srcs = partition(srcs, Compilable)
+ # A full separation is done here because of flag handing (see below).
+ s_sources = []
+ c_sources = []
+ cxx_sources = []
+ linkable_sources = []
+ other_sources = []
+ for src in srcs:
+ _, ext = os.path.splitext(src)
+ src_type = COMPILABLE_EXTENSIONS.get(ext, None)
+ src_norm_path = NormjoinPath(path_from_cmakelists_to_gyp, src);
- # CMake gets upset when executable targets provide no sources.
- if target_type == 'executable' and not compilable_srcs and not extra_sources:
- print ('Executable %s has no complilable sources, treating as "none".' %
- target_name )
- target_type = 'none'
+ if src_type == 's':
+ s_sources.append(src_norm_path)
+ elif src_type == 'cc':
+ c_sources.append(src_norm_path)
+ elif src_type == 'cxx':
+ cxx_sources.append(src_norm_path)
+ elif Linkable(ext):
+ linkable_sources.append(src_norm_path)
+ else:
+ other_sources.append(src_norm_path)
- cmake_target_type = cmake_target_type_from_gyp_target_type.get(target_type)
- if cmake_target_type is None:
- print ('Target %s has unknown target type %s, skipping.' %
- ( target_name, target_type ) )
- return
+ for extra_source in extra_sources:
+ src, real_source = extra_source
+ _, ext = os.path.splitext(real_source)
+ src_type = COMPILABLE_EXTENSIONS.get(ext, None)
+
+ if src_type == 's':
+ s_sources.append(src)
+ elif src_type == 'cc':
+ c_sources.append(src)
+ elif src_type == 'cxx':
+ cxx_sources.append(src)
+ elif Linkable(ext):
+ linkable_sources.append(src)
+ else:
+ other_sources.append(src)
+
+ s_sources_name = None
+ if s_sources:
+ s_sources_name = cmake_target_name + '__asm_srcs'
+ SetVariableList(output, s_sources_name, s_sources)
+
+ c_sources_name = None
+ if c_sources:
+ c_sources_name = cmake_target_name + '__c_srcs'
+ SetVariableList(output, c_sources_name, c_sources)
+
+ cxx_sources_name = None
+ if cxx_sources:
+ cxx_sources_name = cmake_target_name + '__cxx_srcs'
+ SetVariableList(output, cxx_sources_name, cxx_sources)
+
+ linkable_sources_name = None
+ if linkable_sources:
+ linkable_sources_name = cmake_target_name + '__linkable_srcs'
+ SetVariableList(output, linkable_sources_name, linkable_sources)
+
+ other_sources_name = None
+ if other_sources:
+ other_sources_name = cmake_target_name + '__other_srcs'
+ SetVariableList(output, other_sources_name, other_sources)
+
+ # CMake gets upset when executable targets provide no sources.
+ # http://www.cmake.org/pipermail/cmake/2010-July/038461.html
+ dummy_sources_name = None
+ has_sources = (s_sources_name or
+ c_sources_name or
+ cxx_sources_name or
+ linkable_sources_name or
+ other_sources_name)
+ if target_type == 'executable' and not has_sources:
+ dummy_sources_name = cmake_target_name + '__dummy_srcs'
+ SetVariable(output, dummy_sources_name,
+ "${obj}.${TOOLSET}/${TARGET}/genc/dummy.c")
+ output.write('if(NOT EXISTS "')
+ WriteVariable(output, dummy_sources_name)
+ output.write('")\n')
+ output.write(' file(WRITE "')
+ WriteVariable(output, dummy_sources_name)
+ output.write('" "")\n')
+ output.write("endif()\n")
- other_srcs_name = None
- if other_srcs:
- other_srcs_name = cmake_target_name + '__other_srcs'
- SetVariableList(output, other_srcs_name,
- [NormjoinPath(path_from_cmakelists_to_gyp, src) for src in other_srcs])
# CMake is opposed to setting linker directories and considers the practice
# of setting linker directories dangerous. Instead, it favors the use of
@@ -713,31 +778,48 @@ def partition(l, p):
output.write(' ')
output.write(cmake_target_type.modifier)
- if other_srcs_name:
- WriteVariable(output, other_srcs_name, ' ')
-
- output.write('\n')
-
- for src in compilable_srcs:
- output.write(' ')
- output.write(NormjoinPath(path_from_cmakelists_to_gyp, src))
- output.write('\n')
- for extra_source in extra_sources:
- output.write(' ')
- src, _ = extra_source
- output.write(NormjoinPath(path_from_cmakelists_to_gyp, src))
- output.write('\n')
+ if s_sources_name:
+ WriteVariable(output, s_sources_name, ' ')
+ if c_sources_name:
+ WriteVariable(output, c_sources_name, ' ')
+ if cxx_sources_name:
+ WriteVariable(output, cxx_sources_name, ' ')
+ if linkable_sources_name:
+ WriteVariable(output, linkable_sources_name, ' ')
+ if other_sources_name:
+ WriteVariable(output, other_sources_name, ' ')
+ if dummy_sources_name:
+ WriteVariable(output, dummy_sources_name, ' ')
output.write(')\n')
+ # Let CMake know if the 'all' target should depend on this target.
+ exclude_from_all = ('TRUE' if qualified_target not in all_qualified_targets
+ else 'FALSE')
+ SetTargetProperty(output, cmake_target_name,
+ 'EXCLUDE_FROM_ALL', exclude_from_all)
+ for extra_target_name in extra_deps:
+ SetTargetProperty(output, extra_target_name,
+ 'EXCLUDE_FROM_ALL', exclude_from_all)
+
# Output name and location.
if target_type != 'none':
+ # Link as 'C' if there are no other files
+ if not c_sources and not cxx_sources:
+ SetTargetProperty(output, cmake_target_name, 'LINKER_LANGUAGE', ['C'])
+
# Mark uncompiled sources as uncompiled.
- if other_srcs_name:
+ if other_sources_name:
output.write('set_source_files_properties(')
- WriteVariable(output, other_srcs_name, '')
+ WriteVariable(output, other_sources_name, '')
output.write(' PROPERTIES HEADER_FILE_ONLY "TRUE")\n')
+ # Mark object sources as linkable.
+ if linkable_sources_name:
+ output.write('set_source_files_properties(')
+ WriteVariable(output, other_sources_name, '')
+ output.write(' PROPERTIES EXTERNAL_OBJECT "TRUE")\n')
+
# Output directory
target_output_directory = spec.get('product_dir')
if target_output_directory is None:
@@ -804,122 +886,84 @@ def partition(l, p):
cmake_target_output_basename)
SetFileProperty(output, cmake_target_output, 'GENERATED', ['TRUE'], '')
- # Let CMake know if the 'all' target should depend on this target.
- exclude_from_all = ('TRUE' if qualified_target not in all_qualified_targets
- else 'FALSE')
- SetTargetProperty(output, cmake_target_name,
- 'EXCLUDE_FROM_ALL', exclude_from_all)
- for extra_target_name in extra_deps:
- SetTargetProperty(output, extra_target_name,
- 'EXCLUDE_FROM_ALL', exclude_from_all)
-
- # Includes
- includes = config.get('include_dirs')
- if includes:
- # This (target include directories) is what requires CMake 2.8.8
- includes_name = cmake_target_name + '__include_dirs'
- SetVariableList(output, includes_name,
- [NormjoinPathForceCMakeSource(path_from_cmakelists_to_gyp, include)
- for include in includes])
- output.write('set_property(TARGET ')
- output.write(cmake_target_name)
- output.write(' APPEND PROPERTY INCLUDE_DIRECTORIES ')
- WriteVariable(output, includes_name, '')
- output.write(')\n')
-
- # Defines
- defines = config.get('defines')
- if defines is not None:
- SetTargetProperty(output,
- cmake_target_name,
- 'COMPILE_DEFINITIONS',
- defines,
- ';')
-
- # Compile Flags - http://www.cmake.org/Bug/view.php?id=6493
- # CMake currently does not have target C and CXX flags.
- # So, instead of doing...
-
- # cflags_c = config.get('cflags_c')
- # if cflags_c is not None:
- # SetTargetProperty(output, cmake_target_name,
- # 'C_COMPILE_FLAGS', cflags_c, ' ')
-
- # cflags_cc = config.get('cflags_cc')
- # if cflags_cc is not None:
- # SetTargetProperty(output, cmake_target_name,
- # 'CXX_COMPILE_FLAGS', cflags_cc, ' ')
-
- # Instead we must...
- s_sources = []
- c_sources = []
- cxx_sources = []
- for src in srcs:
- _, ext = os.path.splitext(src)
- src_type = COMPILABLE_EXTENSIONS.get(ext, None)
-
- if src_type == 's':
- s_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- if src_type == 'cc':
- c_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- if src_type == 'cxx':
- cxx_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- for extra_source in extra_sources:
- src, real_source = extra_source
- _, ext = os.path.splitext(real_source)
- src_type = COMPILABLE_EXTENSIONS.get(ext, None)
-
- if src_type == 's':
- s_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- if src_type == 'cc':
- c_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- if src_type == 'cxx':
- cxx_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
-
- cflags = config.get('cflags', [])
- cflags_c = config.get('cflags_c', [])
- cflags_cxx = config.get('cflags_cc', [])
- if c_sources and not (s_sources or cxx_sources):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_c)
- SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
-
- elif cxx_sources and not (s_sources or c_sources):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_cxx)
- SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
-
- else:
- if s_sources and cflags:
- SetFilesProperty(output, s_sources, 'COMPILE_FLAGS', cflags, ' ')
+ # Includes
+ includes = config.get('include_dirs')
+ if includes:
+ # This (target include directories) is what requires CMake 2.8.8
+ includes_name = cmake_target_name + '__include_dirs'
+ SetVariableList(output, includes_name,
+ [NormjoinPathForceCMakeSource(path_from_cmakelists_to_gyp, include)
+ for include in includes])
+ output.write('set_property(TARGET ')
+ output.write(cmake_target_name)
+ output.write(' APPEND PROPERTY INCLUDE_DIRECTORIES ')
+ WriteVariable(output, includes_name, '')
+ output.write(')\n')
- if c_sources and (cflags or cflags_c):
+ # Defines
+ defines = config.get('defines')
+ if defines is not None:
+ SetTargetProperty(output,
+ cmake_target_name,
+ 'COMPILE_DEFINITIONS',
+ defines,
+ ';')
+
+ # Compile Flags - http://www.cmake.org/Bug/view.php?id=6493
+ # CMake currently does not have target C and CXX flags.
+ # So, instead of doing...
+
+ # cflags_c = config.get('cflags_c')
+ # if cflags_c is not None:
+ # SetTargetProperty(output, cmake_target_name,
+ # 'C_COMPILE_FLAGS', cflags_c, ' ')
+
+ # cflags_cc = config.get('cflags_cc')
+ # if cflags_cc is not None:
+ # SetTargetProperty(output, cmake_target_name,
+ # 'CXX_COMPILE_FLAGS', cflags_cc, ' ')
+
+ # Instead we must...
+ cflags = config.get('cflags', [])
+ cflags_c = config.get('cflags_c', [])
+ cflags_cxx = config.get('cflags_cc', [])
+ if (not cflags_c or not c_sources) and (not cflags_cxx or not cxx_sources):
+ SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', cflags, ' ')
+
+ elif c_sources and not (s_sources or cxx_sources):
flags = []
flags.extend(cflags)
flags.extend(cflags_c)
- SetFilesProperty(output, c_sources, 'COMPILE_FLAGS', flags, ' ')
+ SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
- if cxx_sources and (cflags or cflags_cxx):
+ elif cxx_sources and not (s_sources or c_sources):
flags = []
flags.extend(cflags)
flags.extend(cflags_cxx)
- SetFilesProperty(output, cxx_sources, 'COMPILE_FLAGS', flags, ' ')
+ SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
- # Have assembly link as c if there are no other files
- if not c_sources and not cxx_sources and s_sources:
- SetTargetProperty(output, cmake_target_name, 'LINKER_LANGUAGE', ['C'])
-
- # Linker flags
- ldflags = config.get('ldflags')
- if ldflags is not None:
- SetTargetProperty(output, cmake_target_name, 'LINK_FLAGS', ldflags, ' ')
+ else:
+ # TODO: This is broken, one cannot generally set properties on files,
+ # as other targets may require different properties on the same files.
+ if s_sources and cflags:
+ SetFilesProperty(output, s_sources_name, 'COMPILE_FLAGS', cflags, ' ')
+
+ if c_sources and (cflags or cflags_c):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_c)
+ SetFilesProperty(output, c_sources_name, 'COMPILE_FLAGS', flags, ' ')
+
+ if cxx_sources and (cflags or cflags_cxx):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_cxx)
+ SetFilesProperty(output, cxx_sources_name, 'COMPILE_FLAGS', flags, ' ')
+
+ # Linker flags
+ ldflags = config.get('ldflags')
+ if ldflags is not None:
+ SetTargetProperty(output, cmake_target_name, 'LINK_FLAGS', ldflags, ' ')
# Note on Dependencies and Libraries:
# CMake wants to handle link order, resolving the link line up front.
@@ -1040,20 +1084,49 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
output.write('cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)\n')
output.write('cmake_policy(VERSION 2.8.8)\n')
- _, project_target, _ = gyp.common.ParseQualifiedTarget(target_list[-1])
+ gyp_file, project_target, _ = gyp.common.ParseQualifiedTarget(target_list[-1])
output.write('project(')
output.write(project_target)
output.write(')\n')
SetVariable(output, 'configuration', config_to_use)
+ ar = None
+ cc = None
+ cxx = None
+
+ make_global_settings = data[gyp_file].get('make_global_settings', [])
+ build_to_top = gyp.common.InvertRelativePath(build_dir,
+ options.toplevel_dir)
+ for key, value in make_global_settings:
+ if key == 'AR':
+ ar = os.path.join(build_to_top, value)
+ if key == 'CC':
+ cc = os.path.join(build_to_top, value)
+ if key == 'CXX':
+ cxx = os.path.join(build_to_top, value)
+
+ ar = gyp.common.GetEnvironFallback(['AR_target', 'AR'], ar)
+ cc = gyp.common.GetEnvironFallback(['CC_target', 'CC'], cc)
+ cxx = gyp.common.GetEnvironFallback(['CXX_target', 'CXX'], cxx)
+
+ if ar:
+ SetVariable(output, 'CMAKE_AR', ar)
+ if cc:
+ SetVariable(output, 'CMAKE_C_COMPILER', cc)
+ if cxx:
+ SetVariable(output, 'CMAKE_CXX_COMPILER', cxx)
+
# The following appears to be as-yet undocumented.
# http://public.kitware.com/Bug/view.php?id=8392
output.write('enable_language(ASM)\n')
# ASM-ATT does not support .S files.
# output.write('enable_language(ASM-ATT)\n')
- SetVariable(output, 'builddir', '${CMAKE_BINARY_DIR}')
+ if cc:
+ SetVariable(output, 'CMAKE_ASM_COMPILER', cc)
+
+ SetVariable(output, 'builddir', '${CMAKE_CURRENT_BINARY_DIR}')
SetVariable(output, 'obj', '${builddir}/obj')
output.write('\n')
@@ -1066,6 +1139,11 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
output.write('set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)\n')
output.write('\n')
+ # Force ninja to use rsp files. Otherwise link and ar lines can get too long,
+ # resulting in 'Argument list too long' errors.
+ output.write('set(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)\n')
+ output.write('\n')
+
namer = CMakeNamer(target_list)
# The list of targets upon which the 'all' target should depend.
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
index 927ba6ebad771c..160eafe2efeca0 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
@@ -14,6 +14,9 @@
generator_wants_static_library_dependencies_adjusted = False
+generator_filelist_paths = {
+}
+
generator_default_variables = {
}
for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
@@ -56,6 +59,17 @@ def CalculateGeneratorInputInfo(params):
global generator_wants_static_library_dependencies_adjusted
generator_wants_static_library_dependencies_adjusted = True
+ toplevel = params['options'].toplevel_dir
+ generator_dir = os.path.relpath(params['options'].generator_output or '.')
+ # output_dir: relative path from generator_dir to the build directory.
+ output_dir = generator_flags.get('output_dir', 'out')
+ qualified_out_dir = os.path.normpath(os.path.join(
+ toplevel, generator_dir, output_dir, 'gypfiles'))
+ global generator_filelist_paths
+ generator_filelist_paths = {
+ 'toplevel': toplevel,
+ 'qualified_out_dir': qualified_out_dir,
+ }
def GenerateOutput(target_list, target_dicts, data, params):
# Map of target -> list of targets it depends on.
@@ -74,7 +88,11 @@ def GenerateOutput(target_list, target_dicts, data, params):
edges[target].append(dep)
targets_to_visit.append(dep)
- filename = 'dump.json'
+ try:
+ filepath = params['generator_flags']['output_dir']
+ except KeyError:
+ filepath = '.'
+ filename = os.path.join(filepath, 'dump.json')
f = open(filename, 'w')
json.dump(edges, f)
f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
index 06c7fdc2e84ce8..aefdac787c2408 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
@@ -211,10 +211,10 @@ def CalculateGeneratorInputInfo(params):
LINK_COMMANDS_AIX = """\
quiet_cmd_alink = AR($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
+cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^)
quiet_cmd_alink_thin = AR($(TOOLSET)) $@
-cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
+cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^)
quiet_cmd_link = LINK($(TOOLSET)) $@
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
@@ -273,9 +273,9 @@ def CalculateGeneratorInputInfo(params):
%(make_global_settings)s
CC.target ?= %(CC.target)s
-CFLAGS.target ?= $(CFLAGS)
+CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS)
CXX.target ?= %(CXX.target)s
-CXXFLAGS.target ?= $(CXXFLAGS)
+CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS)
LINK.target ?= %(LINK.target)s
LDFLAGS.target ?= $(LDFLAGS)
AR.target ?= $(AR)
@@ -286,9 +286,9 @@ def CalculateGeneratorInputInfo(params):
# TODO(evan): move all cross-compilation logic to gyp-time so we don't need
# to replicate this environment fallback in make as well.
CC.host ?= %(CC.host)s
-CFLAGS.host ?=
+CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host)
CXX.host ?= %(CXX.host)s
-CXXFLAGS.host ?=
+CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host)
LINK.host ?= %(LINK.host)s
LDFLAGS.host ?=
AR.host ?= %(AR.host)s
@@ -365,7 +365,7 @@ def CalculateGeneratorInputInfo(params):
quiet_cmd_copy = COPY $@
# send stderr to /dev/null to ignore messages when linking directories.
-cmd_copy = rm -rf "$@" && cp -af "$<" "$@"
+cmd_copy = rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@"
%(link_commands)s
"""
@@ -1019,7 +1019,8 @@ def WriteRules(self, rules, extra_sources, extra_outputs,
# accidentally writing duplicate dummy rules for those outputs.
self.WriteLn('%s: obj := $(abs_obj)' % outputs[0])
self.WriteLn('%s: builddir := $(abs_builddir)' % outputs[0])
- self.WriteMakeRule(outputs, inputs + ['FORCE_DO_CMD'], actions)
+ self.WriteMakeRule(outputs, inputs, actions,
+ command="%s_%d" % (name, count))
# Spaces in rule filenames are not supported, but rule variables have
# spaces in them (e.g. RULE_INPUT_PATH expands to '$(abspath $<)').
# The spaces within the variables are valid, so remove the variables
@@ -1578,7 +1579,7 @@ def WriteTarget(self, spec, configs, deps, link_deps, bundle_deps,
for link_dep in link_deps:
assert ' ' not in link_dep, (
"Spaces in alink input filenames not supported (%s)" % link_dep)
- if (self.flavor not in ('mac', 'openbsd', 'win') and not
+ if (self.flavor not in ('mac', 'openbsd', 'netbsd', 'win') and not
self.is_standalone_static_library):
self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
part_of_all, postbuilds=postbuilds)
@@ -1688,6 +1689,7 @@ def WriteDoCmd(self, outputs, inputs, command, part_of_all, comment=None,
self.WriteMakeRule(outputs, inputs,
actions = ['$(call do_cmd,%s%s)' % (command, suffix)],
comment = comment,
+ command = command,
force = True)
# Add our outputs to the list of targets we read depfiles from.
# all_deps is only used for deps file reading, and for deps files we replace
@@ -1698,7 +1700,7 @@ def WriteDoCmd(self, outputs, inputs, command, part_of_all, comment=None,
def WriteMakeRule(self, outputs, inputs, actions=None, comment=None,
- order_only=False, force=False, phony=False):
+ order_only=False, force=False, phony=False, command=None):
"""Write a Makefile rule, with some extra tricks.
outputs: a list of outputs for the rule (note: this is not directly
@@ -1711,6 +1713,7 @@ def WriteMakeRule(self, outputs, inputs, actions=None, comment=None,
force: if true, include FORCE_DO_CMD as an order-only dep
phony: if true, the rule does not actually generate the named output, the
output is just a name to run the rule
+ command: (optional) command name to generate unambiguous labels
"""
outputs = map(QuoteSpaces, outputs)
inputs = map(QuoteSpaces, inputs)
@@ -1719,44 +1722,38 @@ def WriteMakeRule(self, outputs, inputs, actions=None, comment=None,
self.WriteLn('# ' + comment)
if phony:
self.WriteLn('.PHONY: ' + ' '.join(outputs))
- # TODO(evanm): just make order_only a list of deps instead of these hacks.
- if order_only:
- order_insert = '| '
- pick_output = ' '.join(outputs)
- else:
- order_insert = ''
- pick_output = outputs[0]
- if force:
- force_append = ' FORCE_DO_CMD'
- else:
- force_append = ''
if actions:
self.WriteLn("%s: TOOLSET := $(TOOLSET)" % outputs[0])
- self.WriteLn('%s: %s%s%s' % (pick_output, order_insert, ' '.join(inputs),
- force_append))
+ force_append = ' FORCE_DO_CMD' if force else ''
+
+ if order_only:
+ # Order only rule: Just write a simple rule.
+ # TODO(evanm): just make order_only a list of deps instead of this hack.
+ self.WriteLn('%s: | %s%s' %
+ (' '.join(outputs), ' '.join(inputs), force_append))
+ elif len(outputs) == 1:
+ # Regular rule, one output: Just write a simple rule.
+ self.WriteLn('%s: %s%s' % (outputs[0], ' '.join(inputs), force_append))
+ else:
+ # Regular rule, more than one output: Multiple outputs are tricky in
+ # make. We will write three rules:
+ # - All outputs depend on an intermediate file.
+ # - Make .INTERMEDIATE depend on the intermediate.
+ # - The intermediate file depends on the inputs and executes the
+ # actual command.
+ # - The intermediate recipe will 'touch' the intermediate file.
+ # - The multi-output rule will have an do-nothing recipe.
+ intermediate = "%s.intermediate" % (command if command else self.target)
+ self.WriteLn('%s: %s' % (' '.join(outputs), intermediate))
+ self.WriteLn('\t%s' % '@:');
+ self.WriteLn('%s: %s' % ('.INTERMEDIATE', intermediate))
+ self.WriteLn('%s: %s%s' %
+ (intermediate, ' '.join(inputs), force_append))
+ actions.insert(0, '$(call do_cmd,touch)')
+
if actions:
for action in actions:
self.WriteLn('\t%s' % action)
- if not order_only and len(outputs) > 1:
- # If we have more than one output, a rule like
- # foo bar: baz
- # that for *each* output we must run the action, potentially
- # in parallel. That is not what we're trying to write -- what
- # we want is that we run the action once and it generates all
- # the files.
- # http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
- # discusses this problem and has this solution:
- # 1) Write the naive rule that would produce parallel runs of
- # the action.
- # 2) Make the outputs seralized on each other, so we won't start
- # a parallel run until the first run finishes, at which point
- # we'll have generated all the outputs and we're done.
- self.WriteLn('%s: %s' % (' '.join(outputs[1:]), outputs[0]))
- # Add a dummy command to the "extra outputs" rule, otherwise make seems to
- # think these outputs haven't (couldn't have?) changed, and thus doesn't
- # flag them as changed (i.e. include in '$?') when evaluating dependent
- # rules, which in turn causes do_cmd() to skip running dependent commands.
- self.WriteLn('%s: ;' % (' '.join(outputs[1:])))
self.WriteLn()
@@ -2015,6 +2012,7 @@ def CalculateMakefilePath(build_file, base_name):
srcdir_prefix = '$(srcdir)/'
flock_command= 'flock'
+ copy_archive_arguments = '-af'
header_params = {
'default_target': default_target,
'builddir': builddir_name,
@@ -2024,6 +2022,7 @@ def CalculateMakefilePath(build_file, base_name):
'link_commands': LINK_COMMANDS_LINUX,
'extra_commands': '',
'srcdir': srcdir,
+ 'copy_archive_args': copy_archive_arguments,
}
if flavor == 'mac':
flock_command = './gyp-mac-tool flock'
@@ -2047,8 +2046,15 @@ def CalculateMakefilePath(build_file, base_name):
header_params.update({
'flock': 'lockf',
})
+ elif flavor == 'openbsd':
+ copy_archive_arguments = '-pPRf'
+ header_params.update({
+ 'copy_archive_args': copy_archive_arguments,
+ })
elif flavor == 'aix':
+ copy_archive_arguments = '-pPRf'
header_params.update({
+ 'copy_archive_args': copy_archive_arguments,
'link_commands': LINK_COMMANDS_AIX,
'flock': './gyp-flock-tool flock',
'flock_index': 2,
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
index 8e6bd7ba0a0592..2ecf964c687c13 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
@@ -86,6 +86,9 @@ def _import_OrderedDict():
'msvs_enable_winrt',
'msvs_requires_importlibrary',
'msvs_enable_winphone',
+ 'msvs_application_type_revision',
+ 'msvs_target_platform_version',
+ 'msvs_target_platform_minversion',
]
@@ -2344,6 +2347,9 @@ def _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules):
rule_name,
{'Condition': "'@(%s)' != '' and '%%(%s.ExcludedFromBuild)' != "
"'true'" % (rule_name, rule_name),
+ 'EchoOff': 'true',
+ 'StandardOutputImportance': 'High',
+ 'StandardErrorImportance': 'High',
'CommandLineTemplate': '%%(%s.CommandLineTemplate)' % rule_name,
'AdditionalOptions': '%%(%s.AdditionalOptions)' % rule_name,
'Inputs': rule_inputs
@@ -2634,8 +2640,23 @@ def _GetMSBuildGlobalProperties(spec, guid, gyp_file_name):
if spec.get('msvs_enable_winrt'):
properties[0].append(['DefaultLanguage', 'en-US'])
properties[0].append(['AppContainerApplication', 'true'])
- properties[0].append(['ApplicationTypeRevision', '8.1'])
-
+ if spec.get('msvs_application_type_revision'):
+ app_type_revision = spec.get('msvs_application_type_revision')
+ properties[0].append(['ApplicationTypeRevision', app_type_revision])
+ else:
+ properties[0].append(['ApplicationTypeRevision', '8.1'])
+
+ if spec.get('msvs_target_platform_version'):
+ target_platform_version = spec.get('msvs_target_platform_version')
+ properties[0].append(['WindowsTargetPlatformVersion',
+ target_platform_version])
+ if spec.get('msvs_target_platform_minversion'):
+ target_platform_minversion = spec.get('msvs_target_platform_minversion')
+ properties[0].append(['WindowsTargetPlatformMinVersion',
+ target_platform_minversion])
+ else:
+ properties[0].append(['WindowsTargetPlatformMinVersion',
+ target_platform_version])
if spec.get('msvs_enable_winphone'):
properties[0].append(['ApplicationType', 'Windows Phone'])
else:
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
index 624c99ae896b26..841067ed348112 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
@@ -139,8 +139,11 @@ def __init__(self, type):
self.bundle = None
# On Windows, incremental linking requires linking against all the .objs
# that compose a .lib (rather than the .lib itself). That list is stored
- # here.
+ # here. In this case, we also need to save the compile_deps for the target,
+ # so that the the target that directly depends on the .objs can also depend
+ # on those.
self.component_objs = None
+ self.compile_deps = None
# Windows only. The import .lib is the output of a build step, but
# because dependents only link against the lib (not both the lib and the
# dll) we keep track of the import library here.
@@ -474,16 +477,17 @@ def WriteSpec(self, spec, config_name, generator_flags):
elif self.flavor == 'mac' and len(self.archs) > 1:
link_deps = collections.defaultdict(list)
-
+ compile_deps = self.target.actions_stamp or actions_depends
if self.flavor == 'win' and self.target.type == 'static_library':
self.target.component_objs = link_deps
+ self.target.compile_deps = compile_deps
# Write out a link step, if needed.
output = None
is_empty_bundle = not link_deps and not mac_bundle_depends
if link_deps or self.target.actions_stamp or actions_depends:
output = self.WriteTarget(spec, config_name, config, link_deps,
- self.target.actions_stamp or actions_depends)
+ compile_deps)
if self.is_mac_bundle:
mac_bundle_depends.append(output)
@@ -921,6 +925,11 @@ def WriteSourcesForArch(self, ninja_file, config_name, config, sources,
os.environ.get('CFLAGS', '').split() + cflags_c)
cflags_cc = (os.environ.get('CPPFLAGS', '').split() +
os.environ.get('CXXFLAGS', '').split() + cflags_cc)
+ elif self.toolset == 'host':
+ cflags_c = (os.environ.get('CPPFLAGS_host', '').split() +
+ os.environ.get('CFLAGS_host', '').split() + cflags_c)
+ cflags_cc = (os.environ.get('CPPFLAGS_host', '').split() +
+ os.environ.get('CXXFLAGS_host', '').split() + cflags_cc)
defines = config.get('defines', []) + extra_defines
self.WriteVariableList(ninja_file, 'defines',
@@ -1088,6 +1097,7 @@ def WriteLinkForArch(self, ninja_file, spec, config_name, config,
implicit_deps = set()
solibs = set()
+ order_deps = set()
if 'dependencies' in spec:
# Two kinds of dependencies:
@@ -1106,6 +1116,8 @@ def WriteLinkForArch(self, ninja_file, spec, config_name, config,
target.component_objs and
self.msvs_settings.IsUseLibraryDependencyInputs(config_name)):
new_deps = target.component_objs
+ if target.compile_deps:
+ order_deps.add(target.compile_deps)
elif self.flavor == 'win' and target.import_lib:
new_deps = [target.import_lib]
elif target.UsesToc(self.flavor):
@@ -1169,7 +1181,7 @@ def WriteLinkForArch(self, ninja_file, spec, config_name, config,
ldflags.append(r'-Wl,-rpath=\$$ORIGIN/%s' % rpath)
ldflags.append('-Wl,-rpath-link=%s' % rpath)
self.WriteVariableList(ninja_file, 'ldflags',
- gyp.common.uniquer(map(self.ExpandSpecial, ldflags)))
+ map(self.ExpandSpecial, ldflags))
library_dirs = config.get('library_dirs', [])
if self.flavor == 'win':
@@ -1244,6 +1256,7 @@ def WriteLinkForArch(self, ninja_file, spec, config_name, config,
ninja_file.build(output, command + command_suffix, link_deps,
implicit=list(implicit_deps),
+ order_only=list(order_deps),
variables=extra_bindings)
return linked_binary
@@ -1258,7 +1271,7 @@ def WriteTarget(self, spec, config_name, config, link_deps, compile_deps):
self.target.type = 'none'
elif spec['type'] == 'static_library':
self.target.binary = self.ComputeOutput(spec)
- if (self.flavor not in ('mac', 'openbsd', 'win') and not
+ if (self.flavor not in ('mac', 'openbsd', 'netbsd', 'win') and not
self.is_standalone_static_library):
self.ninja.build(self.target.binary, 'alink_thin', link_deps,
order_only=compile_deps)
@@ -1672,7 +1685,7 @@ def CommandWithWrapper(cmd, wrappers, prog):
def GetDefaultConcurrentLinks():
"""Returns a best-guess for a number of concurrent links."""
- pool_size = int(os.getenv('GYP_LINK_CONCURRENCY', 0))
+ pool_size = int(os.environ.get('GYP_LINK_CONCURRENCY', 0))
if pool_size:
return pool_size
@@ -1696,8 +1709,10 @@ class MEMORYSTATUSEX(ctypes.Structure):
stat.dwLength = ctypes.sizeof(stat)
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
- mem_limit = max(1, stat.ullTotalPhys / (4 * (2 ** 30))) # total / 4GB
- hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
+ # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM
+ # on a 64 GB machine.
+ mem_limit = max(1, stat.ullTotalPhys / (5 * (2 ** 30))) # total / 5GB
+ hard_cap = max(1, int(os.environ.get('GYP_LINK_CONCURRENCY_MAX', 2**32)))
return min(mem_limit, hard_cap)
elif sys.platform.startswith('linux'):
if os.path.exists("/proc/meminfo"):
@@ -2275,7 +2290,11 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
if flavor == 'mac':
gyp.xcode_emulation.MergeGlobalXcodeSettingsToSpec(data[build_file], spec)
- build_file = gyp.common.RelativePath(build_file, options.toplevel_dir)
+ # If build_file is a symlink, we must not follow it because there's a chance
+ # it could point to a path above toplevel_dir, and we cannot correctly deal
+ # with that case at the moment.
+ build_file = gyp.common.RelativePath(build_file, options.toplevel_dir,
+ False)
qualified_target_for_hash = gyp.common.QualifiedTarget(build_file, name,
toolset)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
index 482b53ac8ad9ec..0e3fb9301ecb9e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
@@ -87,6 +87,8 @@
'mac_framework_private_headers',
]
+generator_filelist_paths = None
+
# Xcode's standard set of library directories, which don't need to be duplicated
# in LIBRARY_SEARCH_PATHS. This list is not exhaustive, but that's okay.
xcode_standard_library_dirs = frozenset([
@@ -578,6 +580,26 @@ def PerformBuild(data, configurations, params):
subprocess.check_call(arguments)
+def CalculateGeneratorInputInfo(params):
+ toplevel = params['options'].toplevel_dir
+ if params.get('flavor') == 'ninja':
+ generator_dir = os.path.relpath(params['options'].generator_output or '.')
+ output_dir = params.get('generator_flags', {}).get('output_dir', 'out')
+ output_dir = os.path.normpath(os.path.join(generator_dir, output_dir))
+ qualified_out_dir = os.path.normpath(os.path.join(
+ toplevel, output_dir, 'gypfiles-xcode-ninja'))
+ else:
+ output_dir = os.path.normpath(os.path.join(toplevel, 'xcodebuild'))
+ qualified_out_dir = os.path.normpath(os.path.join(
+ toplevel, output_dir, 'gypfiles'))
+
+ global generator_filelist_paths
+ generator_filelist_paths = {
+ 'toplevel': toplevel,
+ 'qualified_out_dir': qualified_out_dir,
+ }
+
+
def GenerateOutput(target_list, target_dicts, data, params):
# Optionally configure each spec to use ninja as the external builder.
ninja_wrapper = params.get('flavor') == 'ninja'
@@ -590,6 +612,15 @@ def GenerateOutput(target_list, target_dicts, data, params):
parallel_builds = generator_flags.get('xcode_parallel_builds', True)
serialize_all_tests = \
generator_flags.get('xcode_serialize_all_test_runs', True)
+ upgrade_check_project_version = \
+ generator_flags.get('xcode_upgrade_check_project_version', None)
+
+ # Format upgrade_check_project_version with leading zeros as needed.
+ if upgrade_check_project_version:
+ upgrade_check_project_version = str(upgrade_check_project_version)
+ while len(upgrade_check_project_version) < 4:
+ upgrade_check_project_version = '0' + upgrade_check_project_version
+
skip_excluded_files = \
not generator_flags.get('xcode_list_excluded_files', True)
xcode_projects = {}
@@ -604,9 +635,17 @@ def GenerateOutput(target_list, target_dicts, data, params):
xcode_projects[build_file] = xcp
pbxp = xcp.project
+ # Set project-level attributes from multiple options
+ project_attributes = {};
if parallel_builds:
- pbxp.SetProperty('attributes',
- {'BuildIndependentTargetsInParallel': 'YES'})
+ project_attributes['BuildIndependentTargetsInParallel'] = 'YES'
+ if upgrade_check_project_version:
+ project_attributes['LastUpgradeCheck'] = upgrade_check_project_version
+ project_attributes['LastTestingUpgradeCheck'] = \
+ upgrade_check_project_version
+ project_attributes['LastSwiftUpdateCheck'] = \
+ upgrade_check_project_version
+ pbxp.SetProperty('attributes', project_attributes)
# Add gyp/gypi files to project
if not generator_flags.get('standalone'):
@@ -648,6 +687,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
'loadable_module': 'com.googlecode.gyp.xcode.bundle',
'shared_library': 'com.apple.product-type.library.dynamic',
'static_library': 'com.apple.product-type.library.static',
+ 'mac_kernel_extension': 'com.apple.product-type.kernel-extension',
'executable+bundle': 'com.apple.product-type.application',
'loadable_module+bundle': 'com.apple.product-type.bundle',
'loadable_module+xctest': 'com.apple.product-type.bundle.unit-test',
@@ -655,7 +695,9 @@ def GenerateOutput(target_list, target_dicts, data, params):
'executable+extension+bundle': 'com.apple.product-type.app-extension',
'executable+watch+extension+bundle':
'com.apple.product-type.watchkit-extension',
- 'executable+watch+bundle': 'com.apple.product-type.application.watchapp',
+ 'executable+watch+bundle':
+ 'com.apple.product-type.application.watchapp',
+ 'mac_kernel_extension+bundle': 'com.apple.product-type.kernel-extension',
}
target_properties = {
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
index 34fbc54711923c..20178672b23bd8 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
@@ -28,7 +28,12 @@
# A list of types that are treated as linkable.
-linkable_types = ['executable', 'shared_library', 'loadable_module']
+linkable_types = [
+ 'executable',
+ 'shared_library',
+ 'loadable_module',
+ 'mac_kernel_extension',
+]
# A list of sections that contain links to other targets.
dependency_sections = ['dependencies', 'export_dependent_settings']
@@ -57,7 +62,7 @@ def IsPathSection(section):
# If section ends in one of the '=+?!' characters, it's applied to a section
# without the trailing characters. '/' is notably absent from this list,
# because there's no way for a regular expression to be treated as a path.
- while section[-1:] in '=+?!':
+ while section and section[-1:] in '=+?!':
section = section[:-1]
if section in path_sections:
@@ -893,11 +898,15 @@ def ExpandVariables(input, phase, variables, build_file):
else:
# Fix up command with platform specific workarounds.
contents = FixupPlatformCommand(contents)
- p = subprocess.Popen(contents, shell=use_shell,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- stdin=subprocess.PIPE,
- cwd=build_file_dir)
+ try:
+ p = subprocess.Popen(contents, shell=use_shell,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ cwd=build_file_dir)
+ except Exception, e:
+ raise GypError("%s while executing command '%s' in %s" %
+ (e, contents, build_file))
p_stdout, p_stderr = p.communicate('')
@@ -905,8 +914,8 @@ def ExpandVariables(input, phase, variables, build_file):
sys.stderr.write(p_stderr)
# Simulate check_call behavior, since check_call only exists
# in python 2.5 and later.
- raise GypError("Call to '%s' returned exit status %d." %
- (contents, p.returncode))
+ raise GypError("Call to '%s' returned exit status %d while in %s." %
+ (contents, p.returncode, build_file))
replacement = p_stdout.rstrip()
cached_command_results[cache_key] = replacement
@@ -1662,8 +1671,8 @@ def DeepDependencies(self, dependencies=None):
if dependency.ref is None:
continue
if dependency.ref not in dependencies:
- dependencies.add(dependency.ref)
dependency.DeepDependencies(dependencies)
+ dependencies.add(dependency.ref)
return dependencies
@@ -1720,11 +1729,12 @@ def _LinkDependenciesInternal(self, targets, include_shared_libraries,
dependencies.add(self.ref)
return dependencies
- # Executables and loadable modules are already fully and finally linked.
- # Nothing else can be a link dependency of them, there can only be
- # dependencies in the sense that a dependent target might run an
- # executable or load the loadable_module.
- if not initial and target_type in ('executable', 'loadable_module'):
+ # Executables, mac kernel extensions and loadable modules are already fully
+ # and finally linked. Nothing else can be a link dependency of them, there
+ # can only be dependencies in the sense that a dependent target might run
+ # an executable or load the loadable_module.
+ if not initial and target_type in ('executable', 'loadable_module',
+ 'mac_kernel_extension'):
return dependencies
# Shared libraries are already fully linked. They should only be included
@@ -2475,7 +2485,7 @@ def ValidateTargetType(target, target_dict):
"""
VALID_TARGET_TYPES = ('executable', 'loadable_module',
'static_library', 'shared_library',
- 'none')
+ 'mac_kernel_extension', 'none')
target_type = target_dict.get('type', None)
if target_type not in VALID_TARGET_TYPES:
raise GypError("Target %s has an invalid target type '%s'. "
@@ -2488,6 +2498,35 @@ def ValidateTargetType(target, target_dict):
target_type))
+def ValidateSourcesInTarget(target, target_dict, build_file,
+ duplicate_basename_check):
+ if not duplicate_basename_check:
+ return
+ if target_dict.get('type', None) != 'static_library':
+ return
+ sources = target_dict.get('sources', [])
+ basenames = {}
+ for source in sources:
+ name, ext = os.path.splitext(source)
+ is_compiled_file = ext in [
+ '.c', '.cc', '.cpp', '.cxx', '.m', '.mm', '.s', '.S']
+ if not is_compiled_file:
+ continue
+ basename = os.path.basename(name) # Don't include extension.
+ basenames.setdefault(basename, []).append(source)
+
+ error = ''
+ for basename, files in basenames.iteritems():
+ if len(files) > 1:
+ error += ' %s: %s\n' % (basename, ' '.join(files))
+
+ if error:
+ print('static library %s has several files with the same basename:\n' %
+ target + error + 'libtool on Mac cannot handle that. Use '
+ '--no-duplicate-basename-check to disable this validation.')
+ raise GypError('Duplicate basenames in sources section, see list above')
+
+
def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
"""Ensures that the rules sections in target_dict are valid and consistent,
and determines which sources they apply to.
@@ -2708,7 +2747,7 @@ def SetGeneratorGlobals(generator_input_info):
def Load(build_files, variables, includes, depth, generator_input_info, check,
- circular_check, parallel, root_targets):
+ circular_check, duplicate_basename_check, parallel, root_targets):
SetGeneratorGlobals(generator_input_info)
# A generator can have other lists (in addition to sources) be processed
# for rules.
@@ -2840,6 +2879,8 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
target_dict = targets[target]
build_file = gyp.common.BuildFile(target)
ValidateTargetType(target, target_dict)
+ ValidateSourcesInTarget(target, target_dict, build_file,
+ duplicate_basename_check)
ValidateRulesInTarget(target, target_dict, extra_sources_for_rules)
ValidateRunAsInTarget(target, target_dict, build_file)
ValidateActionsInTarget(target, target_dict, build_file)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
index 366439a062d36b..eeeaceb0c7aa23 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
@@ -603,8 +603,7 @@ def _ExpandVariables(self, data, substitutions):
if isinstance(data, list):
return [self._ExpandVariables(v, substitutions) for v in data]
if isinstance(data, dict):
- return dict((k, self._ExpandVariables(data[k],
- substitutions)) for k in data)
+ return {k: self._ExpandVariables(data[k], substitutions) for k in data}
return data
if __name__ == '__main__':
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
index ce5c46ea5b3d95..ca67b122f0b9b1 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
@@ -442,6 +442,7 @@ def GetCflags(self, config):
cl('FloatingPointModel',
map={'0': 'precise', '1': 'strict', '2': 'fast'}, prefix='/fp:',
default='0')
+ cl('CompileAsManaged', map={'false': '', 'true': '/clr'})
cl('WholeProgramOptimization', map={'true': '/GL'})
cl('WarningLevel', prefix='/W')
cl('WarnAsError', map={'true': '/WX'})
@@ -593,6 +594,15 @@ def GetLdflags(self, config, gyp_to_build_path, expand_special,
'2': 'WINDOWS%s' % minimum_required_version},
prefix='/SUBSYSTEM:')
+ stack_reserve_size = self._Setting(
+ ('VCLinkerTool', 'StackReserveSize'), config, default='')
+ if stack_reserve_size:
+ stack_commit_size = self._Setting(
+ ('VCLinkerTool', 'StackCommitSize'), config, default='')
+ if stack_commit_size:
+ stack_commit_size = ',' + stack_commit_size
+ ldflags.append('/STACK:%s%s' % (stack_reserve_size, stack_commit_size))
+
ld('TerminalServerAware', map={'1': ':NO', '2': ''}, prefix='/TSAWARE')
ld('LinkIncremental', map={'1': ':NO', '2': ''}, prefix='/INCREMENTAL')
ld('BaseAddress', prefix='/BASE:')
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
index 417e465f7853f4..bb6f1ea436f258 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
@@ -123,7 +123,9 @@ def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
stderr=subprocess.STDOUT)
out, _ = link.communicate()
for line in out.splitlines():
- if not line.startswith(' Creating library '):
+ if (not line.startswith(' Creating library ') and
+ not line.startswith('Generating code') and
+ not line.startswith('Finished generating code')):
print line
return link.returncode
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
index f1a839a2f59e89..b06bdc4e8b73a4 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
@@ -525,6 +525,13 @@ def GetCflags(self, configname, arch=None):
if self._Test('GCC_WARN_ABOUT_MISSING_NEWLINE', 'YES', default='NO'):
cflags.append('-Wnewline-eof')
+ # In Xcode, this is only activated when GCC_COMPILER_VERSION is clang or
+ # llvm-gcc. It also requires a fairly recent libtool, and
+ # if the system clang isn't used, DYLD_LIBRARY_PATH needs to contain the
+ # path to the libLTO.dylib that matches the used clang.
+ if self._Test('LLVM_LTO', 'YES', default='NO'):
+ cflags.append('-flto')
+
self._AppendPlatformVersionMinFlags(cflags)
# TODO:
@@ -831,8 +838,9 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
# These flags reflect the compilation options used by xcode to compile
# extensions.
ldflags.append('-lpkstart')
- ldflags.append(sdk_root +
- '/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit')
+ if XcodeVersion() < '0900':
+ ldflags.append(sdk_root +
+ '/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit')
ldflags.append('-fapplication-extension')
ldflags.append('-Xlinker -rpath '
'-Xlinker @executable_path/../../Frameworks')
@@ -1024,7 +1032,23 @@ def _AdjustLibrary(self, library, config_name=None):
sdk_root = self._SdkPath(config_name)
if not sdk_root:
sdk_root = ''
- return l.replace('$(SDKROOT)', sdk_root)
+ # Xcode 7 started shipping with ".tbd" (text based stubs) files instead of
+ # ".dylib" without providing a real support for them. What it does, for
+ # "/usr/lib" libraries, is do "-L/usr/lib -lname" which is dependent on the
+ # library order and cause collision when building Chrome.
+ #
+ # Instead substitude ".tbd" to ".dylib" in the generated project when the
+ # following conditions are both true:
+ # - library is referenced in the gyp file as "$(SDKROOT)/**/*.dylib",
+ # - the ".dylib" file does not exists but a ".tbd" file do.
+ library = l.replace('$(SDKROOT)', sdk_root)
+ if l.startswith('$(SDKROOT)'):
+ basename, ext = os.path.splitext(library)
+ if ext == '.dylib' and not os.path.exists(library):
+ tbd_library = basename + '.tbd'
+ if os.path.exists(tbd_library):
+ library = tbd_library
+ return library
def AdjustLibraries(self, libraries, config_name=None):
"""Transforms entries like 'Cocoa.framework' in libraries into entries like
@@ -1428,6 +1452,7 @@ def _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration,
# These are filled in on a as-needed basis.
env = {
+ 'BUILT_FRAMEWORKS_DIR' : built_products_dir,
'BUILT_PRODUCTS_DIR' : built_products_dir,
'CONFIGURATION' : configuration,
'PRODUCT_NAME' : xcode_settings.GetProductName(),
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
index 034a0d2d4fcc23..d08b7f777002f0 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
@@ -1492,6 +1492,7 @@ def __init__(self, properties=None, id=None, parent=None):
'icns': 'image.icns',
'java': 'sourcecode.java',
'js': 'sourcecode.javascript',
+ 'kext': 'wrapper.kext',
'm': 'sourcecode.c.objc',
'mm': 'sourcecode.cpp.objcpp',
'nib': 'wrapper.nib',
@@ -1951,6 +1952,7 @@ class PBXCopyFilesBuildPhase(XCBuildPhase):
# path_tree_to_subfolder maps names of Xcode variables to the associated
# dstSubfolderSpec property value used in a PBXCopyFilesBuildPhase object.
path_tree_to_subfolder = {
+ 'BUILT_FRAMEWORKS_DIR': 10, # Frameworks Directory
'BUILT_PRODUCTS_DIR': 16, # Products Directory
# Other types that can be chosen via the Xcode UI.
# TODO(mark): Map Xcode variable names to these.
@@ -1958,7 +1960,6 @@ class PBXCopyFilesBuildPhase(XCBuildPhase):
# : 6, # Executables: 6
# : 7, # Resources
# : 15, # Java Resources
- # : 10, # Frameworks
# : 11, # Shared Frameworks
# : 12, # Shared Support
# : 13, # PlugIns
@@ -2262,6 +2263,8 @@ class PBXNativeTarget(XCTarget):
'', '.xctest'],
'com.googlecode.gyp.xcode.bundle': ['compiled.mach-o.dylib',
'', '.so'],
+ 'com.apple.product-type.kernel-extension': ['wrapper.kext',
+ '', '.kext'],
}
def __init__(self, properties=None, id=None, parent=None,
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index 198017b262add5..3a3edccf872b92 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -19,9 +19,15 @@ var fs = require('graceful-fs')
exports.usage = 'Invokes `' + (win ? 'msbuild' : 'make') + '` and builds the module'
function build (gyp, argv, callback) {
+ var platformMake = 'make'
+ if (process.platform === 'aix') {
+ platformMake = 'gmake'
+ } else if (process.platform.indexOf('bsd') !== -1) {
+ platformMake = 'gmake'
+ }
+
var release = processRelease(argv, gyp, process.version, process.release)
- , makeCommand = gyp.opts.make || process.env.MAKE
- || (process.platform.indexOf('bsd') != -1 && process.platform.indexOf('kfreebsd') == -1 ? 'gmake' : 'make')
+ , makeCommand = gyp.opts.make || process.env.MAKE || platformMake
, command = win ? 'msbuild' : makeCommand
, buildDir = path.resolve('build')
, configPath = path.resolve(buildDir, 'config.gypi')
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index 009935202af98a..4e0652961ea902 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -1,4 +1,5 @@
module.exports = exports = configure
+module.exports.test = { findPython: findPython }
/**
* Module dependencies.
@@ -19,6 +20,7 @@ var fs = require('graceful-fs')
, spawn = cp.spawn
, execFile = cp.execFile
, win = process.platform == 'win32'
+ , findNodeDirectory = require('./find-node-directory')
exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
@@ -31,97 +33,14 @@ function configure (gyp, argv, callback) {
, nodeDir
, release = processRelease(argv, gyp, process.version, process.release)
- checkPython()
-
- // Check if Python is in the $PATH
- function checkPython () {
- log.verbose('check python', 'checking for Python executable "%s" in the PATH', python)
- which(python, function (err, execPath) {
- if (err) {
- log.verbose('`which` failed', python, err)
- if (python === 'python2') {
- python = 'python'
- return checkPython()
- }
- if (win) {
- guessPython()
- } else {
- failNoPython()
- }
- } else {
- log.verbose('`which` succeeded', python, execPath)
- checkPythonVersion()
- }
- })
- }
-
- // Called on Windows when "python" isn't available in the current $PATH.
- // We're gonna check if "%SystemDrive%\python27\python.exe" exists.
- function guessPython () {
- log.verbose('could not find "' + python + '". guessing location')
- var rootDir = process.env.SystemDrive || 'C:\\'
- if (rootDir[rootDir.length - 1] !== '\\') {
- rootDir += '\\'
+ findPython(python, function (err, found) {
+ if (err) {
+ callback(err)
+ } else {
+ python = found
+ getNodeDir()
}
- var pythonPath = path.resolve(rootDir, 'Python27', 'python.exe')
- log.verbose('ensuring that file exists:', pythonPath)
- fs.stat(pythonPath, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- failNoPython()
- } else {
- callback(err)
- }
- return
- }
- python = pythonPath
- checkPythonVersion()
- })
- }
-
- function checkPythonVersion () {
- var env = extend({}, process.env)
- env.TERM = 'dumb'
-
- execFile(python, ['-c', 'import platform; print(platform.python_version());'], { env: env }, function (err, stdout) {
- if (err) {
- return callback(err)
- }
- log.verbose('check python version', '`%s -c "import platform; print(platform.python_version());"` returned: %j', python, stdout)
- var version = stdout.trim()
- if (~version.indexOf('+')) {
- log.silly('stripping "+" sign(s) from version')
- version = version.replace(/\+/g, '')
- }
- if (~version.indexOf('rc')) {
- log.silly('stripping "rc" identifier from version')
- version = version.replace(/rc(.*)$/ig, '')
- }
- var range = semver.Range('>=2.5.0 <3.0.0')
- var valid = false
- try {
- valid = range.test(version)
- } catch (e) {
- log.silly('range.test() error', e)
- }
- if (valid) {
- getNodeDir()
- } else {
- failPythonVersion(version)
- }
- })
- }
-
- function failNoPython () {
- callback(new Error('Can\'t find Python executable "' + python +
- '", you can set the PYTHON env variable.'))
- }
-
- function failPythonVersion (badVersion) {
- callback(new Error('Python executable "' + python +
- '" is v' + badVersion + ', which is not supported by gyp.\n' +
- 'You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.'))
- }
+ })
function getNodeDir () {
@@ -299,6 +218,34 @@ function configure (gyp, argv, callback) {
argv.push('-I', config)
})
+ // for AIX we need to set up the path to the exp file
+ // which contains the symbols needed for linking.
+ // The file will either be in one of the following
+ // depending on whether it is an installed or
+ // development environment:
+ // - the include/node directory
+ // - the out/Release directory
+ // - the out/Debug directory
+ // - the root directory
+ var node_exp_file = ''
+ if (process.platform === 'aix') {
+ var node_root_dir = findNodeDirectory()
+ var candidates = ['include/node/node.exp',
+ 'out/Release/node.exp',
+ 'out/Debug/node.exp',
+ 'node.exp']
+ for (var next = 0; next < candidates.length; next++) {
+ node_exp_file = path.resolve(node_root_dir, candidates[next])
+ try {
+ fs.accessSync(node_exp_file, fs.R_OK)
+ // exp file found, stop looking
+ break
+ } catch (exception) {
+ // this candidate was not found or not readable, do nothing
+ }
+ }
+ }
+
// this logic ported from the old `gyp_addon` python file
var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
var addon_gypi = path.resolve(__dirname, '..', 'addon.gypi')
@@ -319,6 +266,9 @@ function configure (gyp, argv, callback) {
argv.push('-Dlibrary=shared_library')
argv.push('-Dvisibility=default')
argv.push('-Dnode_root_dir=' + nodeDir)
+ if (process.platform === 'aix') {
+ argv.push('-Dnode_exp_file=' + node_exp_file)
+ }
argv.push('-Dnode_gyp_dir=' + nodeGypDir)
argv.push('-Dnode_lib_file=' + release.name + '.lib')
argv.push('-Dmodule_root_dir=' + process.cwd())
@@ -360,3 +310,101 @@ function configure (gyp, argv, callback) {
}
}
+
+function findPython (python, callback) {
+ checkPython()
+
+ // Check if Python is in the $PATH
+ function checkPython () {
+ log.verbose('check python', 'checking for Python executable "%s" in the PATH', python)
+ which(python, function (err, execPath) {
+ if (err) {
+ log.verbose('`which` failed', python, err)
+ if (python === 'python2') {
+ python = 'python'
+ return checkPython()
+ }
+ if (win) {
+ guessPython()
+ } else {
+ failNoPython()
+ }
+ } else {
+ log.verbose('`which` succeeded', python, execPath)
+ // Found the `python` exceutable, and from now on we use it explicitly.
+ // This solves #667 and #750 (`execFile` won't run batch files
+ // (*.cmd, and *.bat))
+ python = execPath
+ checkPythonVersion()
+ }
+ })
+ }
+
+ // Called on Windows when "python" isn't available in the current $PATH.
+ // We're gonna check if "%SystemDrive%\python27\python.exe" exists.
+ function guessPython () {
+ log.verbose('could not find "' + python + '". guessing location')
+ var rootDir = process.env.SystemDrive || 'C:\\'
+ if (rootDir[rootDir.length - 1] !== '\\') {
+ rootDir += '\\'
+ }
+ var pythonPath = path.resolve(rootDir, 'Python27', 'python.exe')
+ log.verbose('ensuring that file exists:', pythonPath)
+ fs.stat(pythonPath, function (err, stat) {
+ if (err) {
+ if (err.code == 'ENOENT') {
+ failNoPython()
+ } else {
+ callback(err)
+ }
+ return
+ }
+ python = pythonPath
+ checkPythonVersion()
+ })
+ }
+
+ function checkPythonVersion () {
+ var env = extend({}, process.env)
+ env.TERM = 'dumb'
+
+ execFile(python, ['-c', 'import platform; print(platform.python_version());'], { env: env }, function (err, stdout) {
+ if (err) {
+ return callback(err)
+ }
+ log.verbose('check python version', '`%s -c "import platform; print(platform.python_version());"` returned: %j', python, stdout)
+ var version = stdout.trim()
+ if (~version.indexOf('+')) {
+ log.silly('stripping "+" sign(s) from version')
+ version = version.replace(/\+/g, '')
+ }
+ if (~version.indexOf('rc')) {
+ log.silly('stripping "rc" identifier from version')
+ version = version.replace(/rc(.*)$/ig, '')
+ }
+ var range = semver.Range('>=2.5.0 <3.0.0')
+ var valid = false
+ try {
+ valid = range.test(version)
+ } catch (e) {
+ log.silly('range.test() error', e)
+ }
+ if (valid) {
+ callback(null, python)
+ } else {
+ failPythonVersion(version)
+ }
+ })
+ }
+
+ function failNoPython () {
+ callback(new Error('Can\'t find Python executable "' + python +
+ '", you can set the PYTHON env variable.'))
+ }
+
+ function failPythonVersion (badVersion) {
+ callback(new Error('Python executable "' + python +
+ '" is v' + badVersion + ', which is not supported by gyp.\n' +
+ 'You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.'))
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/lib/find-node-directory.js b/deps/npm/node_modules/node-gyp/lib/find-node-directory.js
new file mode 100644
index 00000000000000..3aee8a109ae280
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/lib/find-node-directory.js
@@ -0,0 +1,61 @@
+var path = require('path')
+ , log = require('npmlog')
+
+function findNodeDirectory(scriptLocation, processObj) {
+ // set dirname and process if not passed in
+ // this facilitates regression tests
+ if (scriptLocation === undefined) {
+ scriptLocation = __dirname
+ }
+ if (processObj === undefined) {
+ processObj = process
+ }
+
+ // Have a look to see what is above us, to try and work out where we are
+ npm_parent_directory = path.join(scriptLocation, '../../../..')
+ log.verbose('node-gyp root', 'npm_parent_directory is '
+ + path.basename(npm_parent_directory))
+ node_root_dir = ""
+
+ log.verbose('node-gyp root', 'Finding node root directory')
+ if (path.basename(npm_parent_directory) === 'deps') {
+ // We are in a build directory where this script lives in
+ // deps/npm/node_modules/node-gyp/lib
+ node_root_dir = path.join(npm_parent_directory, '..')
+ log.verbose('node-gyp root', 'in build directory, root = '
+ + node_root_dir)
+ } else if (path.basename(npm_parent_directory) === 'node_modules') {
+ // We are in a node install directory where this script lives in
+ // lib/node_modules/npm/node_modules/node-gyp/lib or
+ // node_modules/npm/node_modules/node-gyp/lib depending on the
+ // platform
+ if (processObj.platform === 'win32') {
+ node_root_dir = path.join(npm_parent_directory, '..')
+ } else {
+ node_root_dir = path.join(npm_parent_directory, '../..')
+ }
+ log.verbose('node-gyp root', 'in install directory, root = '
+ + node_root_dir)
+ } else {
+ // We don't know where we are, try working it out from the location
+ // of the node binary
+ var node_dir = path.dirname(processObj.execPath)
+ var directory_up = path.basename(node_dir)
+ if (directory_up === 'bin') {
+ node_root_dir = path.join(node_dir, '..')
+ } else if (directory_up === 'Release' || directory_up === 'Debug') {
+ // If we are a recently built node, and the directory structure
+ // is that of a repository. If we are on Windows then we only need
+ // to go one level up, everything else, two
+ if (processObj.platform === 'win32') {
+ node_root_dir = path.join(node_dir, '..')
+ } else {
+ node_root_dir = path.join(node_dir, '../..')
+ }
+ }
+ // Else return the default blank, "".
+ }
+ return node_root_dir
+}
+
+module.exports = findNodeDirectory
diff --git a/deps/npm/node_modules/node-gyp/lib/node-gyp.js b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
index d6d6509a7a8b03..b84f17d7e2cf9f 100644
--- a/deps/npm/node_modules/node-gyp/lib/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
@@ -164,7 +164,9 @@ proto.parseArgv = function parseOpts (argv) {
} else {
// add the user-defined options to the config
name = name.substring(npm_config_prefix.length)
- this.opts[name] = val
+ // gyp@741b7f1 enters an infinite loop when it encounters
+ // zero-length options so ensure those don't get through.
+ if (name) this.opts[name] = val
}
}, this)
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
index cc4dba29d959a2..6e5919de39a312 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
@@ -1,4 +1,3 @@
language: node_js
node_js:
- - "0.8"
- "0.10"
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
new file mode 100644
index 00000000000000..2cdc8e4148cc0a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
@@ -0,0 +1,21 @@
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
index 2aff0ebff4403e..421f3aa5f951a2 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -47,6 +47,15 @@ If there's no match, `undefined` will be returned.
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+### var r = balanced.range(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+array with indexes: `[ , ]`.
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`.
+
## Installation
With [npm](https://npmjs.org) do:
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
index d165ae8174ca82..75f3d71cba90bc 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -1,38 +1,50 @@
module.exports = balanced;
function balanced(a, b, str) {
- var bal = 0;
- var m = {};
- var ended = false;
-
- for (var i = 0; i < str.length; i++) {
- if (a == str.substr(i, a.length)) {
- if (!('start' in m)) m.start = i;
- bal++;
- }
- else if (b == str.substr(i, b.length) && 'start' in m) {
- ended = true;
- bal--;
- if (!bal) {
- m.end = i;
- m.pre = str.substr(0, m.start);
- m.body = (m.end - m.start > 1)
- ? str.substring(m.start + a.length, m.end)
- : '';
- m.post = str.slice(m.end + b.length);
- return m;
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ begs = [];
+ left = str.length;
+
+ while (i < str.length && i >= 0 && ! result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
}
+
+ i = ai < bi && ai >= 0 ? ai : bi;
}
- }
- // if we opened more than we closed, find the one we closed
- if (bal && ended) {
- var start = m.start + a.length;
- m = balanced(a, b, str.substr(start));
- if (m) {
- m.start += start;
- m.end += start;
- m.pre = str.slice(0, start) + m.pre;
+ if (begs.length) {
+ result = [ left, right ];
}
- return m;
}
+
+ return result;
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
index 35332a3c4eb366..ac0c6aaca5848e 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -1,56 +1,98 @@
{
- "name": "balanced-match",
- "description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.2.0",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/balanced-match.git"
+ "_args": [
+ [
+ "balanced-match@^0.3.0",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion"
+ ]
+ ],
+ "_from": "balanced-match@>=0.3.0 <0.4.0",
+ "_id": "balanced-match@0.3.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/glob/minimatch/brace-expansion/balanced-match",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "homepage": "https://github.com/juliangruber/balanced-match",
- "main": "index.js",
- "scripts": {
- "test": "make test"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "balanced-match",
+ "raw": "balanced-match@^0.3.0",
+ "rawSpec": "^0.3.0",
+ "scope": null,
+ "spec": ">=0.3.0 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/node-gyp/glob/minimatch/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz",
+ "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "_shrinkwrap": null,
+ "_spec": "balanced-match@^0.3.0",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion",
+ "author": {
+ "email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
},
"dependencies": {},
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": {
- "tape": "~1.1.1"
+ "tape": "~4.2.2"
},
+ "directories": {},
+ "dist": {
+ "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756",
+ "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
+ },
+ "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5",
+ "homepage": "https://github.com/juliangruber/balanced-match",
"keywords": [
+ "balanced",
"match",
+ "parse",
"regexp",
- "test",
- "balanced",
- "parse"
+ "test"
],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
"license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "name": "balanced-match",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "scripts": {
+ "test": "make test"
+ },
"testling": {
- "files": "test/*.js",
"browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
+ "android-browser/4.2..latest",
"chrome/25..latest",
"chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
"ipad/6.0..latest",
"iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "readme": "# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `` and ``.\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)\n\n## Example\n\nGet the first matching pair of braces:\n\n```js\nvar balanced = require('balanced-match');\n\nconsole.log(balanced('{', '}', 'pre{in{nested}}post'));\nconsole.log(balanced('{', '}', 'pre{first}between{second}post'));\n```\n\nThe matches are:\n\n```bash\n$ node example.js\n{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }\n{ start: 3,\n end: 9,\n pre: 'pre',\n body: 'first',\n post: 'between{second}post' }\n```\n\n## API\n\n### var m = balanced(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\nobject with those keys:\n\n* **start** the index of the first match of `a`\n* **end** the index of the matching `b`\n* **pre** the preamble, `a` and `b` not included\n* **body** the match, `a` and `b` not included\n* **post** the postscript, `a` and `b` not included\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install balanced-match\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/juliangruber/balanced-match/issues"
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
},
- "_id": "balanced-match@0.2.0",
- "_shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
- "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz",
- "_from": "balanced-match@>=0.2.0 <0.3.0"
+ "version": "0.3.0"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
index 36bfd39954850d..f5e98e3f2a3240 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
@@ -52,5 +52,33 @@ test('balanced', function(t) {
body: 'innest',
post: 'post'
});
+ t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: '{in}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), {
+ start: 3,
+ end: 8,
+ pre: 'pre',
+ body: 'in',
+ post: '}post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), {
+ start: 4,
+ end: 10,
+ pre: 'pre{',
+ body: 'first',
+ post: 'in{second}post'
+ });
+ t.deepEqual(balanced('', '?>', 'pre>post'), {
+ start: 3,
+ end: 4,
+ pre: 'pre',
+ body: '',
+ post: 'post'
+ });
t.end();
});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
index b516138098fba9..15acbe5c07ae55 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
@@ -1,83 +1,109 @@
{
- "name": "concat-map",
+ "_args": [
+ [
+ "concat-map@0.0.1",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion"
+ ]
+ ],
+ "_from": "concat-map@0.0.1",
+ "_id": "concat-map@0.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/glob/minimatch/brace-expansion/concat-map",
+ "_npmUser": {
+ "email": "mail@substack.net",
+ "name": "substack"
+ },
+ "_npmVersion": "1.3.21",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "concat-map",
+ "raw": "concat-map@0.0.1",
+ "rawSpec": "0.0.1",
+ "scope": null,
+ "spec": "0.0.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/node-gyp/glob/minimatch/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "_shrinkwrap": null,
+ "_spec": "concat-map@0.0.1",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion",
+ "author": {
+ "email": "mail@substack.net",
+ "name": "James Halliday",
+ "url": "http://substack.net"
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-concat-map/issues"
+ },
+ "dependencies": {},
"description": "concatenative mapdashery",
- "version": "0.0.1",
- "repository": {
- "type": "git",
- "url": "git://github.com/substack/node-concat-map.git"
+ "devDependencies": {
+ "tape": "~2.4.0"
},
- "main": "index.js",
+ "directories": {
+ "example": "example",
+ "test": "test"
+ },
+ "dist": {
+ "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ },
+ "homepage": "https://github.com/substack/node-concat-map",
"keywords": [
"concat",
"concatMap",
- "map",
"functional",
- "higher-order"
+ "higher-order",
+ "map"
],
- "directories": {
- "example": "example",
- "test": "test"
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "name": "concat-map",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-concat-map.git"
},
"scripts": {
"test": "tape test/*.js"
},
- "devDependencies": {
- "tape": "~2.4.0"
- },
- "license": "MIT",
- "author": {
- "name": "James Halliday",
- "email": "mail@substack.net",
- "url": "http://substack.net"
- },
"testling": {
- "files": "test/*.js",
"browsers": {
+ "chrome": [
+ 10,
+ 22
+ ],
+ "ff": [
+ 10,
+ 15,
+ 3.5
+ ],
"ie": [
6,
7,
8,
9
],
- "ff": [
- 3.5,
- 10,
- 15
- ],
- "chrome": [
- 10,
- 22
+ "opera": [
+ 12
],
"safari": [
5.1
- ],
- "opera": [
- 12
]
- }
- },
- "bugs": {
- "url": "https://github.com/substack/node-concat-map/issues"
- },
- "homepage": "https://github.com/substack/node-concat-map",
- "_id": "concat-map@0.0.1",
- "dist": {
- "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
- "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ },
+ "files": "test/*.js"
},
- "_from": "concat-map@0.0.1",
- "_npmVersion": "1.3.21",
- "_npmUser": {
- "name": "substack",
- "email": "mail@substack.net"
- },
- "maintainers": [
- {
- "name": "substack",
- "email": "mail@substack.net"
- }
- ],
- "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
- "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "readme": "ERROR: No README data found!"
+ "version": "0.0.1"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
index 4cb3e05d7ceb6c..9b240267e8aa0e 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -1,60 +1,64 @@
{
- "name": "brace-expansion",
- "description": "Brace expansion as known from sh/bash",
- "version": "1.1.1",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/brace-expansion.git"
- },
- "homepage": "https://github.com/juliangruber/brace-expansion",
- "main": "index.js",
- "scripts": {
- "test": "tape test/*.js",
- "gentest": "bash test/generate.sh"
- },
- "dependencies": {
- "balanced-match": "^0.2.0",
- "concat-map": "0.0.1"
+ "_args": [
+ [
+ "brace-expansion@^1.0.0",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch"
+ ]
+ ],
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_id": "brace-expansion@1.1.2",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/glob/minimatch/brace-expansion",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "email": "julian@juliangruber.com",
+ "name": "juliangruber"
},
- "devDependencies": {
- "tape": "^3.0.3"
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "brace-expansion",
+ "raw": "brace-expansion@^1.0.0",
+ "rawSpec": "^1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
},
- "keywords": [],
+ "_requiredBy": [
+ "/node-gyp/glob/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
+ "_shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "_shrinkwrap": null,
+ "_spec": "brace-expansion@^1.0.0",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/glob/node_modules/minimatch",
"author": {
- "name": "Julian Gruber",
"email": "mail@juliangruber.com",
+ "name": "Julian Gruber",
"url": "http://juliangruber.com"
},
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "gitHead": "f50da498166d76ea570cf3b30179f01f0f119612",
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
- "_id": "brace-expansion@1.1.1",
- "_shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "_from": "brace-expansion@>=1.0.0 <2.0.0",
- "_npmVersion": "2.6.1",
- "_nodeVersion": "0.10.36",
- "_npmUser": {
- "name": "juliangruber",
- "email": "julian@juliangruber.com"
+ "dependencies": {
+ "balanced-match": "^0.3.0",
+ "concat-map": "0.0.1"
},
+ "description": "Brace expansion as known from sh/bash",
+ "devDependencies": {
+ "tape": "4.2.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "f21445d0488b658e2771efd870eff51df29f04ef",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz"
+ },
+ "gitHead": "b03773a30fa516b1374945b68e9acb6253d595fa",
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "keywords": [],
+ "license": "MIT",
+ "main": "index.js",
"maintainers": [
{
"name": "juliangruber",
@@ -65,11 +69,32 @@
"email": "isaacs@npmjs.com"
}
],
- "dist": {
- "shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
- "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz"
+ "name": "brace-expansion",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz",
- "readme": "ERROR: No README data found!"
+ "scripts": {
+ "gentest": "bash test/generate.sh",
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "browsers": [
+ "android-browser/4.2..latest",
+ "chrome/25..latest",
+ "chrome/canary",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "ie/8..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
+ },
+ "version": "1.1.2"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json
index e9256630aa3819..3dc6beb49f684a 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json
@@ -33,14 +33,31 @@
"minimatch.js",
"browser.js"
],
- "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself if this option is set. When not set, an empty list\nis returned if there are no matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n",
- "readmeFilename": "README.md",
+ "gitHead": "6afb85f0c324b321f76a38df81891e562693e257",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
"homepage": "https://github.com/isaacs/minimatch#readme",
"_id": "minimatch@2.0.10",
"_shasum": "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7",
+ "_from": "minimatch@>=2.0.1 <3.0.0",
+ "_npmVersion": "3.1.0",
+ "_nodeVersion": "2.2.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "_from": "minimatch@>=2.0.1 <3.0.0"
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json
index 84b72480f8925d..434e4696f8fb15 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json
@@ -42,14 +42,31 @@
"benchclean": "bash benchclean.sh"
},
"license": "ISC",
- "readme": "[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)\n\n# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n![](oh-my-glob.gif)\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Glob Primer\n\n\"Globs\" are the patterns you type when you do stuff like `ls *.js` on\nthe command line, or put `build/*` in a `.gitignore` file.\n\nBefore parsing the path part patterns, braced sections are expanded\ninto a set. Braced sections start with `{` and end with `}`, with any\nnumber of comma-delimited sections within. Braced sections may contain\nslash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.\n\nThe following characters have special magic meaning when used in a\npath portion:\n\n* `*` Matches 0 or more characters in a single path portion\n* `?` Matches 1 character\n* `[...]` Matches a range of characters, similar to a RegExp range.\n If the first character of the range is `!` or `^` then it matches\n any character not in the range.\n* `!(pattern|pattern|pattern)` Matches anything that does not match\n any of the patterns provided.\n* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the\n patterns provided.\n* `+(pattern|pattern|pattern)` Matches one or more occurrences of the\n patterns provided.\n* `*(a|b|c)` Matches zero or more occurrences of the patterns provided\n* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns\n provided\n* `**` If a \"globstar\" is alone in a path portion, then it matches\n zero or more directories and subdirectories searching for matches.\n It does not crawl symlinked directories.\n\n### Dots\n\nIf a file or directory path portion has a `.` as the first character,\nthen it will not match any glob pattern unless that pattern's\ncorresponding path part also has a `.` as its first character.\n\nFor example, the pattern `a/.*/c` would match the file at `a/.b/c`.\nHowever the pattern `a/*/c` would not, because `*` does not start with\na dot character.\n\nYou can make glob treat dots as normal characters by setting\n`dot:true` in the options.\n\n### Basename Matching\n\nIf you set `matchBase:true` in the options, and the pattern has no\nslashes in it, then it will seek for any file anywhere in the tree\nwith a matching basename. For example, `*.js` would match\n`test/simple/basic.js`.\n\n### Negation\n\nThe intent for negation would be for a pattern starting with `!` to\nmatch everything that *doesn't* match the supplied pattern. However,\nthe implementation is weird, and for the time being, this should be\navoided. The behavior will change or be deprecated in version 5.\n\n### Empty Sets\n\nIf no matching files are found, then an empty array is returned. This\ndiffers from the shell, where the pattern itself is returned. For\nexample:\n\n $ echo a*s*d*f\n a*s*d*f\n\nTo get the bash-style behavior, set the `nonull:true` in the options.\n\n### See Also:\n\n* `man sh`\n* `man bash` (Search for \"Pattern Matching\")\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob.hasMagic(pattern, [options])\n\nReturns `true` if there are any special characters in the pattern, and\n`false` otherwise.\n\nNote that the options affect the results. If `noext:true` is set in\nthe options object, then `+(a|b)` will not be considered a magic\npattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`\nthen that is considered magical, unless `nobrace:true` is set in the\noptions.\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instantiating the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n performed.\n* `cache` Convenience object. Each field has the following possible\n values:\n * `false` - Path does not exist\n * `true` - Path exists\n * `'DIR'` - Path exists, and is not a directory\n * `'FILE'` - Path exists, and is a directory\n * `[file, entries, ...]` - Path exists, is a directory, and the\n array value is the results of `fs.readdir`\n* `statCache` Cache of `fs.stat` results, to prevent statting the same\n path multiple times.\n* `symlinks` A record of which paths are symbolic links, which is\n relevant in resolving `**` patterns.\n* `realpathCache` An optional object which is passed to `fs.realpath`\n to minimize unnecessary syscalls. It is stored on the instantiated\n Glob object, and may be re-used.\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `pause` Temporarily stop the search\n* `resume` Resume the search\n* `abort` Stop the search forever\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the Glob object, as well.\n\nIf you are running many `glob` operations, you can pass a Glob object\nas the `options` argument to a subsequent operation to shortcut some\n`stat` and `readdir` calls. At the very least, you may pass in shared\n`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that\nparallel glob operations will be sped up by sharing information about\nthe filesystem.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n Note that an explicit dot in a portion of the pattern will always\n match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence.\n* `silent` When an unusual error is encountered when attempting to\n read a directory, a warning will be printed to stderr. Set the\n `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered when attempting to\n read a directory, the process will just continue on in search of\n other matches. Set the `strict` option to raise an error in these\n cases.\n* `cache` See `cache` property above. Pass in a previously generated\n cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary\n to set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `symlinks` A cache of known symbolic links. You may pass in a\n previously generated `symlinks` object to save `lstat` calls when\n resolving `**` matches.\n* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set. Set this\n flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `debug` Set to enable debug logging in minimatch and glob.\n* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.\n* `noglobstar` Do not match `**` against multiple filenames. (Ie,\n treat it as a normal `*` instead.)\n* `noext` Do not match `+(a|b)` \"extglob\" patterns.\n* `nocase` Perform a case-insensitive match. Note: on\n case-insensitive filesystems, non-magic patterns will match by\n default, since `stat` and `readdir` will not raise errors.\n* `matchBase` Perform a basename-only match if the pattern does not\n contain any slash characters. That is, `*.js` would be treated as\n equivalent to `**/*.js`, matching all js files in all directories.\n* `nonegate` Suppress `negate` behavior. (See below.)\n* `nocomment` Suppress `comment` behavior. (See below.)\n* `nonull` Return the pattern when no matches are found.\n* `nodir` Do not match directories, only files. (Note: to match\n *only* directories, simply put a `/` at the end of the pattern.)\n* `ignore` Add a pattern or an array of patterns to exclude matches.\n* `follow` Follow symlinked directories when expanding `**` patterns.\n Note that this can result in a lot of duplicate references in the\n presence of cyclic links.\n* `realpath` Set to true to call `fs.realpath` on all of the results.\n In the case of a symlink that cannot be resolved, the full absolute\n path to the matched entry is returned (though it will usually be a\n broken symlink)\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.3, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nNote that symlinked directories are not crawled as part of a `**`,\nthough their contents may match against subsequent portions of the\npattern. This prevents infinite loops and duplicates and the like.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes. For the vast majority\nof operations, this is never a problem.\n\n## Contributing\n\nAny change to behavior (including bugfixes) must come with a test.\n\nPatches that fail tests or reduce performance will be rejected.\n\n```\n# to run tests\nnpm test\n\n# to re-generate test fixtures\nnpm run test-regen\n\n# to benchmark against bash/zsh\nnpm run bench\n\n# to profile javascript\nnpm run prof\n```\n",
- "readmeFilename": "README.md",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
- "homepage": "https://github.com/isaacs/node-glob#readme",
+ "homepage": "https://github.com/isaacs/node-glob",
"_id": "glob@4.5.3",
"_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@>=3.0.0 <4.0.0||>=4.0.0 <5.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
"_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
- "_from": "glob@>=3.0.0 <4.0.0||>=4.0.0 <5.0.0"
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/README.md b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/README.md
index 3fd6d0bcae478e..c06814e0414d56 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/README.md
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/README.md
@@ -24,6 +24,24 @@ If you put more stuff in it, then items will fall out.
If you try to put an oversized thing in it, then it'll fall out right
away.
+## Keys should always be Strings or Numbers
+
+Note: this module will print warnings to `console.error` if you use a
+key that is not a String or Number. Because items are stored in an
+object, which coerces keys to a string, it won't go well for you if
+you try to use a key that is not a unique string, it'll cause surprise
+collisions. For example:
+
+```JavaScript
+// Bad Example! Dont' do this!
+var cache = LRU()
+var a = {}
+var b = {}
+cache.set(a, 'this is a')
+cache.set(b, 'this is b')
+console.log(cache.get(a)) // prints: 'this is b'
+```
+
## Options
* `max` The maximum size of the cache, checked by applying the length
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
index 32c2d2d90be150..2bbe653be8ad08 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
@@ -13,6 +13,14 @@ function hOP (obj, key) {
function naiveLength () { return 1 }
+var didTypeWarning = false
+function typeCheckKey(key) {
+ if (!didTypeWarning && typeof key !== 'string' && typeof key !== 'number') {
+ didTypeWarning = true
+ console.error(new TypeError("LRU: key must be a string or number. Almost certainly a bug! " + typeof key).stack)
+ }
+}
+
function LRUCache (options) {
if (!(this instanceof LRUCache))
return new LRUCache(options)
@@ -163,6 +171,8 @@ LRUCache.prototype.dumpLru = function () {
LRUCache.prototype.set = function (key, value, maxAge) {
maxAge = maxAge || this._maxAge
+ typeCheckKey(key)
+
var now = maxAge ? Date.now() : 0
var len = this._lengthCalculator(value)
@@ -207,6 +217,7 @@ LRUCache.prototype.set = function (key, value, maxAge) {
}
LRUCache.prototype.has = function (key) {
+ typeCheckKey(key)
if (!hOP(this._cache, key)) return false
var hit = this._cache[key]
if (isStale(this, hit)) {
@@ -216,10 +227,12 @@ LRUCache.prototype.has = function (key) {
}
LRUCache.prototype.get = function (key) {
+ typeCheckKey(key)
return get(this, key, true)
}
LRUCache.prototype.peek = function (key) {
+ typeCheckKey(key)
return get(this, key, false)
}
@@ -230,6 +243,7 @@ LRUCache.prototype.pop = function () {
}
LRUCache.prototype.del = function (key) {
+ typeCheckKey(key)
del(this, this._cache[key])
}
@@ -241,6 +255,7 @@ LRUCache.prototype.load = function (arr) {
//A previous serialized cache has the most recent items first
for (var l = arr.length - 1; l >= 0; l-- ) {
var hit = arr[l]
+ typeCheckKey(hit.k)
var expiresAt = hit.e || 0
if (expiresAt === 0) {
//the item was created without expiration in a non aged cache
@@ -254,6 +269,7 @@ LRUCache.prototype.load = function (arr) {
}
function get (self, key, doUse) {
+ typeCheckKey(key)
var hit = self._cache[key]
if (hit) {
if (isStale(self, hit)) {
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/package.json
index 71a3544fd5a5aa..411b59ea1b1f4f 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/lru-cache/package.json
@@ -1,37 +1,84 @@
{
- "name": "lru-cache",
- "description": "A cache object that deletes the least-recently-used items.",
- "version": "2.7.0",
+ "_args": [
+ [
+ "lru-cache@2",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/minimatch"
+ ]
+ ],
+ "_from": "lru-cache@>=2.0.0 <3.0.0",
+ "_id": "lru-cache@2.7.3",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/minimatch/lru-cache",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
+ "email": "i@izs.me",
+ "name": "isaacs"
+ },
+ "_npmVersion": "3.3.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "lru-cache",
+ "raw": "lru-cache@2",
+ "rawSpec": "2",
+ "scope": null,
+ "spec": ">=2.0.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/node-gyp/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "_shasum": "6d4524e8b955f95d4f5b58851ce21dd72fb4e952",
+ "_shrinkwrap": null,
+ "_spec": "lru-cache@2",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/minimatch",
"author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me"
+ "email": "i@izs.me",
+ "name": "Isaac Z. Schlueter"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/node-lru-cache/issues"
+ },
+ "dependencies": {},
+ "description": "A cache object that deletes the least-recently-used items.",
+ "devDependencies": {
+ "tap": "^1.2.0",
+ "weak": ""
},
+ "directories": {},
+ "dist": {
+ "shasum": "6d4524e8b955f95d4f5b58851ce21dd72fb4e952",
+ "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz"
+ },
+ "gitHead": "292048199f6d28b77fbe584279a1898e25e4c714",
+ "homepage": "https://github.com/isaacs/node-lru-cache#readme",
"keywords": [
- "mru",
+ "cache",
"lru",
- "cache"
+ "mru"
],
- "scripts": {
- "test": "tap test --gc"
- },
+ "license": "ISC",
"main": "lib/lru-cache.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "name": "lru-cache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-lru-cache.git"
},
- "devDependencies": {
- "tap": "^1.2.0",
- "weak": ""
- },
- "license": "ISC",
- "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `max`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value, maxAge)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think. `max` is optional and overrides the\n cache `max` option if provided.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n\n* `length()`\n\n Return total length of objects in cache taking into account\n `length` options function.\n\n* `itemCount`\n\n Return total quantity of objects currently in cache. Note, that\n `stale` (see options) items are returned as part of this item\n count.\n\n* `dump()`\n\n Return an array of the cache entries ready for serialization and usage\n with 'destinationCache.load(arr)`.\n\n* `load(cacheEntriesArray)`\n\n Loads another cache entries array, obtained with `sourceCache.dump()`,\n into the cache. The destination cache is reset before loading new entries\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/isaacs/node-lru-cache/issues"
+ "scripts": {
+ "test": "tap test --gc"
},
- "homepage": "https://github.com/isaacs/node-lru-cache#readme",
- "_id": "lru-cache@2.7.0",
- "_shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6",
- "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz",
- "_from": "lru-cache@>=2.0.0 <3.0.0"
+ "version": "2.7.3"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
index 0432d4e4c55ee5..b1dbae0a802671 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
@@ -1,44 +1,85 @@
{
- "name": "sigmund",
- "version": "1.0.1",
- "description": "Quick and dirty signatures for Objects.",
- "main": "sigmund.js",
- "directories": {
- "test": "test"
+ "_args": [
+ [
+ "sigmund@~1.0.0",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/minimatch"
+ ]
+ ],
+ "_from": "sigmund@>=1.0.0 <1.1.0",
+ "_id": "sigmund@1.0.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/minimatch/sigmund",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "email": "isaacs@npmjs.com",
+ "name": "isaacs"
+ },
+ "_npmVersion": "2.10.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "sigmund",
+ "raw": "sigmund@~1.0.0",
+ "rawSpec": "~1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <1.1.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/node-gyp/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590",
+ "_shrinkwrap": null,
+ "_spec": "sigmund@~1.0.0",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp/node_modules/minimatch",
+ "author": {
+ "email": "i@izs.me",
+ "name": "Isaac Z. Schlueter",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/sigmund/issues"
},
"dependencies": {},
+ "description": "Quick and dirty signatures for Objects.",
"devDependencies": {
"tap": "~0.3.0"
},
- "scripts": {
- "test": "tap test/*.js",
- "bench": "node bench.js"
+ "directories": {
+ "test": "test"
},
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/sigmund.git"
+ "dist": {
+ "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590",
+ "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
},
+ "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6",
+ "homepage": "https://github.com/isaacs/sigmund#readme",
"keywords": [
- "object",
- "signature",
- "key",
"data",
- "psychoanalysis"
+ "key",
+ "object",
+ "psychoanalysis",
+ "signature"
],
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
- },
"license": "ISC",
- "readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocaine-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `util.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/isaacs/sigmund/issues"
+ "main": "sigmund.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "sigmund",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/sigmund.git"
},
- "homepage": "https://github.com/isaacs/sigmund#readme",
- "_id": "sigmund@1.0.1",
- "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590",
- "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "_from": "sigmund@>=1.0.0 <1.1.0"
+ "scripts": {
+ "bench": "node bench.js",
+ "test": "tap test/*.js"
+ },
+ "version": "1.0.1"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
index 8bf46ccae0c4f6..2f0d2de57e663e 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
@@ -1,58 +1,83 @@
{
- "author": {
- "name": "Isaac Z. Schlueter",
+ "_args": [
+ [
+ "minimatch@1",
+ "/Users/rebecca/code/release/npm-3/node_modules/node-gyp"
+ ]
+ ],
+ "_from": "minimatch@>=1.0.0 <2.0.0",
+ "_id": "minimatch@1.0.0",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/minimatch",
+ "_npmUser": {
"email": "i@izs.me",
- "url": "http://blog.izs.me"
+ "name": "isaacs"
},
- "name": "minimatch",
- "description": "a glob matcher in javascript",
- "version": "1.0.0",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/minimatch.git"
+ "_npmVersion": "1.4.21",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "minimatch",
+ "raw": "minimatch@1",
+ "rawSpec": "1",
+ "scope": null,
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
},
- "main": "minimatch.js",
- "scripts": {
- "test": "tap test/*.js"
+ "_requiredBy": [
+ "/node-gyp"
+ ],
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "_shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "_shrinkwrap": null,
+ "_spec": "minimatch@1",
+ "_where": "/Users/rebecca/code/release/npm-3/node_modules/node-gyp",
+ "author": {
+ "email": "i@izs.me",
+ "name": "Isaac Z. Schlueter",
+ "url": "http://blog.izs.me"
},
- "engines": {
- "node": "*"
+ "bugs": {
+ "url": "https://github.com/isaacs/minimatch/issues"
},
"dependencies": {
"lru-cache": "2",
"sigmund": "~1.0.0"
},
+ "description": "a glob matcher in javascript",
"devDependencies": {
"tap": ""
},
- "license": {
- "type": "MIT",
- "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
+ "directories": {},
+ "dist": {
+ "shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz"
},
- "gitHead": "b374a643976eb55cdc19c60b6dd51ebe9bcc607a",
- "bugs": {
- "url": "https://github.com/isaacs/minimatch/issues"
+ "engines": {
+ "node": "*"
},
+ "gitHead": "b374a643976eb55cdc19c60b6dd51ebe9bcc607a",
"homepage": "https://github.com/isaacs/minimatch",
- "_id": "minimatch@1.0.0",
- "_shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
- "_from": "minimatch@>=1.0.0 <2.0.0",
- "_npmVersion": "1.4.21",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "license": {
+ "type": "MIT",
+ "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
+ "main": "minimatch.js",
"maintainers": [
{
"name": "isaacs",
"email": "i@izs.me"
}
],
- "dist": {
- "shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
- "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz"
+ "name": "minimatch",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/minimatch.git"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
- "readme": "ERROR: No README data found!"
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.0.0"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js
index e63d3f60c80e82..c3e19d9baf571b 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js
@@ -36,5 +36,3 @@ tap.test("brace expansion", function (t) {
console.error("ending")
t.end()
})
-
-
diff --git a/deps/npm/node_modules/node-gyp/node_modules/tar/node_modules/block-stream/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/npmlog/LICENSE
similarity index 100%
rename from deps/npm/node_modules/node-gyp/node_modules/tar/node_modules/block-stream/LICENSE
rename to deps/npm/node_modules/node-gyp/node_modules/npmlog/LICENSE
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/README.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/README.md
new file mode 100644
index 00000000000000..a57cf429d4a6fa
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/README.md
@@ -0,0 +1,195 @@
+# npmlog
+
+The logger util that npm uses.
+
+This logger is very basic. It does the logging for npm. It supports
+custom levels and colored output.
+
+By default, logs are written to stderr. If you want to send log messages
+to outputs other than streams, then you can change the `log.stream`
+member, or you can just listen to the events that it emits, and do
+whatever you want with them.
+
+# Basic Usage
+
+```
+var log = require('npmlog')
+
+// additional stuff ---------------------------+
+// message ----------+ |
+// prefix ----+ | |
+// level -+ | | |
+// v v v v
+ log.info('fyi', 'I have a kitty cat: %j', myKittyCat)
+```
+
+## log.level
+
+* {String}
+
+The level to display logs at. Any logs at or above this level will be
+displayed. The special level `silent` will prevent anything from being
+displayed ever.
+
+## log.record
+
+* {Array}
+
+An array of all the log messages that have been entered.
+
+## log.maxRecordSize
+
+* {Number}
+
+The maximum number of records to keep. If log.record gets bigger than
+10% over this value, then it is sliced down to 90% of this value.
+
+The reason for the 10% window is so that it doesn't have to resize a
+large array on every log entry.
+
+## log.prefixStyle
+
+* {Object}
+
+A style object that specifies how prefixes are styled. (See below)
+
+## log.headingStyle
+
+* {Object}
+
+A style object that specifies how the heading is styled. (See below)
+
+## log.heading
+
+* {String} Default: ""
+
+If set, a heading that is printed at the start of every line.
+
+## log.stream
+
+* {Stream} Default: `process.stderr`
+
+The stream where output is written.
+
+## log.enableColor()
+
+Force colors to be used on all messages, regardless of the output
+stream.
+
+## log.disableColor()
+
+Disable colors on all messages.
+
+## log.enableProgress()
+
+Enable the display of log activity spinner and progress bar
+
+## log.disableProgress()
+
+Disable the display of a progress bar
+
+## log.enableUnicode()
+
+Force the unicode theme to be used for the progress bar.
+
+## log.disableUnicode()
+
+Disable the use of unicode in the progress bar.
+
+## log.setGaugeTemplate(template)
+
+Overrides the default gauge template.
+
+## log.pause()
+
+Stop emitting messages to the stream, but do not drop them.
+
+## log.resume()
+
+Emit all buffered messages that were written while paused.
+
+## log.log(level, prefix, message, ...)
+
+* `level` {String} The level to emit the message at
+* `prefix` {String} A string prefix. Set to "" to skip.
+* `message...` Arguments to `util.format`
+
+Emit a log message at the specified level.
+
+## log\[level](prefix, message, ...)
+
+For example,
+
+* log.silly(prefix, message, ...)
+* log.verbose(prefix, message, ...)
+* log.info(prefix, message, ...)
+* log.http(prefix, message, ...)
+* log.warn(prefix, message, ...)
+* log.error(prefix, message, ...)
+
+Like `log.log(level, prefix, message, ...)`. In this way, each level is
+given a shorthand, so you can do `log.info(prefix, message)`.
+
+## log.addLevel(level, n, style, disp)
+
+* `level` {String} Level indicator
+* `n` {Number} The numeric level
+* `style` {Object} Object with fg, bg, inverse, etc.
+* `disp` {String} Optional replacement for `level` in the output.
+
+Sets up a new level with a shorthand function and so forth.
+
+Note that if the number is `Infinity`, then setting the level to that
+will cause all log messages to be suppressed. If the number is
+`-Infinity`, then the only way to show it is to enable all log messages.
+
+## log.newItem(name, todo, weight)
+
+* `name` {String} Optional; progress item name.
+* `todo` {Number} Optional; total amount of work to be done. Default 0.
+* `weight` {Number} Optional; the weight of this item relative to others. Default 1.
+
+This adds a new `are-we-there-yet` item tracker to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `Tracker` object.
+
+## log.newStream(name, todo, weight)
+
+This adds a new `are-we-there-yet` stream tracker to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `TrackerStream` object.
+
+## log.newGroup(name, weight)
+
+This adds a new `are-we-there-yet` tracker group to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `TrackerGroup` object.
+
+# Events
+
+Events are all emitted with the message object.
+
+* `log` Emitted for all messages
+* `log.` Emitted for all messages with the `` level.
+* `` Messages with prefixes also emit their prefix as an event.
+
+# Style Objects
+
+Style objects can have the following fields:
+
+* `fg` {String} Color for the foreground text
+* `bg` {String} Color for the background
+* `bold`, `inverse`, `underline` {Boolean} Set the associated property
+* `bell` {Boolean} Make a noise (This is pretty annoying, probably.)
+
+# Message Objects
+
+Every log event is emitted with a message object, and the `log.record`
+list contains all of them that have been created. They have the
+following fields:
+
+* `id` {Number}
+* `level` {String}
+* `prefix` {String}
+* `message` {String} Result of `util.format()`
+* `messageRaw` {Array} Arguments to `util.format()`
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/example.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/example.js
new file mode 100644
index 00000000000000..c009fb15777fbe
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/example.js
@@ -0,0 +1,39 @@
+var log = require('./log.js')
+
+log.heading = 'npm'
+
+console.error('log.level=silly')
+log.level = 'silly'
+log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}})
+log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}})
+log.info('info prefix', 'x = %j', {foo:{bar:'baz'}})
+log.http('http prefix', 'x = %j', {foo:{bar:'baz'}})
+log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}})
+log.error('error prefix', 'x = %j', {foo:{bar:'baz'}})
+log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}})
+
+console.error('log.level=silent')
+log.level = 'silent'
+log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}})
+log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}})
+log.info('info prefix', 'x = %j', {foo:{bar:'baz'}})
+log.http('http prefix', 'x = %j', {foo:{bar:'baz'}})
+log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}})
+log.error('error prefix', 'x = %j', {foo:{bar:'baz'}})
+log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}})
+
+console.error('log.level=info')
+log.level = 'info'
+log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}})
+log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}})
+log.info('info prefix', 'x = %j', {foo:{bar:'baz'}})
+log.http('http prefix', 'x = %j', {foo:{bar:'baz'}})
+log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}})
+log.error('error prefix', 'x = %j', {foo:{bar:'baz'}})
+log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}})
+log.error('404', 'This is a longer\n'+
+ 'message, with some details\n'+
+ 'and maybe a stack.\n'+
+ new Error('a 404 error').stack)
+log.addLevel('noise', 10000, {beep: true})
+log.noise(false, 'LOUD NOISES')
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/log.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/log.js
new file mode 100644
index 00000000000000..8bf6422b6cf44d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/log.js
@@ -0,0 +1,247 @@
+'use strict'
+var Progress = require('are-we-there-yet')
+var Gauge = require('gauge')
+var EE = require('events').EventEmitter
+var log = exports = module.exports = new EE
+var util = require('util')
+
+var ansi = require('ansi')
+log.cursor = ansi(process.stderr)
+log.stream = process.stderr
+
+// by default, let ansi decide based on tty-ness.
+var colorEnabled = undefined
+log.enableColor = function () {
+ colorEnabled = true
+ this.cursor.enabled = true
+}
+log.disableColor = function () {
+ colorEnabled = false
+ this.cursor.enabled = false
+}
+
+// default level
+log.level = 'info'
+
+log.gauge = new Gauge(log.cursor)
+log.tracker = new Progress.TrackerGroup()
+
+// no progress bars unless asked
+log.progressEnabled = false
+
+var gaugeTheme = undefined
+
+log.enableUnicode = function () {
+ gaugeTheme = Gauge.unicode
+ log.gauge.setTheme(gaugeTheme)
+}
+
+log.disableUnicode = function () {
+ gaugeTheme = Gauge.ascii
+ log.gauge.setTheme(gaugeTheme)
+}
+
+var gaugeTemplate = undefined
+log.setGaugeTemplate = function (template) {
+ gaugeTemplate = template
+ log.gauge.setTemplate(gaugeTemplate)
+}
+
+log.enableProgress = function () {
+ if (this.progressEnabled) return
+ this.progressEnabled = true
+ if (this._pause) return
+ this.tracker.on('change', this.showProgress)
+ this.gauge.enable()
+ this.showProgress()
+}
+
+log.disableProgress = function () {
+ if (!this.progressEnabled) return
+ this.clearProgress()
+ this.progressEnabled = false
+ this.tracker.removeListener('change', this.showProgress)
+ this.gauge.disable()
+}
+
+var trackerConstructors = ['newGroup', 'newItem', 'newStream']
+
+var mixinLog = function (tracker) {
+ // mixin the public methods from log into the tracker
+ // (except: conflicts and one's we handle specially)
+ Object.keys(log).forEach(function (P) {
+ if (P[0] === '_') return
+ if (trackerConstructors.filter(function (C) { return C === P }).length) return
+ if (tracker[P]) return
+ if (typeof log[P] !== 'function') return
+ var func = log[P]
+ tracker[P] = function () {
+ return func.apply(log, arguments)
+ }
+ })
+ // if the new tracker is a group, make sure any subtrackers get
+ // mixed in too
+ if (tracker instanceof Progress.TrackerGroup) {
+ trackerConstructors.forEach(function (C) {
+ var func = tracker[C]
+ tracker[C] = function () { return mixinLog(func.apply(tracker, arguments)) }
+ })
+ }
+ return tracker
+}
+
+// Add tracker constructors to the top level log object
+trackerConstructors.forEach(function (C) {
+ log[C] = function () { return mixinLog(this.tracker[C].apply(this.tracker, arguments)) }
+})
+
+log.clearProgress = function () {
+ if (!this.progressEnabled) return
+ this.gauge.hide()
+}
+
+log.showProgress = function (name) {
+ if (!this.progressEnabled) return
+ this.gauge.show(name, this.tracker.completed())
+}.bind(log) // bind for use in tracker's on-change listener
+
+// temporarily stop emitting, but don't drop
+log.pause = function () {
+ this._paused = true
+}
+
+log.resume = function () {
+ if (!this._paused) return
+ this._paused = false
+
+ var b = this._buffer
+ this._buffer = []
+ b.forEach(function (m) {
+ this.emitLog(m)
+ }, this)
+ if (this.progressEnabled) this.enableProgress()
+}
+
+log._buffer = []
+
+var id = 0
+log.record = []
+log.maxRecordSize = 10000
+log.log = function (lvl, prefix, message) {
+ var l = this.levels[lvl]
+ if (l === undefined) {
+ return this.emit('error', new Error(util.format(
+ 'Undefined log level: %j', lvl)))
+ }
+
+ var a = new Array(arguments.length - 2)
+ var stack = null
+ for (var i = 2; i < arguments.length; i ++) {
+ var arg = a[i-2] = arguments[i]
+
+ // resolve stack traces to a plain string.
+ if (typeof arg === 'object' && arg &&
+ (arg instanceof Error) && arg.stack) {
+ arg.stack = stack = arg.stack + ''
+ }
+ }
+ if (stack) a.unshift(stack + '\n')
+ message = util.format.apply(util, a)
+
+ var m = { id: id++,
+ level: lvl,
+ prefix: String(prefix || ''),
+ message: message,
+ messageRaw: a }
+
+ this.emit('log', m)
+ this.emit('log.' + lvl, m)
+ if (m.prefix) this.emit(m.prefix, m)
+
+ this.record.push(m)
+ var mrs = this.maxRecordSize
+ var n = this.record.length - mrs
+ if (n > mrs / 10) {
+ var newSize = Math.floor(mrs * 0.9)
+ this.record = this.record.slice(-1 * newSize)
+ }
+
+ this.emitLog(m)
+}.bind(log)
+
+log.emitLog = function (m) {
+ if (this._paused) {
+ this._buffer.push(m)
+ return
+ }
+ if (this.progressEnabled) this.gauge.pulse(m.prefix)
+ var l = this.levels[m.level]
+ if (l === undefined) return
+ if (l < this.levels[this.level]) return
+ if (l > 0 && !isFinite(l)) return
+
+ var style = log.style[m.level]
+ var disp = log.disp[m.level] || m.level
+ this.clearProgress()
+ m.message.split(/\r?\n/).forEach(function (line) {
+ if (this.heading) {
+ this.write(this.heading, this.headingStyle)
+ this.write(' ')
+ }
+ this.write(disp, log.style[m.level])
+ var p = m.prefix || ''
+ if (p) this.write(' ')
+ this.write(p, this.prefixStyle)
+ this.write(' ' + line + '\n')
+ }, this)
+ this.showProgress()
+}
+
+log.write = function (msg, style) {
+ if (!this.cursor) return
+ if (this.stream !== this.cursor.stream) {
+ this.cursor = ansi(this.stream, { enabled: colorEnabled })
+ var options = {}
+ if (gaugeTheme != null) options.theme = gaugeTheme
+ if (gaugeTemplate != null) options.template = gaugeTemplate
+ this.gauge = new Gauge(options, this.cursor)
+ }
+
+ style = style || {}
+ if (style.fg) this.cursor.fg[style.fg]()
+ if (style.bg) this.cursor.bg[style.bg]()
+ if (style.bold) this.cursor.bold()
+ if (style.underline) this.cursor.underline()
+ if (style.inverse) this.cursor.inverse()
+ if (style.beep) this.cursor.beep()
+ this.cursor.write(msg).reset()
+}
+
+log.addLevel = function (lvl, n, style, disp) {
+ if (!disp) disp = lvl
+ this.levels[lvl] = n
+ this.style[lvl] = style
+ if (!this[lvl]) this[lvl] = function () {
+ var a = new Array(arguments.length + 1)
+ a[0] = lvl
+ for (var i = 0; i < arguments.length; i ++) {
+ a[i + 1] = arguments[i]
+ }
+ return this.log.apply(this, a)
+ }.bind(this)
+ this.disp[lvl] = disp
+}
+
+log.prefixStyle = { fg: 'magenta' }
+log.headingStyle = { fg: 'white', bg: 'black' }
+
+log.style = {}
+log.levels = {}
+log.disp = {}
+log.addLevel('silly', -Infinity, { inverse: true }, 'sill')
+log.addLevel('verbose', 1000, { fg: 'blue', bg: 'black' }, 'verb')
+log.addLevel('info', 2000, { fg: 'green' })
+log.addLevel('http', 3000, { fg: 'green', bg: 'black' })
+log.addLevel('warn', 4000, { fg: 'black', bg: 'yellow' }, 'WARN')
+log.addLevel('error', 5000, { fg: 'red', bg: 'black' }, 'ERR!')
+log.addLevel('silent', Infinity)
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.jshintrc b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.jshintrc
new file mode 100644
index 00000000000000..248c5426ea63dc
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.jshintrc
@@ -0,0 +1,4 @@
+{
+ "laxcomma": true,
+ "asi": true
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.npmignore
new file mode 100644
index 00000000000000..3c3629e647f5dd
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/History.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/History.md
new file mode 100644
index 00000000000000..aea8aaf0991e70
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/History.md
@@ -0,0 +1,23 @@
+
+0.3.1 / 2016-01-14
+==================
+
+ * add MIT LICENSE file (#23, @kasicka)
+ * preserve chaining after redundant style-method calls (#19, @drewblaisdell)
+ * package: add "license" field (#16, @BenjaminTsai)
+
+0.3.0 / 2014-05-09
+==================
+
+ * package: remove "test" script and "devDependencies"
+ * package: remove "engines" section
+ * pacakge: remove "bin" section
+ * package: beautify
+ * examples: remove `starwars` example (#15)
+ * Documented goto, horizontalAbsolute, and eraseLine methods in README.md (#12, @Jammerwoch)
+ * add `.jshintrc` file
+
+< 0.3.0
+=======
+
+ * Prehistoric
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/util-deprecate/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/LICENSE
similarity index 94%
rename from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/util-deprecate/LICENSE
rename to deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/LICENSE
index 6a60e8c225c9ba..2ea4dc5efb8729 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/util-deprecate/LICENSE
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/LICENSE
@@ -1,6 +1,6 @@
(The MIT License)
-Copyright (c) 2014 Nathan Rajlich
+Copyright (c) 2012 Nathan Rajlich
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/README.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/README.md
new file mode 100644
index 00000000000000..6ce19403c4c466
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/README.md
@@ -0,0 +1,98 @@
+ansi.js
+=========
+### Advanced ANSI formatting tool for Node.js
+
+`ansi.js` is a module for Node.js that provides an easy-to-use API for
+writing ANSI escape codes to `Stream` instances. ANSI escape codes are used to do
+fancy things in a terminal window, like render text in colors, delete characters,
+lines, the entire window, or hide and show the cursor, and lots more!
+
+#### Features:
+
+ * 256 color support for the terminal!
+ * Make a beep sound from your terminal!
+ * Works with *any* writable `Stream` instance.
+ * Allows you to move the cursor anywhere on the terminal window.
+ * Allows you to delete existing contents from the terminal window.
+ * Allows you to hide and show the cursor.
+ * Converts CSS color codes and RGB values into ANSI escape codes.
+ * Low-level; you are in control of when escape codes are used, it's not abstracted.
+
+
+Installation
+------------
+
+Install with `npm`:
+
+``` bash
+$ npm install ansi
+```
+
+
+Example
+-------
+
+``` js
+var ansi = require('ansi')
+ , cursor = ansi(process.stdout)
+
+// You can chain your calls forever:
+cursor
+ .red() // Set font color to red
+ .bg.grey() // Set background color to grey
+ .write('Hello World!') // Write 'Hello World!' to stdout
+ .bg.reset() // Reset the bgcolor before writing the trailing \n,
+ // to avoid Terminal glitches
+ .write('\n') // And a final \n to wrap things up
+
+// Rendering modes are persistent:
+cursor.hex('#660000').bold().underline()
+
+// You can use the regular logging functions, text will be green:
+console.log('This is blood red, bold text')
+
+// To reset just the foreground color:
+cursor.fg.reset()
+
+console.log('This will still be bold')
+
+// to go to a location (x,y) on the console
+// note: 1-indexed, not 0-indexed:
+cursor.goto(10, 5).write('Five down, ten over')
+
+// to clear the current line:
+cursor.horizontalAbsolute(0).eraseLine().write('Starting again')
+
+// to go to a different column on the current line:
+cursor.horizontalAbsolute(5).write('column five')
+
+// Clean up after yourself!
+cursor.reset()
+```
+
+
+License
+-------
+
+(The MIT License)
+
+Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
+
+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/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/beep/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/beep/index.js
new file mode 100755
index 00000000000000..c1ec929d0bf8a6
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/beep/index.js
@@ -0,0 +1,16 @@
+#!/usr/bin/env node
+
+/**
+ * Invokes the terminal "beep" sound once per second on every exact second.
+ */
+
+process.title = 'beep'
+
+var cursor = require('../../')(process.stdout)
+
+function beep () {
+ cursor.beep()
+ setTimeout(beep, 1000 - (new Date()).getMilliseconds())
+}
+
+setTimeout(beep, 1000 - (new Date()).getMilliseconds())
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/clear/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/clear/index.js
new file mode 100755
index 00000000000000..6ac21ffa99f87a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/clear/index.js
@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+
+/**
+ * Like GNU ncurses "clear" command.
+ * https://github.com/mscdex/node-ncurses/blob/master/deps/ncurses/progs/clear.c
+ */
+
+process.title = 'clear'
+
+function lf () { return '\n' }
+
+require('../../')(process.stdout)
+ .write(Array.apply(null, Array(process.stdout.getWindowSize()[1])).map(lf).join(''))
+ .eraseData(2)
+ .goto(1, 1)
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/cursorPosition.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/cursorPosition.js
new file mode 100755
index 00000000000000..50f964490ea1ea
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/cursorPosition.js
@@ -0,0 +1,32 @@
+#!/usr/bin/env node
+
+var tty = require('tty')
+var cursor = require('../')(process.stdout)
+
+// listen for the queryPosition report on stdin
+process.stdin.resume()
+raw(true)
+
+process.stdin.once('data', function (b) {
+ var match = /\[(\d+)\;(\d+)R$/.exec(b.toString())
+ if (match) {
+ var xy = match.slice(1, 3).reverse().map(Number)
+ console.error(xy)
+ }
+
+ // cleanup and close stdin
+ raw(false)
+ process.stdin.pause()
+})
+
+
+// send the query position request code to stdout
+cursor.queryPosition()
+
+function raw (mode) {
+ if (process.stdin.setRawMode) {
+ process.stdin.setRawMode(mode)
+ } else {
+ tty.setRawMode(mode)
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/progress/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/progress/index.js
new file mode 100644
index 00000000000000..d28dbda27f93d2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/examples/progress/index.js
@@ -0,0 +1,87 @@
+#!/usr/bin/env node
+
+var assert = require('assert')
+ , ansi = require('../../')
+
+function Progress (stream, width) {
+ this.cursor = ansi(stream)
+ this.delta = this.cursor.newlines
+ this.width = width | 0 || 10
+ this.open = '['
+ this.close = ']'
+ this.complete = '█'
+ this.incomplete = '_'
+
+ // initial render
+ this.progress = 0
+}
+
+Object.defineProperty(Progress.prototype, 'progress', {
+ get: get
+ , set: set
+ , configurable: true
+ , enumerable: true
+})
+
+function get () {
+ return this._progress
+}
+
+function set (v) {
+ this._progress = Math.max(0, Math.min(v, 100))
+
+ var w = this.width - this.complete.length - this.incomplete.length
+ , n = w * (this._progress / 100) | 0
+ , i = w - n
+ , com = c(this.complete, n)
+ , inc = c(this.incomplete, i)
+ , delta = this.cursor.newlines - this.delta
+
+ assert.equal(com.length + inc.length, w)
+
+ if (delta > 0) {
+ this.cursor.up(delta)
+ this.delta = this.cursor.newlines
+ }
+
+ this.cursor
+ .horizontalAbsolute(0)
+ .eraseLine(2)
+ .fg.white()
+ .write(this.open)
+ .fg.grey()
+ .bold()
+ .write(com)
+ .resetBold()
+ .write(inc)
+ .fg.white()
+ .write(this.close)
+ .fg.reset()
+ .write('\n')
+}
+
+function c (char, length) {
+ return Array.apply(null, Array(length)).map(function () {
+ return char
+ }).join('')
+}
+
+
+
+
+// Usage
+var width = parseInt(process.argv[2], 10) || process.stdout.getWindowSize()[0] / 2
+ , p = new Progress(process.stdout, width)
+
+;(function tick () {
+ p.progress += Math.random() * 5
+ p.cursor
+ .eraseLine(2)
+ .write('Progress: ')
+ .bold().write(p.progress.toFixed(2))
+ .write('%')
+ .resetBold()
+ .write('\n')
+ if (p.progress < 100)
+ setTimeout(tick, 100)
+})()
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/lib/ansi.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/lib/ansi.js
new file mode 100644
index 00000000000000..b1714e328995c1
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/ansi/lib/ansi.js
@@ -0,0 +1,405 @@
+
+/**
+ * References:
+ *
+ * - http://en.wikipedia.org/wiki/ANSI_escape_code
+ * - http://www.termsys.demon.co.uk/vtansi.htm
+ *
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var emitNewlineEvents = require('./newlines')
+ , prefix = '\x1b[' // For all escape codes
+ , suffix = 'm' // Only for color codes
+
+/**
+ * The ANSI escape sequences.
+ */
+
+var codes = {
+ up: 'A'
+ , down: 'B'
+ , forward: 'C'
+ , back: 'D'
+ , nextLine: 'E'
+ , previousLine: 'F'
+ , horizontalAbsolute: 'G'
+ , eraseData: 'J'
+ , eraseLine: 'K'
+ , scrollUp: 'S'
+ , scrollDown: 'T'
+ , savePosition: 's'
+ , restorePosition: 'u'
+ , queryPosition: '6n'
+ , hide: '?25l'
+ , show: '?25h'
+}
+
+/**
+ * Rendering ANSI codes.
+ */
+
+var styles = {
+ bold: 1
+ , italic: 3
+ , underline: 4
+ , inverse: 7
+}
+
+/**
+ * The negating ANSI code for the rendering modes.
+ */
+
+var reset = {
+ bold: 22
+ , italic: 23
+ , underline: 24
+ , inverse: 27
+}
+
+/**
+ * The standard, styleable ANSI colors.
+ */
+
+var colors = {
+ white: 37
+ , black: 30
+ , blue: 34
+ , cyan: 36
+ , green: 32
+ , magenta: 35
+ , red: 31
+ , yellow: 33
+ , grey: 90
+ , brightBlack: 90
+ , brightRed: 91
+ , brightGreen: 92
+ , brightYellow: 93
+ , brightBlue: 94
+ , brightMagenta: 95
+ , brightCyan: 96
+ , brightWhite: 97
+}
+
+
+/**
+ * Creates a Cursor instance based off the given `writable stream` instance.
+ */
+
+function ansi (stream, options) {
+ if (stream._ansicursor) {
+ return stream._ansicursor
+ } else {
+ return stream._ansicursor = new Cursor(stream, options)
+ }
+}
+module.exports = exports = ansi
+
+/**
+ * The `Cursor` class.
+ */
+
+function Cursor (stream, options) {
+ if (!(this instanceof Cursor)) {
+ return new Cursor(stream, options)
+ }
+ if (typeof stream != 'object' || typeof stream.write != 'function') {
+ throw new Error('a valid Stream instance must be passed in')
+ }
+
+ // the stream to use
+ this.stream = stream
+
+ // when 'enabled' is false then all the functions are no-ops except for write()
+ this.enabled = options && options.enabled
+ if (typeof this.enabled === 'undefined') {
+ this.enabled = stream.isTTY
+ }
+ this.enabled = !!this.enabled
+
+ // then `buffering` is true, then `write()` calls are buffered in
+ // memory until `flush()` is invoked
+ this.buffering = !!(options && options.buffering)
+ this._buffer = []
+
+ // controls the foreground and background colors
+ this.fg = this.foreground = new Colorer(this, 0)
+ this.bg = this.background = new Colorer(this, 10)
+
+ // defaults
+ this.Bold = false
+ this.Italic = false
+ this.Underline = false
+ this.Inverse = false
+
+ // keep track of the number of "newlines" that get encountered
+ this.newlines = 0
+ emitNewlineEvents(stream)
+ stream.on('newline', function () {
+ this.newlines++
+ }.bind(this))
+}
+exports.Cursor = Cursor
+
+/**
+ * Helper function that calls `write()` on the underlying Stream.
+ * Returns `this` instead of the write() return value to keep
+ * the chaining going.
+ */
+
+Cursor.prototype.write = function (data) {
+ if (this.buffering) {
+ this._buffer.push(arguments)
+ } else {
+ this.stream.write.apply(this.stream, arguments)
+ }
+ return this
+}
+
+/**
+ * Buffer `write()` calls into memory.
+ *
+ * @api public
+ */
+
+Cursor.prototype.buffer = function () {
+ this.buffering = true
+ return this
+}
+
+/**
+ * Write out the in-memory buffer.
+ *
+ * @api public
+ */
+
+Cursor.prototype.flush = function () {
+ this.buffering = false
+ var str = this._buffer.map(function (args) {
+ if (args.length != 1) throw new Error('unexpected args length! ' + args.length);
+ return args[0];
+ }).join('');
+ this._buffer.splice(0); // empty
+ this.write(str);
+ return this
+}
+
+
+/**
+ * The `Colorer` class manages both the background and foreground colors.
+ */
+
+function Colorer (cursor, base) {
+ this.current = null
+ this.cursor = cursor
+ this.base = base
+}
+exports.Colorer = Colorer
+
+/**
+ * Write an ANSI color code, ensuring that the same code doesn't get rewritten.
+ */
+
+Colorer.prototype._setColorCode = function setColorCode (code) {
+ var c = String(code)
+ if (this.current === c) return
+ this.cursor.enabled && this.cursor.write(prefix + c + suffix)
+ this.current = c
+ return this
+}
+
+
+/**
+ * Set up the positional ANSI codes.
+ */
+
+Object.keys(codes).forEach(function (name) {
+ var code = String(codes[name])
+ Cursor.prototype[name] = function () {
+ var c = code
+ if (arguments.length > 0) {
+ c = toArray(arguments).map(Math.round).join(';') + code
+ }
+ this.enabled && this.write(prefix + c)
+ return this
+ }
+})
+
+/**
+ * Set up the functions for the rendering ANSI codes.
+ */
+
+Object.keys(styles).forEach(function (style) {
+ var name = style[0].toUpperCase() + style.substring(1)
+ , c = styles[style]
+ , r = reset[style]
+
+ Cursor.prototype[style] = function () {
+ if (this[name]) return this
+ this.enabled && this.write(prefix + c + suffix)
+ this[name] = true
+ return this
+ }
+
+ Cursor.prototype['reset' + name] = function () {
+ if (!this[name]) return this
+ this.enabled && this.write(prefix + r + suffix)
+ this[name] = false
+ return this
+ }
+})
+
+/**
+ * Setup the functions for the standard colors.
+ */
+
+Object.keys(colors).forEach(function (color) {
+ var code = colors[color]
+
+ Colorer.prototype[color] = function () {
+ this._setColorCode(this.base + code)
+ return this.cursor
+ }
+
+ Cursor.prototype[color] = function () {
+ return this.foreground[color]()
+ }
+})
+
+/**
+ * Makes a beep sound!
+ */
+
+Cursor.prototype.beep = function () {
+ this.enabled && this.write('\x07')
+ return this
+}
+
+/**
+ * Moves cursor to specific position
+ */
+
+Cursor.prototype.goto = function (x, y) {
+ x = x | 0
+ y = y | 0
+ this.enabled && this.write(prefix + y + ';' + x + 'H')
+ return this
+}
+
+/**
+ * Resets the color.
+ */
+
+Colorer.prototype.reset = function () {
+ this._setColorCode(this.base + 39)
+ return this.cursor
+}
+
+/**
+ * Resets all ANSI formatting on the stream.
+ */
+
+Cursor.prototype.reset = function () {
+ this.enabled && this.write(prefix + '0' + suffix)
+ this.Bold = false
+ this.Italic = false
+ this.Underline = false
+ this.Inverse = false
+ this.foreground.current = null
+ this.background.current = null
+ return this
+}
+
+/**
+ * Sets the foreground color with the given RGB values.
+ * The closest match out of the 216 colors is picked.
+ */
+
+Colorer.prototype.rgb = function (r, g, b) {
+ var base = this.base + 38
+ , code = rgb(r, g, b)
+ this._setColorCode(base + ';5;' + code)
+ return this.cursor
+}
+
+/**
+ * Same as `cursor.fg.rgb(r, g, b)`.
+ */
+
+Cursor.prototype.rgb = function (r, g, b) {
+ return this.foreground.rgb(r, g, b)
+}
+
+/**
+ * Accepts CSS color codes for use with ANSI escape codes.
+ * For example: `#FF000` would be bright red.
+ */
+
+Colorer.prototype.hex = function (color) {
+ return this.rgb.apply(this, hex(color))
+}
+
+/**
+ * Same as `cursor.fg.hex(color)`.
+ */
+
+Cursor.prototype.hex = function (color) {
+ return this.foreground.hex(color)
+}
+
+
+// UTIL FUNCTIONS //
+
+/**
+ * Translates a 255 RGB value to a 0-5 ANSI RGV value,
+ * then returns the single ANSI color code to use.
+ */
+
+function rgb (r, g, b) {
+ var red = r / 255 * 5
+ , green = g / 255 * 5
+ , blue = b / 255 * 5
+ return rgb5(red, green, blue)
+}
+
+/**
+ * Turns rgb 0-5 values into a single ANSI color code to use.
+ */
+
+function rgb5 (r, g, b) {
+ var red = Math.round(r)
+ , green = Math.round(g)
+ , blue = Math.round(b)
+ return 16 + (red*36) + (green*6) + blue
+}
+
+/**
+ * Accepts a hex CSS color code string (# is optional) and
+ * translates it into an Array of 3 RGB 0-255 values, which
+ * can then be used with rgb().
+ */
+
+function hex (color) {
+ var c = color[0] === '#' ? color.substring(1) : color
+ , r = c.substring(0, 2)
+ , g = c.substring(2, 4)
+ , b = c.substring(4, 6)
+ return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)]
+}
+
+/**
+ * Turns an array-like object into a real array.
+ */
+
+function toArray (a) {
+ var i = 0
+ , l = a.length
+ , rtn = []
+ for (; i 0) {
+ var len = data.length
+ , i = 0
+ // now try to calculate any deltas
+ if (typeof data == 'string') {
+ for (; i=0.3.0 <0.4.0",
+ "_id": "ansi@0.3.1",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/npmlog/ansi",
+ "_nodeVersion": "5.3.0",
+ "_npmUser": {
+ "email": "nathan@tootallnate.net",
+ "name": "tootallnate"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "ansi",
+ "raw": "ansi@~0.3.0",
+ "rawSpec": "~0.3.0",
+ "scope": null,
+ "spec": ">=0.3.0 <0.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/node-gyp/npmlog",
+ "/node-gyp/npmlog/gauge"
+ ],
+ "_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+ "_shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21",
+ "_shrinkwrap": null,
+ "_spec": "ansi@~0.3.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/node-gyp/node_modules/npmlog",
+ "author": {
+ "email": "nathan@tootallnate.net",
+ "name": "Nathan Rajlich",
+ "url": "http://tootallnate.net"
+ },
+ "bugs": {
+ "url": "https://github.com/TooTallNate/ansi.js/issues"
+ },
+ "dependencies": {},
+ "description": "Advanced ANSI formatting tool for Node.js",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21",
+ "tarball": "http://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz"
+ },
+ "gitHead": "4d0d4af94e0bdaa648bd7262acd3bde4b98d5246",
+ "homepage": "https://github.com/TooTallNate/ansi.js#readme",
+ "keywords": [
+ "256",
+ "ansi",
+ "color",
+ "cursor",
+ "formatting",
+ "rgb",
+ "stream",
+ "terminal"
+ ],
+ "license": "MIT",
+ "main": "./lib/ansi.js",
+ "maintainers": [
+ {
+ "name": "TooTallNate",
+ "email": "nathan@tootallnate.net"
+ },
+ {
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
+ }
+ ],
+ "name": "ansi",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/TooTallNate/ansi.js.git"
+ },
+ "scripts": {},
+ "version": "0.3.1"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore
new file mode 100644
index 00000000000000..926ddf616c7c12
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore
@@ -0,0 +1,3 @@
+*~
+.#*
+node_modules
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/LICENSE
new file mode 100644
index 00000000000000..af4588069db82d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/LICENSE
@@ -0,0 +1,5 @@
+Copyright (c) 2015, Rebecca Turner
+
+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/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/README.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/README.md
new file mode 100644
index 00000000000000..cff489810b4f54
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/README.md
@@ -0,0 +1,184 @@
+are-we-there-yet
+----------------
+
+Track complex hiearchies of asynchronous task completion statuses. This is
+intended to give you a way of recording and reporting the progress of the big
+recursive fan-out and gather type workflows that are so common in async.
+
+What you do with this completion data is up to you, but the most common use case is to
+feed it to one of the many progress bar modules.
+
+Most progress bar modules include a rudamentary version of this, but my
+needs were more complex.
+
+Usage
+=====
+
+```javascript
+var TrackerGroup = require("are-we-there-yet").TrackerGroup
+
+var top = new TrackerGroup("program")
+
+var single = top.newItem("one thing", 100)
+single.completeWork(20)
+
+console.log(top.completed()) // 0.2
+
+fs.stat("file", function(er, stat) {
+ if (er) throw er
+ var stream = top.newStream("file", stat.size)
+ console.log(top.completed()) // now 0.1 as single is 50% of the job and is 20% complete
+ // and 50% * 20% == 10%
+ fs.createReadStream("file").pipe(stream).on("data", function (chunk) {
+ // do stuff with chunk
+ })
+ top.on("change", function (name) {
+ // called each time a chunk is read from "file"
+ // top.completed() will start at 0.1 and fill up to 0.6 as the file is read
+ })
+})
+```
+
+Shared Methods
+==============
+
+All tracker objects described below have the following methods, they, along
+with the event comprise the interface for consumers of tracker objects.
+
+* var completed = tracker.completed()
+
+Returns the ratio of completed work to work to be done. Range of 0 to 1.
+
+* tracker.finish()
+
+Marks the tracker as completed. With a TrackerGroup this marks all of its
+components as completed.
+
+Marks all of the components of this tracker as finished, which in turn means
+that `tracker.completed()` for this will now be 1.
+
+This will result in one or more `change` events being emitted.
+
+Events
+======
+
+All tracker objects emit `change` events with an argument of the name of the
+thing changing.
+
+TrackerGroup
+============
+
+* var tracker = new TrackerGroup(**name**)
+
+ * **name** *(optional)* - The name of this tracker group, used in change
+ notifications if the component updating didn't have a name. Defaults to undefined.
+
+Creates a new empty tracker aggregation group. These are trackers whose
+completion status is determined by the completion status of other trackers.
+
+* tracker.addUnit(**otherTracker**, **weight**)
+
+ * **otherTracker** - Any of the other are-we-there-yet tracker objects
+ * **weight** *(optional)* - The weight to give the tracker, defaults to 1.
+
+Adds the **otherTracker** to this aggregation group. The weight determines
+how long you expect this tracker to take to complete in proportion to other
+units. So for instance, if you add one tracker with a weight of 1 and
+another with a weight of 2, you're saying the second will take twice as long
+to complete as the first. As such, the first will account for 33% of the
+completion of this tracker and the second will account for the other 67%.
+
+Returns **otherTracker**.
+
+* var subGroup = tracker.newGroup(**name**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subGroup = tracker.addUnit(new TrackerGroup(name), weight)
+```
+
+* var subItem = tracker.newItem(**name**, **todo**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subItem = tracker.addUnit(new Tracker(name, todo), weight)
+```
+
+* var subStream = tracker.newStream(**name**, **todo**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subStream = tracker.addUnit(new TrackerStream(name, todo), weight)
+```
+
+* console.log( tracker.debug() )
+
+Returns a tree showing the completion of this tracker group and all of its
+children, including recursively entering all of the children.
+
+Tracker
+=======
+
+* var tracker = new Tracker(**name**, **todo**)
+
+ * **name** *(optional)* The name of this counter to report in change
+ events. Defaults to undefined.
+ * **todo** *(optional)* The amount of work todo (a number). Defaults to 0.
+
+Ordinarily these are constructed as a part of a tracker group (via
+`newItem`).
+
+* var completed = tracker.completed()
+
+Returns the ratio of completed work to work to be done. Range of 0 to 1. If
+total work to be done is 0 then it will return 0.
+
+* tracker.addWork(**todo**)
+
+ * **todo** A number to add to the amount of work to be done.
+
+Increases the amount of work to be done, thus decreasing the completion
+percentage. Triggers a `change` event.
+
+* tracker.completeWork(**completed**)
+
+ * **completed** A number to add to the work complete
+
+Increase the amount of work complete, thus increasing the completion percentage.
+Will never increase the work completed past the amount of work todo. That is,
+percentages > 100% are not allowed. Triggers a `change` event.
+
+* tracker.finish()
+
+Marks this tracker as finished, tracker.completed() will now be 1. Triggers
+a `change` event.
+
+TrackerStream
+=============
+
+* var tracker = new TrackerStream(**name**, **size**, **options**)
+
+ * **name** *(optional)* The name of this counter to report in change
+ events. Defaults to undefined.
+ * **size** *(optional)* The number of bytes being sent through this stream.
+ * **options** *(optional)* A hash of stream options
+
+The tracker stream object is a pass through stream that updates an internal
+tracker object each time a block passes through. It's intended to track
+downloads, file extraction and other related activities. You use it by piping
+your data source into it and then using it as your data source.
+
+If your data has a length attribute then that's used as the amount of work
+completed when the chunk is passed through. If it does not (eg, object
+streams) then each chunk counts as completing 1 unit of work, so your size
+should be the total number of objects being streamed.
+
+* tracker.addWork(**todo**)
+
+ * **todo** Increase the expected overall size by **todo** bytes.
+
+Increases the amount of work to be done, thus decreasing the completion
+percentage. Triggers a `change` event.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/index.js
new file mode 100644
index 00000000000000..22f47ac8852b89
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/index.js
@@ -0,0 +1,130 @@
+"use strict"
+var stream = require("readable-stream");
+var EventEmitter = require("events").EventEmitter
+var util = require("util")
+var delegate = require("delegates")
+
+var TrackerGroup = exports.TrackerGroup = function (name) {
+ EventEmitter.call(this)
+ this.name = name
+ this.trackGroup = []
+ var self = this
+ this.totalWeight = 0
+ var noteChange = this.noteChange = function (name) {
+ self.emit("change", name || this.name)
+ }.bind(this)
+ this.trackGroup.forEach(function(unit) {
+ unit.on("change", noteChange)
+ })
+}
+util.inherits(TrackerGroup, EventEmitter)
+
+TrackerGroup.prototype.completed = function () {
+ if (this.trackGroup.length==0) return 0
+ var valPerWeight = 1 / this.totalWeight
+ var completed = 0
+ this.trackGroup.forEach(function(T) {
+ completed += valPerWeight * T.weight * T.completed()
+ })
+ return completed
+}
+
+TrackerGroup.prototype.addUnit = function (unit, weight, noChange) {
+ unit.weight = weight || 1
+ this.totalWeight += unit.weight
+ this.trackGroup.push(unit)
+ unit.on("change", this.noteChange)
+ if (! noChange) this.emit("change", this.name)
+ return unit
+}
+
+TrackerGroup.prototype.newGroup = function (name, weight) {
+ return this.addUnit(new TrackerGroup(name), weight)
+}
+
+TrackerGroup.prototype.newItem = function (name, todo, weight) {
+ return this.addUnit(new Tracker(name, todo), weight)
+}
+
+TrackerGroup.prototype.newStream = function (name, todo, weight) {
+ return this.addUnit(new TrackerStream(name, todo), weight)
+}
+
+TrackerGroup.prototype.finish = function () {
+ if (! this.trackGroup.length) { this.addUnit(new Tracker(), 1, true) }
+ var self = this
+ this.trackGroup.forEach(function(T) {
+ T.removeListener("change", self.noteChange)
+ T.finish()
+ })
+ this.emit("change", this.name)
+}
+
+var buffer = " "
+TrackerGroup.prototype.debug = function (depth) {
+ depth = depth || 0
+ var indent = depth ? buffer.substr(0,depth) : ""
+ var output = indent + (this.name||"top") + ": " + this.completed() + "\n"
+ this.trackGroup.forEach(function(T) {
+ if (T instanceof TrackerGroup) {
+ output += T.debug(depth + 1)
+ }
+ else {
+ output += indent + " " + T.name + ": " + T.completed() + "\n"
+ }
+ })
+ return output
+}
+
+var Tracker = exports.Tracker = function (name,todo) {
+ EventEmitter.call(this)
+ this.name = name
+ this.workDone = 0
+ this.workTodo = todo || 0
+}
+util.inherits(Tracker, EventEmitter)
+
+Tracker.prototype.completed = function () {
+ return this.workTodo==0 ? 0 : this.workDone / this.workTodo
+}
+
+Tracker.prototype.addWork = function (work) {
+ this.workTodo += work
+ this.emit("change", this.name)
+}
+
+Tracker.prototype.completeWork = function (work) {
+ this.workDone += work
+ if (this.workDone > this.workTodo) this.workDone = this.workTodo
+ this.emit("change", this.name)
+}
+
+Tracker.prototype.finish = function () {
+ this.workTodo = this.workDone = 1
+ this.emit("change", this.name)
+}
+
+
+var TrackerStream = exports.TrackerStream = function (name, size, options) {
+ stream.Transform.call(this, options)
+ this.tracker = new Tracker(name, size)
+ this.name = name
+ var self = this
+ this.tracker.on("change", function (name) { self.emit("change", name) })
+}
+util.inherits(TrackerStream, stream.Transform)
+
+TrackerStream.prototype._transform = function (data, encoding, cb) {
+ this.tracker.completeWork(data.length ? data.length : 1)
+ this.push(data)
+ cb()
+}
+
+TrackerStream.prototype._flush = function (cb) {
+ this.tracker.finish()
+ cb()
+}
+
+delegate(TrackerStream.prototype, "tracker")
+ .method("completed")
+ .method("addWork")
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore
new file mode 100644
index 00000000000000..c2658d7d1b3184
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md
new file mode 100644
index 00000000000000..aee31a4c35b7f3
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md
@@ -0,0 +1,16 @@
+
+0.1.0 / 2014-10-17
+==================
+
+ * adds `.fluent()` to api
+
+0.0.3 / 2014-01-13
+==================
+
+ * fix receiver for .method()
+
+0.0.2 / 2014-01-13
+==================
+
+ * Object.defineProperty() sucks
+ * Initial commit
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile
new file mode 100644
index 00000000000000..a9dcfd50dbdb22
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile
@@ -0,0 +1,8 @@
+
+test:
+ @./node_modules/.bin/mocha \
+ --require should \
+ --reporter spec \
+ --bail
+
+.PHONY: test
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md
new file mode 100644
index 00000000000000..ab8cf4ace15939
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md
@@ -0,0 +1,94 @@
+
+# delegates
+
+ Node method and accessor delegation utilty.
+
+## Installation
+
+```
+$ npm install delegates
+```
+
+## Example
+
+```js
+var delegate = require('delegates');
+
+...
+
+delegate(proto, 'request')
+ .method('acceptsLanguages')
+ .method('acceptsEncodings')
+ .method('acceptsCharsets')
+ .method('accepts')
+ .method('is')
+ .access('querystring')
+ .access('idempotent')
+ .access('socket')
+ .access('length')
+ .access('query')
+ .access('search')
+ .access('status')
+ .access('method')
+ .access('path')
+ .access('body')
+ .access('host')
+ .access('url')
+ .getter('subdomains')
+ .getter('protocol')
+ .getter('header')
+ .getter('stale')
+ .getter('fresh')
+ .getter('secure')
+ .getter('ips')
+ .getter('ip')
+```
+
+# API
+
+## Delegate(proto, prop)
+
+Creates a delegator instance used to configure using the `prop` on the given
+`proto` object. (which is usually a prototype)
+
+## Delegate#method(name)
+
+Allows the given method `name` to be accessed on the host.
+
+## Delegate#getter(name)
+
+Creates a "getter" for the property with the given `name` on the delegated
+object.
+
+## Delegate#setter(name)
+
+Creates a "setter" for the property with the given `name` on the delegated
+object.
+
+## Delegate#access(name)
+
+Creates an "accessor" (ie: both getter *and* setter) for the property with the
+given `name` on the delegated object.
+
+## Delegate#fluent(name)
+
+A unique type of "accessor" that works for a "fluent" API. When called as a
+getter, the method returns the expected value. However, if the method is called
+with a value, it will return itself so it can be chained. For example:
+
+```js
+delegate(proto, 'request')
+ .fluent('query')
+
+// getter
+var q = request.query();
+
+// setter (chainable)
+request
+ .query({ a: 1 })
+ .query({ b: 2 });
+```
+
+# License
+
+ MIT
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js
new file mode 100644
index 00000000000000..17c222d52935c6
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js
@@ -0,0 +1,121 @@
+
+/**
+ * Expose `Delegator`.
+ */
+
+module.exports = Delegator;
+
+/**
+ * Initialize a delegator.
+ *
+ * @param {Object} proto
+ * @param {String} target
+ * @api public
+ */
+
+function Delegator(proto, target) {
+ if (!(this instanceof Delegator)) return new Delegator(proto, target);
+ this.proto = proto;
+ this.target = target;
+ this.methods = [];
+ this.getters = [];
+ this.setters = [];
+ this.fluents = [];
+}
+
+/**
+ * Delegate method `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.method = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.methods.push(name);
+
+ proto[name] = function(){
+ return this[target][name].apply(this[target], arguments);
+ };
+
+ return this;
+};
+
+/**
+ * Delegator accessor `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.access = function(name){
+ return this.getter(name).setter(name);
+};
+
+/**
+ * Delegator getter `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.getter = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.getters.push(name);
+
+ proto.__defineGetter__(name, function(){
+ return this[target][name];
+ });
+
+ return this;
+};
+
+/**
+ * Delegator setter `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.setter = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.setters.push(name);
+
+ proto.__defineSetter__(name, function(val){
+ return this[target][name] = val;
+ });
+
+ return this;
+};
+
+/**
+ * Delegator fluent accessor
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.fluent = function (name) {
+ var proto = this.proto;
+ var target = this.target;
+ this.fluents.push(name);
+
+ proto[name] = function(val){
+ if ('undefined' != typeof val) {
+ this[target][name] = val;
+ return this;
+ } else {
+ return this[target][name];
+ }
+ };
+
+ return this;
+};
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json
new file mode 100644
index 00000000000000..ea3c1da0d490b2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "delegates",
+ "version": "0.1.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/node-delegates.git"
+ },
+ "description": "delegate methods and accessors to another property",
+ "keywords": [
+ "delegate",
+ "delegation"
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/visionmedia/node-delegates/issues"
+ },
+ "homepage": "https://github.com/visionmedia/node-delegates",
+ "_id": "delegates@0.1.0",
+ "_shasum": "b4b57be11a1653517a04b27f0949bdc327dfe390",
+ "_from": "delegates@>=0.1.0 <0.2.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "dominicbarnes",
+ "email": "dominic@dbarnes.info"
+ },
+ "maintainers": [
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ {
+ "name": "dominicbarnes",
+ "email": "dominic@dbarnes.info"
+ }
+ ],
+ "dist": {
+ "shasum": "b4b57be11a1653517a04b27f0949bdc327dfe390",
+ "tarball": "http://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js
new file mode 100644
index 00000000000000..7b6e3d4df19d90
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js
@@ -0,0 +1,94 @@
+
+var assert = require('assert');
+var delegate = require('..');
+
+describe('.method(name)', function(){
+ it('should delegate methods', function(){
+ var obj = {};
+
+ obj.request = {
+ foo: function(bar){
+ assert(this == obj.request);
+ return bar;
+ }
+ };
+
+ delegate(obj, 'request').method('foo');
+
+ obj.foo('something').should.equal('something');
+ })
+})
+
+describe('.getter(name)', function(){
+ it('should delegate getters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return 'text/html';
+ }
+ }
+
+ delegate(obj, 'request').getter('type');
+
+ obj.type.should.equal('text/html');
+ })
+})
+
+describe('.setter(name)', function(){
+ it('should delegate setters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return this._type.toUpperCase();
+ },
+
+ set type(val) {
+ this._type = val;
+ }
+ }
+
+ delegate(obj, 'request').setter('type');
+
+ obj.type = 'hey';
+ obj.request.type.should.equal('HEY');
+ })
+})
+
+describe('.access(name)', function(){
+ it('should delegate getters and setters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return this._type.toUpperCase();
+ },
+
+ set type(val) {
+ this._type = val;
+ }
+ }
+
+ delegate(obj, 'request').access('type');
+
+ obj.type = 'hey';
+ obj.type.should.equal('HEY');
+ })
+})
+
+describe('.fluent(name)', function () {
+ it('should delegate in a fluent fashion', function () {
+ var obj = {
+ settings: {
+ env: 'development'
+ }
+ };
+
+ delegate(obj, 'settings').fluent('env');
+
+ obj.env().should.equal('development');
+ obj.env('production').should.equal(obj);
+ obj.settings.env.should.equal('production');
+ })
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/package.json b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/package.json
new file mode 100644
index 00000000000000..0df2df0abddc88
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/package.json
@@ -0,0 +1,77 @@
+{
+ "_args": [
+ [
+ "are-we-there-yet@~1.0.0",
+ "/Users/rebecca/code/npm/node_modules/node-gyp/node_modules/npmlog"
+ ]
+ ],
+ "_from": "are-we-there-yet@>=1.0.0 <1.1.0",
+ "_id": "are-we-there-yet@1.0.5",
+ "_inCache": true,
+ "_installable": true,
+ "_location": "/node-gyp/npmlog/are-we-there-yet",
+ "_nodeVersion": "4.2.2",
+ "_npmUser": {
+ "email": "me@re-becca.org",
+ "name": "iarna"
+ },
+ "_npmVersion": "3.5.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "are-we-there-yet",
+ "raw": "are-we-there-yet@~1.0.0",
+ "rawSpec": "~1.0.0",
+ "scope": null,
+ "spec": ">=1.0.0 <1.1.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/node-gyp/npmlog"
+ ],
+ "_resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.5.tgz",
+ "_shasum": "239f26706da902a2bffb72c33de66fdfd3798ac5",
+ "_shrinkwrap": null,
+ "_spec": "are-we-there-yet@~1.0.0",
+ "_where": "/Users/rebecca/code/npm/node_modules/node-gyp/node_modules/npmlog",
+ "author": {
+ "name": "Rebecca Turner",
+ "url": "http://re-becca.org"
+ },
+ "bugs": {
+ "url": "https://github.com/iarna/are-we-there-yet/issues"
+ },
+ "dependencies": {
+ "delegates": "^0.1.0",
+ "readable-stream": "^2.0.0 || ^1.1.13"
+ },
+ "description": "Keep track of the overall completion of many dispirate processes",
+ "devDependencies": {
+ "tap": "^0.4.13"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "239f26706da902a2bffb72c33de66fdfd3798ac5",
+ "tarball": "http://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.5.tgz"
+ },
+ "gitHead": "abaff79ae17e9397eae19d29d2d75778d18aab3a",
+ "homepage": "https://github.com/iarna/are-we-there-yet",
+ "license": "ISC",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "name": "are-we-there-yet",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/iarna/are-we-there-yet.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.0.5"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js
new file mode 100644
index 00000000000000..18c31c32cfda1e
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js
@@ -0,0 +1,56 @@
+"use strict"
+var test = require("tap").test
+var Tracker = require("../index.js").Tracker
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+test("Tracker", function (t) {
+ t.plan(10)
+
+ var name = "test"
+ var track = new Tracker(name)
+
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+
+ var todo = 100
+ track = new Tracker(name, todo)
+ t.is(track.completed(), 0, "Nothing done is 0 completion")
+
+ testEvent(track, "change", afterCompleteWork)
+ track.completeWork(100)
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "completeWork: on change event fired")
+ t.is(onChangeName, name, "completeWork: on change emits the correct name")
+ }
+ t.is(track.completed(), 1, "completeWork: 100% completed")
+
+ testEvent(track, "change", afterAddWork)
+ track.addWork(100)
+ function afterAddWork(er, onChangeName) {
+ t.is(er, null, "addWork: on change event fired")
+ t.is(onChangeName, name, "addWork: on change emits the correct name")
+ }
+ t.is(track.completed(), 0.5, "addWork: 50% completed")
+
+
+ track.completeWork(200)
+ t.is(track.completed(), 1, "completeWork: Over completion is still only 100% complete")
+
+ track = new Tracker(name, todo)
+ track.completeWork(50)
+ track.finish()
+ t.is(track.completed(), 1, "finish: Explicitly finishing moves to 100%")
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js
new file mode 100644
index 00000000000000..f97e1034ff9e07
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js
@@ -0,0 +1,87 @@
+"use strict"
+var test = require("tap").test
+var Tracker = require("../index.js").Tracker
+var TrackerGroup = require("../index.js").TrackerGroup
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+test("TrackerGroup", function (t) {
+ var name = "test"
+
+ var track = new TrackerGroup(name)
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+ testEvent(track, "change", afterFinishEmpty)
+ track.finish()
+ var a, b
+ function afterFinishEmpty(er, onChangeName) {
+ t.is(er, null, "finishEmpty: on change event fired")
+ t.is(onChangeName, name, "finishEmpty: on change emits the correct name")
+ t.is(track.completed(), 1, "finishEmpty: Finishing an empty group actually finishes it")
+
+ track = new TrackerGroup(name)
+ a = track.newItem("a", 10, 1)
+ b = track.newItem("b", 10, 1)
+ t.is(track.completed(), 0, "Initially empty")
+ testEvent(track, "change", afterCompleteWork)
+ a.completeWork(5)
+ }
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "on change event fired")
+ t.is(onChangeName, "a", "on change emits the correct name")
+ t.is(track.completed(), 0.25, "Complete half of one is a quarter overall")
+ testEvent(track, "change", afterFinishAll)
+ track.finish()
+ }
+ function afterFinishAll(er, onChangeName) {
+ t.is(er, null, "finishAll: on change event fired")
+ t.is(onChangeName, name, "finishAll: on change emits the correct name")
+ t.is(track.completed(), 1, "Finishing everything ")
+
+ track = new TrackerGroup(name)
+ a = track.newItem("a", 10, 2)
+ b = track.newItem("b", 10, 1)
+ t.is(track.completed(), 0, "weighted: Initially empty")
+ testEvent(track, "change", afterWeightedCompleteWork)
+ a.completeWork(5)
+ }
+ function afterWeightedCompleteWork(er, onChangeName) {
+ t.is(er, null, "weighted: on change event fired")
+ t.is(onChangeName, "a", "weighted: on change emits the correct name")
+ t.is(Math.round(track.completed()*100), 33, "weighted: Complete half of double weighted")
+ testEvent(track, "change", afterWeightedFinishAll)
+ track.finish()
+ }
+ function afterWeightedFinishAll(er, onChangeName) {
+ t.is(er, null, "weightedFinishAll: on change event fired")
+ t.is(onChangeName, name, "weightedFinishAll: on change emits the correct name")
+ t.is(track.completed(), 1, "weightedFinishaAll: Finishing everything ")
+
+ track = new TrackerGroup(name)
+ a = track.newGroup("a", 10)
+ b = track.newGroup("b", 10)
+ var a1 = a.newItem("a.1",10)
+ a1.completeWork(5)
+ t.is(track.completed(), 0.25, "nested: Initially quarter done")
+ testEvent(track, "change", afterNestedComplete)
+ b.finish()
+ }
+ function afterNestedComplete(er, onChangeName) {
+ t.is(er, null, "nestedComplete: on change event fired")
+ t.is(onChangeName, "b", "nestedComplete: on change emits the correct name")
+ t.is(track.completed(), 0.75, "nestedComplete: Finishing everything ")
+ t.end()
+ }
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js
new file mode 100644
index 00000000000000..72b6043097f477
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js
@@ -0,0 +1,65 @@
+"use strict"
+var test = require("tap").test
+var util = require("util")
+var stream = require("readable-stream")
+var TrackerStream = require("../index.js").TrackerStream
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+var Sink = function () {
+ stream.Writable.apply(this,arguments)
+}
+util.inherits(Sink, stream.Writable)
+Sink.prototype._write = function (data, encoding, cb) {
+ cb()
+}
+
+test("TrackerStream", function (t) {
+ t.plan(9)
+
+ var name = "test"
+ var track = new TrackerStream(name)
+
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+
+ var todo = 10
+ track = new TrackerStream(name, todo)
+ t.is(track.completed(), 0, "Nothing done is 0 completion")
+
+ track.pipe(new Sink())
+
+ testEvent(track, "change", afterCompleteWork)
+ track.write("0123456789")
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "write: on change event fired")
+ t.is(onChangeName, name, "write: on change emits the correct name")
+ t.is(track.completed(), 1, "write: 100% completed")
+
+ testEvent(track, "change", afterAddWork)
+ track.addWork(10)
+ }
+ function afterAddWork(er, onChangeName) {
+ t.is(er, null, "addWork: on change event fired")
+ t.is(track.completed(), 0.5, "addWork: 50% completed")
+
+ testEvent(track, "change", afterAllWork)
+ track.write("ABCDEFGHIJKLMNOPQRST")
+ }
+ function afterAllWork(er) {
+ t.is(er, null, "allWork: on change event fired")
+ t.is(track.completed(), 1, "allWork: 100% completed")
+ }
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/.npmignore
new file mode 100644
index 00000000000000..df22a16c635a02
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/.npmignore
@@ -0,0 +1,32 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# Commenting this out is preferred by some people, see
+# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
+node_modules
+
+# Users Environment Variables
+.lock-wscript
+
+# Editor cruft
+*~
+.#*
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/LICENSE
new file mode 100644
index 00000000000000..e756052969b780
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014, Rebecca Turner
+
+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/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/README.md b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/README.md
new file mode 100644
index 00000000000000..ca0a8cd773d6d2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/README.md
@@ -0,0 +1,166 @@
+gauge
+=====
+
+A nearly stateless terminal based horizontal guage / progress bar.
+
+```javascript
+var Gauge = require("gauge")
+
+var gauge = new Gauge()
+
+gauge.show("test", 0.20)
+
+gauge.pulse("this")
+
+gauge.hide()
+```
+
+![](example.png)
+
+
+### `var gauge = new Gauge([options], [ansiStream])`
+
+* **options** – *(optional)* An option object. (See [below] for details.)
+* **ansiStream** – *(optional)* A stream that's been blessed by the [ansi]
+ module to include various commands for controlling the cursor in a terminal.
+
+[ansi]: https://www.npmjs.com/package/ansi
+[below]: #theme-objects
+
+Constructs a new gauge. Gauges are drawn on a single line, and are not drawn
+if the current terminal isn't a tty.
+
+If you resize your terminal in a way that can be detected then the gauge
+will be drawn at the new size. As a general rule, growing your terminal will
+be clean, but shrinking your terminal will result in cruft as we don't have
+enough information to know where what we wrote previously is now located.
+
+The **options** object can have the following properties, all of which are
+optional:
+
+* maxUpdateFrequency: defaults to 50 msec, the gauge will not be drawn more
+ than once in this period of time. This applies to `show` and `pulse`
+ calls, but if you `hide` and then `show` the gauge it will draw it
+ regardless of time since last draw.
+* theme: defaults to Gauge.unicode` if the terminal supports
+ unicode according to [has-unicode], otherwise it defaults to `Gauge.ascii`.
+ Details on the [theme object](#theme-objects) are documented elsewhere.
+* template: see [documentation elsewhere](#template-objects) for
+ defaults and details.
+
+[has-unicode]: https://www.npmjs.com/package/has-unicode
+
+If **ansiStream** isn't passed in, then one will be constructed from stderr
+with `ansi(process.stderr)`.
+
+### `gauge.show([name, [completed]])`
+
+* **name** – *(optional)* The name of the current thing contributing to progress. Defaults to the last value used, or "".
+* **completed** – *(optional)* The portion completed as a value between 0 and 1. Defaults to the last value used, or 0.
+
+If `process.stdout.isTTY` is false then this does nothing. If completed is 0
+and `gauge.pulse` has never been called, then similarly nothing will be printed.
+
+If `maxUpdateFrequency` msec haven't passed since the last call to `show` or
+`pulse` then similarly, nothing will be printed. (Actually, the update is
+deferred until `maxUpdateFrequency` msec have passed and if nothing else has
+happened, the gauge update will happen.)
+
+### `gauge.hide()`
+
+Removes the gauge from the terminal.
+
+### `gauge.pulse([name])`
+
+* **name** – *(optional)* The specific thing that triggered this pulse
+
+Spins the spinner in the gauge to show output. If **name** is included then
+it will be combined with the last name passed to `gauge.show` using the
+subsection property of the theme (typically a right facing arrow).
+
+### `gauge.disable()`
+
+Hides the gauge and ignores further calls to `show` or `pulse`.
+
+### `gauge.enable()`
+
+Shows the gauge and resumes updating when `show` or `pulse` is called.
+
+### `gauge.setTheme(theme)`
+
+Change the active theme, will be displayed with the next show or pulse
+
+### `gauge.setTemplate(template)`
+
+Change the active template, will be displayed with the next show or pulse
+
+### Theme Objects
+
+There are two theme objects available as a part of the module, `Gauge.unicode` and `Gauge.ascii`.
+Theme objects have the follow properties:
+
+| Property | Unicode | ASCII |
+| ---------- | ------- | ----- |
+| startgroup | ╢ | \| |
+| endgroup | ╟ | \| |
+| complete | █ | # |
+| incomplete | ░ | - |
+| spinner | ▀▐▄▌ | -\\\|/ |
+| subsection | → | -> |
+
+*startgroup*, *endgroup* and *subsection* can be as many characters as you want.
+
+*complete* and *incomplete* should be a single character width each.
+
+*spinner* is a list of characters to use in turn when displaying an activity
+spinner. The Gauge will spin as many characters as you give here.
+
+### Template Objects
+
+A template is an array of objects and strings that, after being evaluated,
+will be turned into the gauge line. The default template is:
+
+```javascript
+[
+ {type: "name", separated: true, maxLength: 25, minLength: 25, align: "left"},
+ {type: "spinner", separated: true},
+ {type: "startgroup"},
+ {type: "completionbar"},
+ {type: "endgroup"}
+]
+```
+
+The various template elements can either be **plain strings**, in which case they will
+be be included verbatum in the output.
+
+If the template element is an object, it can have the following keys:
+
+* *type* can be:
+ * `name` – The most recent name passed to `show`; if this is in response to a
+ `pulse` then the name passed to `pulse` will be appended along with the
+ subsection property from the theme.
+ * `spinner` – If you've ever called `pulse` this will be one of the characters
+ from the spinner property of the theme.
+ * `startgroup` – The `startgroup` property from the theme.
+ * `completionbar` – This progress bar itself
+ * `endgroup` – The `endgroup` property from the theme.
+* *separated* – If true, the element will be separated with spaces from things on
+ either side (and margins count as space, so it won't be indented), but only
+ if its included.
+* *maxLength* – The maximum length for this element. If its value is longer it
+ will be truncated.
+* *minLength* – The minimum length for this element. If its value is shorter it
+ will be padded according to the *align* value.
+* *align* – (Default: left) Possible values "left", "right" and "center". Works
+ as you'd expect from word processors.
+* *length* – Provides a single value for both *minLength* and *maxLength*. If both
+ *length* and *minLength or *maxLength* are specifed then the latter take precedence.
+
+### Tracking Completion
+
+If you have more than one thing going on that you want to track completion
+of, you may find the related [are-we-there-yet] helpful. It's `change`
+event can be wired up to the `show` method to get a more traditional
+progress bar interface.
+
+[are-we-there-yet]: https://www.npmjs.com/package/are-we-there-yet
diff --git a/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/example.png b/deps/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/example.png
new file mode 100644
index 0000000000000000000000000000000000000000..2667cac459e177fb25252516d08c61f978e7b432
GIT binary patch
literal 19689
zcmeFYRa9I}-!IsN5FiA%V8Mes1ZdoYyL+(U*0=^paCZ-l6WpEPE{#KQZ7jG$I8C1S
zdB3yHnl)=K=3*}9cJEzPyK4Wt>SrCQq#%X*n(#FM06>-gD6RqkyaWLNaP~;>uq(v(
zHeLY08(d2WRcz|X8J}~Wf5fvE{4S1ivb-BWyTPrV-yPdp=PbhoU`}H-^Z`7yjJ;Exv&3R
zkMLUjasEBx%>kfYta%y0sD|us<6F*3KM|Z7lhQ-=h>Rf&I1?sd)wYTK$;Zx)^N`!x
zfl!vC*O1V2XVLORKSW#}f(pPwc6=?>GxqI<7SQ-!muv*Ve**6ERgE(O)&trnb#f{s
zKrCaYC3`7#Cmp*DQ(b82+1Gh=0DEFDRsr01ve5Anlfq7(*DpfKZi(NKZe(J3RZeLW
zhqRDo#bgSge3GE=DWDVTk-l$8p)+CAF0Ex_9G0Lr70UV;)0=khm$d08>zd>adgC)+
zwAb~WR(h<`PCd0ol7bTg-mzx*Sly%8#UV9tg=P~bn>j&^>->?FN;exmE
zU$B)@4`EpJc}5%QCMoTs96=lm>>Ngr6fnoa2t%WH93}oha(Oa|h=Ewn2to|rILU=)
zF9OKFai9vMWxvB_*$l1UI^F0Z*YIx?OCTU&|MWyFw9M^2ElC>{=kOuuM!$rWOvXI0
z*dko=ysLDckq*%%q|Ir{B*3&?>xE_l25=~{`|>>5@h6X-?;(=Kn=$6>BFt4$5sj@7
z0gbWI*Aa0u1bkFO;qNZnl2B+;O3~&w-^^}(B=9?IBjaY5>_hDrp*=zH^+)ch%=gzO
zgFjikKe%5{E~Nof`eWq5F;@~pB0PI!y>3njP|rFIF&w{q9vPQf97ga^dUBCt@X`rT
zv$W5ero`s|%0o2QBjCWzk0aP-RMVU3n5-;RumLR+_XCr%g}fE!B--r!R$60({bI#$
zzugNf3k!%Gjm(X#AJjtj^2*704C~uN)yT$AY|Dh$xv_(WN$zs9saS0D&O5!
zi%{*}X!ETJHu7zuH*LPr!`9lkV#T&!!rs{d)CsZUL|5Gy3}^SppWL(cW3~k}1#}~Y
zC$Rl#H_;H1I(^KMB)&nrUBJ@)Lei;I#W62&_)-HsW!|zB&bnJc=44*Zogx!CH&;Ts
z$*hZ~Rhj63@Idf@<%tbw9rQ)%u0w>`O`+UWXm*!J7Dcb6#zZ%IC!)2bGr`DKc2*`_yCM}9fjBl8TQ5Dd=gkKH
z2K|QXhR7%Es`z;^Vyf7Wgj6VTd~^Xl6x(sHrFEt6r3^?>u{VQoPC^fx>l70RZf))jf|X>3N5g^_-VxaGq83NPW6WW7)qgH;%sBtNyYK$r|X$X8@EC+rs0Gn6f6@HK^lRL`O!G||_%Mn1J
z9l;gR9ibaBzFFJv5xp6u%UkZcROd)K-T%X@*m)*=8ogvy?WweL`ebfkTB}gG;#3KH
zj&m*p%&S|Ycb;MX2q
zG_ihJ8ZnF9F}h4a{pRvuW<|H$-=g)xgpUr
zEE7USPZR#1)@)*|Dk0w&jD9N3v5q*j8%M4SQ1Vh*6C7|C#4a*ncpJ?%k_JyMh{LDJ9v5s~8s8e%%CYJd6Q5PdUh``C
zFY>vgM7qwp^|q-;sC;Sq{>v0CuUh7=@UHako$mS2K*6lR+i0U`h9sH9U!&@xd=$PZ
z3@ZG}u;cpylmb>bwXcafoH}Z6IdyHv|H!p2KQNx_SY}*iU%qM*$TnpU<+B{md*|lk
zmUPd2&5T|kRo$-;&8#S(m}K#F*MtS0C2G!~!eYgIg<$2r&G1(19?2)_*89ZeQh)8&
zR`4yt9qw)2{g0deyW~5e*AwU;QHqe?B7u-H@aJ*FkzOO~;Dh+I_)je!P^*KnP169;agA^MjwpnkNYI;XEh66dZc+ReyeQLrnENeUh9e
z`c>3;{b<{6*sb)Z=7~maMXhd=%XR~W0wn*_!A9H$%a8dV%#T**2T6v(nuXD*st2N{{V#|^{ec;IB52H(cC&M^<_&}#(Wm{bxsv$izJJDVQ$_lgTFj1G}p?TUvGxRE%z*Yv}FGd
z{WW!$er`YG#dVE${HQZnaaa;oVpZ%~Qod4HXD^ScLs`D}OUTx*AFcx)wJxcy1&tjI
zkMu=wPq4v5*28^SH+gV+G!JR9fE5Vzi|wuo49v5$TNd{5^wAXiB({4x*q=_cOc?!W
zd?~e!+=gvNGow(>E5TcLIDNABFcl~tQ1FMt(!w*%;=`&?y2F*^a6;0RGx;ua20D*l
z{Y=Z{1;RB74Rf;rzwh9!%A;BTu!}94ZGSnB9`Ee$c>}kZJu9(bSt*m`^%A?r7b4@Q^(?xm+=`ve4HFvu
z!#}@0?^6A%qUFf(V)I_$Fe_P6T(SLv*-OSt=S=Qe`_lQ>F3sJGJD`D_59D6u#Hpy`
zgk`&O-14;ga=q`Y2@+jNV-7d|@dTMP+NIkGXUDmuXv
zyW!z~&>#Y+Py!6Uc6W>Y3J&i0{l)b7#Y6&S%e8b6()bNu{%!`ttKrV^GZs#6tAl{A
z_vHY9CT!O%;Fdf?m&7RQ3eKT4q;waVR)dQ0X-f8k1iIkh0}W+d3GXNATK_z
z2PIJ1h5?_O_k$1*y)Y0*00@MW2vp!@!V`CYEAGc2E^o+>i!JRzE2&2-@!63VTUnS<
zT%3tlTv1d^L_vf@L6lirnAV*aPeYViTvAOzLY7-zPh8H*Qi|123|~h^7*{j$i#Ud&
zf~35HoSqz)vVs!5rk|Aplc>6pzKXcGO0=wohN}XDx`vp7hJK(ty|KEmhNe2Vz89@=
zw4^>LQU&+3wy1@sfsMMAwU?m>cC=9RH5ZLA0~*@-t2l|Qp3ObfrGTm17s{COQS+ua=x0oL>AWu
z$p=S7dBrA0M1_Y%7G*{F1;!Oxr8G1~XnQ0VRK?iT#Tq6g#h1nfJyyP
z*pz1HR@CWH*q{A9DqNNjO)N?~(#Zc0OLY-g@(V?k(DNmA(#aDS0Y
zcS%rjd1YknV0Wo+Voi5mW!rGsm%$3J?E03L%DjQffU26x(YkM44at>F-92@cd99@=c>aFP;Y^oiFKn5$uhf7)^6BA=K<0Fvn3CPemWODrH#CYE*Kn
z3j)*#FTOFrcSV>D@gI)p#GLrrNn|i_81oVjPw9&T%{e;~oN?nTvoA(&X?LwId_D@9
zvV|>{F~9%#Jbl04Q@xz#m7il#6i{~=TeSoL9B^;>yb%C^kg>XPQ7rEVtGby##M+Ve
z#KIu(Prmb`$=hqHpUJ12*mbg$3=26?#I{2#wafa>c`ZBIhN|asOA6ilQ>qdH=<9{A
z$$*$O{K9Vy|JNDo+_@}th|P5>6dv+4bz;z*AiObZ^P
zegtkWDfkE9yKMc~dC!f>%b&
zwS0k!qGHa(VheOwslzwMOuo&N`LnDfNHZ@Zd_Vt@x9zKb{cN2}P65%0=yqz1Z9&l%
zxo@i8^Kh3|Oo9X`$R6-Q8Zq9nXxU~?$Zi@kr=L}%nCp#~_vXJ*hhIU?6!!yZMgQnD
zQ5xZ9#t+$4=tR#hzPFy5>#L2Q>9~J)-Xmz%=Fr`GNtGZ_l~HIKzv<5mVh+PknnLp}
zZTMbaZaJ>5@mr~+YWG*jLm5QaXomFjFGP%Mrl=PZsI~T_P4S(
ze61CxXJ=o1ETZIn`kDlGMsyw&d*>{WPsFb7HSkutGInBJNBLr=sC>Yixg@!65?3Jo
zqj-O>>|02co)~cj9vD7O8&n%`L@{M`FkF~cBM3%B!SZqMMKrt`qxhzo>avQF6{@jM
zw>;scS5V@?ZR0)38RW^N1AEinjeI=?IG0l?Dj>5#*PDuI>yX`2+%G3}EU^M;!>R5CRh&p%n8FX%R8ztBJ2Z5+n^xXzhGV1S#t)F#
z$C`{w_PTedfmh%9&}=$0A*g#Nx$QrO=@>${GGV=rzWtrj21Sl%zM9Q^o_$KASlhQ7
zJzMB-e**7ELC9W>*hs3MQ?$t-n#-2`_^|Y*(}%(zr@SdA;M_Lp0XQ+xwC4r-1HyY_
z)k{GtytkG|Nuuprqh47-f2bBQQk){l{bkjz
z#2ncBG41X5fy0mSo2X$5pNYg%F-V*R7ExJTaEC2=sLpOb@RPv=LC(vBnccSccE}9C
z68y#Gj^-~?us3#LTUh#zFTe0A2W%kbU7plgFH+kXjZ2jSeJQj@Qa~HcD(;&2$48Lw
zpasF=V<4E4+dIl&Omm^+QtOEic=P3`%gQP0UB-Pzdu3GA@V>=z+I^{Qo3U65tk#?!
z=W5$lj_Ud9%FS-Qd&dz6Acl9|CS9JfcMq|uzhI?zY*n?64J$nNY$U^4HI)a`xw+nKST5LD(z|uBP>~iLw5HX
z?Z~yV_FWZzmb#lkifPkxY2Z!{0Km@FCl}MfCN&i{V!V!8D+f*{R|6H~VL$Sf@!5f}
z+XyKlS0g0amDwTr!kRJ6ns$mJTXPOG<#>RQD55)X$6CB*V-5o?FxIeJy+sE=2DIa^
zk5+^dANu4I4P69Fdl{BlH(F_;0K{qDG(-;_q(WCeZ_UNL(L@mr2uA||z%c0=g9IQv
z6r%7$8vEFh-$DO(URNk~u=Igs!zbn2mjGdq4({n=jO!@Dx=DoPcP%wRI9Q9aUL1=r
zP;p!fQv(CPHZ4xz#tt?B0CB_(Vay)q7ndQ*aw8Q-1YjUS9FdJ*-Fh#75(vh7YXBFM
z2Hqq{9Ph?f6!f}`NSp6Cr}|)J)f2tKlh&U7Kq){!XcioHKkWHcLeS9I*Oy$8YBh7b
zQSnZ#E#+Xr`vpKn7IYDks~&4l+(5ONY5;njS}M1QWXZ~8xqhA+ZMl{c8+jc!g_*ZBkXGP09N
zu}FHub)H)TAhCDs5j0^meu_QsO>XqmPctdhjI*s63soQB5jF8xtORCgV5`^dl7~$S
zQij~55(6V4)Z!`27u?)UAyNCiYKoW00Dq{QHC3sx&f-ftdhKTD&1)K!uspjUY?AJO
zhhbw>C*#MCn69!H76Y5OD<6n}03Tf-kOs=e5QT;qVb%kYM@KgjN_>*KtbN$50>G3A
z;KW=g&eH@VP-cVhyqR!pAyN5%8-;U-bP3!kBL<$yy%$QbF2@t^LUz}?g4-cs#c#t~B`nX#ilMT~we
zU_qnbK~km^zBDFVsKW5!;o%a+>doxJ0tu7Bv}cJTta?JxP{bo_k#lOR-AVFnT%ep1
z4ToTku9Td#rGX8JvckKUfV>PS5-#mKEz>B_#l;y}yRy|9PE{+5ZLLyx*B{T(jr0+P
zi$@KOe^!=kTRa#&lCTL!{vdJrM`|%GS53OaD)^r-YxSR^1;7dnR`D*UTgIJz_LX^YsL8sdl
zEK`aEa&dcSap9gSTmOMG5dlyc
z0z+WKFa-8{*f4$#VDeC_fz)46r^gNwgPskvs8xkq#r6W)aG@l&T0
zf0N!CXgxX`ku!h^lfwN4FIVD+zC+o^ob!7x--IK<0U&HHbufsPSM@K%y2xoT-xIK@
zS(#xG5L>;t&&}UQ3DP@c2E*$L)N%Zv4u17fz?o-uTwK98O4`{5d-71Oeqzpv`9)YV
zy@1xH$vc-@IrGdr>BC*^P70A4aZwPA5|GHOaurH6a?GnRKcd8@7qK&mLTb|^e}6P^
zy)a~^%zK@G9O`Lhp&`4E=f&|Wj%rbd;M2i@E5taC41a*u;IsRAT$0E86HFpG?dld@
zQI5s396_O$Bd4*NjJi)r975uV{;XgzIwNG``_@y@cR)~4yx+uq8LzUgE)iMI@6VA^
zZ^}Fe_=i~MRDm`5RJaXmf6*0fdGKBHgkGy%wR;Y*Hnf+nFinNLQv9O|$XzldTXJL<
z83IQJgG{frL`{>$>;-2sE^9}fmdGJ6p(_p8RLJ)A?bJtz@;+UrHq*jQo+Z+y4hZZ_
zwxxPGxkW5cn-p_bu9{d{W$B)%eT}+ahhlp9@qiMGD+%7e9m=J`V^l#e7RYx-gqr%ROoM@E
z4ZGVt4!p%3*=_B@gcu}A8*4u0as~RMm!DI9p0lW4CX^Oak>s~-I1Q;%;*o?WR|OHj
z_q(OR;%EA1WWGXm#=#6scFcldE8!k+H)V(bOEcc~kF_4MJiUv&_x(gTB#XA=4eOl&
z(8?XpS`Nc~`g$F^nxq6gB6$I`OOJ|B-L9~x{d@rz`9ITJ8QqJdCeK(bGi7|rm`I%H
zVFciSnYl*O){V1``E3Ays^iSU!lz;FjinMu3tx!unzt!Ip{(EY6w--qgP)`m7wPs7
zobqWi)>4BgwyJw$Sp`xLnx7VNOqVNLv!r7o%Wq_)%a%PM
z$fDm;M&ijNBQc`2cuNr$}
zXMqad=>uIAcBbz9ydKy>6B@j?{T93^+QFXzG~aw+Zp
zLL|*E1827*VtKXe9@nr_9pH#Tl8j*-_o4Ixe7?4w$8U%g=whRiimx6#B@g
z_$jwQ@&Ou|yLUe*G?^Qx=UUX*QL3r6b&k8Ui+?75wtO3LpQktz-jp>;10bstmx|`m
z!M*Kslx5G_lPHWC9LkG~c{LS>CzySkVm?Nv+e&-M2zwVg8X)@yM#Y6;2@bqAqbQ=n
zJHqcctLeH_2mzM;-EH%1gun8(cTfuvzoCy4jZvnI-Fn=TLzG*K{{7UavvfaCJRqbeLI@;~lN@<7=BJ509vCUu)*bAs(V#m}>%1*(wg@P;XzqK|@e^CELGNK~Iu8QGBQ(
z#<@Euc@Y2Yo(3pq+vm2Wi`~alwn(s0dj8TeBHtwJzQJz60~Cvc84s-;85GV)?dks*dMCL06LAgjZL;w
zk!rUppF=@o8}20*T?rWpEzTR2eLKpl@UnuJH=)#(URo^kj{Ig6E<`~z4DD!zv}vF>
z;v*Q>dXQGUFd*hm`>8QAM)sO7VDy=#=AQ9ZBWn(ngqd0IsYZC44n*MIR^;oU?FG}+T0l<{0@0NJT$;q58J(;4OSK>>6xA6=Q2
z{UN#k1(k67LtVjgUETWxAxPX;zC%Rr~u^shAo%+;tXo1Wiz-
ze4s?Sfiww;1NOkzpzT6pnR59?I&MJucW7l$PclpMWp0kIfPPi7>q^CFQ#juX3WSVJ
znid#rvQOl!pBLcfrHQu1+aO;TsC^``^yztclBi(+@DtH^O8PV7tVEuFv~$yEVj!F7
zA5-h)rL6qC4QfWSARDmg0DB+)uf_!J!C{^Ry|<3-$o^^}pqr6!*~Y09*Zw=VRgE+}U`^50b4VFsyd)jMYSW-_||7;vUnjinhkX&!jxBN6CJt!_sJs8SeeA
z@SRv7)`GPrVP^6xfy-;_mB*k~(X!seAJ7(oAM^}De$%tflUX_{msn9w8dUmnvQ2XS
zg;VB+E{wc^;_;0y$QGQRHMAR2-$I97guA)smXJ?c6&}_}fAD>3)Irm6V(@uckZ0YfRcv@vzDs`FFh-`I`K^(!xdOssHa2;>
zsx*xEpsDU4FqT!zJ~B?*=Rr%~P#c$ZGt`-G#!EKOu5=z_HEpi>S%fSij-19J$+R-c
ze1-`%V0N`tml90Lw%JOkmagVv%Nxi7;rHYtmr&5W_bp_HnVPNj#ZTBVdShj&1xX!a
z7dmF9_X*bJ{SEFe2oz+-WhAh%Zd*k&X&(Z9#I|;8<8&b0D5k)F$}0Qqb1Ppg!O%VO
zf`HyT2L}#VH5?5+I!>^SG&N25^l=dFjzl1d1Ak2#=e2
z5hiIw-AjF3MM@bNnF4|Wi;E2o1!tqXn@|a4bmhq6C&j0QCu-diQy@^Uhn12O-pqb^
zI!lH9_0T*wr|#DG#rg6OdA-x=1XXDmF#H~(kWKPw>>=JO+P^m?3yLpOAZ#aTDF;a
zYo+xfdUa2K4z7{%psQdj>*$A`1%YvQ`5E~4=eSi1_2Jhoi9H*_0Gn|5!7TjD;Wn~Y
zsGLP?W_oGFa}v8MnvnH+ZP|7VLK{;7Tter8vNRp$4sHY@h6QnpW<90r_s5k-2lH5h
z?e)jGN?Y5m$w&gcc?&w4i>k7VMyg6t@|B~g6=BBH_w@|)G^-g$`#N#3Yi0T_Qv
zGB~~yb;{F}3Ecs?hJ}s){(Nj0Ia+=GHD3upJ?BfTWp^PeA#rSEd+K?Mwyx$cRau~P
z^6()}I(+(N^nutf9(m2$IBzjD4fc9wXWCHIYyj;u1l8-Tg7YE#T!;iu^=pf#t1=-@
zCmXozgpoPXhd3G+H9IF&V-S_j0vQPgMNM`l89-%c+m@vIq
zhEH;wG7lQ8{!u87fBA4*o6%)Q--Twtr`jI&J|tx&YiRDZiU4p%ElVM_`;%Cx1@Es}
zIxNV}?95duH4`J}*i=|6*PLu$DwH}h@#ThBRRS@g1L+uycvd-kT`~1Bo(ILChCJ%``|yfh=4x6B;P>_^6uZZd~LDijI3$#dahl!GJiFqN;`sN*1o
zGAVA36-1S{TM7qQ4TC}(o=^n|I$+mK9#@G6evZTY+be_K{pv4_N4tvpo`;dCd3y9B
z#wzca=0|!4ayt$>%t8>PudtxnZtWlZ;&;|xS%wUVS({ktIN)3NdP;0$Yq_Rccp!o8
zA}~~hdhPoxqx^*sJ+n3h(ywlO!{vllD-B+u;4$Jee1L@R@vi*_t7hSVb5|u2eWJH3
zjXIsGK4E93WWi@$fV*8wRxsD*TF~$qwU{+*z}QpHKjZa4JxqxehUd2xd&ADULSGP2
zl5%m=p*ED5C;Ts>9jo59!!a&DMmBT9r$sv=THsyZ$t7&C6eONNICr_|j62*bT$uI{)8uwe{9lMUfsDi0q{{DdH!T9rmk+R4dN
zp^v<4((i$n!&-T}KGwLp6esf~LS3+SkmkdMAM>#8qUfBpDpkCO9=21&Y3g_V@e`7g
z{z&ONg^pjuq!mFjy{Mk-20gS!r{Bv&5#+f~I%;UDMn&_qa&*zt54@IjI
zQmZkBgr4%Q;SSOO@ex0}2{{%f-8)F$6&ZR99Tz@Np_csiU&i0i1O5c^I
zKU=UB>+i>ja6^mehb`NgFOYY`tJEL%Rl;$Tel)0FT~o}b+v^nxLn+|P6)>W8rDt@jSO%Hm1uJxnF^
z=Lw0DMdBFPJ-|EQt^IlO+J72{WW31xU6%XV!Vin-o|8IzrFi>CJXm_^~PapcZ?1=SBkhS%zLwunqd3_tU6$7HYxcr
z&{7&Dd)!-&V>f}xAi)za8{nUSO+w%pqIt)n9`=P1F9)6m9aSmpc$6vbMQ82iy20Vw
zNZU!L^KVn|-NC!4yO?sj53LU|P+AySfVGCrWIEZHUzz{bi{b-8_ijnpF;33wdo>f@
z%neeW#%h>m{7h^xNXjWQZ@!0z^^I>$SVl0DcO4dVG!06C)L06hHClkUg$|`L>eS@>
zkII9S68)Myu_{z9lo`;s{~gA-_{DmvQC^e}JR#PzLX8fF7cL2pYA5NG05yMo8K8~6
z!m#(Y30m~b=lpSSNa!%ih$RYdg3TeylYPn|QN@4NW>2t~y8o_W5K>VflYj~T$ML;4
zAtE5gzm3#zNbo}RxVuC^cX!^K#j%1PUS%=>03@EzS%6SdllWzVR)yhrQDCvad`C2J
z?q6yNBS0yO5yt}!?;{*_>Nu*kcab;V%J$=2+b>t2Ln-Je-a{-?Gcz-Fw}@7Od@Z>!
z4gXnu|Hun5{t{BfM4q65R}q*{hL%|XP0|NRzU5GhC(?$o&gWUcK26SxUik2l*r+Un
zcRk!Ps2LPV*ZGlnR?72+724kM3!&|+L;L@guupQ7DU-pLZPi{}9Ju-Bt~F3ywSDbp
zV?rKA@&8W-_CF;}g@+=2a>}sV_Q+dJ*nta((*+g8FD@<$=jpeJk?<}iv{|;a?0j?^
zt!XdVA!q>+m(<*PLSiK0G=wZK1=;59$e>NiUt^D2I^Db
zW?nqzB!tT|7hs)LZ;Vd?DdUouz*Fr}869v!_<#+1;8Y+HVi4WJE(ZD5Gn?vAhz#Jm
zZ_n9DR;;0%J1)PCX{%q>ubI|RnZnB`Fn35@rex}{xkdIobfIA>fx5$}Rjc>=-%_7X
zQ}<{P*@?Hh&PC+8nA}U7o72pK_Nriv%lTgIO)uWW_>Tr=m(QKdz{N!dpuj6(nJ_fj
zW#3z{?pxMrMJg{##77-&jdUzZ7;$}8wl$&FspEVSJuY
z_3PMK9@n=DXV8SWd1L)FO+!N@C66yL;mZ;@-FGXxH5V)G3-tI_gE??2<0^F~k6WLJ5FrZ`tr=E?1|a&awE`BR
zhk0*}6bdW`D}~?&O*^FTu|G6)9E^Z4Nu@Cy?ZC-eA>6^DGN1UU=y>>#?YLd
zX`1QEyj~ylnZHx&LnryVMB!3~a@B2K1xu6ucc54A)8u|cH)`4jj4!9Ch3`Ww?`ui3un~ZPS#4XHdMXX5-im8dRIaQkK$uXGx
zgt5V5S#MZ?ZlS~uCmnk~$A5Dyoyg#3!sB)H={lpp%tePwaVb(mCR7ICl=jZu^gA3z;=1g?=r*EdjY(~^)nXrSagHob0Q9~p`3-Vm08ur;i0Ai_4hR*Awy
z>-VWl9UP%!I!%HN@W(Z&E)-H-Qe;-r!1&`tYq0Ty6#?wM0ND!Nrr<;lDGtwxx7-Fzk=>ol~arlONjS_ryiw;kJ>
zQsPv~*~s;bHEEV*&l|+usELye7%j9U3W`+P7*GbWi*+VU29VUFf>C{$0X^EFfb0ub
zhJL)mtbZ6qZpy!mg66-Bg5kf6;uIA-6XhE;#*AS6{D<`Uye~#
zbIWOaQw#YLwko+ga=UB;j^94V6(S{*@*B*uDy=s{Boc%R>39wSXgb&kXR|I^uKfJj
za;(;?B4g#V4;t16@$iQzwVl9a)1JIaCP>|xA@)wQvt8$8j#DTt-goIEp8vX&gjZVG
z;=VqM_dEqcfBQuKGX;Nip?4-CXvI&Dylg;^cwIjpO7mP8Eor#~bC6>H;;@XNn(8k-
zC*4Xt$ZfE6Wzo~WSx@F1&sH2pwq--AzTsT%85Uug&r)fR34SH8p{;q=ZNwdye~uMMo4(tF8jhH`nVU1H-rp^6E2WLvFL_g_cq1^ft>?y-p^mxqT!VWJrf54Dx19&
zndVt%j7-LvyXp@jl+f
zh&QqVS4f1u-4%*o9T>l7Yue9{`kGj=%!mgYbSbdmm^Ju*Ltt=(v5>;kxjytK#Zp(8
z+*YX+w0x)K*PK;nny0l-(7=E@?u2oTo~Zc1)sXB2qa+c0h8R!9l}6MNxJM^ej@u=V
zL5JGv+PAm4gnoo53#`%0Z!ahXxg`ULcFX4b)kjs>KTUh;aYv2(Di^Zef8O?Uh^QEj
z@>8IB_W0Lt?rqnee8HBm{-Rtwcr%}O`91}c-l<~xt+Ly@sBp%@O}dr~rEXr5>aU6|
zU$eFyYW5a3th|aTpUKYBU$Ud~57|j1n>8CZNDL2FIpwYqi*62czbX+Uaa1F5x!V8a
zMsDwAi>bf_^`FKmSu*%Aq8yEV
z1~V21jqXG`NOn@+YeKXwh-f(*c_wZbHj=I=urk9;F*3v9Yg@7#Rfm0eD1D|`+Ow}!
zwJNcChG2HnR$ti#%SRv0;Q>pSj&vs%Uz{f+M5lJ1JO!2|3D&F-rvm=%W$gAAUC4o%
zV0P~iYc)|15$?I{V3Xlt6?($Q95*QY0Dgt2UOWk(Sd7ZQ)N<-5HOe+;{SlOKrDEf_
z_ThGwC&&;3R{Edz9*-jjum?TUzE)gfM!%h_EiHr!HEk>;Gq_-~CW7!XAEVMt%6G|t
zslGmJ-|N~EurezWakKxHO?QGvFi`Zvo%z^tA4B||b^|Q;Nh#cKzVfe11LasKh#Pay
zc1o9-JJ1%V8Qx{^6%>y8Gr3D-V$YKJ9|o9w_RIkFNf@<4O`Zv0-A3?uK(3%mfp;Z0
zXR6Cj19tidPu>z}X-xzx<5B)t8PlIW=HhPNGpy(fqfQwdhWg$wX)tBPoQ}U%mj&2a
zWp;5cl%1qHFHa&P8K@lnO2FGkp}<|=64at9e{_^T{|IvGdD2Dr`^%>V(ra_b$`tHH
zj}9||B~_0~Fx%Ux@L+uMsju$uEb$>t-=sf5ZWHKie=R?hlcS(@2PD$siPL5k0O4SFl*?PX51W
z?DeTq{*!UyaL-Hl7<|Kywg9@PG@&0{YQW+qeuyCzBY2OtH9^1qh3
zU@}_PB^THD{OdX)HS5dk=kPkol6ISW$;T7&2OYpiD@dx?+g}un`jP`Sf8O_xZ*_Xb
z#mx1@x-zW%X<`(QKB}E|z8QcFKRb7ZC;(|DppWcs2YwZl^EnB%d)%zl^!8H{3cZ2-
zfXYS6%qj_-6r{={Cr9BC<3SJb(fm2K9IXZ_s`lQZz~>M>&UlWlZ*#0olp-@Q944fA5b;r`{@?Jr0U+cDR1V#a7^C2GwpdV1V26(CBarL$
z?BV^lG(*ABD7}uB9kHuLSGQ3WU1@n;hqSa#GuP#S!yGB
zPOn8lHt~Q%49YVws9k$D;gT>5`acMCjUB17;phqrRjf2m=ODB|KU+(mI6nLxymI;o
zX25-g6MGb|PIjHBa51T)V~hLW+&BK+px1U)Udj@MgS^^KH9Kq0&9M)A6e>UaoAfx*
zGT)Q?ZS+%#f@i-fOfCj&NK{S?puzz*aQ0qmWjiCg5l*3LJ^l9bWy=+p*!>%pQa+Ft
zBkuX3qhfMbX}sczHPlQS_?8eevC^bMt4&M1Fd}ol756@fS=*OFq`ZlMsNt)u=7%v
zP43wxla>;N!4NR?hbyG%r)snH0!7Lz3KIIDj`;DGs@n)X*n2VN*kF_7Bfy}rrZTAZ
zMbgE5zVD8}SOBINNaGt;?d*D@PW7oYWui6F3&c~~JPH8u5=sK6f_QiH@Q`Y?R7#GFw{iE(JJ#Z7DcvPC1U={GibTmz6C6VDeq
zXTSzC(8o1|_gwL}Bdr$my
z>Jft|xjrQ6Gwj`B6fKHV8^T1Yk&h^-p;3?k_~(QZY+lC)E9YQm5qg&0Unk!skx-7m
z$VVN3or@V(ap($1P6;}
zsH2D_XgF}>=$Ph>e~~S&UB3{{kofCL1=w`{UT7L0r1s+s#?TCo4KwRNZ>G6Ss_hEA!yo3r>)r)>B?;b(0~kmmF7I|OROc82^LSNWBq{dnrjCL08&EhF+Qtb7ll^9rze9`}GXW99>B^=+*
z77jLrLbw}^LCWKoHz%8Hcv~@dtJ&DO@!U<9!5p7H$j}wn!7$P}Ta`fkD`|G05#WGNk3Y635iEL?F)zLoeQ;D~M;#pCltw}3^MrpaP9>~A8rom~_D
zHE-bn