Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorDarcy Clarke <darcy@darcyclarke.me>2021-04-02 00:27:18 +0300
committerRuy Adorno <ruyadorno@hotmail.com>2021-04-08 21:18:11 +0300
commitbc531d1860e822db4e12ef424073ce438234fbe5 (patch)
treed00d75ba545fc23ad6b6576c24e646276a5d8c8f /deps
parentcc4ee6cba87ef8b04445f48adf1cf0ea172ed17e (diff)
deps: upgrade npm to 7.8.0
PR-URL: https://github.com/nodejs/node/pull/38030 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ruy Adorno <ruyadorno@github.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/npm/CHANGELOG.md49
-rw-r--r--deps/npm/docs/content/commands/npm-docs.md13
-rw-r--r--deps/npm/docs/content/commands/npm-repo.md13
-rw-r--r--deps/npm/docs/content/commands/npm-set-script.md15
-rw-r--r--deps/npm/docs/content/commands/npm-view.md3
-rw-r--r--deps/npm/docs/content/using-npm/config.md6
-rw-r--r--deps/npm/docs/output/commands/npm-docs.html10
-rw-r--r--deps/npm/docs/output/commands/npm-ls.html2
-rw-r--r--deps/npm/docs/output/commands/npm-repo.html10
-rw-r--r--deps/npm/docs/output/commands/npm-set-script.html11
-rw-r--r--deps/npm/docs/output/commands/npm-view.html3
-rw-r--r--deps/npm/docs/output/commands/npm.html2
-rw-r--r--deps/npm/docs/output/using-npm/config.html4
-rw-r--r--deps/npm/lib/base-command.js1
-rw-r--r--deps/npm/lib/docs.js16
-rw-r--r--deps/npm/lib/exec.js12
-rw-r--r--deps/npm/lib/repo.js16
-rw-r--r--deps/npm/lib/run-script.js15
-rw-r--r--deps/npm/lib/set-script.js81
-rw-r--r--deps/npm/lib/utils/config/definition.js57
-rw-r--r--deps/npm/lib/utils/config/definitions.js5
-rw-r--r--deps/npm/lib/utils/explain-eresolve.js11
-rw-r--r--deps/npm/lib/view.js186
-rw-r--r--deps/npm/man/man1/npm-access.12
-rw-r--r--deps/npm/man/man1/npm-adduser.12
-rw-r--r--deps/npm/man/man1/npm-audit.12
-rw-r--r--deps/npm/man/man1/npm-bin.12
-rw-r--r--deps/npm/man/man1/npm-bugs.12
-rw-r--r--deps/npm/man/man1/npm-cache.12
-rw-r--r--deps/npm/man/man1/npm-ci.12
-rw-r--r--deps/npm/man/man1/npm-completion.12
-rw-r--r--deps/npm/man/man1/npm-config.12
-rw-r--r--deps/npm/man/man1/npm-dedupe.12
-rw-r--r--deps/npm/man/man1/npm-deprecate.12
-rw-r--r--deps/npm/man/man1/npm-diff.12
-rw-r--r--deps/npm/man/man1/npm-dist-tag.12
-rw-r--r--deps/npm/man/man1/npm-docs.112
-rw-r--r--deps/npm/man/man1/npm-doctor.12
-rw-r--r--deps/npm/man/man1/npm-edit.12
-rw-r--r--deps/npm/man/man1/npm-exec.12
-rw-r--r--deps/npm/man/man1/npm-explain.12
-rw-r--r--deps/npm/man/man1/npm-explore.12
-rw-r--r--deps/npm/man/man1/npm-find-dupes.12
-rw-r--r--deps/npm/man/man1/npm-fund.12
-rw-r--r--deps/npm/man/man1/npm-help-search.12
-rw-r--r--deps/npm/man/man1/npm-help.12
-rw-r--r--deps/npm/man/man1/npm-hook.12
-rw-r--r--deps/npm/man/man1/npm-init.12
-rw-r--r--deps/npm/man/man1/npm-install-ci-test.12
-rw-r--r--deps/npm/man/man1/npm-install-test.12
-rw-r--r--deps/npm/man/man1/npm-install.12
-rw-r--r--deps/npm/man/man1/npm-link.12
-rw-r--r--deps/npm/man/man1/npm-logout.12
-rw-r--r--deps/npm/man/man1/npm-ls.14
-rw-r--r--deps/npm/man/man1/npm-org.12
-rw-r--r--deps/npm/man/man1/npm-outdated.12
-rw-r--r--deps/npm/man/man1/npm-owner.12
-rw-r--r--deps/npm/man/man1/npm-pack.12
-rw-r--r--deps/npm/man/man1/npm-ping.12
-rw-r--r--deps/npm/man/man1/npm-prefix.12
-rw-r--r--deps/npm/man/man1/npm-profile.12
-rw-r--r--deps/npm/man/man1/npm-prune.12
-rw-r--r--deps/npm/man/man1/npm-publish.12
-rw-r--r--deps/npm/man/man1/npm-rebuild.12
-rw-r--r--deps/npm/man/man1/npm-repo.112
-rw-r--r--deps/npm/man/man1/npm-restart.12
-rw-r--r--deps/npm/man/man1/npm-root.12
-rw-r--r--deps/npm/man/man1/npm-run-script.12
-rw-r--r--deps/npm/man/man1/npm-search.12
-rw-r--r--deps/npm/man/man1/npm-set-script.113
-rw-r--r--deps/npm/man/man1/npm-shrinkwrap.12
-rw-r--r--deps/npm/man/man1/npm-star.12
-rw-r--r--deps/npm/man/man1/npm-stars.12
-rw-r--r--deps/npm/man/man1/npm-start.12
-rw-r--r--deps/npm/man/man1/npm-stop.12
-rw-r--r--deps/npm/man/man1/npm-team.12
-rw-r--r--deps/npm/man/man1/npm-test.12
-rw-r--r--deps/npm/man/man1/npm-token.12
-rw-r--r--deps/npm/man/man1/npm-uninstall.12
-rw-r--r--deps/npm/man/man1/npm-unpublish.12
-rw-r--r--deps/npm/man/man1/npm-unstar.12
-rw-r--r--deps/npm/man/man1/npm-update.12
-rw-r--r--deps/npm/man/man1/npm-version.12
-rw-r--r--deps/npm/man/man1/npm-view.15
-rw-r--r--deps/npm/man/man1/npm-whoami.12
-rw-r--r--deps/npm/man/man1/npm.14
-rw-r--r--deps/npm/man/man1/npx.12
-rw-r--r--deps/npm/man/man5/folders.52
-rw-r--r--deps/npm/man/man5/install.52
-rw-r--r--deps/npm/man/man5/npm-shrinkwrap-json.52
-rw-r--r--deps/npm/man/man5/npmrc.52
-rw-r--r--deps/npm/man/man5/package-json.52
-rw-r--r--deps/npm/man/man5/package-lock-json.52
-rw-r--r--deps/npm/man/man7/config.78
-rw-r--r--deps/npm/man/man7/developers.72
-rw-r--r--deps/npm/man/man7/orgs.72
-rw-r--r--deps/npm/man/man7/registry.72
-rw-r--r--deps/npm/man/man7/removal.72
-rw-r--r--deps/npm/man/man7/scope.72
-rw-r--r--deps/npm/man/man7/scripts.72
-rw-r--r--deps/npm/man/man7/workspaces.72
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js8
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js123
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js30
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js143
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/diff.js69
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/link.js20
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/node.js7
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/printable.js9
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js47
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/package.json4
-rw-r--r--deps/npm/node_modules/@npmcli/config/lib/set-envs.js4
-rw-r--r--deps/npm/node_modules/@npmcli/config/package.json2
-rw-r--r--deps/npm/node_modules/json-stringify-nice/.github/FUNDING.yml3
-rw-r--r--deps/npm/node_modules/json-stringify-nice/.npmignore23
-rw-r--r--deps/npm/node_modules/json-stringify-nice/index.js2
-rw-r--r--deps/npm/node_modules/json-stringify-nice/package-lock.json3447
-rw-r--r--deps/npm/node_modules/json-stringify-nice/package.json7
-rw-r--r--deps/npm/node_modules/json-stringify-nice/tap-snapshots/test-basic.js-TAP.test.js127
-rw-r--r--deps/npm/node_modules/json-stringify-nice/test/basic.js68
-rw-r--r--deps/npm/package.json6
-rw-r--r--deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js6
-rw-r--r--deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js182
-rw-r--r--deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js18
-rw-r--r--deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js257
-rw-r--r--deps/npm/test/fixtures/eresolve-explanations.js209
-rw-r--r--deps/npm/test/lib/docs.js148
-rw-r--r--deps/npm/test/lib/load-all-commands.js9
-rw-r--r--deps/npm/test/lib/repo.js345
-rw-r--r--deps/npm/test/lib/set-script.js236
-rw-r--r--deps/npm/test/lib/utils/config/definition.js28
-rw-r--r--deps/npm/test/lib/view.js126
132 files changed, 2164 insertions, 4290 deletions
diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md
index b4fbc426b78..9e696a7c3e9 100644
--- a/deps/npm/CHANGELOG.md
+++ b/deps/npm/CHANGELOG.md
@@ -1,3 +1,52 @@
+## v7.8.0 (2021-04-01)
+### FEATURES
+
+
+* [`8bcc5d73f`](https://github.com/npm/cli/commit/8bcc5d73f35434e781ff56419dd7f0c380efd072)
+ [#2972](https://github.com/npm/cli/issues/2972)
+ feat(workspaces): add repo and docs
+ ([@wraithgar](https://github.com/wraithgar))
+* [`ec520ce32`](https://github.com/npm/cli/commit/ec520ce32d5e834a32ebd58491df4200e01ce690)
+ [#2998](https://github.com/npm/cli/issues/2998)
+ feat(set-script): implement workspaces
+* [`32717a60e`](https://github.com/npm/cli/commit/32717a60eb55fcf8c7e5016223bfee78a6daba0e)
+ [#3001](https://github.com/npm/cli/issues/3001)
+ feat(view): add workspace support
+ ([@wraithgar](https://github.com/wraithgar))
+* [`7b177e43f`](https://github.com/npm/cli/commit/7b177e43f3bfb558bcd8723cdb2166a3df19647a)
+ [#3014](https://github.com/npm/cli/issues/3014)
+ feat(config): add 'envExport' flag
+ ([@isaacs](https://github.com/isaacs))
+
+### BUG FIXES
+
+* [`4c4252348`](https://github.com/npm/cli/commit/4c4252348c538246e1072421d65f4558dc948080)
+ [#3016](https://github.com/npm/cli/issues/3016)
+ fix(usage): specify the key each time for multiples
+ ([@isaacs](https://github.com/isaacs))
+* [`9237d375b`](https://github.com/npm/cli/commit/9237d375b0b7d34c7dc5ba70aec7f616f4133732)
+ [#3013](https://github.com/npm/cli/issues/3013)
+ fix(docs): add workspaces configuration
+ ([@wraithgar](https://github.com/wraithgar))
+* [`cb6eb0d20`](https://github.com/npm/cli/commit/cb6eb0d206b7e2f63d5c7a7a17bea4aed1b9f2bf)
+ [#3015](https://github.com/npm/cli/issues/3015)
+ fix(ERESOLVE): better errors when current is missing
+ ([@isaacs](https://github.com/isaacs))
+
+### DEPENDENCIES
+
+* [`61da39beb`](https://github.com/npm/cli/commit/61da39beb5373320e2b591b61ecd6596eeaba6ed)
+ `@npmcli/config@2.1.0`
+ * feat(config): add support for envExport:false
+* [`fb095a708`](https://github.com/npm/cli/commit/fb095a708a1f930bbd0195446ac611b82bfeff14)
+ `@npmcli/arborist@2.3.0`:
+ * [#2896](https://github.com/npm/cli/issues/2896) Provide currentEdge in
+ ERESOLVE if known, and address self-linking edge case.
+ * Add/remove dependencies to/from workspaces when set, not root project
+ * Only reify the portions of the dependency graph identified by the
+ `workspace` configuration value.
+ * Do not recursively `chown` the project root path.
+
## v7.7.6 (2021-03-29)
### BUG FIXES
diff --git a/deps/npm/docs/content/commands/npm-docs.md b/deps/npm/docs/content/commands/npm-docs.md
index c66e5fc627d..d0971efa2e7 100644
--- a/deps/npm/docs/content/commands/npm-docs.md
+++ b/deps/npm/docs/content/commands/npm-docs.md
@@ -41,6 +41,19 @@ Set to `true` to use default system URL opener.
The base URL of the npm package registry.
+#### workspaces
+
+Enables workspaces context while searching the `package.json` in the
+current folder. Documentation urls for the packages named in each
+workspace will be opened.
+
+#### workspace
+
+Enables workspaces context and limits results to only those specified by
+this config item. Only the documentation urls for the packages named in
+the workspaces given here will be opened.
+
+
### See Also
* [npm view](/commands/npm-view)
diff --git a/deps/npm/docs/content/commands/npm-repo.md b/deps/npm/docs/content/commands/npm-repo.md
index 670345bece5..c3d0da3fdcf 100644
--- a/deps/npm/docs/content/commands/npm-repo.md
+++ b/deps/npm/docs/content/commands/npm-repo.md
@@ -31,6 +31,19 @@ terminal.
Set to `true` to use default system URL opener.
+#### workspaces
+
+Enables workspaces context while searching the `package.json` in the
+current folder. Repo urls for the packages named in each workspace will
+be opened.
+
+#### workspace
+
+Enables workspaces context and limits results to only those specified by
+this config item. Only the repo urls for the packages named in the
+workspaces given here will be opened.
+
+
### See Also
* [npm docs](/commands/npm-docs)
diff --git a/deps/npm/docs/content/commands/npm-set-script.md b/deps/npm/docs/content/commands/npm-set-script.md
index 7bc8f75d236..73e61883c50 100644
--- a/deps/npm/docs/content/commands/npm-set-script.md
+++ b/deps/npm/docs/content/commands/npm-set-script.md
@@ -5,7 +5,7 @@ description: Set tasks in the scripts section of package.json
---
### Synopsis
-An npm command that lets you create a task in the scripts section of the package.json.
+An npm command that lets you create a task in the `scripts` section of the `package.json`.
```bash
npm set-script [<script>] [<command>]
@@ -26,6 +26,19 @@ npm set-script [<script>] [<command>]
}
```
+### Configuration
+
+#### workspaces
+
+Enables workspaces context. Tasks will be created in the `scripts` section
+of the `package.json` of each workspace.
+
+#### workspace
+
+Enables workspaces context and limits creating a task to the
+`package.json` files of the workspaces given.
+
+
### See Also
* [npm run-script](/commands/npm-run-script)
diff --git a/deps/npm/docs/content/commands/npm-view.md b/deps/npm/docs/content/commands/npm-view.md
index bf09c2ba4f3..90d5218856c 100644
--- a/deps/npm/docs/content/commands/npm-view.md
+++ b/deps/npm/docs/content/commands/npm-view.md
@@ -14,8 +14,7 @@ aliases: info, show, v
### Description
-This command shows data about a package and prints it to the stream
-referenced by the `outfd` config, which defaults to stdout.
+This command shows data about a package and prints it to stdout.
As an example, to view information about the `connect` package from the registry, you would run:
diff --git a/deps/npm/docs/content/using-npm/config.md b/deps/npm/docs/content/using-npm/config.md
index cfce5396f40..b2e8baf0149 100644
--- a/deps/npm/docs/content/using-npm/config.md
+++ b/deps/npm/docs/content/using-npm/config.md
@@ -185,7 +185,7 @@ registry and all registries configured for scopes. See the documentation for
#### `audit-level`
* Default: null
-* Type: "info", "low", "moderate", "high", "critical", "none", or null
+* Type: null, "info", "low", "moderate", "high", "critical", or "none"
The minimum level of vulnerability for `npm audit` to exit with a non-zero
exit code.
@@ -1333,6 +1333,8 @@ Valid values for the `workspace` config are either: - Workspace names - Path
to a workspace directory - Path to a parent workspace directory (will result
to selecting all of the nested workspaces)
+This value is not exported to the environment for child processes.
+
#### `workspaces`
* Default: false
@@ -1341,6 +1343,8 @@ to selecting all of the nested workspaces)
Enable running a command in the context of **all** the configured
workspaces.
+This value is not exported to the environment for child processes.
+
#### `yes`
* Default: null
diff --git a/deps/npm/docs/output/commands/npm-docs.html b/deps/npm/docs/output/commands/npm-docs.html
index e7f7a8e22c0..f8caa0e69ab 100644
--- a/deps/npm/docs/output/commands/npm-docs.html
+++ b/deps/npm/docs/output/commands/npm-docs.html
@@ -141,7 +141,7 @@ npm command-line interface
<section id="table_of_contents">
<h2 id="table-of-contents">Table of contents</h2>
-<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#browser">browser</a></li><li><a href="#registry">registry</a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
+<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#browser">browser</a></li><li><a href="#registry">registry</a></li><li><a href="#workspaces">workspaces</a></li><li><a href="#workspace">workspace</a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
</section>
<div id="_content"><h3 id="synopsis">Synopsis</h3>
@@ -171,6 +171,14 @@ terminal.</p>
<li>Type: url</li>
</ul>
<p>The base URL of the npm package registry.</p>
+<h4 id="workspaces">workspaces</h4>
+<p>Enables workspaces context while searching the <code>package.json</code> in the
+current folder. Documentation urls for the packages named in each
+workspace will be opened.</p>
+<h4 id="workspace">workspace</h4>
+<p>Enables workspaces context and limits results to only those specified by
+this config item. Only the documentation urls for the packages named in
+the workspaces given here will be opened.</p>
<h3 id="see-also">See Also</h3>
<ul>
<li><a href="../commands/npm-view.html">npm view</a></li>
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index 914d1d12144..63b71a203df 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -159,7 +159,7 @@ tree at all, use <a href="../commands/npm-explain.html"><code>npm explain</code>
the results to only the paths to the packages named. Note that nested
packages will <em>also</em> show the paths to the specified packages. For
example, running <code>npm ls promzard</code> in npm’s source tree will show:</p>
-<pre lang="bash"><code>npm@7.7.6 /path/to/npm
+<pre lang="bash"><code>npm@7.8.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre>
diff --git a/deps/npm/docs/output/commands/npm-repo.html b/deps/npm/docs/output/commands/npm-repo.html
index 969880491e7..abb755985be 100644
--- a/deps/npm/docs/output/commands/npm-repo.html
+++ b/deps/npm/docs/output/commands/npm-repo.html
@@ -141,7 +141,7 @@ npm command-line interface
<section id="table_of_contents">
<h2 id="table-of-contents">Table of contents</h2>
-<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#browser">browser</a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
+<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#browser">browser</a></li><li><a href="#workspaces">workspaces</a></li><li><a href="#workspace">workspace</a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
</section>
<div id="_content"><h3 id="synopsis">Synopsis</h3>
@@ -162,6 +162,14 @@ in the current folder and use the <code>repository</code> property.</p>
<p>Set to <code>false</code> to suppress browser behavior and instead print urls to
terminal.</p>
<p>Set to <code>true</code> to use default system URL opener.</p>
+<h4 id="workspaces">workspaces</h4>
+<p>Enables workspaces context while searching the <code>package.json</code> in the
+current folder. Repo urls for the packages named in each workspace will
+be opened.</p>
+<h4 id="workspace">workspace</h4>
+<p>Enables workspaces context and limits results to only those specified by
+this config item. Only the repo urls for the packages named in the
+workspaces given here will be opened.</p>
<h3 id="see-also">See Also</h3>
<ul>
<li><a href="../commands/npm-docs.html">npm docs</a></li>
diff --git a/deps/npm/docs/output/commands/npm-set-script.html b/deps/npm/docs/output/commands/npm-set-script.html
index 8594e62b6a1..9827c2a5a83 100644
--- a/deps/npm/docs/output/commands/npm-set-script.html
+++ b/deps/npm/docs/output/commands/npm-set-script.html
@@ -141,11 +141,11 @@ npm command-line interface
<section id="table_of_contents">
<h2 id="table-of-contents">Table of contents</h2>
-<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#see-also">See Also</a></li></ul></div>
+<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#workspaces">workspaces</a></li><li><a href="#workspace">workspace</a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
</section>
<div id="_content"><h3 id="synopsis">Synopsis</h3>
-<p>An npm command that lets you create a task in the scripts section of the package.json.</p>
+<p>An npm command that lets you create a task in the <code>scripts</code> section of the <code>package.json</code>.</p>
<pre lang="bash"><code>npm set-script [&lt;script&gt;] [&lt;command&gt;]
</code></pre>
<p><strong>Example:</strong></p>
@@ -160,6 +160,13 @@ npm command-line interface
}
}
</code></pre>
+<h3 id="configuration">Configuration</h3>
+<h4 id="workspaces">workspaces</h4>
+<p>Enables workspaces context. Tasks will be created in the <code>scripts</code> section
+of the <code>package.json</code> of each workspace.</p>
+<h4 id="workspace">workspace</h4>
+<p>Enables workspaces context and limits creating a task to the
+<code>package.json</code> files of the workspaces given.</p>
<h3 id="see-also">See Also</h3>
<ul>
<li><a href="../commands/npm-run-script.html">npm run-script</a></li>
diff --git a/deps/npm/docs/output/commands/npm-view.html b/deps/npm/docs/output/commands/npm-view.html
index d7790e2fa7a..d3a1251673c 100644
--- a/deps/npm/docs/output/commands/npm-view.html
+++ b/deps/npm/docs/output/commands/npm-view.html
@@ -150,8 +150,7 @@ npm command-line interface
aliases: info, show, v
</code></pre>
<h3 id="description">Description</h3>
-<p>This command shows data about a package and prints it to the stream
-referenced by the <code>outfd</code> config, which defaults to stdout.</p>
+<p>This command shows data about a package and prints it to stdout.</p>
<p>As an example, to view information about the <code>connect</code> package from the registry, you would run:</p>
<pre lang="bash"><code>npm view connect
</code></pre>
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index c71daa36198..77a88b62fab 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -148,7 +148,7 @@ npm command-line interface
<pre lang="bash"><code>npm &lt;command&gt; [args]
</code></pre>
<h3 id="version">Version</h3>
-<p>7.7.6</p>
+<p>7.8.0</p>
<h3 id="description">Description</h3>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
diff --git a/deps/npm/docs/output/using-npm/config.html b/deps/npm/docs/output/using-npm/config.html
index 717f1021e5c..5599777347b 100644
--- a/deps/npm/docs/output/using-npm/config.html
+++ b/deps/npm/docs/output/using-npm/config.html
@@ -297,7 +297,7 @@ registry and all registries configured for scopes. See the documentation for
<h4 id="audit-level"><code>audit-level</code></h4>
<ul>
<li>Default: null</li>
-<li>Type: “info”, “low”, “moderate”, “high”, “critical”, “none”, or null</li>
+<li>Type: null, “info”, “low”, “moderate”, “high”, “critical”, or “none”</li>
</ul>
<p>The minimum level of vulnerability for <code>npm audit</code> to exit with a non-zero
exit code.</p>
@@ -1262,6 +1262,7 @@ this configuration option.</p>
<p>Valid values for the <code>workspace</code> config are either: - Workspace names - Path
to a workspace directory - Path to a parent workspace directory (will result
to selecting all of the nested workspaces)</p>
+<p>This value is not exported to the environment for child processes.</p>
<h4 id="workspaces"><code>workspaces</code></h4>
<ul>
<li>Default: false</li>
@@ -1269,6 +1270,7 @@ to selecting all of the nested workspaces)</p>
</ul>
<p>Enable running a command in the context of <strong>all</strong> the configured
workspaces.</p>
+<p>This value is not exported to the environment for child processes.</p>
<h4 id="yes"><code>yes</code></h4>
<ul>
<li>Default: null</li>
diff --git a/deps/npm/lib/base-command.js b/deps/npm/lib/base-command.js
index 7a9e4b8ee37..91c7c5357c9 100644
--- a/deps/npm/lib/base-command.js
+++ b/deps/npm/lib/base-command.js
@@ -27,6 +27,7 @@ class BaseCommand {
usage = `${usage}${this.constructor.usage.map(u => `npm ${this.constructor.name} ${u}`).join('\n')}`
if (this.constructor.params)
+ // TODO word wrap this along params boundaries
usage = `${usage}\n\nOptions:\n[${this.constructor.params.map(p => ConfigDefinitions[p].usage).join('] [')}]`
// Mostly this just appends aliases, this could be more clear
diff --git a/deps/npm/lib/docs.js b/deps/npm/lib/docs.js
index 089d77eb046..24bbe9c854a 100644
--- a/deps/npm/lib/docs.js
+++ b/deps/npm/lib/docs.js
@@ -2,6 +2,7 @@ const log = require('npmlog')
const pacote = require('pacote')
const openUrl = require('./utils/open-url.js')
const hostedFromMani = require('./utils/hosted-git-info-from-manifest.js')
+const getWorkspaces = require('./workspaces/get-workspaces.js')
const BaseCommand = require('./base-command.js')
class Docs extends BaseCommand {
@@ -16,6 +17,11 @@ class Docs extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return ['browser', 'registry', 'workspace', 'workspaces']
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[<pkgname> [<pkgname> ...]]']
}
@@ -24,6 +30,10 @@ class Docs extends BaseCommand {
this.docs(args).then(() => cb()).catch(cb)
}
+ execWorkspaces (args, filters, cb) {
+ this.docsWorkspaces(args, filters).then(() => cb()).catch(cb)
+ }
+
async docs (args) {
if (!args || !args.length)
args = ['.']
@@ -31,6 +41,12 @@ class Docs extends BaseCommand {
await Promise.all(args.map(pkg => this.getDocs(pkg)))
}
+ async docsWorkspaces (args, filters) {
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
+ return this.docs([...workspaces.values()])
+ }
+
async getDocs (pkg) {
const opts = { ...this.npm.flatOptions, fullMetadata: true }
const mani = await pacote.manifest(pkg, opts)
diff --git a/deps/npm/lib/exec.js b/deps/npm/lib/exec.js
index 5967ee42345..f8c76eeed4c 100644
--- a/deps/npm/lib/exec.js
+++ b/deps/npm/lib/exec.js
@@ -54,6 +54,11 @@ class Exec extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return ['workspace', 'workspaces']
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get name () {
return 'exec'
}
@@ -339,12 +344,9 @@ class Exec extends BaseCommand {
.slice(0, 16)
}
- async workspaces (filters) {
- return getWorkspaces(filters, { path: this.npm.localPrefix })
- }
-
async _execWorkspaces (args, filters) {
- const workspaces = await this.workspaces(filters)
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
const getLocationMsg = async path => {
const color = this.npm.config.get('color')
const colorize = color ? chalk : nocolor
diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js
index 5ab136abd73..645c0eeae32 100644
--- a/deps/npm/lib/repo.js
+++ b/deps/npm/lib/repo.js
@@ -1,5 +1,6 @@
const log = require('npmlog')
const pacote = require('pacote')
+const getWorkspaces = require('./workspaces/get-workspaces.js')
const { URL } = require('url')
const hostedFromMani = require('./utils/hosted-git-info-from-manifest.js')
@@ -18,6 +19,11 @@ class Repo extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return ['browser', 'workspace', 'workspaces']
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[<pkgname> [<pkgname> ...]]']
}
@@ -26,6 +32,10 @@ class Repo extends BaseCommand {
this.repo(args).then(() => cb()).catch(cb)
}
+ execWorkspaces (args, filters, cb) {
+ this.repoWorkspaces(args, filters).then(() => cb()).catch(cb)
+ }
+
async repo (args) {
if (!args || !args.length)
args = ['.']
@@ -33,6 +43,12 @@ class Repo extends BaseCommand {
await Promise.all(args.map(pkg => this.get(pkg)))
}
+ async repoWorkspaces (args, filters) {
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
+ return this.repo([...workspaces.values()])
+ }
+
async get (pkg) {
const opts = { ...this.npm.flatOptions, fullMetadata: true }
const mani = await pacote.manifest(pkg, opts)
diff --git a/deps/npm/lib/run-script.js b/deps/npm/lib/run-script.js
index 054f0ae4a55..f781f25c5d0 100644
--- a/deps/npm/lib/run-script.js
+++ b/deps/npm/lib/run-script.js
@@ -35,6 +35,11 @@ class RunScript extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return ['workspace', 'workspaces']
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get name () {
return 'run-script'
}
@@ -182,13 +187,10 @@ class RunScript extends BaseCommand {
return allScripts
}
- async workspaces (filters) {
- return getWorkspaces(filters, { path: this.npm.localPrefix })
- }
-
async runWorkspaces (args, filters) {
const res = []
- const workspaces = await this.workspaces(filters)
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
for (const workspacePath of workspaces.values()) {
const pkg = await rpj(`${workspacePath}/package.json`)
@@ -219,7 +221,8 @@ class RunScript extends BaseCommand {
}
async listWorkspaces (args, filters) {
- const workspaces = await this.workspaces(filters)
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
if (log.level === 'silent')
return
diff --git a/deps/npm/lib/set-script.js b/deps/npm/lib/set-script.js
index 9d4aadad558..b31e123becd 100644
--- a/deps/npm/lib/set-script.js
+++ b/deps/npm/lib/set-script.js
@@ -3,6 +3,7 @@ const fs = require('fs')
const parseJSON = require('json-parse-even-better-errors')
const rpj = require('read-package-json-fast')
const { resolve } = require('path')
+const getWorkspaces = require('./workspaces/get-workspaces.js')
const BaseCommand = require('./base-command.js')
class SetScript extends BaseCommand {
@@ -12,6 +13,11 @@ class SetScript extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return ['workspace', 'workspaces']
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get name () {
return 'set-script'
}
@@ -31,49 +37,90 @@ class SetScript extends BaseCommand {
}
}
- exec (args, cb) {
- this.set(args).then(() => cb()).catch(cb)
- }
-
- async set (args) {
+ validate (args) {
if (process.env.npm_lifecycle_event === 'postinstall')
throw new Error('Scripts can’t set from the postinstall script')
// Parse arguments
if (args.length !== 2)
throw new Error(`Expected 2 arguments: got ${args.length}`)
+ }
+ exec (args, cb) {
+ this.set(args).then(() => cb()).catch(cb)
+ }
+
+ async set (args) {
+ this.validate(args)
+ const warn = this.setScript(this.npm.localPrefix, args[0], args[1])
+ if (warn)
+ log.warn('set-script', `Script "${args[0]}" was overwritten`)
+ }
+
+ execWorkspaces (args, filters, cb) {
+ this.setWorkspaces(args, filters).then(() => cb()).catch(cb)
+ }
+
+ async setWorkspaces (args, filters) {
+ this.validate(args)
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
+
+ for (const [name, path] of workspaces) {
+ try {
+ const warn = this.setScript(path, args[0], args[1])
+ if (warn) {
+ log.warn('set-script', `Script "${args[0]}" was overwritten`)
+ log.warn(` in workspace: ${name}`)
+ log.warn(` at location: ${path}`)
+ }
+ } catch (err) {
+ log.error('set-script', err.message)
+ log.error(` in workspace: ${name}`)
+ log.error(` at location: ${path}`)
+ process.exitCode = 1
+ }
+ }
+ }
+
+ // returns a Boolean that will be true if
+ // the requested script was overwritten
+ // and false if it was set as a new script
+ setScript (path, name, value) {
// Set the script
let manifest
let warn = false
+
try {
- manifest = fs.readFileSync(this.npm.localPrefix + '/package.json', 'utf-8')
+ manifest = fs.readFileSync(resolve(path, 'package.json'), 'utf-8')
} catch (error) {
throw new Error('package.json not found')
}
+
try {
manifest = parseJSON(manifest)
} catch (error) {
throw new Error(`Invalid package.json: ${error}`)
}
+
if (!manifest.scripts)
manifest.scripts = {}
- if (manifest.scripts[args[0]] && manifest.scripts[args[0]] !== args[1])
+
+ if (manifest.scripts[name] && manifest.scripts[name] !== value)
warn = true
- manifest.scripts[args[0]] = args[1]
+ manifest.scripts[name] = value
+
// format content
- const packageJsonInfo = await rpj(this.npm.localPrefix + '/package.json')
const {
[Symbol.for('indent')]: indent,
[Symbol.for('newline')]: newline,
- } = packageJsonInfo
- const format = indent === undefined ? ' ' : indent
- const eol = newline === undefined ? '\n' : newline
- const content = (JSON.stringify(manifest, null, format) + '\n')
- .replace(/\n/g, eol)
- fs.writeFileSync(this.npm.localPrefix + '/package.json', content)
- if (warn)
- log.warn('set-script', `Script "${args[0]}" was overwritten`)
+ } = manifest
+
+ const content = (JSON.stringify(manifest, null, indent) + '\n')
+ .replace(/\n/g, newline)
+ fs.writeFileSync(resolve(path, 'package.json'), content)
+
+ return warn
}
}
module.exports = SetScript
diff --git a/deps/npm/lib/utils/config/definition.js b/deps/npm/lib/utils/config/definition.js
index cb4eb78210c..5ec2ba1ab1d 100644
--- a/deps/npm/lib/utils/config/definition.js
+++ b/deps/npm/lib/utils/config/definition.js
@@ -25,6 +25,7 @@ const allowed = [
'type',
'typeDescription',
'usage',
+ 'envExport',
]
const {
@@ -39,12 +40,15 @@ const {
class Definition {
constructor (key, def) {
this.key = key
+ // if it's set falsey, don't export it, otherwise we do by default
+ this.envExport = true
Object.assign(this, def)
this.validate()
if (!this.defaultDescription)
this.defaultDescription = describeValue(this.default)
if (!this.typeDescription)
this.typeDescription = describeType(this.type)
+ // hint is only used for non-boolean values
if (!this.hint)
this.hint = `<${this.key}>`
if (!this.usage)
@@ -67,6 +71,9 @@ class Definition {
// a textual description of this config, suitable for help output
describe () {
const description = unindent(this.description)
+ const noEnvExport = this.envExport ? '' : `
+This value is not exported to the environment for child processes.
+`
const deprecated = !this.deprecated ? ''
: `* DEPRECATED: ${unindent(this.deprecated)}\n`
return wrapAll(`#### \`${this.key}\`
@@ -75,30 +82,48 @@ class Definition {
* Type: ${unindent(this.typeDescription)}
${deprecated}
${description}
-`)
+${noEnvExport}`)
}
}
-// Usage for a single param, abstracted because we have arrays of types in
-// config definition
-const paramUsage = (type, def) => {
+const describeUsage = (def) => {
let key = `--${def.key}`
if (def.short && typeof def.short === 'string')
key = `-${def.short}|${key}`
- if (type === Boolean)
- return `${key}`
- else
- return `${key} ${def.hint}`
-}
-const describeUsage = (def) => {
- if (Array.isArray(def.type)) {
- if (!def.type.some(d => d !== null && typeof d !== 'string'))
- return `--${def.key} <${def.type.filter(d => d).join('|')}>`
- else
- return def.type.filter(d => d).map((t) => paramUsage(t, def)).join('|')
+ // Single type
+ if (!Array.isArray(def.type))
+ return `${key}${def.type === Boolean ? '' : ' ' + def.hint}`
+
+ // Multiple types
+ let types = def.type
+ const multiple = types.includes(Array)
+ const bool = types.includes(Boolean)
+
+ // null type means optional and doesn't currently affect usage output since
+ // all non-optional params have defaults so we render everything as optional
+ types = types.filter(t => t !== null && t !== Array && t !== Boolean)
+
+ if (!types.length)
+ return key
+
+ let description
+ if (!types.some(t => typeof t !== 'string'))
+ // Specific values, use specifics given
+ description = `<${types.filter(d => d).join('|')}>`
+ else {
+ // Generic values, use hint
+ description = def.hint
}
- return paramUsage(def.type, def)
+
+ if (bool)
+ key = `${key}|${key}`
+
+ const usage = `${key} ${description}`
+ if (multiple)
+ return `${usage} [${usage} ...]`
+ else
+ return usage
}
const describeType = type => {
diff --git a/deps/npm/lib/utils/config/definitions.js b/deps/npm/lib/utils/config/definitions.js
index db66aa495ba..d87c43ddade 100644
--- a/deps/npm/lib/utils/config/definitions.js
+++ b/deps/npm/lib/utils/config/definitions.js
@@ -223,7 +223,7 @@ define('audit', {
define('audit-level', {
default: null,
- type: ['info', 'low', 'moderate', 'high', 'critical', 'none', null],
+ type: [null, 'info', 'low', 'moderate', 'high', 'critical', 'none'],
description: `
The minimum level of vulnerability for \`npm audit\` to exit with
a non-zero exit code.
@@ -2042,7 +2042,9 @@ define('which', {
define('workspace', {
default: [],
type: [String, Array],
+ hint: '<workspace-name>',
short: 'w',
+ envExport: false,
description: `
Enable running a command in the context of the configured workspaces of the
current project while filtering by running only the workspaces defined by
@@ -2060,6 +2062,7 @@ define('workspaces', {
default: false,
type: Boolean,
short: 'ws',
+ envExport: false,
description: `
Enable running a command in the context of **all** the configured
workspaces.
diff --git a/deps/npm/lib/utils/explain-eresolve.js b/deps/npm/lib/utils/explain-eresolve.js
index 69789ec9a1c..cda77aff941 100644
--- a/deps/npm/lib/utils/explain-eresolve.js
+++ b/deps/npm/lib/utils/explain-eresolve.js
@@ -15,13 +15,20 @@ const { explainEdge, explainNode, printNode } = require('./explain-dep.js')
// The full report (ie, depth=Infinity) is always written to the cache folder
// at ${cache}/eresolve-report.txt along with full json.
const explainEresolve = (expl, color, depth) => {
- const { edge, current, peerConflict } = expl
+ const { edge, current, peerConflict, currentEdge } = expl
const out = []
if (edge.from && edge.from.whileInstalling)
out.push('While resolving: ' + printNode(edge.from.whileInstalling, color))
- out.push('Found: ' + explainNode(current, depth, color))
+ // it "should" be impossible for an ERESOLVE explanation to lack both
+ // current and currentEdge, but better to have a less helpful error
+ // than a crashing failure.
+ if (current)
+ out.push('Found: ' + explainNode(current, depth, color))
+ else if (currentEdge)
+ out.push('Found: ' + explainEdge(currentEdge, depth, color))
+
out.push('\nCould not resolve dependency:\n' +
explainEdge(edge, depth, color))
diff --git a/deps/npm/lib/view.js b/deps/npm/lib/view.js
index e0df1e231f9..fb280f0d582 100644
--- a/deps/npm/lib/view.js
+++ b/deps/npm/lib/view.js
@@ -7,12 +7,13 @@ const fs = require('fs')
const jsonParse = require('json-parse-even-better-errors')
const log = require('npmlog')
const npa = require('npm-package-arg')
-const path = require('path')
+const { resolve } = require('path')
const relativeDate = require('tiny-relative-date')
const semver = require('semver')
const style = require('ansistyles')
const { inspect, promisify } = require('util')
const { packument } = require('pacote')
+const getWorkspaces = require('./workspaces/get-workspaces.js')
const readFile = promisify(fs.readFile)
const readJson = async file => jsonParse(await readFile(file, 'utf8'))
@@ -25,6 +26,15 @@ class View extends BaseCommand {
}
/* istanbul ignore next - see test/lib/load-all-commands.js */
+ static get params () {
+ return [
+ 'json',
+ 'workspace',
+ 'workspaces',
+ ]
+ }
+
+ /* istanbul ignore next - see test/lib/load-all-commands.js */
static get name () {
return 'view'
}
@@ -85,43 +95,116 @@ class View extends BaseCommand {
this.view(args).then(() => cb()).catch(cb)
}
+ execWorkspaces (args, filters, cb) {
+ this.viewWorkspaces(args, filters).then(() => cb()).catch(cb)
+ }
+
async view (args) {
if (!args.length)
args = ['.']
+ let pkg = args.shift()
+ const local = /^\.@/.test(pkg) || pkg === '.'
- const opts = {
- ...this.npm.flatOptions,
- preferOnline: true,
- fullMetadata: true,
+ if (local) {
+ if (this.npm.config.get('global'))
+ throw new Error('Cannot use view command in global mode.')
+ const dir = this.npm.prefix
+ const manifest = await readJson(resolve(dir, 'package.json'))
+ if (!manifest.name)
+ throw new Error('Invalid package.json, no "name" field')
+ // put the version back if it existed
+ pkg = `${manifest.name}${pkg.slice(1)}`
}
+ let wholePackument = false
+ if (!args.length) {
+ args = ['']
+ wholePackument = true
+ }
+ const [pckmnt, data] = await this.getData(pkg, args)
+
+ if (!this.npm.config.get('json') && wholePackument) {
+ // pretty view (entire packument)
+ data.map((v) => this.prettyView(pckmnt, v[Object.keys(v)[0]]['']))
+ } else {
+ // JSON formatted output (JSON or specific attributes from packument)
+ let reducedData = data.reduce(reducer, {})
+ if (wholePackument) {
+ // No attributes
+ reducedData = cleanBlanks(reducedData)
+ log.silly('view', reducedData)
+ }
+ // disable the progress bar entirely, as we can't meaningfully update it
+ // if we may have partial lines printed.
+ log.disableProgress()
+
+ const msg = await this.jsonData(reducedData, pckmnt._id)
+ if (msg !== '')
+ console.log(msg)
+ }
+ }
+
+ async viewWorkspaces (args, filters) {
+ if (!args.length)
+ args = ['.']
+
const pkg = args.shift()
- let nv
- if (/^[.]@/.test(pkg))
- nv = npa.resolve(null, pkg.slice(2))
- else
- nv = npa(pkg)
- const name = nv.name
- const local = (name === '.' || !name)
+ const local = /^\.@/.test(pkg) || pkg === '.'
+ if (!local) {
+ this.npm.log.warn('Ignoring workspaces for remote package')
+ return this.view([pkg, ...args])
+ }
+ let wholePackument = false
+ if (!args.length) {
+ wholePackument = true
+ args = [''] // getData relies on this
+ }
+ const results = {}
+ const workspaces =
+ await getWorkspaces(filters, { path: this.npm.localPrefix })
+ for (const workspace of [...workspaces.entries()]) {
+ const wsPkg = `${workspace[0]}${pkg.slice(1)}`
+ const [pckmnt, data] = await this.getData(wsPkg, args)
+
+ let reducedData = data.reduce(reducer, {})
+ if (wholePackument) {
+ // No attributes
+ reducedData = cleanBlanks(reducedData)
+ log.silly('view', reducedData)
+ }
- if (this.npm.config.get('global') && local)
- throw new Error('Cannot use view command in global mode.')
+ if (!this.npm.config.get('json')) {
+ if (wholePackument)
+ data.map((v) => this.prettyView(pckmnt, v[Object.keys(v)[0]]['']))
+ else {
+ console.log(`${workspace[0]}:`)
+ const msg = await this.jsonData(reducedData, pckmnt._id)
+ if (msg !== '')
+ console.log(msg)
+ }
+ } else {
+ const msg = await this.jsonData(reducedData, pckmnt._id)
+ if (msg !== '')
+ results[workspace[0]] = JSON.parse(msg)
+ }
+ }
+ if (Object.keys(results).length > 0)
+ console.log(JSON.stringify(results, null, 2))
+ }
- if (local) {
- const dir = this.npm.prefix
- const manifest = await readJson(path.resolve(dir, 'package.json'))
- if (!manifest.name)
- throw new Error('Invalid package.json, no "name" field')
- const p = manifest.name
- nv = npa(p)
- if (pkg && ~pkg.indexOf('@'))
- nv.rawSpec = pkg.split('@')[pkg.indexOf('@')]
+ async getData (pkg, args) {
+ const opts = {
+ ...this.npm.flatOptions,
+ preferOnline: true,
+ fullMetadata: true,
}
+ const spec = npa(pkg)
+
// get the data about this package
- let version = nv.rawSpec || this.npm.config.get('tag')
+ let version = spec.rawSpec || this.npm.config.get('tag')
- const pckmnt = await packument(nv, opts)
+ const pckmnt = await packument(spec, opts)
if (pckmnt['dist-tags'] && pckmnt['dist-tags'][version])
version = pckmnt['dist-tags'][version]
@@ -135,11 +218,9 @@ class View extends BaseCommand {
throw er
}
- const results = []
+ const data = []
const versions = pckmnt.versions || {}
pckmnt.versions = Object.keys(versions).sort(semver.compareLoose)
- if (!args.length)
- args = ['']
// remove readme unless we asked for it
if (args.indexOf('readme') === -1)
@@ -152,36 +233,22 @@ class View extends BaseCommand {
if (args.indexOf('readme') !== -1)
delete versions[v].readme
- results.push(showFields(pckmnt, versions[v], arg))
+ data.push(showFields(pckmnt, versions[v], arg))
})
}
})
- let retval = results.reduce(reducer, {})
-
- if (args.length === 1 && args[0] === '') {
- retval = cleanBlanks(retval)
- log.silly('view', retval)
- }
if (
!this.npm.config.get('json') &&
args.length === 1 &&
args[0] === ''
- ) {
- // general view
+ )
pckmnt.version = version
- await Promise.all(
- results.map((v) => this.prettyView(pckmnt, v[Object.keys(v)[0]]['']))
- )
- return retval
- } else {
- // view by field name
- await this.printData(retval, pckmnt._id)
- return retval
- }
+
+ return [pckmnt, data]
}
- async printData (data, name) {
+ async jsonData (data, name) {
const versions = Object.keys(data)
let msg = ''
let msgJson = []
@@ -233,16 +300,10 @@ class View extends BaseCommand {
msg = JSON.stringify(msgJson, null, 2) + '\n'
}
- // disable the progress bar entirely, as we can't meaningfully update it if
- // we may have partial lines printed.
- log.disableProgress()
-
- // only log if there is something to log
- if (msg !== '')
- console.log(msg.trim())
+ return msg.trim()
}
- async prettyView (packument, manifest) {
+ prettyView (packument, manifest) {
// More modern, pretty printing of default view
const unicode = this.npm.config.get('unicode')
const tags = []
@@ -375,17 +436,18 @@ function cleanBlanks (obj) {
return clean
}
-function reducer (l, r) {
- if (r) {
- Object.keys(r).forEach((v) => {
- l[v] = l[v] || {}
- Object.keys(r[v]).forEach((t) => {
- l[v][t] = r[v][t]
+// takes an array of objects and merges them into one object
+function reducer (acc, cur) {
+ if (cur) {
+ Object.keys(cur).forEach((v) => {
+ acc[v] = acc[v] || {}
+ Object.keys(cur[v]).forEach((t) => {
+ acc[v][t] = cur[v][t]
})
})
}
- return l
+ return acc
}
// return whatever was printed
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index 08a028b0496..f1deed4c428 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" "March 2021" "" ""
+.TH "NPM\-ACCESS" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-access\fR \- Set access level on published packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index 0701a16aeb5..9daa39292d4 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" "March 2021" "" ""
+.TH "NPM\-ADDUSER" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-adduser\fR \- Add a registry user account
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-audit.1 b/deps/npm/man/man1/npm-audit.1
index f3c974a08b8..ebbb019ec8a 100644
--- a/deps/npm/man/man1/npm-audit.1
+++ b/deps/npm/man/man1/npm-audit.1
@@ -1,4 +1,4 @@
-.TH "NPM\-AUDIT" "1" "March 2021" "" ""
+.TH "NPM\-AUDIT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-audit\fR \- Run a security audit
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
index d8dfc0542c3..d7ddf05cb75 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" "March 2021" "" ""
+.TH "NPM\-BIN" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-bin\fR \- Display npm bin folder
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index af46a438cc2..40a4cadbb39 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" "March 2021" "" ""
+.TH "NPM\-BUGS" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-bugs\fR \- Report bugs for a package in a web browser
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index 852c24a13d1..08913baa632 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" "March 2021" "" ""
+.TH "NPM\-CACHE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-cache\fR \- Manipulates packages cache
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-ci.1 b/deps/npm/man/man1/npm-ci.1
index 6c2604bb825..67f7245d01b 100644
--- a/deps/npm/man/man1/npm-ci.1
+++ b/deps/npm/man/man1/npm-ci.1
@@ -1,4 +1,4 @@
-.TH "NPM\-CI" "1" "March 2021" "" ""
+.TH "NPM\-CI" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-ci\fR \- Install a project with a clean slate
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 5be583ea681..cb3e2d99435 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" "March 2021" "" ""
+.TH "NPM\-COMPLETION" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-completion\fR \- Tab Completion for npm
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index f47947aff1d..c19d0411cb7 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" "March 2021" "" ""
+.TH "NPM\-CONFIG" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-config\fR \- Manage the npm configuration files
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index 915b7b110cf..fd6cce4bc1b 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DEDUPE" "1" "March 2021" "" ""
+.TH "NPM\-DEDUPE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-dedupe\fR \- Reduce duplication in the package tree
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index 3d8876662f1..33922d2e834 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" "March 2021" "" ""
+.TH "NPM\-DEPRECATE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-deprecate\fR \- Deprecate a version of a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-diff.1 b/deps/npm/man/man1/npm-diff.1
index 4d51928f23d..97092215bd8 100644
--- a/deps/npm/man/man1/npm-diff.1
+++ b/deps/npm/man/man1/npm-diff.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DIFF" "1" "March 2021" "" ""
+.TH "NPM\-DIFF" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-diff\fR \- The registry diff command
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1
index 6542bd78936..707f1ddbc23 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" "March 2021" "" ""
+.TH "NPM\-DIST\-TAG" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-dist-tag\fR \- Modify package distribution tags
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index 6fc922d83ca..5da2b661a54 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" "March 2021" "" ""
+.TH "NPM\-DOCS" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-docs\fR \- Open documentation for a package in a web browser
.SS Synopsis
@@ -43,6 +43,16 @@ Type: url
.RE
.P
The base URL of the npm package registry\.
+.SS workspaces
+.P
+Enables workspaces context while searching the \fBpackage\.json\fP in the
+current folder\. Documentation urls for the packages named in each
+workspace will be opened\.
+.SS workspace
+.P
+Enables workspaces context and limits results to only those specified by
+this config item\. Only the documentation urls for the packages named in
+the workspaces given here will be opened\.
.SS See Also
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-doctor.1 b/deps/npm/man/man1/npm-doctor.1
index c317f03fae1..c3b11a90259 100644
--- a/deps/npm/man/man1/npm-doctor.1
+++ b/deps/npm/man/man1/npm-doctor.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DOCTOR" "1" "March 2021" "" ""
+.TH "NPM\-DOCTOR" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-doctor\fR \- Check your npm environment
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index d0461afc8f1..445439d1554 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" "March 2021" "" ""
+.TH "NPM\-EDIT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-edit\fR \- Edit an installed package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-exec.1 b/deps/npm/man/man1/npm-exec.1
index a9d9708c700..3711534c58e 100644
--- a/deps/npm/man/man1/npm-exec.1
+++ b/deps/npm/man/man1/npm-exec.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EXEC" "1" "March 2021" "" ""
+.TH "NPM\-EXEC" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-exec\fR \- Run a command from a local or remote npm package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-explain.1 b/deps/npm/man/man1/npm-explain.1
index cdcf751e801..efc53147882 100644
--- a/deps/npm/man/man1/npm-explain.1
+++ b/deps/npm/man/man1/npm-explain.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EXPLAIN" "1" "March 2021" "" ""
+.TH "NPM\-EXPLAIN" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-explain\fR \- Explain installed packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index 3a0711e00c5..7863f3a0711 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" "March 2021" "" ""
+.TH "NPM\-EXPLORE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-explore\fR \- Browse an installed package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-find-dupes.1 b/deps/npm/man/man1/npm-find-dupes.1
index 6ecb4b90d58..03ff67e95b5 100644
--- a/deps/npm/man/man1/npm-find-dupes.1
+++ b/deps/npm/man/man1/npm-find-dupes.1
@@ -1,4 +1,4 @@
-.TH "NPM\-FIND\-DUPES" "1" "March 2021" "" ""
+.TH "NPM\-FIND\-DUPES" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-find-dupes\fR \- Find duplication in the package tree
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-fund.1 b/deps/npm/man/man1/npm-fund.1
index 6e7e1cf22d9..dc67600e6ac 100644
--- a/deps/npm/man/man1/npm-fund.1
+++ b/deps/npm/man/man1/npm-fund.1
@@ -1,4 +1,4 @@
-.TH "NPM\-FUND" "1" "March 2021" "" ""
+.TH "NPM\-FUND" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-fund\fR \- Retrieve funding information
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index 1a33f080d6f..a7bc089b196 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" "March 2021" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-help-search\fR \- Search npm help documentation
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index f6ca3a84a2a..8e328293000 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" "March 2021" "" ""
+.TH "NPM\-HELP" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-help\fR \- Get help on npm
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-hook.1 b/deps/npm/man/man1/npm-hook.1
index f4f2b397621..06cb0959fcc 100644
--- a/deps/npm/man/man1/npm-hook.1
+++ b/deps/npm/man/man1/npm-hook.1
@@ -1,4 +1,4 @@
-.TH "NPM\-HOOK" "1" "March 2021" "" ""
+.TH "NPM\-HOOK" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-hook\fR \- Manage registry hooks
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index b67899ce80f..b3be3f35e6f 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" "March 2021" "" ""
+.TH "NPM\-INIT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-init\fR \- Create a package\.json file
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-install-ci-test.1 b/deps/npm/man/man1/npm-install-ci-test.1
index e519b78814e..22eb734e21e 100644
--- a/deps/npm/man/man1/npm-install-ci-test.1
+++ b/deps/npm/man/man1/npm-install-ci-test.1
@@ -1,4 +1,4 @@
-.TH "NPM\-INSTALL\-CI\-TEST" "1" "March 2021" "" ""
+.TH "NPM\-INSTALL\-CI\-TEST" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-install-ci-test\fR \- Install a project with a clean slate and run tests
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-install-test.1 b/deps/npm/man/man1/npm-install-test.1
index a91f3513a51..521d0bc5ebf 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\-INSTALL\-TEST" "1" "March 2021" "" ""
+.TH "NPM\-INSTALL\-TEST" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-install-test\fR \- Install package(s) and run tests
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index c7eeff33435..5ac2700d829 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" "March 2021" "" ""
+.TH "NPM\-INSTALL" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-install\fR \- Install a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 7566ce16e42..94afe9c3fdf 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" "March 2021" "" ""
+.TH "NPM\-LINK" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-link\fR \- Symlink a package folder
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-logout.1 b/deps/npm/man/man1/npm-logout.1
index a917137bcbf..0f94b466398 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" "March 2021" "" ""
+.TH "NPM\-LOGOUT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-logout\fR \- Log out of the registry
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 61b45baff32..8d5910f0dc2 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" "March 2021" "" ""
+.TH "NPM\-LS" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-ls\fR \- List installed packages
.SS Synopsis
@@ -26,7 +26,7 @@ example, running \fBnpm ls promzard\fP in npm's source tree will show:
.P
.RS 2
.nf
-npm@7\.7\.6 /path/to/npm
+npm@7\.8\.0 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.fi
diff --git a/deps/npm/man/man1/npm-org.1 b/deps/npm/man/man1/npm-org.1
index cb653555722..7d85be8760a 100644
--- a/deps/npm/man/man1/npm-org.1
+++ b/deps/npm/man/man1/npm-org.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ORG" "1" "March 2021" "" ""
+.TH "NPM\-ORG" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-org\fR \- Manage orgs
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index 27f6aee1077..d90143428f2 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" "March 2021" "" ""
+.TH "NPM\-OUTDATED" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-outdated\fR \- Check for outdated packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index cbd61fd9259..3731b383d76 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" "March 2021" "" ""
+.TH "NPM\-OWNER" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-owner\fR \- Manage package owners
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index d9445271a47..ea2225d6065 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" "March 2021" "" ""
+.TH "NPM\-PACK" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-pack\fR \- Create a tarball from a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-ping.1 b/deps/npm/man/man1/npm-ping.1
index fa9a2f1ff5a..9eb5ec12842 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" "March 2021" "" ""
+.TH "NPM\-PING" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-ping\fR \- Ping npm registry
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index c0685305caf..c4b8a36e954 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" "March 2021" "" ""
+.TH "NPM\-PREFIX" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-prefix\fR \- Display prefix
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-profile.1 b/deps/npm/man/man1/npm-profile.1
index f17ad465630..7b2ff13efae 100644
--- a/deps/npm/man/man1/npm-profile.1
+++ b/deps/npm/man/man1/npm-profile.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PROFILE" "1" "March 2021" "" ""
+.TH "NPM\-PROFILE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-profile\fR \- Change settings on your registry profile
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index 337546353f8..df8b82eb7b5 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" "March 2021" "" ""
+.TH "NPM\-PRUNE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-prune\fR \- Remove extraneous packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
index 5464ea9669d..ac7a0323a72 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" "March 2021" "" ""
+.TH "NPM\-PUBLISH" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-publish\fR \- Publish a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index 0977b106641..995c8ab5ea1 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" "March 2021" "" ""
+.TH "NPM\-REBUILD" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-rebuild\fR \- Rebuild a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index 33728402460..30b05534836 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" "March 2021" "" ""
+.TH "NPM\-REPO" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-repo\fR \- Open package repository page in the browser
.SS Synopsis
@@ -30,6 +30,16 @@ Set to \fBfalse\fP to suppress browser behavior and instead print urls to
terminal\.
.P
Set to \fBtrue\fP to use default system URL opener\.
+.SS workspaces
+.P
+Enables workspaces context while searching the \fBpackage\.json\fP in the
+current folder\. Repo urls for the packages named in each workspace will
+be opened\.
+.SS workspace
+.P
+Enables workspaces context and limits results to only those specified by
+this config item\. Only the repo urls for the packages named in the
+workspaces given here will be opened\.
.SS See Also
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index dfa0a2f71ee..bd212fb466a 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" "March 2021" "" ""
+.TH "NPM\-RESTART" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-restart\fR \- Restart a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index ccb2cac0633..ddff01d429e 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" "March 2021" "" ""
+.TH "NPM\-ROOT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-root\fR \- Display npm root
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index b399e5d9d13..b108b5491fe 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" "March 2021" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-run-script\fR \- Run arbitrary package scripts
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 8253e86dca6..068499dc99c 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" "March 2021" "" ""
+.TH "NPM\-SEARCH" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-search\fR \- Search for packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-set-script.1 b/deps/npm/man/man1/npm-set-script.1
index 72c5ea33707..f348099fb48 100644
--- a/deps/npm/man/man1/npm-set-script.1
+++ b/deps/npm/man/man1/npm-set-script.1
@@ -1,9 +1,9 @@
-.TH "NPM\-SET\-SCRIPT" "1" "March 2021" "" ""
+.TH "NPM\-SET\-SCRIPT" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-set-script\fR \- Set tasks in the scripts section of package\.json
.SS Synopsis
.P
-An npm command that lets you create a task in the scripts section of the package\.json\.
+An npm command that lets you create a task in the \fBscripts\fP section of the \fBpackage\.json\fP\|\.
.P
.RS 2
.nf
@@ -29,6 +29,15 @@ npm set\-script [<script>] [<command>]
}
.fi
.RE
+.SS Configuration
+.SS workspaces
+.P
+Enables workspaces context\. Tasks will be created in the \fBscripts\fP section
+of the \fBpackage\.json\fP of each workspace\.
+.SS workspace
+.P
+Enables workspaces context and limits creating a task to the
+\fBpackage\.json\fP files of the workspaces given\.
.SS See Also
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 7800d2f53e4..d349510e5a9 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" "March 2021" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-shrinkwrap\fR \- Lock down dependency versions for publication
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index 5bd9d6a2501..e95168e243f 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" "March 2021" "" ""
+.TH "NPM\-STAR" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-star\fR \- Mark your favorite packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index 8e5f7b3b78a..fa16060953c 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" "March 2021" "" ""
+.TH "NPM\-STARS" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-stars\fR \- View packages marked as favorites
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index 41e565a0367..42d8b6cc96f 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" "March 2021" "" ""
+.TH "NPM\-START" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-start\fR \- Start a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index c25fbb4140f..55be734ed48 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" "March 2021" "" ""
+.TH "NPM\-STOP" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-stop\fR \- Stop a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-team.1 b/deps/npm/man/man1/npm-team.1
index 82f5ab3be78..94aa9d89cca 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" "March 2021" "" ""
+.TH "NPM\-TEAM" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-team\fR \- Manage organization teams and team memberships
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index 899b9459fd9..cedbe681982 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" "March 2021" "" ""
+.TH "NPM\-TEST" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-test\fR \- Test a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-token.1 b/deps/npm/man/man1/npm-token.1
index f98f37e6eb0..5adf0cda6d8 100644
--- a/deps/npm/man/man1/npm-token.1
+++ b/deps/npm/man/man1/npm-token.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TOKEN" "1" "March 2021" "" ""
+.TH "NPM\-TOKEN" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-token\fR \- Manage your authentication tokens
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index ba404bf01e1..0de9f431be3 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UNINSTALL" "1" "March 2021" "" ""
+.TH "NPM\-UNINSTALL" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-uninstall\fR \- Remove a package
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index 4a9a3bc8cb6..9645ab106d0 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" "March 2021" "" ""
+.TH "NPM\-UNPUBLISH" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-unpublish\fR \- Remove a package from the registry
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-unstar.1 b/deps/npm/man/man1/npm-unstar.1
index b3b7c698b3f..86c152eb6d2 100644
--- a/deps/npm/man/man1/npm-unstar.1
+++ b/deps/npm/man/man1/npm-unstar.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UNSTAR" "1" "March 2021" "" ""
+.TH "NPM\-UNSTAR" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-unstar\fR \- Remove an item from your favorite packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index 55db8abb0e8..adaebe92db3 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" "March 2021" "" ""
+.TH "NPM\-UPDATE" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-update\fR \- Update packages
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index bb38997ad32..2bfb2556863 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,4 +1,4 @@
-.TH "NPM\-VERSION" "1" "March 2021" "" ""
+.TH "NPM\-VERSION" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-version\fR \- Bump a package version
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 37de1dd9f0f..5ecf7985139 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" "March 2021" "" ""
+.TH "NPM\-VIEW" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-view\fR \- View registry info
.SS Synopsis
@@ -12,8 +12,7 @@ aliases: info, show, v
.RE
.SS Description
.P
-This command shows data about a package and prints it to the stream
-referenced by the \fBoutfd\fP config, which defaults to stdout\.
+This command shows data about a package and prints it to stdout\.
.P
As an example, to view information about the \fBconnect\fP package from the registry, you would run:
.P
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index 3df11cb69d6..c38b46dff07 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" "March 2021" "" ""
+.TH "NPM\-WHOAMI" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm-whoami\fR \- Display npm username
.SS Synopsis
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index db27e4087d1..2a373de484a 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "March 2021" "" ""
+.TH "NPM" "1" "April 2021" "" ""
.SH "NAME"
\fBnpm\fR \- javascript package manager
.SS Synopsis
@@ -10,7 +10,7 @@ npm <command> [args]
.RE
.SS Version
.P
-7\.7\.6
+7\.8\.0
.SS Description
.P
npm is the package manager for the Node JavaScript platform\. It puts
diff --git a/deps/npm/man/man1/npx.1 b/deps/npm/man/man1/npx.1
index f4c9a317b93..87c018f4121 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "March 2021" "" ""
+.TH "NPX" "1" "April 2021" "" ""
.SH "NAME"
\fBnpx\fR \- Run a command from a local or remote npm package
.SS Synopsis
diff --git a/deps/npm/man/man5/folders.5 b/deps/npm/man/man5/folders.5
index 698c975880f..cacb710a03b 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "March 2021" "" ""
+.TH "FOLDERS" "5" "April 2021" "" ""
.SH "NAME"
\fBfolders\fR \- Folder Structures Used by npm
.SS Description
diff --git a/deps/npm/man/man5/install.5 b/deps/npm/man/man5/install.5
index 45e686155c6..445353eb856 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "March 2021" "" ""
+.TH "INSTALL" "5" "April 2021" "" ""
.SH "NAME"
\fBinstall\fR \- Download and install node and npm
.SS Description
diff --git a/deps/npm/man/man5/npm-shrinkwrap-json.5 b/deps/npm/man/man5/npm-shrinkwrap-json.5
index cfcae39330a..27076ba3361 100644
--- a/deps/npm/man/man5/npm-shrinkwrap-json.5
+++ b/deps/npm/man/man5/npm-shrinkwrap-json.5
@@ -1,4 +1,4 @@
-.TH "NPM\-SHRINKWRAP\.JSON" "5" "March 2021" "" ""
+.TH "NPM\-SHRINKWRAP\.JSON" "5" "April 2021" "" ""
.SH "NAME"
\fBnpm-shrinkwrap.json\fR \- A publishable lockfile
.SS Description
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
index 226ff9a42a0..f880a269513 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "March 2021" "" ""
+.TH "NPMRC" "5" "April 2021" "" ""
.SH "NAME"
\fBnpmrc\fR \- The npm config files
.SS Description
diff --git a/deps/npm/man/man5/package-json.5 b/deps/npm/man/man5/package-json.5
index 859c3de2d51..9943296b25c 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" "March 2021" "" ""
+.TH "PACKAGE\.JSON" "5" "April 2021" "" ""
.SH "NAME"
\fBpackage.json\fR \- Specifics of npm's package\.json handling
.SS Description
diff --git a/deps/npm/man/man5/package-lock-json.5 b/deps/npm/man/man5/package-lock-json.5
index 3424e66ee13..765dd849994 100644
--- a/deps/npm/man/man5/package-lock-json.5
+++ b/deps/npm/man/man5/package-lock-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE\-LOCK\.JSON" "5" "March 2021" "" ""
+.TH "PACKAGE\-LOCK\.JSON" "5" "April 2021" "" ""
.SH "NAME"
\fBpackage-lock.json\fR \- A manifestation of the manifest
.SS Description
diff --git a/deps/npm/man/man7/config.7 b/deps/npm/man/man7/config.7
index d232871c0c5..211651fed64 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,4 +1,4 @@
-.TH "CONFIG" "7" "March 2021" "" ""
+.TH "CONFIG" "7" "April 2021" "" ""
.SH "NAME"
\fBconfig\fR \- More than you probably want to know about npm configuration
.SS Description
@@ -245,7 +245,7 @@ npm help \fBaudit\fP for details on what is submitted\.
.IP \(bu 2
Default: null
.IP \(bu 2
-Type: "info", "low", "moderate", "high", "critical", "none", or null
+Type: null, "info", "low", "moderate", "high", "critical", or "none"
.RE
.P
@@ -1776,6 +1776,8 @@ this configuration option\.
Valid values for the \fBworkspace\fP config are either: \- Workspace names \- Path
to a workspace directory \- Path to a parent workspace directory (will result
to selecting all of the nested workspaces)
+.P
+This value is not exported to the environment for child processes\.
.SS \fBworkspaces\fP
.RS 0
.IP \(bu 2
@@ -1787,6 +1789,8 @@ Type: Boolean
.P
Enable running a command in the context of \fBall\fR the configured
workspaces\.
+.P
+This value is not exported to the environment for child processes\.
.SS \fByes\fP
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man7/developers.7 b/deps/npm/man/man7/developers.7
index 20a069f219c..00dc1b14e24 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "March 2021" "" ""
+.TH "DEVELOPERS" "7" "April 2021" "" ""
.SH "NAME"
\fBdevelopers\fR \- Developer Guide
.SS Description
diff --git a/deps/npm/man/man7/orgs.7 b/deps/npm/man/man7/orgs.7
index 9765fa675d5..7f29cf2c239 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "March 2021" "" ""
+.TH "ORGS" "7" "April 2021" "" ""
.SH "NAME"
\fBorgs\fR \- Working with Teams & Orgs
.SS Description
diff --git a/deps/npm/man/man7/registry.7 b/deps/npm/man/man7/registry.7
index b4c6c0cc2dd..2ff87e4a4c4 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "March 2021" "" ""
+.TH "REGISTRY" "7" "April 2021" "" ""
.SH "NAME"
\fBregistry\fR \- The JavaScript Package Registry
.SS Description
diff --git a/deps/npm/man/man7/removal.7 b/deps/npm/man/man7/removal.7
index cf3a0e6507f..e3508f6696d 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "March 2021" "" ""
+.TH "REMOVAL" "7" "April 2021" "" ""
.SH "NAME"
\fBremoval\fR \- Cleaning the Slate
.SS Synopsis
diff --git a/deps/npm/man/man7/scope.7 b/deps/npm/man/man7/scope.7
index 40f5d289f98..2a0fa9e1c8e 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "March 2021" "" ""
+.TH "SCOPE" "7" "April 2021" "" ""
.SH "NAME"
\fBscope\fR \- Scoped packages
.SS Description
diff --git a/deps/npm/man/man7/scripts.7 b/deps/npm/man/man7/scripts.7
index 78d9ad4b9a8..2dc2486de7d 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "March 2021" "" ""
+.TH "SCRIPTS" "7" "April 2021" "" ""
.SH "NAME"
\fBscripts\fR \- How npm handles the "scripts" field
.SS Description
diff --git a/deps/npm/man/man7/workspaces.7 b/deps/npm/man/man7/workspaces.7
index f8c5a0c4d44..5b28ac54c5d 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,4 +1,4 @@
-.TH "WORKSPACES" "7" "March 2021" "" ""
+.TH "WORKSPACES" "7" "April 2021" "" ""
.SH "NAME"
\fBworkspaces\fR \- Working with workspaces
.SS Description
diff --git a/deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js b/deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js
index bf8e08ec22a..a1b6719627f 100644
--- a/deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js
+++ b/deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js
@@ -33,7 +33,13 @@ for (const arg of process.argv.slice(2)) {
options.omit.push(arg.substr('--omit='.length))
} else if (/^--before=/.test(arg))
options.before = new Date(arg.substr('--before='.length))
- else if (/^--[^=]+=/.test(arg)) {
+ else if (/^-w.+/.test(arg)) {
+ options.workspaces = options.workspaces || []
+ options.workspaces.push(arg.replace(/^-w/, ''))
+ } else if (/^--workspace=/.test(arg)) {
+ options.workspaces = options.workspaces || []
+ options.workspaces.push(arg.replace(/^--workspace=/, ''))
+ } else if (/^--[^=]+=/.test(arg)) {
const [key, ...v] = arg.replace(/^--/, '').split('=')
const val = v.join('=')
options[key] = val === 'false' ? false : val === 'true' ? true : val
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
index f7e5b7e322d..f836fc04d88 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
@@ -44,12 +44,14 @@ const _currentDep = Symbol('currentDep')
const _updateAll = Symbol('updateAll')
const _mutateTree = Symbol('mutateTree')
const _flagsSuspect = Symbol.for('flagsSuspect')
+const _workspaces = Symbol.for('workspaces')
const _prune = Symbol('prune')
const _preferDedupe = Symbol('preferDedupe')
const _legacyBundling = Symbol('legacyBundling')
const _parseSettings = Symbol('parseSettings')
const _initTree = Symbol('initTree')
const _applyUserRequests = Symbol('applyUserRequests')
+const _applyUserRequestsToNode = Symbol('applyUserRequestsToNode')
const _inflateAncientLockfile = Symbol('inflateAncientLockfile')
const _buildDeps = Symbol('buildDeps')
const _buildDepStep = Symbol('buildDepStep')
@@ -109,7 +111,7 @@ const _peerSetSource = Symbol.for('peerSetSource')
// used by Reify mixin
const _force = Symbol.for('force')
-const _explicitRequests = Symbol.for('explicitRequests')
+const _explicitRequests = Symbol('explicitRequests')
const _global = Symbol.for('global')
const _idealTreePrune = Symbol.for('idealTreePrune')
@@ -130,8 +132,10 @@ module.exports = cls => class IdealTreeBuilder extends cls {
force = false,
packageLock = true,
strictPeerDeps = false,
+ workspaces = [],
} = options
+ this[_workspaces] = workspaces || []
this[_force] = !!force
this[_strictPeerDeps] = !!strictPeerDeps
@@ -143,6 +147,9 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_globalStyle] = this[_global] || globalStyle
this[_follow] = !!follow
+ if (this[_workspaces].length && this[_global])
+ throw new Error('Cannot operate on workspaces in global mode')
+
this[_explicitRequests] = new Set()
this[_preferDedupe] = false
this[_legacyBundling] = false
@@ -157,6 +164,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_manifests] = new Map()
this[_peerConflict] = null
this[_edgesOverridden] = new Set()
+ this[_resolvedAdd] = []
// a map of each module in a peer set to the thing that depended on
// that set of peers in the first place. Use a WeakMap so that we
@@ -204,8 +212,8 @@ module.exports = cls => class IdealTreeBuilder extends cls {
try {
await this[_initTree]()
- await this[_applyUserRequests](options)
await this[_inflateAncientLockfile]()
+ await this[_applyUserRequests](options)
await this[_buildDeps]()
await this[_fixDepFlags]()
await this[_pruneFailedOptional]()
@@ -266,6 +274,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_preferDedupe] = !!options.preferDedupe
this[_legacyBundling] = !!options.legacyBundling
this[_updateNames] = update.names
+
this[_updateAll] = update.all
// we prune by default unless explicitly set to boolean false
this[_prune] = options.prune !== false
@@ -387,6 +396,42 @@ module.exports = cls => class IdealTreeBuilder extends cls {
async [_applyUserRequests] (options) {
process.emit('time', 'idealTree:userRequests')
const tree = this.idealTree.target || this.idealTree
+
+ if (!this[_workspaces].length) {
+ return this[_applyUserRequestsToNode](tree, options).then(() =>
+ process.emit('timeEnd', 'idealTree:userRequests'))
+ }
+
+ const wsMap = tree.workspaces
+ if (!wsMap) {
+ this.log.warn('idealTree', 'Workspace filter set, but no workspaces present')
+ return
+ }
+
+ const promises = []
+ for (const name of this[_workspaces]) {
+ const path = wsMap.get(name)
+ if (!path) {
+ this.log.warn('idealTree', `Workspace ${name} in filter set, but not in workspaces`)
+ continue
+ }
+ const loc = relpath(tree.realpath, path)
+ const node = tree.inventory.get(loc)
+
+ /* istanbul ignore if - should be impossible */
+ if (!node) {
+ this.log.warn('idealTree', `Workspace ${name} in filter set, but no workspace folder present`)
+ continue
+ }
+
+ promises.push(this[_applyUserRequestsToNode](node, options))
+ }
+
+ return Promise.all(promises).then(() =>
+ process.emit('timeEnd', 'idealTree:userRequests'))
+ }
+
+ async [_applyUserRequestsToNode] (tree, options) {
// If we have a list of package names to update, and we know it's
// going to update them wherever they are, add any paths into those
// named nodes to the buildIdealTree queue.
@@ -395,38 +440,49 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// global updates only update the globalTop nodes, but we need to know
// that they're there, and not reinstall the world unnecessarily.
+ const globalExplicitUpdateNames = []
if (this[_global] && (this[_updateAll] || this[_updateNames].length)) {
const nm = resolve(this.path, 'node_modules')
for (const name of await readdir(nm).catch(() => [])) {
- if (this[_updateNames].includes(name))
- this[_explicitRequests].add(name)
tree.package.dependencies = tree.package.dependencies || {}
- if (this[_updateAll] || this[_updateNames].includes(name))
+ const updateName = this[_updateNames].includes(name)
+ if (this[_updateAll] || updateName) {
+ if (updateName)
+ globalExplicitUpdateNames.push(name)
tree.package.dependencies[name] = '*'
+ }
}
}
if (this.auditReport && this.auditReport.size > 0)
this[_queueVulnDependents](options)
- if (options.rm && options.rm.length) {
- addRmPkgDeps.rm(tree.package, options.rm)
- for (const name of options.rm)
- this[_explicitRequests].add(name)
+ const { add, rm } = options
+
+ if (rm && rm.length) {
+ addRmPkgDeps.rm(tree.package, rm)
+ for (const name of rm)
+ this[_explicitRequests].add({ from: tree, name, action: 'DELETE' })
}
- if (options.add)
- await this[_add](options)
+ if (add && add.length)
+ await this[_add](tree, options)
- // triggers a refresh of all edgesOut
- if (options.add && options.add.length || options.rm && options.rm.length || this[_global])
+ // triggers a refresh of all edgesOut. this has to be done BEFORE
+ // adding the edges to explicitRequests, because the package setter
+ // resets all edgesOut.
+ if (add && add.length || rm && rm.length || this[_global])
tree.package = tree.package
- process.emit('timeEnd', 'idealTree:userRequests')
+
+ for (const spec of this[_resolvedAdd])
+ this[_explicitRequests].add(tree.edgesOut.get(spec.name))
+ for (const name of globalExplicitUpdateNames)
+ this[_explicitRequests].add(tree.edgesOut.get(name))
}
// This returns a promise because we might not have the name yet,
// and need to call pacote.manifest to find the name.
- [_add] ({add, saveType = null, saveBundle = false}) {
+ [_add] (tree, {add, saveType = null, saveBundle = false}) {
// get the name for each of the specs in the list.
// ie, doing `foo@bar` we just return foo
// but if it's a url or git, we don't know the name until we
@@ -438,10 +494,9 @@ module.exports = cls => class IdealTreeBuilder extends cls {
.then(add => this[_updateFilePath](add))
.then(add => this[_followSymlinkPath](add))
})).then(add => {
- this[_resolvedAdd] = add
+ this[_resolvedAdd].push(...add)
// now add is a list of spec objects with names.
// find a home for each of them!
- const tree = this.idealTree.target || this.idealTree
addRmPkgDeps.add({
pkg: tree.package,
add,
@@ -449,8 +504,6 @@ module.exports = cls => class IdealTreeBuilder extends cls {
saveType,
path: this.path,
})
- for (const spec of add)
- this[_explicitRequests].add(spec.name)
})
}
@@ -991,7 +1044,7 @@ This is a one-time fix-up, please be patient...
// if it's peerOptional and not explicitly requested.
if (!edge.to) {
return edge.type !== 'peerOptional' ||
- this[_explicitRequests].has(edge.name)
+ this[_explicitRequests].has(edge)
}
// If the edge has an error, there's a problem.
@@ -1007,7 +1060,7 @@ This is a one-time fix-up, please be patient...
return true
// If the user has explicitly asked to install this package, it's a problem.
- if (node.isProjectRoot && this[_explicitRequests].has(edge.name))
+ if (node.isProjectRoot && this[_explicitRequests].has(edge))
return true
// No problems!
@@ -1131,7 +1184,7 @@ This is a one-time fix-up, please be patient...
continue
// problem
- this[_failPeerConflict](edge)
+ this[_failPeerConflict](edge, parentEdge)
}
}
@@ -1147,17 +1200,17 @@ This is a one-time fix-up, please be patient...
continue
// ok, it's the root, or we're in unforced strict mode, so this is bad
- this[_failPeerConflict](edge)
+ this[_failPeerConflict](edge, parentEdge)
}
return node
}
- [_failPeerConflict] (edge) {
- const expl = this[_explainPeerConflict](edge)
+ [_failPeerConflict] (edge, currentEdge) {
+ const expl = this[_explainPeerConflict](edge, currentEdge)
throw Object.assign(new Error('unable to resolve dependency tree'), expl)
}
- [_explainPeerConflict] (edge) {
+ [_explainPeerConflict] (edge, currentEdge) {
const node = edge.from
const curNode = node.resolve(edge.name)
const pc = this[_peerConflict] || { peer: null, current: null }
@@ -1166,6 +1219,10 @@ This is a one-time fix-up, please be patient...
return {
code: 'ERESOLVE',
current,
+ // it SHOULD be impossible to get here without a current node in place,
+ // but this at least gives us something report on when bugs creep into
+ // the tree handling logic.
+ currentEdge: currentEdge ? currentEdge.explain() : null,
edge: edge.explain(),
peerConflict,
strictPeerDeps: this[_strictPeerDeps],
@@ -1190,7 +1247,7 @@ This is a one-time fix-up, please be patient...
[_placeDep] (dep, node, edge, peerEntryEdge = null, peerPath = []) {
if (edge.to &&
!edge.error &&
- !this[_explicitRequests].has(edge.name) &&
+ !this[_explicitRequests].has(edge) &&
!this[_updateNames].includes(edge.name) &&
!this[_isVulnerable](edge.to))
return []
@@ -1480,9 +1537,15 @@ This is a one-time fix-up, please be patient...
if (target.children.has(edge.name)) {
const current = target.children.get(edge.name)
- // same thing = keep
- if (dep.matches(current))
- return KEEP
+ // same thing = keep, UNLESS the current doesn't satisfy and new
+ // one does satisfy. This can happen if it's a link to a matching target
+ // at a different location, which satisfies a version dep, but not a
+ // file: dep. If neither of them satisfy, then we can replace it,
+ // because presumably it's better for a peer or something.
+ if (dep.matches(current)) {
+ if (current.satisfies(edge) || !dep.satisfies(edge))
+ return KEEP
+ }
const { version: curVer } = current
const { version: newVer } = dep
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
index 49e76e265b8..d9e7fb46d6d 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
@@ -32,6 +32,7 @@ const _loadActual = Symbol('loadActual')
const _loadActualVirtually = Symbol('loadActualVirtually')
const _loadActualActually = Symbol('loadActualActually')
const _loadWorkspaces = Symbol.for('loadWorkspaces')
+const _loadWorkspaceTargets = Symbol('loadWorkspaceTargets')
const _actualTreePromise = Symbol('actualTreePromise')
const _actualTree = Symbol('actualTree')
const _transplant = Symbol('transplant')
@@ -150,18 +151,22 @@ module.exports = cls => class ActualLoader extends cls {
await new this.constructor({...this.options}).loadVirtual({
root: this[_actualTree],
})
+ await this[_loadWorkspaces](this[_actualTree])
+ if (this[_actualTree].workspaces && this[_actualTree].workspaces.size)
+ calcDepFlags(this[_actualTree], !root)
this[_transplant](root)
return this[_actualTree]
}
async [_loadActualActually] ({ root, ignoreMissing, global }) {
await this[_loadFSTree](this[_actualTree])
+ await this[_loadWorkspaces](this[_actualTree])
+ await this[_loadWorkspaceTargets](this[_actualTree])
if (!ignoreMissing)
await this[_findMissingEdges]()
this[_findFSParents]()
this[_transplant](root)
- await this[_loadWorkspaces](this[_actualTree])
if (global) {
// need to depend on the children, or else all of them
// will end up being flagged as extraneous, since the
@@ -178,16 +183,37 @@ module.exports = cls => class ActualLoader extends cls {
return this[_actualTree]
}
+ // if there are workspace targets without Link nodes created, load
+ // the targets, so that we know what they are.
+ async [_loadWorkspaceTargets] (tree) {
+ if (!tree.workspaces || !tree.workspaces.size)
+ return
+
+ const promises = []
+ for (const path of tree.workspaces.values()) {
+ if (!this[_cache].has(path)) {
+ const p = this[_loadFSNode]({ path, root: this[_actualTree] })
+ .then(node => this[_loadFSTree](node))
+ promises.push(p)
+ }
+ }
+ await Promise.all(promises)
+ }
+
[_transplant] (root) {
if (!root || root === this[_actualTree])
return
+
this[_actualTree][_changePath](root.path)
for (const node of this[_actualTree].children.values()) {
if (!this[_transplantFilter](node))
- node.parent = null
+ node.root = null
}
root.replace(this[_actualTree])
+ for (const node of this[_actualTree].fsChildren)
+ node.root = this[_transplantFilter](node) ? root : null
+
this[_actualTree] = root
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
index 0008045528d..aaaa3d61c86 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
@@ -14,6 +14,7 @@ const fs = require('fs')
const {promisify} = require('util')
const symlink = promisify(fs.symlink)
const mkdirp = require('mkdirp-infer-owner')
+const justMkdirp = require('mkdirp')
const moveFile = require('@npmcli/move-file')
const rimraf = promisify(require('rimraf'))
const packageContents = require('@npmcli/installed-package-contents')
@@ -26,6 +27,7 @@ const retirePath = require('../retire-path.js')
const promiseAllRejectLate = require('promise-all-reject-late')
const optionalSet = require('../optional-set.js')
const updateRootPackageJson = require('../update-root-package-json.js')
+const calcDepFlags = require('../calc-dep-flags.js')
const _retiredPaths = Symbol('retiredPaths')
const _retiredUnchanged = Symbol('retiredUnchanged')
@@ -36,6 +38,8 @@ const _retireShallowNodes = Symbol.for('retireShallowNodes')
const _getBundlesByDepth = Symbol('getBundlesByDepth')
const _registryResolved = Symbol('registryResolved')
const _addNodeToTrashList = Symbol('addNodeToTrashList')
+const _workspaces = Symbol.for('workspaces')
+
// shared by rebuild mixin
const _trashList = Symbol.for('trashList')
const _handleOptionalFailure = Symbol.for('handleOptionalFailure')
@@ -82,7 +86,6 @@ const _global = Symbol.for('global')
// defined by Ideal mixin
const _pruneBundledMetadeps = Symbol.for('pruneBundledMetadeps')
-const _explicitRequests = Symbol.for('explicitRequests')
const _resolvedAdd = Symbol.for('resolvedAdd')
const _usePackageLock = Symbol.for('usePackageLock')
const _formatPackageLock = Symbol.for('formatPackageLock')
@@ -146,7 +149,10 @@ module.exports = cls => class Reifier extends cls {
if (this[_packageLockOnly] || this[_dryRun])
return
- await mkdirp(resolve(this.path))
+ // we do NOT want to set ownership on this folder, especially
+ // recursively, because it can have other side effects to do that
+ // in a project directory. We just want to make it if it's missing.
+ await justMkdirp(resolve(this.path))
}
async [_reifyPackages] () {
@@ -237,9 +243,25 @@ module.exports = cls => class Reifier extends cls {
const actualOpt = this[_global] ? {
ignoreMissing: true,
global: true,
- filter: (node, kid) =>
- this[_explicitRequests].size === 0 || !node.isProjectRoot ? true
- : (this.idealTree.edgesOut.has(kid) || this[_explicitRequests].has(kid)),
+ filter: (node, kid) => {
+ // if it's not the project root, and we have no explicit requests,
+ // then we're already into a nested dep, so we keep it
+ if (this.explicitRequests.size === 0 || !node.isProjectRoot)
+ return true
+
+ // if we added it as an edgeOut, then we want it
+ if (this.idealTree.edgesOut.has(kid))
+ return true
+
+ // if it's an explicit request, then we want it
+ const hasExplicit = [...this.explicitRequests]
+ .some(edge => edge.name === kid)
+ if (hasExplicit)
+ return true
+
+ // ignore the rest of the global install folder
+ return false
+ },
} : { ignoreMissing: true }
if (!this[_global]) {
@@ -266,9 +288,35 @@ module.exports = cls => class Reifier extends cls {
// to just invalidate the parts that changed, but avoid walking the
// whole tree again.
+ const filterNodes = []
+ if (this[_global] && this.explicitRequests.size) {
+ const idealTree = this.idealTree.target || this.idealTree
+ const actualTree = this.actualTree.target || this.actualTree
+ // we ONLY are allowed to make changes in the global top-level
+ // children where there's an explicit request.
+ for (const { name } of this.explicitRequests) {
+ const ideal = idealTree.children.get(name)
+ if (ideal)
+ filterNodes.push(ideal)
+ const actual = actualTree.children.get(name)
+ if (actual)
+ filterNodes.push(actual)
+ }
+ } else {
+ for (const ws of this[_workspaces]) {
+ const ideal = this.idealTree.children.get(ws)
+ if (ideal)
+ filterNodes.push(ideal)
+ const actual = this.actualTree.children.get(ws)
+ if (actual)
+ filterNodes.push(actual)
+ }
+ }
+
// find all the nodes that need to change between the actual
// and ideal trees.
this.diff = Diff.calculate({
+ filterNodes,
actual: this.actualTree,
ideal: this.idealTree,
})
@@ -886,7 +934,7 @@ module.exports = cls => class Reifier extends cls {
// to things like git repos and tarball file/urls. However, if the
// user requested 'foo@', and we have a foo@file:../foo, then we should
// end up saving the spec we actually used, not whatever they gave us.
- if (this[_resolvedAdd]) {
+ if (this[_resolvedAdd].length) {
const root = this.idealTree
const pkg = root.package
for (const { name } of this[_resolvedAdd]) {
@@ -966,20 +1014,85 @@ module.exports = cls => class Reifier extends cls {
return meta.save(saveOpt)
}
- [_copyIdealToActual] () {
+ async [_copyIdealToActual] () {
+ // clean up any trash that is still in the tree
+ for (const path of this[_trashList]) {
+ const loc = relpath(this.idealTree.realpath, path)
+ const node = this.idealTree.inventory.get(loc)
+ if (node && node.root === this.idealTree)
+ node.parent = null
+ }
+
+ // if we filtered to only certain nodes, then anything ELSE needs
+ // to be untouched in the resulting actual tree, even if it differs
+ // in the idealTree. Copy over anything that was in the actual and
+ // was not changed, delete anything in the ideal and not actual.
+ // Then we move the entire idealTree over to this.actualTree, and
+ // save the hidden lockfile.
+ if (this.diff && this.diff.filterSet.size) {
+ const { filterSet } = this.diff
+ const seen = new Set()
+ for (const [loc, ideal] of this.idealTree.inventory.entries()) {
+ if (seen.has(loc))
+ continue
+ seen.add(loc)
+
+ // if it's an ideal node from the filter set, then skip it
+ // because we already made whatever changes were necessary
+ if (filterSet.has(ideal))
+ continue
+
+ // otherwise, if it's not in the actualTree, then it's not a thing
+ // that we actually added. And if it IS in the actualTree, then
+ // it's something that we left untouched, so we need to record
+ // that.
+ const actual = this.actualTree.inventory.get(loc)
+ if (!actual)
+ ideal.root = null
+ else {
+ if ([...actual.linksIn].some(link => filterSet.has(link))) {
+ seen.add(actual.location)
+ continue
+ }
+ const { realpath, isLink } = actual
+ if (isLink && ideal.isLink && ideal.realpath === realpath)
+ continue
+ else
+ actual.root = this.idealTree
+ }
+ }
+
+ // now find any actual nodes that may not be present in the ideal
+ // tree, but were left behind by virtue of not being in the filter
+ for (const [loc, actual] of this.actualTree.inventory.entries()) {
+ if (seen.has(loc))
+ continue
+ seen.add(loc)
+ if (filterSet.has(actual))
+ continue
+ actual.root = this.idealTree
+ }
+
+ // prune out any tops that lack a linkIn
+ for (const top of this.idealTree.tops) {
+ if (top.linksIn.size === 0)
+ top.root = null
+ }
+
+ // need to calculate dep flags, since nodes may have been marked
+ // as extraneous or otherwise incorrect during transit.
+ calcDepFlags(this.idealTree)
+ }
+
// save the ideal's meta as a hidden lockfile after we actualize it
this.idealTree.meta.filename =
- this.path + '/node_modules/.package-lock.json'
+ this.idealTree.realpath + '/node_modules/.package-lock.json'
this.idealTree.meta.hiddenLockfile = true
+
this.actualTree = this.idealTree
this.idealTree = null
- for (const path of this[_trashList]) {
- const loc = relpath(this.path, path)
- const node = this.actualTree.inventory.get(loc)
- if (node && node.root === this.actualTree)
- node.parent = null
- }
- return !this[_global] && this.actualTree.meta.save()
+ if (!this[_global])
+ await this.actualTree.meta.save()
}
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/diff.js b/deps/npm/node_modules/@npmcli/arborist/lib/diff.js
index ada67f8161d..84a8bae412f 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/diff.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/diff.js
@@ -11,7 +11,8 @@ const {existsSync} = require('fs')
const ssri = require('ssri')
class Diff {
- constructor ({actual, ideal}) {
+ constructor ({actual, ideal, filterSet}) {
+ this.filterSet = filterSet
this.children = []
this.actual = actual
this.ideal = ideal
@@ -29,9 +30,54 @@ class Diff {
this.removed = []
}
- static calculate ({actual, ideal}) {
+ static calculate ({actual, ideal, filterNodes = []}) {
+ // if there's a filterNode, then:
+ // - get the path from the root to the filterNode. The root or
+ // root.target should have an edge either to the filterNode or
+ // a link to the filterNode. If not, abort. Add the path to the
+ // filterSet.
+ // - Add set of Nodes depended on by the filterNode to filterSet.
+ // - Anything outside of that set should be ignored by getChildren
+ const filterSet = new Set()
+ for (const filterNode of filterNodes) {
+ const { root } = filterNode
+ if (root !== ideal && root !== actual)
+ throw new Error('invalid filterNode: outside idealTree/actualTree')
+ const { target } = root
+ const rootTarget = target || root
+ const edge = [...rootTarget.edgesOut.values()].filter(e => {
+ return e.to && (e.to === filterNode || e.to.target === filterNode)
+ })[0]
+ filterSet.add(root)
+ filterSet.add(rootTarget)
+ filterSet.add(ideal)
+ filterSet.add(actual)
+ if (edge && edge.to) {
+ filterSet.add(edge.to)
+ if (edge.to.target)
+ filterSet.add(edge.to.target)
+ }
+ filterSet.add(filterNode)
+
+ depth({
+ tree: filterNode,
+ visit: node => filterSet.add(node),
+ getChildren: node => {
+ node = node.target || node
+ const loc = node.location
+ const idealNode = ideal.inventory.get(loc)
+ const ideals = !idealNode ? []
+ : [...idealNode.edgesOut.values()].filter(e => e.to).map(e => e.to)
+ const actualNode = actual.inventory.get(loc)
+ const actuals = !actualNode ? []
+ : [...actualNode.edgesOut.values()].filter(e => e.to).map(e => e.to)
+ return ideals.concat(actuals)
+ },
+ })
+ }
+
return depth({
- tree: new Diff({actual, ideal}),
+ tree: new Diff({actual, ideal, filterSet}),
getChildren,
leave,
})
@@ -89,20 +135,20 @@ const allChildren = node => {
// to create the diff tree
const getChildren = diff => {
const children = []
- const {unchanged, removed} = diff
+ const {actual, ideal, unchanged, removed, filterSet} = diff
// Note: we DON'T diff fsChildren themselves, because they are either
// included in the package contents, or part of some other project, and
// will never appear in legacy shrinkwraps anyway. but we _do_ include the
// child nodes of fsChildren, because those are nodes that we are typically
// responsible for installing.
- const actualKids = allChildren(diff.actual)
- const idealKids = allChildren(diff.ideal)
+ const actualKids = allChildren(actual)
+ const idealKids = allChildren(ideal)
const paths = new Set([...actualKids.keys(), ...idealKids.keys()])
for (const path of paths) {
const actual = actualKids.get(path)
const ideal = idealKids.get(path)
- diffNode(actual, ideal, children, unchanged, removed)
+ diffNode(actual, ideal, children, unchanged, removed, filterSet)
}
if (diff.leaves && !children.length)
@@ -111,7 +157,10 @@ const getChildren = diff => {
return children
}
-const diffNode = (actual, ideal, children, unchanged, removed) => {
+const diffNode = (actual, ideal, children, unchanged, removed, filterSet) => {
+ if (filterSet.size && !(filterSet.has(ideal) || filterSet.has(actual)))
+ return
+
const action = getAction({actual, ideal})
// if it's a match, then get its children
@@ -119,7 +168,7 @@ const diffNode = (actual, ideal, children, unchanged, removed) => {
if (action) {
if (action === 'REMOVE')
removed.push(actual)
- children.push(new Diff({actual, ideal}))
+ children.push(new Diff({actual, ideal, filterSet}))
} else {
unchanged.push(ideal)
// !*! Weird dirty hack warning !*!
@@ -150,7 +199,7 @@ const diffNode = (actual, ideal, children, unchanged, removed) => {
for (const node of bundledChildren)
node.parent = ideal
}
- children.push(...getChildren({actual, ideal, unchanged, removed}))
+ children.push(...getChildren({actual, ideal, unchanged, removed, filterSet}))
}
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/link.js b/deps/npm/node_modules/@npmcli/arborist/lib/link.js
index 2394c6e4117..4d15428d873 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/link.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/link.js
@@ -23,13 +23,19 @@ class Link extends Node {
: null),
})
- this.target = target || new Node({
- ...options,
- path: realpath,
- parent: null,
- fsParent: null,
- root: this.root,
- })
+ if (target)
+ this.target = target
+ else if (this.realpath === this.root.path)
+ this.target = this.root
+ else {
+ this.target = new Node({
+ ...options,
+ path: realpath,
+ parent: null,
+ fsParent: null,
+ root: this.root,
+ })
+ }
}
get version () {
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/node.js b/deps/npm/node_modules/@npmcli/arborist/lib/node.js
index fa39bed5ef9..197804e0ce0 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/node.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/node.js
@@ -685,6 +685,7 @@ class Node {
...this.children.values(),
...this.inventory.values(),
].filter(n => n !== this))
+
for (const child of family) {
if (child.root !== root) {
child[_delistFromMeta]()
@@ -704,12 +705,14 @@ class Node {
}
// if we had a target, and didn't find one in the new root, then bring
- // it over as well.
- if (this.isLink && target && !this.target)
+ // it over as well, but only if we're setting the link into a new root,
+ // as we don't want to lose the target any time we remove a link.
+ if (this.isLink && target && !this.target && root !== this)
target.root = root
// tree should always be valid upon root setter completion.
treeCheck(this)
+ treeCheck(root)
}
get root () {
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/printable.js b/deps/npm/node_modules/@npmcli/arborist/lib/printable.js
index 588121dbc42..169984fcf17 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/printable.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/printable.js
@@ -2,6 +2,7 @@
// of the current node and its descendents
const util = require('util')
+const relpath = require('./relpath.js')
class ArboristNode {
constructor (tree, path) {
@@ -47,6 +48,11 @@ class ArboristNode {
.map(edge => new EdgeIn(edge)))
}
+ if (tree.workspaces && tree.workspaces.size) {
+ this.workspaces = new Map([...tree.workspaces.entries()]
+ .map(([name, path]) => [name, relpath(tree.root.realpath, path)]))
+ }
+
// fsChildren sorted by path
if (tree.fsChildren.size) {
this.fsChildren = new Set([...tree.fsChildren]
@@ -126,6 +132,9 @@ class EdgeIn extends Edge {
}
const printableTree = (tree, path = []) => {
+ if (!tree)
+ return tree
+
const Cls = tree.isLink ? ArboristLink
: tree.sourceReference ? ArboristVirtualNode
: ArboristNode
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js b/deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js
index 00b43296fbd..a7e8d9c0142 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js
@@ -1,6 +1,8 @@
const debug = require('./debug.js')
const checkTree = (tree, checkUnreachable = true) => {
+ const log = [['START TREE CHECK', tree.path]]
+
// this can only happen in tests where we have a "tree" object
// that isn't actually a tree.
if (!tree.root || !tree.root.inventory)
@@ -9,8 +11,21 @@ const checkTree = (tree, checkUnreachable = true) => {
const { inventory } = tree.root
const seen = new Set()
const check = (node, via = tree, viaType = 'self') => {
+ log.push([
+ 'CHECK',
+ node && node.location,
+ via && via.location,
+ viaType,
+ 'seen=' + seen.has(node),
+ 'promise=' + !!(node && node.then),
+ 'root=' + !!(node && node.isRoot),
+ ])
+
if (!node || seen.has(node) || node.then)
return
+
+ seen.add(node)
+
if (node.isRoot && node !== tree.root) {
throw Object.assign(new Error('double root'), {
node: node.path,
@@ -19,6 +34,7 @@ const checkTree = (tree, checkUnreachable = true) => {
root: tree.root.path,
via: via.path,
viaType,
+ log,
})
}
@@ -31,6 +47,7 @@ const checkTree = (tree, checkUnreachable = true) => {
via: via.path,
viaType,
otherRoot: node.root && node.root.path,
+ log,
})
}
@@ -43,6 +60,7 @@ const checkTree = (tree, checkUnreachable = true) => {
viaType,
inventory: [...node.inventory.values()].map(node =>
[node.path, node.location]),
+ log,
})
}
@@ -53,6 +71,7 @@ const checkTree = (tree, checkUnreachable = true) => {
root: tree.root.path,
via: via.path,
viaType,
+ log,
})
}
@@ -65,14 +84,38 @@ const checkTree = (tree, checkUnreachable = true) => {
via: via.path,
viaType,
devEdges: devEdges.map(e => [e.type, e.name, e.spec, e.error]),
+ log,
+ })
+ }
+
+ if (node.path === tree.root.path && node !== tree.root) {
+ throw Object.assign(new Error('node with same path as root'), {
+ node: node.path,
+ tree: tree.path,
+ root: tree.root.path,
+ via: via.path,
+ viaType,
+ log,
+ })
+ }
+
+ if (!node.isLink && node.path !== node.realpath) {
+ throw Object.assign(new Error('non-link with mismatched path/realpath'), {
+ node: node.path,
+ tree: tree.path,
+ realpath: node.realpath,
+ root: tree.root.path,
+ via: via.path,
+ viaType,
+ log,
})
}
const { parent, fsParent, target } = node
- seen.add(node)
check(parent, node, 'parent')
check(fsParent, node, 'fsParent')
check(target, node, 'target')
+ log.push(['CHILDREN', node.location, ...node.children.keys()])
for (const kid of node.children.values())
check(kid, node, 'children')
for (const kid of node.fsChildren)
@@ -81,6 +124,7 @@ const checkTree = (tree, checkUnreachable = true) => {
check(link, node, 'linksIn')
for (const top of node.tops)
check(top, node, 'tops')
+ log.push(['DONE', node.location])
}
check(tree)
if (checkUnreachable) {
@@ -92,6 +136,7 @@ const checkTree = (tree, checkUnreachable = true) => {
location: node.location,
root: tree.root.path,
tree: tree.path,
+ log,
})
}
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index e745be2c77f..d08102ce0cf 100644
--- a/deps/npm/node_modules/@npmcli/arborist/package.json
+++ b/deps/npm/node_modules/@npmcli/arborist/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/arborist",
- "version": "2.2.9",
+ "version": "2.3.0",
"description": "Manage node_modules trees",
"dependencies": {
"@npmcli/installed-package-contents": "^1.0.7",
@@ -14,7 +14,7 @@
"cacache": "^15.0.3",
"common-ancestor-path": "^1.0.1",
"json-parse-even-better-errors": "^2.3.1",
- "json-stringify-nice": "^1.1.1",
+ "json-stringify-nice": "^1.1.2",
"mkdirp-infer-owner": "^2.0.0",
"npm-install-checks": "^4.0.0",
"npm-package-arg": "^8.1.0",
diff --git a/deps/npm/node_modules/@npmcli/config/lib/set-envs.js b/deps/npm/node_modules/@npmcli/config/lib/set-envs.js
index ffaf5ab383c..370a2f3ffd3 100644
--- a/deps/npm/node_modules/@npmcli/config/lib/set-envs.js
+++ b/deps/npm/node_modules/@npmcli/config/lib/set-envs.js
@@ -67,8 +67,8 @@ const setEnvs = (config) => {
const cliSet = new Set(Object.keys(cliConf))
const envSet = new Set(Object.keys(envConf))
for (const key in cliConf) {
- const { deprecated } = definitions[key] || {}
- if (deprecated)
+ const { deprecated, envExport = true } = definitions[key] || {}
+ if (deprecated || envExport === false)
continue
if (sameConfigValue(defaults[key], cliConf[key])) {
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index b2b34f6af27..767718a9d61 100644
--- a/deps/npm/node_modules/@npmcli/config/package.json
+++ b/deps/npm/node_modules/@npmcli/config/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/config",
- "version": "2.0.0",
+ "version": "2.1.0",
"files": [
"lib"
],
diff --git a/deps/npm/node_modules/json-stringify-nice/.github/FUNDING.yml b/deps/npm/node_modules/json-stringify-nice/.github/FUNDING.yml
deleted file mode 100644
index 20d8c03a4dc..00000000000
--- a/deps/npm/node_modules/json-stringify-nice/.github/FUNDING.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-# These are supported funding model platforms
-
-github: [isaacs]
diff --git a/deps/npm/node_modules/json-stringify-nice/.npmignore b/deps/npm/node_modules/json-stringify-nice/.npmignore
deleted file mode 100644
index e69acb4cf45..00000000000
--- a/deps/npm/node_modules/json-stringify-nice/.npmignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# ignore most things, include some others
-/*
-/.*
-
-!.github
-!bin/
-!lib/
-!docs/
-!package.json
-!package-lock.json
-!README.md
-!CONTRIBUTING.md
-!LICENSE
-!CHANGELOG.md
-!example/
-!scripts/
-!tap-snapshots/
-!test/
-!.travis.yml
-!.gitignore
-!.gitattributes
-!coverage-map.js
-!index.js
diff --git a/deps/npm/node_modules/json-stringify-nice/index.js b/deps/npm/node_modules/json-stringify-nice/index.js
index 1ca7e14fa0c..2c722a752c6 100644
--- a/deps/npm/node_modules/json-stringify-nice/index.js
+++ b/deps/npm/node_modules/json-stringify-nice/index.js
@@ -1,4 +1,4 @@
-const isObj = val => val && !Array.isArray(val) && typeof val === 'object'
+const isObj = val => !!val && !Array.isArray(val) && typeof val === 'object'
const compare = (ak, bk, prefKeys) =>
prefKeys.includes(ak) && !prefKeys.includes(bk) ? -1
diff --git a/deps/npm/node_modules/json-stringify-nice/package-lock.json b/deps/npm/node_modules/json-stringify-nice/package-lock.json
deleted file mode 100644
index b20f9a8977d..00000000000
--- a/deps/npm/node_modules/json-stringify-nice/package-lock.json
+++ /dev/null
@@ -1,3447 +0,0 @@
-{
- "name": "json-stringify-nice",
- "version": "1.1.1",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.0.0"
- }
- },
- "@babel/generator": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
- "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.7.2",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/helper-function-name": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
- "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.7.0",
- "@babel/template": "^7.7.0",
- "@babel/types": "^7.7.0"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
- "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.7.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
- "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.7.0"
- }
- },
- "@babel/highlight": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
- "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
- "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
- "dev": true
- },
- "@babel/runtime": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz",
- "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.2"
- }
- },
- "@babel/template": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
- "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.0",
- "@babel/types": "^7.7.0"
- }
- },
- "@babel/traverse": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
- "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.7.2",
- "@babel/helper-function-name": "^7.7.0",
- "@babel/helper-split-export-declaration": "^7.7.0",
- "@babel/parser": "^7.7.2",
- "@babel/types": "^7.7.2",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
- "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "append-transform": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
- "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==",
- "dev": true,
- "requires": {
- "default-require-extensions": "^2.0.0"
- }
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "arg": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz",
- "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "async-hook-domain": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz",
- "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==",
- "dev": true,
- "requires": {
- "source-map-support": "^0.5.11"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "binary-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
- "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
- "dev": true
- },
- "bind-obj-methods": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz",
- "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "caching-transform": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz",
- "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==",
- "dev": true,
- "requires": {
- "hasha": "^3.0.0",
- "make-dir": "^2.0.0",
- "package-hash": "^3.0.0",
- "write-file-atomic": "^2.4.2"
- },
- "dependencies": {
- "write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
- }
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true,
- "optional": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "coveralls": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.7.tgz",
- "integrity": "sha512-mUuH2MFOYB2oBaA4D4Ykqi9LaEYpMMlsiOMJOrv358yAjP6enPIk55fod2fNJ8AvwoYXStWQls37rA+s5e7boA==",
- "dev": true,
- "requires": {
- "growl": "~> 1.10.0",
- "js-yaml": "^3.13.1",
- "lcov-parse": "^0.0.10",
- "log-driver": "^1.2.7",
- "minimist": "^1.2.0",
- "request": "^2.86.0"
- }
- },
- "cp-file": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz",
- "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^2.0.0",
- "nested-error-stacks": "^2.0.0",
- "pify": "^4.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "cross-spawn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
- "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- },
- "dependencies": {
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "default-require-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
- "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=",
- "dev": true,
- "requires": {
- "strip-bom": "^3.0.0"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "diff": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
- "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "events-to-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz",
- "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=",
- "dev": true
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "findit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz",
- "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=",
- "dev": true
- },
- "flow-parser": {
- "version": "0.111.3",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.111.3.tgz",
- "integrity": "sha512-iEjGZ94OBMcESxnLorXNjJmtd/JtQYXUVrQpfwvtAKkuyawRmv+2LM6nqyOsOJkISEYbyY6ziudRE0u4VyPSVA==",
- "dev": true
- },
- "flow-remove-types": {
- "version": "2.111.3",
- "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.111.3.tgz",
- "integrity": "sha512-M9k0igaQDnPXzTsolDMwZL6ksYKPjLsp7NJqgyiELnkGBWlnfvWlN06RuyYdr9WrTSv9wxgmLoa+rMa/W4fffg==",
- "dev": true,
- "requires": {
- "flow-parser": "^0.111.3",
- "pirates": "^3.0.2",
- "vlq": "^0.2.1"
- }
- },
- "foreground-child": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
- "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=",
- "dev": true,
- "requires": {
- "cross-spawn": "^4",
- "signal-exit": "^3.0.0"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fs-exists-cached": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz",
- "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
- "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
- "dev": true,
- "optional": true
- },
- "function-loop": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz",
- "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
- "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
- "dev": true
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "handlebars": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz",
- "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==",
- "dev": true,
- "requires": {
- "neo-async": "^2.6.0",
- "optimist": "^0.6.1",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "hasha": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz",
- "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=",
- "dev": true,
- "requires": {
- "is-stream": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
- "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true,
- "optional": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
- "dev": true
- },
- "istanbul-lib-hook": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz",
- "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==",
- "dev": true,
- "requires": {
- "append-transform": "^1.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
- "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
- "dev": true,
- "requires": {
- "@babel/generator": "^7.4.0",
- "@babel/parser": "^7.4.3",
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0",
- "istanbul-lib-coverage": "^2.0.5",
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "istanbul-lib-processinfo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz",
- "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^6.0.5",
- "istanbul-lib-coverage": "^2.0.3",
- "rimraf": "^2.6.3",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "istanbul-lib-report": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
- "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
- "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "rimraf": "^2.6.3",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz",
- "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==",
- "dev": true,
- "requires": {
- "handlebars": "^4.1.2"
- }
- },
- "jackspeak": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz",
- "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==",
- "dev": true,
- "requires": {
- "cliui": "^4.1.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "lcov-parse": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
- "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
- "dev": true
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
- "dev": true
- },
- "log-driver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
- "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
- "dev": true
- },
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- }
- },
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "dev": true,
- "requires": {
- "mime-db": "1.40.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "minipass": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
- "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
- "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
- "dev": true
- },
- "nested-error-stacks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
- "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "nyc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz",
- "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "caching-transform": "^3.0.2",
- "convert-source-map": "^1.6.0",
- "cp-file": "^6.2.0",
- "find-cache-dir": "^2.1.0",
- "find-up": "^3.0.0",
- "foreground-child": "^1.5.6",
- "glob": "^7.1.3",
- "istanbul-lib-coverage": "^2.0.5",
- "istanbul-lib-hook": "^2.0.7",
- "istanbul-lib-instrument": "^3.3.0",
- "istanbul-lib-report": "^2.0.8",
- "istanbul-lib-source-maps": "^3.0.6",
- "istanbul-reports": "^2.2.4",
- "js-yaml": "^3.13.1",
- "make-dir": "^2.1.0",
- "merge-source-map": "^1.1.0",
- "resolve-from": "^4.0.0",
- "rimraf": "^2.6.3",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^1.4.2",
- "test-exclude": "^5.2.3",
- "uuid": "^3.3.2",
- "yargs": "^13.2.2",
- "yargs-parser": "^13.0.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "opener": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
- "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
- "dev": true
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- }
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "own-or": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
- "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=",
- "dev": true
- },
- "own-or-env": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz",
- "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==",
- "dev": true,
- "requires": {
- "own-or": "^1.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
- "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz",
- "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^3.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picomatch": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz",
- "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==",
- "dev": true
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "pirates": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz",
- "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true,
- "optional": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "psl": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
- "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
- "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true,
- "optional": true
- }
- }
- },
- "readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
- "dev": true,
- "requires": {
- "picomatch": "^2.0.4"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
- "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
- "dev": true
- },
- "release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "resolve": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
- "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spawn-wrap": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz",
- "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==",
- "dev": true,
- "requires": {
- "foreground-child": "^1.5.6",
- "mkdirp": "^0.5.0",
- "os-homedir": "^1.0.1",
- "rimraf": "^2.6.2",
- "signal-exit": "^3.0.2",
- "which": "^1.3.0"
- },
- "dependencies": {
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "stack-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
- "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true,
- "optional": true
- }
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tap": {
- "version": "14.9.2",
- "resolved": "https://registry.npmjs.org/tap/-/tap-14.9.2.tgz",
- "integrity": "sha512-Fyy/sjsw4eb+Hnphin4oMtDtKxmrob/vrnaIDv/F3thFFQjQFqMg8xf45zRFGHxUfezlrO6KsH8TpWNlTDINfA==",
- "dev": true,
- "requires": {
- "async-hook-domain": "^1.1.2",
- "bind-obj-methods": "^2.0.0",
- "browser-process-hrtime": "^1.0.0",
- "chokidar": "^3.0.2",
- "color-support": "^1.1.0",
- "coveralls": "^3.0.6",
- "diff": "^4.0.1",
- "esm": "^3.2.25",
- "findit": "^2.0.0",
- "flow-remove-types": "^2.107.0",
- "foreground-child": "^1.3.3",
- "fs-exists-cached": "^1.0.0",
- "function-loop": "^1.0.2",
- "glob": "^7.1.4",
- "import-jsx": "^2.0.0",
- "ink": "^2.3.0",
- "isexe": "^2.0.0",
- "istanbul-lib-processinfo": "^1.0.0",
- "jackspeak": "^1.4.0",
- "minipass": "^3.0.0",
- "mkdirp": "^0.5.1",
- "nyc": "^14.1.1",
- "opener": "^1.5.1",
- "own-or": "^1.0.0",
- "own-or-env": "^1.0.1",
- "react": "^16.9.0",
- "rimraf": "^2.7.1",
- "signal-exit": "^3.0.0",
- "source-map-support": "^0.5.16",
- "stack-utils": "^1.0.2",
- "tap-mocha-reporter": "^5.0.0",
- "tap-parser": "^10.0.1",
- "tap-yaml": "^1.0.0",
- "tcompare": "^2.3.0",
- "treport": "^0.4.2",
- "trivial-deferred": "^1.0.1",
- "ts-node": "^8.3.0",
- "typescript": "^3.6.3",
- "which": "^2.0.1",
- "write-file-atomic": "^3.0.0",
- "yaml": "^1.6.0",
- "yapool": "^1.0.0"
- },
- "dependencies": {
- "@babel/runtime": {
- "version": "7.6.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.2"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.13.3",
- "bundled": true,
- "dev": true
- }
- }
- },
- "@types/prop-types": {
- "version": "15.7.3",
- "bundled": true,
- "dev": true
- },
- "@types/react": {
- "version": "16.9.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/prop-types": "*",
- "csstype": "^2.2.0"
- }
- },
- "ansi-escapes": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "type-fest": "^0.5.2"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true,
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "auto-bind": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/react": "^16.8.12"
- }
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
- }
- },
- "babel-core": {
- "version": "6.26.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true
- }
- }
- },
- "babel-generator": {
- "version": "6.26.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true
- }
- }
- },
- "babel-helper-builder-react-jsx": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "esutils": "^2.0.2"
- }
- },
- "babel-helpers": {
- "version": "6.24.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-messages": {
- "version": "6.23.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "bundled": true,
- "dev": true
- },
- "babel-plugin-syntax-object-rest-spread": {
- "version": "6.13.0",
- "bundled": true,
- "dev": true
- },
- "babel-plugin-transform-es2015-destructuring": {
- "version": "6.23.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-object-rest-spread": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-plugin-syntax-object-rest-spread": "^6.8.0",
- "babel-runtime": "^6.26.0"
- }
- },
- "babel-plugin-transform-react-jsx": {
- "version": "6.24.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-helper-builder-react-jsx": "^6.24.1",
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-register": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true
- },
- "source-map-support": {
- "version": "0.4.18",
- "bundled": true,
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- }
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "babel-template": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- }
- },
- "babylon": {
- "version": "6.18.0",
- "bundled": true,
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "caller-callsite": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "callsites": "^2.0.0"
- }
- },
- "caller-path": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "callsites": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "cardinal": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-truncate": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "slice-ansi": "^1.0.0",
- "string-width": "^2.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "convert-source-map": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "core-js": {
- "version": "2.6.10",
- "bundled": true,
- "dev": true
- },
- "csstype": {
- "version": "2.6.7",
- "bundled": true,
- "dev": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "detect-indent": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "bundled": true,
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "events-to-array": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true
- },
- "globals": {
- "version": "9.18.0",
- "bundled": true,
- "dev": true
- },
- "has-ansi": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "home-or-tmp": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- }
- },
- "import-jsx": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "babel-core": "^6.25.0",
- "babel-plugin-transform-es2015-destructuring": "^6.23.0",
- "babel-plugin-transform-object-rest-spread": "^6.23.0",
- "babel-plugin-transform-react-jsx": "^6.24.1",
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "ink": {
- "version": "2.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/react": "^16.8.6",
- "ansi-escapes": "^4.2.1",
- "arrify": "^1.0.1",
- "auto-bind": "^2.0.0",
- "chalk": "^2.4.1",
- "cli-cursor": "^2.1.0",
- "cli-truncate": "^1.1.0",
- "is-ci": "^2.0.0",
- "lodash.throttle": "^4.1.1",
- "log-update": "^3.0.0",
- "prop-types": "^15.6.2",
- "react-reconciler": "^0.21.0",
- "scheduler": "^0.15.0",
- "signal-exit": "^3.0.2",
- "slice-ansi": "^1.0.0",
- "string-length": "^2.0.0",
- "widest-line": "^2.0.0",
- "wrap-ansi": "^5.0.0",
- "yoga-layout-prebuilt": "^1.9.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "invariant": {
- "version": "2.2.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "is-ci": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-finite": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "js-tokens": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "jsesc": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true
- },
- "json5": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true
- },
- "lodash": {
- "version": "4.17.15",
- "bundled": true,
- "dev": true
- },
- "lodash.throttle": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "log-update": {
- "version": "3.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.2.0",
- "cli-cursor": "^2.1.0",
- "wrap-ansi": "^5.0.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "bundled": true,
- "dev": true
- }
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minipass": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "onetime": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "private": {
- "version": "0.1.8",
- "bundled": true,
- "dev": true
- },
- "prop-types": {
- "version": "15.7.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "react": {
- "version": "16.10.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-is": {
- "version": "16.10.2",
- "bundled": true,
- "dev": true
- },
- "react-reconciler": {
- "version": "0.21.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.15.0"
- }
- },
- "redeyed": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "esprima": "~4.0.0"
- }
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "bundled": true,
- "dev": true
- },
- "repeating": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "scheduler": {
- "version": "0.15.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "slash": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "slice-ansi": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0"
- }
- },
- "string-length": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "astral-regex": "^1.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "tap-parser": {
- "version": "10.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "events-to-array": "^1.0.1",
- "minipass": "^3.0.0",
- "tap-yaml": "^1.0.0"
- }
- },
- "tap-yaml": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "yaml": "^1.5.0"
- }
- },
- "to-fast-properties": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true
- },
- "treport": {
- "version": "0.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "cardinal": "^2.1.1",
- "chalk": "^2.4.2",
- "import-jsx": "^2.0.0",
- "ink": "^2.1.1",
- "ms": "^2.1.1",
- "react": "^16.8.6",
- "string-length": "^2.0.0",
- "tap-parser": "^10.0.1",
- "unicode-length": "^2.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "unicode-length": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "punycode": "^2.0.0",
- "strip-ansi": "^3.0.1"
- }
- }
- }
- },
- "trim-right": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "type-fest": {
- "version": "0.5.2",
- "bundled": true,
- "dev": true
- },
- "widest-line": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "yaml": {
- "version": "1.7.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.5"
- }
- },
- "yoga-layout-prebuilt": {
- "version": "1.9.3",
- "bundled": true,
- "dev": true
- }
- }
- },
- "tap-mocha-reporter": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz",
- "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==",
- "dev": true,
- "requires": {
- "color-support": "^1.1.0",
- "debug": "^2.1.3",
- "diff": "^1.3.2",
- "escape-string-regexp": "^1.0.3",
- "glob": "^7.0.5",
- "readable-stream": "^2.1.5",
- "tap-parser": "^10.0.0",
- "tap-yaml": "^1.0.0",
- "unicode-length": "^1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "diff": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
- "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "tap-parser": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz",
- "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==",
- "dev": true,
- "requires": {
- "events-to-array": "^1.0.1",
- "minipass": "^3.0.0",
- "tap-yaml": "^1.0.0"
- }
- },
- "tap-yaml": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz",
- "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==",
- "dev": true,
- "requires": {
- "yaml": "^1.5.0"
- }
- },
- "tcompare": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-2.3.0.tgz",
- "integrity": "sha512-fAfA73uFtFGybWGt4+IYT6UPLYVZQ4NfsP+IXEZGY0vh8e2IF7LVKafcQNMRBLqP0wzEA65LM9Tqj+FSmO8GLw==",
- "dev": true
- },
- "test-exclude": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
- "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "read-pkg-up": "^4.0.0",
- "require-main-filename": "^2.0.0"
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tough-cookie": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
- "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
- "dev": true,
- "requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
- }
- },
- "trivial-deferred": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
- "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=",
- "dev": true
- },
- "ts-node": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz",
- "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==",
- "dev": true,
- "requires": {
- "arg": "^4.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "source-map-support": "^0.5.6",
- "yn": "^3.0.0"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typescript": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz",
- "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==",
- "dev": true
- },
- "uglify-js": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.8.tgz",
- "integrity": "sha512-XhHJ3S3ZyMwP8kY1Gkugqx3CJh2C3O0y8NPiSxtm1tyD/pktLAkFZsFGpuNfTZddKDQ/bbDBLAd2YyA1pbi8HQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "commander": "~2.20.3",
- "source-map": "~0.6.1"
- }
- },
- "unicode-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz",
- "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=",
- "dev": true,
- "requires": {
- "punycode": "^1.3.2",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true,
- "optional": true
- },
- "uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vlq": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
- "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
- "dev": true
- },
- "which": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz",
- "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write-file-atomic": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz",
- "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- },
- "yaml": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz",
- "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.6.3"
- }
- },
- "yapool": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz",
- "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=",
- "dev": true
- },
- "yargs": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
- "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- }
- }
-}
diff --git a/deps/npm/node_modules/json-stringify-nice/package.json b/deps/npm/node_modules/json-stringify-nice/package.json
index e060b2ed70e..ea4f486c5e0 100644
--- a/deps/npm/node_modules/json-stringify-nice/package.json
+++ b/deps/npm/node_modules/json-stringify-nice/package.json
@@ -1,6 +1,6 @@
{
"name": "json-stringify-nice",
- "version": "1.1.1",
+ "version": "1.1.3",
"description": "Stringify an object sorting scalars before objects, and defaulting to 2-space indent",
"author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
"license": "ISC",
@@ -20,5 +20,8 @@
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
- "repository": "https://github.com/isaacs/json-stringify-nice"
+ "repository": "https://github.com/isaacs/json-stringify-nice",
+ "files": [
+ "index.js"
+ ]
}
diff --git a/deps/npm/node_modules/json-stringify-nice/tap-snapshots/test-basic.js-TAP.test.js b/deps/npm/node_modules/json-stringify-nice/tap-snapshots/test-basic.js-TAP.test.js
deleted file mode 100644
index 53d5fda6c3a..00000000000
--- a/deps/npm/node_modules/json-stringify-nice/tap-snapshots/test-basic.js-TAP.test.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/* IMPORTANT
- * This snapshot file is auto-generated, but designed for humans.
- * It should be checked into source control and tracked carefully.
- * Re-generate by setting TAP_SNAPSHOT=1 and running tests.
- * Make sure to inspect the output below. Do not ignore changes!
- */
-'use strict'
-exports[`test/basic.js TAP basic sorting operation with default 2-space indent > mix of objects and out of order keys 1`] = `
-{
- "y": "z",
- "yy": "a",
- "z": 1,
- "a": {
- "a": 2,
- "b": 1
- },
- "obj": {
- "b": "x",
- "a": {}
- }
-}
-
-`
-
-exports[`test/basic.js TAP replacer function is used > replace a val with phone doggo 1`] = `
-{
- "y": "z",
- "yy": "a",
- "z": 1,
- "a": {
- "b": 1,
- "hello": "📞 yes",
- "this is": "🐕",
- "a": {
- "hello": "📞 yes",
- "nested": true,
- "this is": "🐕"
- }
- },
- "obj": {
- "b": "x",
- "a": {
- "hello": "📞 yes",
- "this is": "🐕"
- }
- }
-}
-
-`
-
-exports[`test/basic.js TAP sort keys explicitly with a preference list > replace a val with preferences 1`] = `
-{
- "z": 1,
- "yy": "a",
- "y": "z",
- "obj": {
- "b": "x",
- "a": {}
- },
- "a": {
- "b": 1,
- "a": {
- "nested": true
- }
- }
-}
-
-`
-
-exports[`test/basic.js TAP spaces can be set > boolean false 1`] = `
-{"y":"z","yy":"a","z":1,"a":{"a":2,"b":1},"obj":{"b":"x","a":{}}}
-`
-
-exports[`test/basic.js TAP spaces can be set > empty string 1`] = `
-{"y":"z","yy":"a","z":1,"a":{"a":2,"b":1},"obj":{"b":"x","a":{}}}
-`
-
-exports[`test/basic.js TAP spaces can be set > space face 1`] = `
-{
- ^_^ "y": "z",
- ^_^ "yy": "a",
- ^_^ "z": 1,
- ^_^ "a": {
- ^_^ ^_^ "a": 2,
- ^_^ ^_^ "b": 1
- ^_^ },
- ^_^ "obj": {
- ^_^ ^_^ "b": "x",
- ^_^ ^_^ "a": {}
- ^_^ }
-}
-
-`
-
-exports[`test/basic.js TAP spaces can be set > tab 1`] = `
-{
- "y": "z",
- "yy": "a",
- "z": 1,
- "a": {
- "a": 2,
- "b": 1
- },
- "obj": {
- "b": "x",
- "a": {}
- }
-}
-
-`
-
-exports[`test/basic.js TAP spaces can be set > the number 3 1`] = `
-{
- "y": "z",
- "yy": "a",
- "z": 1,
- "a": {
- "a": 2,
- "b": 1
- },
- "obj": {
- "b": "x",
- "a": {}
- }
-}
-
-`
diff --git a/deps/npm/node_modules/json-stringify-nice/test/basic.js b/deps/npm/node_modules/json-stringify-nice/test/basic.js
deleted file mode 100644
index 23c3ceb3845..00000000000
--- a/deps/npm/node_modules/json-stringify-nice/test/basic.js
+++ /dev/null
@@ -1,68 +0,0 @@
-const t = require('tap')
-const stringify = require('../')
-
-t.test('basic sorting operation with default 2-space indent', t => {
- t.plan(1)
- t.matchSnapshot(stringify({
- z: 1,
- y: 'z',
- obj: { a: {}, b: 'x' },
- a: { b: 1, a: 2},
- yy: 'a',
- }), 'mix of objects and out of order keys')
-})
-
-t.test('throws same error on cycles as JSON.stringify', t => {
- t.plan(1)
- const cycle = { a: { b: { c: {} } } }
- cycle.a.b.c = cycle.a
- try {
- JSON.stringify(cycle)
- } catch (builtinEr) {
- t.throws(() => stringify(cycle), builtinEr, 'same error as builtin')
- }
-})
-
-t.test('spaces can be set', t => {
- t.plan(5)
- const obj = {
- z: 1,
- y: 'z',
- obj: { a: {}, b: 'x' },
- a: { b: 1, a: 2},
- yy: 'a',
- }
- t.matchSnapshot(stringify(obj, 0, '\t'), 'tab')
- t.matchSnapshot(stringify(obj, null, ' ^_^ '), 'space face')
- t.matchSnapshot(stringify(obj, false, 3), 'the number 3')
- t.matchSnapshot(stringify(obj, false, ''), 'empty string')
- t.matchSnapshot(stringify(obj, false, false), 'boolean false')
-})
-
-t.test('replacer function is used', t => {
- t.plan(1)
- const obj = {
- z: 1,
- y: 'z',
- obj: { a: {}, b: 'x' },
- a: { b: 1, a: { nested: true} },
- yy: 'a',
- }
- const replacer = (key, val) =>
- key === 'a' ? { hello: '📞 yes', 'this is': '🐕', ...val }
- : val
- t.matchSnapshot(stringify(obj, replacer), 'replace a val with phone doggo')
-})
-
-t.test('sort keys explicitly with a preference list', t => {
- t.plan(1)
- const obj = {
- z: 1,
- y: 'z',
- obj: { a: {}, b: 'x' },
- a: { b: 1, a: { nested: true} },
- yy: 'a',
- }
- const preference = ['obj', 'z', 'yy']
- t.matchSnapshot(stringify(obj, preference), 'replace a val with preferences')
-})
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 0f078d18be5..b6f2e0be7ef 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "7.7.6",
+ "version": "7.8.0",
"name": "npm",
"description": "a package manager for JavaScript",
"keywords": [
@@ -42,9 +42,9 @@
"./package.json": "./package.json"
},
"dependencies": {
- "@npmcli/arborist": "^2.2.9",
+ "@npmcli/arborist": "^2.3.0",
"@npmcli/ci-detect": "^1.2.0",
- "@npmcli/config": "^2.0.0",
+ "@npmcli/config": "^2.1.0",
"@npmcli/run-script": "^1.8.4",
"abbrev": "~1.1.1",
"ansicolors": "~0.3.2",
diff --git a/deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js b/deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js
index 2a3d0146b18..6c265906261 100644
--- a/deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js
+++ b/deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js
@@ -64,7 +64,7 @@ registry and all registries configured for scopes. See the documentation for
#### \`audit-level\`
* Default: null
-* Type: "info", "low", "moderate", "high", "critical", "none", or null
+* Type: null, "info", "low", "moderate", "high", "critical", or "none"
The minimum level of vulnerability for \`npm audit\` to exit with a non-zero
exit code.
@@ -1212,6 +1212,8 @@ Valid values for the \`workspace\` config are either: - Workspace names - Path
to a workspace directory - Path to a parent workspace directory (will result
to selecting all of the nested workspaces)
+This value is not exported to the environment for child processes.
+
#### \`workspaces\`
* Default: false
@@ -1220,6 +1222,8 @@ to selecting all of the nested workspaces)
Enable running a command in the context of **all** the configured
workspaces.
+This value is not exported to the environment for child processes.
+
#### \`yes\`
* Default: null
diff --git a/deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js b/deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js
index 87dcb861c63..e0666801530 100644
--- a/deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js
+++ b/deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js
@@ -418,6 +418,188 @@ to accept an incorrect (and potentially broken) dependency resolution.
See \${REPORT} for a full report.
`
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > explain with color 1`] = `
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > explain with no color, depth of 6 1`] = `
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > report 1`] = `
+# npm resolution error report
+
+\${TIME}
+
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+Raw JSON explanation object:
+
+{
+ "name": "no current node, but has current edge",
+ "json": true
+}
+
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > report with color 1`] = `
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > report with color, depth only 2 1`] = `
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, but has current edge > report with no color, depth of 6 1`] = `
+While resolving: eslint@7.22.0
+Found: dev eslint@"file:." from the root project
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > explain with color 1`] = `
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > explain with no color, depth of 6 1`] = `
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > report 1`] = `
+# npm resolution error report
+
+\${TIME}
+
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+Raw JSON explanation object:
+
+{
+ "name": "no current node, no current edge, idk",
+ "json": true
+}
+
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > report with color 1`] = `
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > report with color, depth only 2 1`] = `
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
+exports[`test/lib/utils/explain-eresolve.js TAP no current node, no current edge, idk > report with no color, depth of 6 1`] = `
+While resolving: eslint@7.22.0
+
+Could not resolve dependency:
+peer eslint@"^6.0.0" from eslint-plugin-jsdoc@22.2.0
+node_modules/eslint-plugin-jsdoc
+ dev eslint-plugin-jsdoc@"^22.1.0" from the root project
+
+Fix the upstream dependency conflict, or retry
+this command with --force, or --legacy-peer-deps
+to accept an incorrect (and potentially broken) dependency resolution.
+
+See \${REPORT} for a full report.
+`
+
exports[`test/lib/utils/explain-eresolve.js TAP withShrinkwrap > explain with color 1`] = `
While resolving: @isaacs/peer-dep-cycle-b@1.0.0
Found: @isaacs/peer-dep-cycle-c@2.0.0
diff --git a/deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js b/deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js
index 5a860bd2ee5..f9e1d78e58f 100644
--- a/deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js
+++ b/deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js
@@ -334,6 +334,9 @@ All commands:
Usage:
npm docs [<pkgname> [<pkgname> ...]]
+ Options:
+ [--browser|--browser <browser>] [--registry <registry>] [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
alias: home
Run "npm help docs" for more info
@@ -366,6 +369,9 @@ All commands:
npm exec -c '<cmd> [args...]'
npm exec --package=foo -c '<cmd> [args...]'
+ Options:
+ [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
alias: x
Run "npm help exec" for more info
@@ -695,6 +701,9 @@ All commands:
Usage:
npm repo [<pkgname> [<pkgname> ...]]
+ Options:
+ [--browser|--browser <browser>] [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
Run "npm help repo" for more info
restart npm restart
@@ -725,6 +734,9 @@ All commands:
Usage:
npm run-script <command> [-- <args>]
+ Options:
+ [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
aliases: run, rum, urn
Run "npm help run-script" for more info
@@ -759,6 +771,9 @@ All commands:
Usage:
npm set-script [<script>] [<command>]
+ Options:
+ [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
Run "npm help set-script" for more info
shrinkwrap npm shrinkwrap
@@ -905,6 +920,9 @@ All commands:
Usage:
npm view [<@scope>/]<pkg>[@<version>] [<field>[.subfield]...]
+ Options:
+ [--json] [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]] [-ws|--workspaces]
+
aliases: v, info, show
Run "npm help view" for more info
diff --git a/deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js b/deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js
index f8a9fe464df..02810e31a50 100644
--- a/deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js
+++ b/deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js
@@ -270,3 +270,260 @@ dist-tags:
published a year ago
`
+
+exports[`test/lib/view.js TAP workspaces all workspaces --json > must match snapshot 1`] = `
+
+{
+ "green": {
+ "_id": "green",
+ "name": "green",
+ "dist-tags": {
+ "latest": "1.0.0"
+ },
+ "maintainers": [
+ {
+ "name": "claudia",
+ "email": "c@yellow.com",
+ "twitter": "cyellow"
+ },
+ {
+ "name": "isaacs",
+ "email": "i@yellow.com",
+ "twitter": "iyellow"
+ }
+ ],
+ "keywords": [
+ "colors",
+ "green",
+ "crayola"
+ ],
+ "versions": [
+ "1.0.0",
+ "1.0.1"
+ ],
+ "version": "1.0.0",
+ "description": "green is a very important color",
+ "bugs": {
+ "url": "http://bugs.green.com"
+ },
+ "deprecated": true,
+ "repository": {
+ "url": "http://repository.green.com"
+ },
+ "license": {
+ "type": "ACME"
+ },
+ "bin": {
+ "green": "bin/green.js"
+ },
+ "dependencies": {
+ "red": "1.0.0",
+ "yellow": "1.0.0"
+ },
+ "dist": {
+ "shasum": "123",
+ "tarball": "http://hm.green.com/1.0.0.tgz",
+ "integrity": "---",
+ "fileCount": 1,
+ "unpackedSize": 1
+ }
+ },
+ "orange": {
+ "name": "orange",
+ "dist-tags": {
+ "latest": "1.0.0"
+ },
+ "versions": [
+ "1.0.0",
+ "1.0.1"
+ ],
+ "version": "1.0.0",
+ "homepage": "http://hm.orange.com",
+ "license": {},
+ "dist": {
+ "shasum": "123",
+ "tarball": "http://hm.orange.com/1.0.0.tgz",
+ "integrity": "---",
+ "fileCount": 1,
+ "unpackedSize": 1
+ }
+ }
+}
+`
+
+exports[`test/lib/view.js TAP workspaces all workspaces > must match snapshot 1`] = `
+
+
+green@1.0.0 | ACME | deps: 2 | versions: 2
+green is a very important color
+
+DEPRECATED!! - true
+
+keywords:colors, green, crayola
+
+bin:green
+
+dist
+.tarball:http://hm.green.com/1.0.0.tgz
+.shasum:123
+.integrity:---
+.unpackedSize:1 B
+
+dependencies:
+red: 1.0.0
+yellow: 1.0.0
+
+maintainers:
+-claudia <c@yellow.com>
+-isaacs <i@yellow.com>
+
+dist-tags:
+latest: 1.0.0
+
+orange@1.0.0 | Proprietary | deps: none | versions: 2
+http://hm.orange.com
+
+dist
+.tarball:http://hm.orange.com/1.0.0.tgz
+.shasum:123
+.integrity:---
+.unpackedSize:1 B
+
+dist-tags:
+latest: 1.0.0
+`
+
+exports[`test/lib/view.js TAP workspaces all workspaces nonexistent field --json > must match snapshot 1`] = `
+
+`
+
+exports[`test/lib/view.js TAP workspaces all workspaces nonexistent field > must match snapshot 1`] = `
+
+green:
+orange:
+`
+
+exports[`test/lib/view.js TAP workspaces all workspaces single field --json > must match snapshot 1`] = `
+
+{
+ "green": "green",
+ "orange": "orange"
+}
+`
+
+exports[`test/lib/view.js TAP workspaces all workspaces single field > must match snapshot 1`] = `
+
+green:
+green
+orange:
+orange
+`
+
+exports[`test/lib/view.js TAP workspaces one specific workspace > must match snapshot 1`] = `
+
+
+green@1.0.0 | ACME | deps: 2 | versions: 2
+green is a very important color
+
+DEPRECATED!! - true
+
+keywords:colors, green, crayola
+
+bin:green
+
+dist
+.tarball:http://hm.green.com/1.0.0.tgz
+.shasum:123
+.integrity:---
+.unpackedSize:1 B
+
+dependencies:
+red: 1.0.0
+yellow: 1.0.0
+
+maintainers:
+-claudia <c@yellow.com>
+-isaacs <i@yellow.com>
+
+dist-tags:
+latest: 1.0.0
+`
+
+exports[`test/lib/view.js TAP workspaces remote package name > must match snapshot 1`] = `
+Ignoring workspaces for remote package
+`
+
+exports[`test/lib/view.js TAP workspaces remote package name > must match snapshot 2`] = `
+
+
+pink@1.0.0 | Proprietary | deps: none | versions: 2
+
+dist
+.tarball:http://hm.pink.com/1.0.0.tgz
+.shasum:123
+.integrity:---
+.unpackedSize:1 B
+
+dist-tags:
+latest: 1.0.0
+`
+
+exports[`test/lib/view.js TAP workspaces single workspace --json > must match snapshot 1`] = `
+
+{
+ "green": {
+ "_id": "green",
+ "name": "green",
+ "dist-tags": {
+ "latest": "1.0.0"
+ },
+ "maintainers": [
+ {
+ "name": "claudia",
+ "email": "c@yellow.com",
+ "twitter": "cyellow"
+ },
+ {
+ "name": "isaacs",
+ "email": "i@yellow.com",
+ "twitter": "iyellow"
+ }
+ ],
+ "keywords": [
+ "colors",
+ "green",
+ "crayola"
+ ],
+ "versions": [
+ "1.0.0",
+ "1.0.1"
+ ],
+ "version": "1.0.0",
+ "description": "green is a very important color",
+ "bugs": {
+ "url": "http://bugs.green.com"
+ },
+ "deprecated": true,
+ "repository": {
+ "url": "http://repository.green.com"
+ },
+ "license": {
+ "type": "ACME"
+ },
+ "bin": {
+ "green": "bin/green.js"
+ },
+ "dependencies": {
+ "red": "1.0.0",
+ "yellow": "1.0.0"
+ },
+ "dist": {
+ "shasum": "123",
+ "tarball": "http://hm.green.com/1.0.0.tgz",
+ "integrity": "---",
+ "fileCount": 1,
+ "unpackedSize": 1
+ }
+ }
+}
+`
diff --git a/deps/npm/test/fixtures/eresolve-explanations.js b/deps/npm/test/fixtures/eresolve-explanations.js
index c5c338e61c8..b6ccac7d3d6 100644
--- a/deps/npm/test/fixtures/eresolve-explanations.js
+++ b/deps/npm/test/fixtures/eresolve-explanations.js
@@ -16,10 +16,10 @@ module.exports = {
type: 'prod',
name: '@isaacs/peer-dep-cycle-a',
spec: '1.x',
- from: { location: '/some/project' }
- }
- ]
- }
+ from: { location: '/some/project' },
+ },
+ ],
+ },
},
current: {
name: '@isaacs/peer-dep-cycle-c',
@@ -30,9 +30,9 @@ module.exports = {
type: 'prod',
name: '@isaacs/peer-dep-cycle-c',
spec: '2.x',
- from: { location: '/some/project' }
- }
- ]
+ from: { location: '/some/project' },
+ },
+ ],
},
peerConflict: {
name: '@isaacs/peer-dep-cycle-c',
@@ -63,15 +63,15 @@ module.exports = {
type: 'prod',
name: '@isaacs/peer-dep-cycle-a',
spec: '1.x',
- from: { location: '/some/project' }
- }
- ]
- }
- }
- ]
- }
- }
- ]
+ from: { location: '/some/project' },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
},
strictPeerDeps: true,
},
@@ -102,13 +102,13 @@ module.exports = {
type: 'prod',
name: '@isaacs/peer-dep-cycle-a',
spec: '1.x',
- from: { location: '/some/project' }
- }
- ]
- }
- }
- ]
- }
+ from: { location: '/some/project' },
+ },
+ ],
+ },
+ },
+ ],
+ },
},
current: {
name: '@isaacs/peer-dep-cycle-c',
@@ -119,9 +119,9 @@ module.exports = {
type: 'prod',
name: '@isaacs/peer-dep-cycle-c',
spec: '2.x',
- from: { location: '/some/project' }
- }
- ]
+ from: { location: '/some/project' },
+ },
+ ],
},
strictPeerDeps: true,
},
@@ -134,7 +134,7 @@ module.exports = {
whileInstalling: {
name: 'project',
version: '1.2.3',
- path: '/some/project'
+ path: '/some/project',
},
location: 'node_modules/@isaacs/testing-peer-dep-conflict-chain-d',
dependents: [
@@ -142,9 +142,9 @@ module.exports = {
type: 'prod',
name: '@isaacs/testing-peer-dep-conflict-chain-d',
spec: '2',
- from: { location: '/some/project' }
- }
- ]
+ from: { location: '/some/project' },
+ },
+ ],
},
edge: {
type: 'peer',
@@ -157,7 +157,7 @@ module.exports = {
whileInstalling: {
name: 'project',
version: '1.2.3',
- path: '/some/project'
+ path: '/some/project',
},
location: 'node_modules/@isaacs/testing-peer-dep-conflict-chain-c',
dependents: [
@@ -165,13 +165,13 @@ module.exports = {
type: 'prod',
name: '@isaacs/testing-peer-dep-conflict-chain-c',
spec: '1',
- from: { location: '/some/project' }
- }
- ]
- }
+ from: { location: '/some/project' },
+ },
+ ],
+ },
},
peerConflict: null,
- strictPeerDeps: false
+ strictPeerDeps: false,
},
gatsby: {
@@ -182,7 +182,7 @@ module.exports = {
whileInstalling: {
name: 'gatsby-recipes',
version: '0.2.31',
- path: '/some/project/node_modules/gatsby-recipes'
+ path: '/some/project/node_modules/gatsby-recipes',
},
location: 'node_modules/ink',
dependents: [
@@ -218,19 +218,19 @@ module.exports = {
name: 'gatsby',
spec: '',
from: {
- location: '/some/project/gatsby-user'
- }
- }
- ]
- }
- }
- ]
- }
- }
- ]
- }
- }
- ]
+ location: '/some/project/gatsby-user',
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
},
edge: {
type: 'peer',
@@ -243,7 +243,7 @@ module.exports = {
whileInstalling: {
name: 'gatsby-recipes',
version: '0.2.31',
- path: '/some/project/gatsby-user/node_modules/gatsby-recipes'
+ path: '/some/project/gatsby-user/node_modules/gatsby-recipes',
},
location: 'node_modules/ink-box',
dependents: [
@@ -279,23 +279,98 @@ module.exports = {
name: 'gatsby',
spec: '',
from: {
- location: '/some/project/gatsby-user'
- }
- }
- ]
- }
- }
- ]
- }
- }
- ]
- }
- }
- ]
- }
+ location: '/some/project/gatsby-user',
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
},
peerConflict: null,
- strictPeerDeps: true
- }
+ strictPeerDeps: true,
+ },
+ 'no current node, but has current edge': {
+ code: 'ERESOLVE',
+ current: null,
+ currentEdge: {
+ type: 'dev',
+ name: 'eslint',
+ spec: 'file:.',
+ error: 'MISSING',
+ from: {
+ location: '/some/projects/eslint',
+ },
+ },
+ edge: {
+ type: 'peer',
+ name: 'eslint',
+ spec: '^6.0.0',
+ error: 'MISSING',
+ from: {
+ name: 'eslint-plugin-jsdoc',
+ version: '22.2.0',
+ whileInstalling: {
+ name: 'eslint',
+ version: '7.22.0',
+ path: '/Users/isaacs/dev/npm/cli/eslint',
+ },
+ location: 'node_modules/eslint-plugin-jsdoc',
+ dependents: [
+ {
+ type: 'dev',
+ name: 'eslint-plugin-jsdoc',
+ spec: '^22.1.0',
+ from: {
+ location: '/some/projects/eslint',
+ },
+ },
+ ],
+ },
+ },
+ peerConflict: null,
+ strictPeerDeps: false,
+ force: false,
+ },
+ 'no current node, no current edge, idk': {
+ code: 'ERESOLVE',
+ current: null,
+ edge: {
+ type: 'peer',
+ name: 'eslint',
+ spec: '^6.0.0',
+ error: 'MISSING',
+ from: {
+ name: 'eslint-plugin-jsdoc',
+ version: '22.2.0',
+ whileInstalling: {
+ name: 'eslint',
+ version: '7.22.0',
+ path: '/Users/isaacs/dev/npm/cli/eslint',
+ },
+ location: 'node_modules/eslint-plugin-jsdoc',
+ dependents: [
+ {
+ type: 'dev',
+ name: 'eslint-plugin-jsdoc',
+ spec: '^22.1.0',
+ from: {
+ location: '/some/projects/eslint',
+ },
+ },
+ ],
+ },
+ },
+ peerConflict: null,
+ strictPeerDeps: false,
+ force: false,
+ },
}
diff --git a/deps/npm/test/lib/docs.js b/deps/npm/test/lib/docs.js
index a7325738ba4..e8176eb47bd 100644
--- a/deps/npm/test/lib/docs.js
+++ b/deps/npm/test/lib/docs.js
@@ -1,51 +1,92 @@
const t = require('tap')
-
const requireInject = require('require-inject')
-const pacote = {
- manifest: async (spec, options) => {
- return spec === 'nodocs' ? {
+const mockNpm = require('../fixtures/mock-npm.js')
+const { join, sep } = require('path')
+
+const pkgDirs = t.testdir({
+ 'package.json': JSON.stringify({
+ name: 'thispkg',
+ version: '1.2.3',
+ homepage: 'https://example.com',
+ }),
+ nodocs: {
+ 'package.json': JSON.stringify({
name: 'nodocs',
version: '1.2.3',
- }
- : spec === 'docsurl' ? {
- name: 'docsurl',
- version: '1.2.3',
- homepage: 'https://bugzilla.localhost/docsurl',
- }
- : spec === 'repourl' ? {
- name: 'repourl',
- version: '1.2.3',
- repository: 'https://github.com/foo/repourl',
- }
- : spec === 'repoobj' ? {
- name: 'repoobj',
- version: '1.2.3',
- repository: { url: 'https://github.com/foo/repoobj' },
- }
- : spec === '.' ? {
- name: 'thispkg',
- version: '1.2.3',
- homepage: 'https://example.com',
- }
- : null
+ }),
},
-}
+ docsurl: {
+ 'package.json': JSON.stringify({
+ name: 'docsurl',
+ version: '1.2.3',
+ homepage: 'https://bugzilla.localhost/docsurl',
+ }),
+ },
+ repourl: {
+ 'package.json': JSON.stringify({
+ name: 'repourl',
+ version: '1.2.3',
+ repository: 'https://github.com/foo/repourl',
+ }),
+ },
+ repoobj: {
+ 'package.json': JSON.stringify({
+ name: 'repoobj',
+ version: '1.2.3',
+ repository: { url: 'https://github.com/foo/repoobj' },
+ }),
+ },
+ workspaces: {
+ 'package.json': JSON.stringify({
+ name: 'workspaces-test',
+ version: '1.2.3-test',
+ workspaces: ['workspace-a', 'workspace-b', 'workspace-c'],
+ }),
+ 'workspace-a': {
+ 'package.json': JSON.stringify({
+ name: 'workspace-a',
+ version: '1.2.3-a',
+ homepage: 'http://docs.workspace-a/',
+ }),
+ },
+ 'workspace-b': {
+ 'package.json': JSON.stringify({
+ name: 'workspace-b',
+ version: '1.2.3-n',
+ repository: 'https://github.com/npm/workspace-b',
+ }),
+ },
+ 'workspace-c': JSON.stringify({
+ 'package.json': {
+ name: 'workspace-n',
+ version: '1.2.3-n',
+ },
+ }),
+ },
+})
// keep a tally of which urls got opened
-const opened = {}
+let opened = {}
const openUrl = async (npm, url, errMsg) => {
opened[url] = opened[url] || 0
opened[url]++
}
const Docs = requireInject('../../lib/docs.js', {
- pacote,
'../../lib/utils/open-url.js': openUrl,
})
+const flatOptions = {}
+const npm = mockNpm({ flatOptions })
+const docs = new Docs(npm)
-const docs = new Docs({ flatOptions: {} })
+t.afterEach(async () => {
+ opened = {}
+})
t.test('open docs urls', t => {
+ // XXX It is very odd that `where` is how pacote knows to look anywhere other
+ // than the cwd. I would think npm.localPrefix would factor in somehow
+ flatOptions.where = pkgDirs
const expect = {
nodocs: 'https://www.npmjs.com/package/nodocs',
docsurl: 'https://bugzilla.localhost/docsurl',
@@ -57,11 +98,13 @@ t.test('open docs urls', t => {
t.plan(keys.length)
keys.forEach(pkg => {
t.test(pkg, t => {
- docs.exec([pkg], (er) => {
- if (er)
- throw er
+ docs.exec([['.', pkg].join(sep)], (err) => {
+ if (err)
+ throw err
const url = expect[pkg]
- t.equal(opened[url], 1, url, {opened})
+ t.match({
+ [url]: 1,
+ }, opened, `opened ${url}`, {opened})
t.end()
})
})
@@ -72,7 +115,42 @@ t.test('open default package if none specified', t => {
docs.exec([], (er) => {
if (er)
throw er
- t.equal(opened['https://example.com'], 2, 'opened expected url', {opened})
+ t.equal(opened['https://example.com'], 1, 'opened expected url', {opened})
t.end()
})
})
+
+t.test('workspaces', (t) => {
+ flatOptions.where = undefined
+ npm.localPrefix = join(pkgDirs, 'workspaces')
+ t.test('all workspaces', (t) => {
+ docs.execWorkspaces([], [], (err) => {
+ t.notOk(err)
+ t.match({
+ 'http://docs.workspace-a/': 1,
+ 'https://github.com/npm/workspace-b#readme': 1,
+ }, opened, 'opened two valid docs urls')
+ t.end()
+ })
+ })
+
+ t.test('one workspace', (t) => {
+ docs.execWorkspaces([], ['workspace-a'], (err) => {
+ t.notOk(err)
+ t.match({
+ 'http://docs.workspace-a/': 1,
+ }, opened, 'opened one requested docs urls')
+ t.end()
+ })
+ })
+
+ t.test('invalid workspace', (t) => {
+ docs.execWorkspaces([], ['workspace-x'], (err) => {
+ t.match(err, /No workspaces found/)
+ t.match(err, /workspace-x/)
+ t.match({}, opened, 'opened no docs urls')
+ t.end()
+ })
+ })
+ t.end()
+})
diff --git a/deps/npm/test/lib/load-all-commands.js b/deps/npm/test/lib/load-all-commands.js
index d7eb2eae0a8..cb3aefb1f88 100644
--- a/deps/npm/test/lib/load-all-commands.js
+++ b/deps/npm/test/lib/load-all-commands.js
@@ -1,8 +1,7 @@
-// Thanks to nyc not working properly with proxies this doesn't affect
-// coverage. but it does ensure that every command has a usage that renders,
-// contains its name, a description, and if it has completion it is a function.
-// That it renders also ensures that any params we've defined in our commands
-// work.
+// Our coverage mapping means that stuff like this doen't count for coverage.
+// It does ensure that every command has a usage that renders, contains its
+// name, a description, and if it has completion it is a function. That it
+// renders also ensures that any params we've defined in our commands work.
const requireInject = require('require-inject')
const npm = requireInject('../../lib/npm.js')
const t = require('tap')
diff --git a/deps/npm/test/lib/repo.js b/deps/npm/test/lib/repo.js
index 9c22bbaea34..c05c02d80a8 100644
--- a/deps/npm/test/lib/repo.js
+++ b/deps/npm/test/lib/repo.js
@@ -1,125 +1,206 @@
const t = require('tap')
-
const requireInject = require('require-inject')
-const pacote = {
- manifest: async (spec, options) => {
- return spec === 'norepo' ? {
+const mockNpm = require('../fixtures/mock-npm.js')
+const { join, sep } = require('path')
+
+const pkgDirs = t.testdir({
+ 'package.json': JSON.stringify({
+ name: 'thispkg',
+ version: '1.2.3',
+ repository: 'https://example.com/thispkg.git',
+ }),
+ norepo: {
+ 'package.json': JSON.stringify({
name: 'norepo',
version: '1.2.3',
- }
-
- : spec === 'repoobbj-nourl' ? {
- name: 'repoobj-nourl',
- repository: { no: 'url' },
- }
-
- : spec === 'hostedgit' ? {
- repository: 'git://github.com/foo/hostedgit',
- }
- : spec === 'hostedgitat' ? {
- repository: 'git@github.com:foo/hostedgitat',
- }
- : spec === 'hostedssh' ? {
- repository: 'ssh://git@github.com/foo/hostedssh',
- }
- : spec === 'hostedgitssh' ? {
- repository: 'git+ssh://git@github.com/foo/hostedgitssh',
- }
- : spec === 'hostedgithttp' ? {
- repository: 'git+http://github.com/foo/hostedgithttp',
- }
- : spec === 'hostedgithttps' ? {
- repository: 'git+https://github.com/foo/hostedgithttps',
- }
-
- : spec === 'hostedgitobj' ? {
- repository: { url: 'git://github.com/foo/hostedgitobj' },
- }
- : spec === 'hostedgitatobj' ? {
- repository: { url: 'git@github.com:foo/hostedgitatobj' },
- }
- : spec === 'hostedsshobj' ? {
- repository: { url: 'ssh://git@github.com/foo/hostedsshobj' },
- }
- : spec === 'hostedgitsshobj' ? {
- repository: { url: 'git+ssh://git@github.com/foo/hostedgitsshobj' },
- }
- : spec === 'hostedgithttpobj' ? {
- repository: { url: 'git+http://github.com/foo/hostedgithttpobj' },
- }
- : spec === 'hostedgithttpsobj' ? {
- repository: { url: 'git+https://github.com/foo/hostedgithttpsobj' },
- }
-
- : spec === 'unhostedgit' ? {
- repository: 'git://gothib.com/foo/unhostedgit',
- }
- : spec === 'unhostedgitat' ? {
- repository: 'git@gothib.com:foo/unhostedgitat',
- }
- : spec === 'unhostedssh' ? {
- repository: 'ssh://git@gothib.com/foo/unhostedssh',
- }
- : spec === 'unhostedgitssh' ? {
- repository: 'git+ssh://git@gothib.com/foo/unhostedgitssh',
- }
- : spec === 'unhostedgithttp' ? {
- repository: 'git+http://gothib.com/foo/unhostedgithttp',
- }
- : spec === 'unhostedgithttps' ? {
- repository: 'git+https://gothib.com/foo/unhostedgithttps',
- }
-
- : spec === 'unhostedgitobj' ? {
- repository: { url: 'git://gothib.com/foo/unhostedgitobj' },
- }
- : spec === 'unhostedgitatobj' ? {
- repository: { url: 'git@gothib.com:foo/unhostedgitatobj' },
- }
- : spec === 'unhostedsshobj' ? {
- repository: { url: 'ssh://git@gothib.com/foo/unhostedsshobj' },
- }
- : spec === 'unhostedgitsshobj' ? {
- repository: { url: 'git+ssh://git@gothib.com/foo/unhostedgitsshobj' },
- }
- : spec === 'unhostedgithttpobj' ? {
- repository: { url: 'git+http://gothib.com/foo/unhostedgithttpobj' },
- }
- : spec === 'unhostedgithttpsobj' ? {
- repository: { url: 'git+https://gothib.com/foo/unhostedgithttpsobj' },
- }
-
- : spec === 'directory' ? {
- repository: {
- type: 'git',
- url: 'git+https://github.com/foo/test-repo-with-directory.git',
- directory: 'some/directory',
- },
- }
-
- : spec === '.' ? {
- name: 'thispkg',
- version: '1.2.3',
- repository: 'https://example.com/thispkg.git',
- }
- : null
+ }),
},
-}
+ 'repoobbj-nourl': {
+ 'package.json': JSON.stringify({
+ name: 'repoobj-nourl',
+ repository: { no: 'url' },
+ }),
+ },
+ hostedgit: {
+ 'package.json': JSON.stringify({
+ repository: 'git://github.com/foo/hostedgit',
+ }),
+ },
+ hostedgitat: {
+ 'package.json': JSON.stringify({
+ repository: 'git@github.com:foo/hostedgitat',
+ }),
+ },
+ hostedssh: {
+ 'package.json': JSON.stringify({
+ repository: 'ssh://git@github.com/foo/hostedssh',
+ }),
+ },
+ hostedgitssh: {
+ 'package.json': JSON.stringify({
+ repository: 'git+ssh://git@github.com/foo/hostedgitssh',
+ }),
+ },
+ hostedgithttp: {
+ 'package.json': JSON.stringify({
+ repository: 'git+http://github.com/foo/hostedgithttp',
+ }),
+ },
+ hostedgithttps: {
+ 'package.json': JSON.stringify({
+ repository: 'git+https://github.com/foo/hostedgithttps',
+ }),
+ },
+ hostedgitobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git://github.com/foo/hostedgitobj' },
+ }),
+ },
+ hostedgitatobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git@github.com:foo/hostedgitatobj' },
+ }),
+ },
+ hostedsshobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'ssh://git@github.com/foo/hostedsshobj' },
+ }),
+ },
+ hostedgitsshobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+ssh://git@github.com/foo/hostedgitsshobj' },
+ }),
+ },
+ hostedgithttpobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+http://github.com/foo/hostedgithttpobj' },
+ }),
+ },
+ hostedgithttpsobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+https://github.com/foo/hostedgithttpsobj' },
+ }),
+ },
+ unhostedgit: {
+ 'package.json': JSON.stringify({
+ repository: 'git://gothib.com/foo/unhostedgit',
+ }),
+ },
+ unhostedgitat: {
+ 'package.json': JSON.stringify({
+ repository: 'git@gothib.com:foo/unhostedgitat',
+ }),
+ },
+ unhostedssh: {
+ 'package.json': JSON.stringify({
+ repository: 'ssh://git@gothib.com/foo/unhostedssh',
+ }),
+ },
+ unhostedgitssh: {
+ 'package.json': JSON.stringify({
+ repository: 'git+ssh://git@gothib.com/foo/unhostedgitssh',
+ }),
+ },
+ unhostedgithttp: {
+ 'package.json': JSON.stringify({
+ repository: 'git+http://gothib.com/foo/unhostedgithttp',
+ }),
+ },
+ unhostedgithttps: {
+ 'package.json': JSON.stringify({
+ repository: 'git+https://gothib.com/foo/unhostedgithttps',
+ }),
+ },
+ unhostedgitobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git://gothib.com/foo/unhostedgitobj' },
+ }),
+ },
+ unhostedgitatobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git@gothib.com:foo/unhostedgitatobj' },
+ }),
+ },
+ unhostedsshobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'ssh://git@gothib.com/foo/unhostedsshobj' },
+ }),
+ },
+ unhostedgitsshobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+ssh://git@gothib.com/foo/unhostedgitsshobj' },
+ }),
+ },
+ unhostedgithttpobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+http://gothib.com/foo/unhostedgithttpobj' },
+ }),
+ },
+ unhostedgithttpsobj: {
+ 'package.json': JSON.stringify({
+ repository: { url: 'git+https://gothib.com/foo/unhostedgithttpsobj' },
+ }),
+ },
+ directory: {
+ 'package.json': JSON.stringify({
+ repository: {
+ type: 'git',
+ url: 'git+https://github.com/foo/test-repo-with-directory.git',
+ directory: 'some/directory',
+ },
+ }),
+ },
+ workspaces: {
+ 'package.json': JSON.stringify({
+ name: 'workspaces-test',
+ version: '1.2.3-test',
+ workspaces: ['workspace-a', 'workspace-b', 'workspace-c'],
+ }),
+ 'workspace-a': {
+ 'package.json': JSON.stringify({
+ name: 'workspace-a',
+ version: '1.2.3-a',
+ repository: 'http://repo.workspace-a/',
+ }),
+ },
+ 'workspace-b': {
+ 'package.json': JSON.stringify({
+ name: 'workspace-b',
+ version: '1.2.3-n',
+ repository: 'https://github.com/npm/workspace-b',
+ }),
+ },
+ 'workspace-c': JSON.stringify({
+ 'package.json': {
+ name: 'workspace-n',
+ version: '1.2.3-n',
+ },
+ }),
+ },
+})
// keep a tally of which urls got opened
-const opened = {}
+let opened = {}
const openUrl = async (npm, url, errMsg) => {
opened[url] = opened[url] || 0
opened[url]++
}
const Repo = requireInject('../../lib/repo.js', {
- pacote,
'../../lib/utils/open-url.js': openUrl,
})
-const repo = new Repo({ flatOptions: {} })
+const flatOptions = {}
+const npm = mockNpm({ flatOptions })
+const repo = new Repo(npm)
+
+t.afterEach(async () => {
+ opened = {}
+})
t.test('open repo urls', t => {
+ // XXX It is very odd that `where` is how pacote knows to look anywhere other
+ // than the cwd. I would think npm.localPrefix would factor in somehow
+ flatOptions.where = pkgDirs
const expect = {
hostedgit: 'https://github.com/foo/hostedgit',
hostedgitat: 'https://github.com/foo/hostedgitat',
@@ -150,11 +231,13 @@ t.test('open repo urls', t => {
t.plan(keys.length)
keys.forEach(pkg => {
t.test(pkg, t => {
- repo.exec([pkg], (er) => {
- if (er)
- throw er
+ repo.exec([['.', pkg].join(sep)], (err) => {
+ if (err)
+ throw err
const url = expect[pkg]
- t.equal(opened[url], 1, url, {opened})
+ t.match({
+ [url]: 1,
+ }, opened, `opened ${url}`, {opened})
t.end()
})
})
@@ -162,6 +245,7 @@ t.test('open repo urls', t => {
})
t.test('fail if cannot figure out repo url', t => {
+ flatOptions.where = pkgDirs
const cases = [
'norepo',
'repoobbj-nourl',
@@ -173,8 +257,8 @@ t.test('fail if cannot figure out repo url', t => {
cases.forEach(pkg => {
t.test(pkg, t => {
- repo.exec([pkg], er => {
- t.match(er, { pkgid: pkg })
+ repo.exec([['.', pkg].join(sep)], (err) => {
+ t.match(err, { pkgid: pkg })
t.end()
})
})
@@ -182,10 +266,47 @@ t.test('fail if cannot figure out repo url', t => {
})
t.test('open default package if none specified', t => {
+ flatOptions.where = pkgDirs
repo.exec([], (er) => {
if (er)
throw er
- t.equal(opened['https://example.com/thispkg'], 2, 'opened expected url', {opened})
+ t.equal(opened['https://example.com/thispkg'], 1, 'opened expected url', {opened})
t.end()
})
})
+
+t.test('workspaces', t => {
+ flatOptions.where = undefined
+ npm.localPrefix = join(pkgDirs, 'workspaces')
+
+ t.test('all workspaces', (t) => {
+ repo.execWorkspaces([], [], (err) => {
+ t.notOk(err)
+ t.match({
+ 'https://repo.workspace-a/': 1, // Gets translated to https!
+ 'https://github.com/npm/workspace-b': 1,
+ }, opened, 'opened two valid repo urls')
+ t.end()
+ })
+ })
+
+ t.test('one workspace', (t) => {
+ repo.execWorkspaces([], ['workspace-a'], (err) => {
+ t.notOk(err)
+ t.match({
+ 'https://repo.workspace-a/': 1,
+ }, opened, 'opened one requested repo urls')
+ t.end()
+ })
+ })
+
+ t.test('invalid workspace', (t) => {
+ repo.execWorkspaces([], ['workspace-x'], (err) => {
+ t.match(err, /No workspaces found/)
+ t.match(err, /workspace-x/)
+ t.match({}, opened, 'opened no repo urls')
+ t.end()
+ })
+ })
+ t.end()
+})
diff --git a/deps/npm/test/lib/set-script.js b/deps/npm/test/lib/set-script.js
index dc00fd374cc..0071fa20f24 100644
--- a/deps/npm/test/lib/set-script.js
+++ b/deps/npm/test/lib/set-script.js
@@ -1,195 +1,199 @@
const test = require('tap')
const requireInject = require('require-inject')
+const fs = require('fs')
const parseJSON = require('json-parse-even-better-errors')
+const mockNpm = require('../fixtures/mock-npm.js')
+const { resolve } = require('path')
+
+const flatOptions = {}
+const npm = mockNpm(flatOptions)
+
+const ERROR_OUTPUT = []
+const WARN_OUTPUT = []
+const SetScript = requireInject('../../lib/set-script.js', {
+ npmlog: {
+ error: (...args) => {
+ ERROR_OUTPUT.push(args)
+ },
+ warn: (...args) => {
+ WARN_OUTPUT.push(args)
+ },
+ },
+})
+const setScript = new SetScript(npm)
test.test('completion', t => {
- const SetScript = requireInject('../../lib/set-script.js')
- const emptyDir = t.testdir()
t.test('already have a script name', async t => {
- const setScript = new SetScript({localPrefix: emptyDir})
+ npm.localPrefix = t.testdir({})
const res = await setScript.completion({conf: {argv: {remain: ['npm', 'run', 'x']}}})
t.equal(res, undefined)
t.end()
})
+
t.test('no package.json', async t => {
- const setScript = new SetScript({localPrefix: emptyDir})
+ npm.localPrefix = t.testdir({})
const res = await setScript.completion({conf: {argv: {remain: ['npm', 'run']}}})
t.strictSame(res, [])
t.end()
})
+
t.test('has package.json, no scripts', async t => {
- const localPrefix = t.testdir({
+ npm.localPrefix = t.testdir({
'package.json': JSON.stringify({}),
})
- const setScript = new SetScript({localPrefix})
const res = await setScript.completion({conf: {argv: {remain: ['npm', 'run']}}})
t.strictSame(res, [])
t.end()
})
+
t.test('has package.json, with scripts', async t => {
- const localPrefix = t.testdir({
+ npm.localPrefix = t.testdir({
'package.json': JSON.stringify({
scripts: { hello: 'echo hello', world: 'echo world' },
}),
})
- const setScript = new SetScript({localPrefix})
const res = await setScript.completion({conf: {argv: {remain: ['npm', 'run']}}})
t.strictSame(res, ['hello', 'world'])
t.end()
})
+
t.end()
})
+
test.test('fails on invalid arguments', (t) => {
- const SetScript = requireInject('../../lib/set-script.js', {
- npmlog: {},
- })
- const setScript = new SetScript({})
t.plan(3)
setScript.exec(['arg1'], (fail) => t.match(fail, /Expected 2 arguments: got 1/))
setScript.exec(['arg1', 'arg2', 'arg3'], (fail) => t.match(fail, /Expected 2 arguments: got 3/))
setScript.exec(['arg1', 'arg2', 'arg3', 'arg4'], (fail) => t.match(fail, /Expected 2 arguments: got 4/))
})
+
test.test('fails if run in postinstall script', (t) => {
- const originalVar = process.env.npm_lifecycle_event
- process.env.npm_lifecycle_event = 'postinstall'
- const SetScript = requireInject('../../lib/set-script.js', {
- npmlog: {},
+ const lifecycleEvent = process.env.npm_lifecycle_event
+ t.teardown(() => {
+ process.env.npm_lifecycle_event = lifecycleEvent
})
+
+ process.env.npm_lifecycle_event = 'postinstall'
t.plan(1)
- const setScript = new SetScript({})
setScript.exec(['arg1', 'arg2'], (fail) => t.equal(fail.toString(), 'Error: Scripts can’t set from the postinstall script'))
- process.env.npm_lifecycle_event = originalVar
})
+
test.test('fails when package.json not found', (t) => {
- const SetScript = requireInject('../../lib/set-script.js')
- const setScript = new SetScript({})
t.plan(1)
setScript.exec(['arg1', 'arg2'], (fail) => t.match(fail, /package.json not found/))
})
+
test.test('fails on invalid JSON', (t) => {
- const SetScript = requireInject('../../lib/set-script.js', {
- '../../lib/utils/config/definitions.js': {},
- fs: {
- readFile: () => {}, // read-package-json-fast explodes w/o this
- readFileSync: (name, charcode) => {
- return 'iamnotjson'
- },
- },
+ npm.localPrefix = t.testdir({
+ 'package.json': 'iamnotjson',
})
- const setScript = new SetScript({})
+
t.plan(1)
setScript.exec(['arg1', 'arg2'], (fail) => t.match(fail, /Invalid package.json: JSONParseError/))
})
+
test.test('creates scripts object', (t) => {
- var mockFile = ''
- const SetScript = requireInject('../../lib/set-script.js', {
- '../../lib/utils/config/definitions.js': {},
- fs: {
- readFileSync: (name, charcode) => {
- return '{}'
- },
- writeFileSync: (location, inner) => {
- mockFile = inner
- },
- },
- 'read-package-json-fast': async function (filename) {
- return {
- [Symbol.for('indent')]: ' ',
- [Symbol.for('newline')]: '\n',
- }
- },
+ npm.localPrefix = t.testdir({
+ 'package.json': '{}',
})
- const setScript = new SetScript({})
+
t.plan(2)
setScript.exec(['arg1', 'arg2'], (error) => {
t.equal(error, undefined)
- t.assert(parseJSON(mockFile), {scripts: {arg1: 'arg2'}})
+ const contents = fs.readFileSync(resolve(npm.localPrefix, 'package.json'))
+ t.assert(parseJSON(contents), {scripts: {arg1: 'arg2'}})
})
})
-test.test('warns before overwriting', (t) => {
- var warningListened = ''
- const SetScript = requireInject('../../lib/set-script.js', {
- '../../lib/utils/config/definitions.js': {},
- fs: {
- readFileSync: (name, charcode) => {
- return JSON.stringify({
- scripts: {
- arg1: 'blah',
- },
- })
- },
- writeFileSync: (name, content) => {},
- },
- 'read-package-json-fast': async function (filename) {
- return {
- [Symbol.for('indent')]: ' ',
- [Symbol.for('newline')]: '\n',
- }
- },
- npmlog: {
- warn: (prefix, message) => {
- warningListened = message
+
+test.test('warns when overwriting', (t) => {
+ WARN_OUTPUT.length = 0
+ npm.localPrefix = t.testdir({
+ 'package.json': JSON.stringify({
+ scripts: {
+ arg1: 'blah',
},
- },
+ }),
})
- const setScript = new SetScript({})
+
t.plan(2)
setScript.exec(['arg1', 'arg2'], (error) => {
t.equal(error, undefined, 'no error')
- t.equal(warningListened, 'Script "arg1" was overwritten')
+ t.hasStrict(WARN_OUTPUT[0], ['set-script', 'Script "arg1" was overwritten'], 'warning was logged')
})
})
+
test.test('provided indentation and eol is used', (t) => {
- var mockFile = ''
- const SetScript = requireInject('../../lib/set-script.js', {
- '../../lib/utils/config/definitions.js': {},
- fs: {
- readFileSync: (name, charcode) => {
- return '{}'
- },
- writeFileSync: (name, content) => {
- mockFile = content
- },
- },
- 'read-package-json-fast': async function (filename) {
- return {
- [Symbol.for('indent')]: ' '.repeat(6),
- [Symbol.for('newline')]: '\r\n',
- }
- },
+ npm.localPrefix = t.testdir({
+ 'package.json': JSON.stringify({
+ name: 'foo',
+ }, null, ' '.repeat(6)).replace(/\n/g, '\r\n'),
})
- const setScript = new SetScript({})
+
t.plan(3)
setScript.exec(['arg1', 'arg2'], (error) => {
t.equal(error, undefined)
- t.equal(mockFile.split('\r\n').length > 1, true)
- t.equal(mockFile.split('\r\n').every((value) => !value.startsWith(' ') || value.startsWith(' '.repeat(6))), true)
+ // rather than checking every line's content
+ // we parse the result and verify the symbols match
+ const contents = fs.readFileSync(resolve(npm.localPrefix, 'package.json'))
+ const data = parseJSON(contents)
+ t.equal(data[Symbol.for('indent')], ' '.repeat(6), 'keeps indenting')
+ t.equal(data[Symbol.for('newline')], '\r\n', 'keeps newlines')
})
})
-test.test('goes to default when undefined indent and eol provided', (t) => {
- var mockFile = ''
- const SetScript = requireInject('../../lib/set-script.js', {
- '../../lib/utils/config/definitions.js': {},
- fs: {
- readFileSync: (name, charcode) => {
- return '{}'
- },
- writeFileSync: (name, content) => {
- mockFile = content
- },
+
+test.test('workspaces', (t) => {
+ ERROR_OUTPUT.length = 0
+ WARN_OUTPUT.length = 0
+ npm.localPrefix = t.testdir({
+ 'package.json': JSON.stringify({
+ name: 'workspaces-test',
+ version: '1.0.0',
+ workspaces: ['workspace-a', 'workspace-b', 'workspace-c'],
+ }),
+ 'workspace-a': {
+ 'package.json': '{}',
+ },
+ 'workspace-b': {
+ 'package.json': '"notjson"',
},
- 'read-package-json-fast': async function (filename) {
- return {
- [Symbol.for('indent')]: undefined,
- [Symbol.for('newline')]: undefined,
- }
+ 'workspace-c': {
+ 'package.json': JSON.stringify({
+ scripts: {
+ arg1: 'test',
+ },
+ }, null, ' '.repeat(6)).replace(/\n/g, '\r\n'),
},
})
- const setScript = new SetScript({})
- t.plan(3)
- setScript.exec(['arg1', 'arg2'], (error) => {
- t.equal(error, undefined)
- t.equal(mockFile.split('\n').length > 1, true)
- t.equal(mockFile.split('\n').every((value) => !value.startsWith(' ') || value.startsWith(' ')), true)
+
+ setScript.execWorkspaces(['arg1', 'arg2'], [], (error) => {
+ t.equal(error, undefined, 'did not callback with an error')
+ t.equal(process.exitCode, 1, 'did set the exitCode to 1')
+ // force the exitCode back to 0 to make tap happy
+ process.exitCode = 0
+
+ // workspace-a had the script added
+ const contentsA = fs.readFileSync(resolve(npm.localPrefix, 'workspace-a', 'package.json'))
+ const dataA = parseJSON(contentsA)
+ t.hasStrict(dataA, { scripts: { arg1: 'arg2' } }, 'defined the script')
+
+ // workspace-b logged an error
+ t.match(ERROR_OUTPUT, [
+ ['set-script', `Cannot create property 'scripts' on string 'notjson'`],
+ [' in workspace: workspace-b'],
+ [` at location: ${resolve(npm.localPrefix, 'workspace-b')}`],
+ ], 'logged workspace-b error')
+
+ // workspace-c overwrite a script and logged a warning
+ const contentsC = fs.readFileSync(resolve(npm.localPrefix, 'workspace-c', 'package.json'))
+ const dataC = parseJSON(contentsC)
+ t.hasStrict(dataC, { scripts: { arg1: 'arg2' } }, 'defined the script')
+ t.equal(dataC[Symbol.for('indent')], ' '.repeat(6), 'kept the correct indent')
+ t.equal(dataC[Symbol.for('newline')], '\r\n', 'kept the correct newline')
+ t.match(WARN_OUTPUT, [
+ ['set-script', 'Script "arg1" was overwritten'],
+ [' in workspace: workspace-c'],
+ [` at location: ${resolve(npm.localPrefix, 'workspace-c')}`],
+ ], 'logged workspace-c warning')
+ t.end()
})
})
diff --git a/deps/npm/test/lib/utils/config/definition.js b/deps/npm/test/lib/utils/config/definition.js
index 56e10da0cbd..45f4c977a77 100644
--- a/deps/npm/test/lib/utils/config/definition.js
+++ b/deps/npm/test/lib/utils/config/definition.js
@@ -22,9 +22,10 @@ t.test('basic definition', async t => {
defaultDescription: '"some default value"',
type: [Number, String],
hint: '<key>',
- usage: '--key <key>|--key <key>',
+ usage: '--key <key>',
typeDescription: 'Number or String',
description: 'just a test thingie',
+ envExport: true,
})
t.matchSnapshot(def.describe(), 'human-readable description')
@@ -113,6 +114,31 @@ t.test('basic definition', async t => {
hint: '<testparam>',
})
t.equal(hasHint.usage, '--key <testparam>')
+ const optionalBool = new Definition('key', {
+ default: null,
+ type: [null, Boolean],
+ description: 'asdf',
+ })
+ t.equal(optionalBool.usage, '--key')
+
+ const noExported = new Definition('methane', {
+ envExport: false,
+ type: String,
+ typeDescription: 'Greenhouse Gas',
+ default: 'CH4',
+ description: `
+ This is bad for the environment, for our children, do not put it there.
+ `,
+ })
+ t.equal(noExported.envExport, false, 'envExport flag is false')
+ t.equal(noExported.describe(), `#### \`methane\`
+
+* Default: "CH4"
+* Type: Greenhouse Gas
+
+This is bad for the environment, for our children, do not put it there.
+
+This value is not exported to the environment for child processes.`)
})
t.test('missing fields', async t => {
diff --git a/deps/npm/test/lib/view.js b/deps/npm/test/lib/view.js
index d136a1f418d..91ce18786b2 100644
--- a/deps/npm/test/lib/view.js
+++ b/deps/npm/test/lib/view.js
@@ -238,6 +238,7 @@ const packument = (nv, opts) => {
}
t.beforeEach(cleanLogs)
+
t.test('should log package info', t => {
const View = requireInject('../../lib/view.js', {
pacote: {
@@ -548,6 +549,131 @@ t.test('throws when unpublished', (t) => {
})
})
+t.test('workspaces', t => {
+ t.beforeEach((done) => {
+ warnMsg = undefined
+ config.json = false
+ done()
+ })
+ const testDir = t.testdir({
+ 'package.json': JSON.stringify({
+ name: 'workspaces-test-package',
+ version: '1.2.3',
+ workspaces: ['test-workspace-a', 'test-workspace-b'],
+ }),
+ 'test-workspace-a': {
+ 'package.json': JSON.stringify({
+ name: 'green',
+ version: '1.2.3',
+ }),
+ },
+ 'test-workspace-b': {
+ 'package.json': JSON.stringify({
+ name: 'orange',
+ version: '1.2.3',
+ }),
+ },
+ })
+ const View = requireInject('../../lib/view.js', {
+ pacote: {
+ packument,
+ },
+ })
+ const config = {
+ tag: 'latest',
+ }
+ let warnMsg
+ const npm = mockNpm({
+ log: {
+ warn: (msg) => {
+ warnMsg = msg
+ },
+ },
+ config,
+ localPrefix: testDir,
+ })
+ const view = new View(npm)
+
+ t.test('all workspaces', t => {
+ view.execWorkspaces([], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('one specific workspace', t => {
+ view.execWorkspaces([], ['green'], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('all workspaces --json', t => {
+ config.json = true
+ view.execWorkspaces([], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('all workspaces single field', t => {
+ view.execWorkspaces(['.', 'name'], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('all workspaces nonexistent field', t => {
+ view.execWorkspaces(['.', 'foo'], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('all workspaces nonexistent field --json', t => {
+ config.json = true
+ view.execWorkspaces(['.', 'foo'], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('all workspaces single field --json', t => {
+ config.json = true
+ view.execWorkspaces(['.', 'name'], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('single workspace --json', t => {
+ config.json = true
+ view.execWorkspaces([], ['green'], (err) => {
+ t.error(err)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.test('remote package name', t => {
+ view.execWorkspaces(['pink'], [], (err) => {
+ t.error(err)
+ t.matchSnapshot(warnMsg)
+ t.matchSnapshot(logs)
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
t.test('completion', async t => {
const View = requireInject('../../lib/view.js', {
pacote: {